oebb: fix build when bblayers.conf isn't found
[angstrom:stevenlowes-angstrom-setup-scripts.git] / oebb.sh
1 #!/bin/bash
2
3 # Original script done by Don Darling
4 # Later changes by Koen Kooi and Brijesh Singh
5
6 # Revision history:
7 # 20090902: download from twice
8 # 20090903: Weakly assign MACHINE and DISTRO
9 # 20090904:  * Don't recreate local.conf is it already exists
10 #            * Pass 'unknown' machines to OE directly
11 # 20090918: Fix /bin/env location
12 #           Don't pass MACHINE via env if it's not set
13 #           Changed 'build' to 'bitbake' to prepare people for non-scripted usage
14 #           Print bitbake command it executes
15 # 20091012: Add argument to accept commit id.
16 # 20091202: Fix proxy setup
17 #
18 # For further changes consult 'git log' or browse to:
19 #   http://gitorious.org/angstrom/angstrom-setup-scripts/commits
20 # to see the latest revision history
21
22 ###############################################################################
23 # User specific vars like proxy servers
24 ###############################################################################
25
26 #PROXYHOST=wwwgate.ti.com
27 #PROXYPORT=80
28 PROXYHOST=""
29
30 ###############################################################################
31 # OE_BASE    - The root directory for all OE sources and development.
32 ###############################################################################
33 OE_BASE=${PWD}
34
35 #--------------------------------------------------------------------------
36 # Check if this script was cloned from http://gitorious.org/angstrom/angstrom-setup-scripts or not
37 #--------------------------------------------------------------------------
38
39 if [ -e ${OE_BASE}/.gitmodules ] ; then
40     USE_SUBMODULES="sort-of-true"
41 fi
42
43 ###############################################################################
44 # SET_ENVIRONMENT() - Setup environment variables for OE development
45 ###############################################################################
46 function set_environment()
47 {
48
49 #--------------------------------------------------------------------------
50 # If an env already exists, use it, otherwise generate it
51 #--------------------------------------------------------------------------
52 if [ -e ~/.oe/environment ] ; then
53     . ~/.oe/environment
54 else
55
56     mkdir -p ~/.oe/
57
58     #--------------------------------------------------------------------------
59     # Specify distribution information
60     #--------------------------------------------------------------------------
61     DISTRO="angstrom-2008.1"
62     DISTRO_DIRNAME=`echo $DISTRO | sed s#[.-]#_#g`
63
64     echo "export DISTRO=\"${DISTRO}\"" > ~/.oe/environment
65     echo "export DISTRO_DIRNAME=\"${DISTRO_DIRNAME}\"" >> ~/.oe/environment
66
67     #--------------------------------------------------------------------------
68     # Specify the root directory for your OpenEmbedded development
69     #--------------------------------------------------------------------------
70     OE_BUILD_DIR=${OE_BASE}/build
71     OE_BUILD_TMPDIR="${OE_BUILD_DIR}/tmp-${DISTRO_DIRNAME}"
72     OE_SOURCE_DIR=${OE_BASE}/sources
73
74     mkdir -p ${OE_BUILD_DIR}
75     mkdir -p ${OE_SOURCE_DIR}
76     export OE_BASE
77
78     echo "export OE_BUILD_DIR=\"${OE_BUILD_DIR}\"" >> ~/.oe/environment
79     echo "export OE_BUILD_TMPDIR=\"${OE_BUILD_TMPDIR}\"" >> ~/.oe/environment
80     echo "export OE_SOURCE_DIR=\"${OE_SOURCE_DIR}\"" >> ~/.oe/environment
81
82     echo "export OE_BASE=\"${OE_BASE}\"" >> ~/.oe/environment
83
84     #--------------------------------------------------------------------------
85     # Include up-to-date bitbake in our PATH.
86     #--------------------------------------------------------------------------
87     export PATH=${OE_SOURCE_DIR}/bitbake/bin:${PATH}
88
89     echo "export PATH=\"${PATH}\"" >> ~/.oe/environment
90
91     #--------------------------------------------------------------------------
92     # Make sure Bitbake doesn't filter out the following variables from our
93     # environment.
94     #--------------------------------------------------------------------------
95     export BB_ENV_EXTRAWHITE="MACHINE DISTRO GIT_PROXY_COMMAND ANGSTROMLIBC"
96
97     echo "export BB_ENV_EXTRAWHITE=\"${BB_ENV_EXTRAWHITE}\"" >> ~/.oe/environment
98
99     #--------------------------------------------------------------------------
100     # Specify proxy information
101     #--------------------------------------------------------------------------
102     if [ "x$PROXYHOST" != "x"  ] ; then
103         export http_proxy=http://${PROXYHOST}:${PROXYPORT}/
104         export ftp_proxy=http://${PROXYHOST}:${PROXYPORT}/
105
106         export SVN_CONFIG_DIR=${OE_BUILD_DIR}/subversion_config
107         export GIT_CONFIG_DIR=${OE_BUILD_DIR}/git_config
108
109         echo "export http_proxy=\"${http_proxy}\"" >> ~/.oe/environment
110         echo "export ftp_proxy=\"${ftp_proxy}\"" >> ~/.oe/environment
111         echo "export SVN_CONFIG_DIR=\"${SVN_CONFIG_DIR}\"" >> ~/.oe/environment
112         echo "export GIT_CONFIG_DIR=\"${GIT_CONFIG_DIR}\"" >> ~/.oe/environment
113
114         config_svn_proxy
115         config_git_proxy
116     fi
117
118     #--------------------------------------------------------------------------
119     # Set up the bitbake path to find the OpenEmbedded recipes.
120     #--------------------------------------------------------------------------
121     export BBPATH=${OE_BUILD_DIR}:${OE_SOURCE_DIR}/openembedded${BBPATH_EXTRA}
122
123     echo "export BBPATH=\"${BBPATH}\"" >> ~/.oe/environment
124
125     #--------------------------------------------------------------------------
126     # Reconfigure dash
127     #--------------------------------------------------------------------------
128     if [ "$(readlink /bin/sh)" = "dash" ] ; then
129         sudo aptitude install expect -y
130         expect -c 'spawn sudo dpkg-reconfigure -freadline dash; send "n\n"; interact;'
131     fi
132
133     echo "There now is a sourceable script in ~/.oe/enviroment. You can do '. ~/.oe/environment' and run 'bitbake something' without using $0 as wrapper"
134 fi # if -e ~/.oe/environment
135 }
136
137
138 ###############################################################################
139 # UPDATE_ALL() - Make sure everything is up to date
140 ###############################################################################
141 function update_all()
142 {
143     set_environment
144     update_bitbake
145     update_oe
146 }
147
148 ###############################################################################
149 # CLEAN_OE() - Delete TMPDIR
150 ###############################################################################
151 function clean_oe()
152 {
153     set_environment
154     echo "Cleaning ${OE_BUILD_TMPDIR}"
155     rm -rf ${OE_BUILD_TMPDIR}
156 }
157
158
159 ###############################################################################
160 # OE_BUILD() - Build an OE package or image
161 ###############################################################################
162 function oe_build()
163 {
164     if [ ! -e ${OE_BUILD_DIR}/conf/local.conf ] ; then
165         if [ -z $MACHINE ] ; then
166             echo "No config found, please run $0 config <machine> first"
167         else
168             CL_MACHINE=$MACHINE
169             set_environment
170             config_oe && update_all
171         fi
172     fi
173
174     set_environment
175     if [ -e ~/.oe/environment ] ; then
176         echo "Using ~/.oe/environment to setup needed variables. It is recommended to do '. ~/.oe/environment' and run 'bitbake something' without using $0 as wrapper"
177     fi
178     cd ${OE_BUILD_DIR}
179     if [ -z $MACHINE ] ; then
180         echo "Executing: bitbake" $*
181         bitbake $*
182     else
183         echo "Executing: MACHINE=${MACHINE} bitbake" $*
184         MACHINE=${MACHINE} bitbake $*
185     fi
186 }
187
188
189 ###############################################################################
190 # OE_CONFIG() - Configure OE for a target
191 ###############################################################################
192 function oe_config()
193 {
194     set_environment
195     config_oe
196     update_all
197
198     echo ""
199     echo "Setup for ${CL_MACHINE} completed"
200 }
201
202
203 ###############################################################################
204 # UPDATE_BITBAKE() - Update Bitbake distribution
205 ###############################################################################
206 function update_bitbake()
207 {
208     if [ "x$PROXYHOST" != "x" ] ; then
209         config_git_proxy
210     fi
211
212     if [ "USE_SUBMODULES" = "true" ] ; then
213         echo "Updating bitbake submodule"
214         git submodule update --init ${OE_SOURCE_DIR}/bitbake
215     else
216         if [ ! -d ${OE_SOURCE_DIR}/bitbake/bin ]; then
217             rm -rf  ${OE_SOURCE_DIR}/bitbake
218             echo Checking out bitbake
219             git clone git://git.openembedded.org/bitbake ${OE_SOURCE_DIR}/bitbake
220             cd ${OE_SOURCE_DIR}/bitbake && git checkout -b 1.10 origin/1.10
221         else
222             echo "Updating bitbake"
223             echo "Executing: cd ${OE_SOURCE_DIR}/bitbake && git pull --rebase"
224             cd ${OE_SOURCE_DIR}/bitbake && git pull --rebase
225         fi
226     fi
227 }
228
229
230 ###############################################################################
231 # UPDATE_OE() - Update OpenEmbedded distribution.
232 ###############################################################################
233 function update_oe()
234 {
235     if [ "x$PROXYHOST" != "x" ] ; then
236         config_git_proxy
237     fi
238
239     if [ "USE_SUBMODULES" = "true" ] ; then
240         echo "Updating OE submodule"
241         git submodule update --init ${OE_SOURCE_DIR}/openembedded
242     else
243         if [ ! -d  ${OE_SOURCE_DIR}/openembedded/conf ]; then
244             rm -rf  ${OE_SOURCE_DIR}/openembedded/
245             echo Checking out OpenEmbedded
246             git clone "git://git.openembedded.org/openembedded" ${OE_SOURCE_DIR}/openembedded
247             cd ${OE_SOURCE_DIR}/openembedded
248             if [ ! -r ${OE_COMMIT_ID} ];
249             then
250                 echo "Checkout commit id: ${OE_COMMIT_ID}"
251                 git checkout -b install ${OE_COMMIT_ID}
252             else
253                 echo "Checking out OE, depending on your git version you might get a harmless, what git alarmingly calls 'fatal' error. It just means the branch already exists."
254                 git checkout -b org.openembedded.dev origin/org.openembedded.dev || true
255             fi
256         else
257             echo Updating OpenEmbedded
258             cd ${OE_SOURCE_DIR}/openembedded
259             if [ ! -r ${OE_COMMIT_ID} ];
260             then
261                 echo "Checkout commit id: ${OE_COMMIT_ID}"
262                 git remote update origin
263                 git checkout ${OE_COMMIT_ID}
264                 git checkout -b install
265             else
266                 echo "Executing: git pull --rebase"
267                 git pull --rebase
268             fi
269         fi
270     fi
271 }
272
273
274 ###############################################################################
275 # CONFIG_OE() - Configure OpenEmbedded
276 ###############################################################################
277 function config_oe()
278 {
279     #--------------------------------------------------------------------------
280     # Determine the proper machine name
281     #--------------------------------------------------------------------------
282     case ${CL_MACHINE} in
283         beagle|beagleboard)
284             MACHINE="beagleboard"
285             ;;
286         dm6446evm|davinci-evm)
287             MACHINE="davinci-dvevm"
288             ;;
289         omap3evm)
290             MACHINE="omap3evm"
291             ;;
292         shiva|omap3517-evm)
293             MACHINE="omap3517-evm"
294             ;;
295         *)
296             echo "Unknown machine ${CL_MACHINE}, passing it to OE directly"
297             MACHINE="${CL_MACHINE}"
298             ;;
299     esac
300
301     #--------------------------------------------------------------------------
302     # Write out the OE bitbake configuration file.
303     #--------------------------------------------------------------------------
304     mkdir -p ${OE_BUILD_DIR}/conf
305
306     if [ ! -e ${OE_BUILD_DIR}/conf/bblayers.conf ]; then
307         cat > ${OE_BUILD_DIR}/conf/bblayers.conf <<_EOF
308 # LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
309 # changes incompatibly
310 LCONF_VERSION = "1"
311
312 BBFILES ?= ""
313
314 # Add your overlay location to BBLAYERS
315 # Make sure to have a conf/layers.conf in there
316 BBLAYERS = " \\
317   ${OE_SOURCE_DIR}/openembedded \\
318   "
319 _EOF
320     fi
321
322     # There's no need to rewrite local.conf when changing MACHINE
323     if [ ! -e ${OE_BUILD_DIR}/conf/local.conf ]; then
324         cat > ${OE_BUILD_DIR}/conf/local.conf <<_EOF
325 # Where to store sources
326 DL_DIR = "${OE_SOURCE_DIR}/downloads"
327
328 INHERIT += "rm_work"
329
330 # Which files do we want to parse:
331 BBFILES ?= "${OE_SOURCE_DIR}/openembedded/recipes/*/*.bb"
332 BBMASK = ""
333
334 # Qemu 0.12.x is giving too much problems recently (2010.05), so disable it for users
335 ENABLE_BINARY_LOCALE_GENERATION = "0"
336
337 # What kind of images do we want?
338 IMAGE_FSTYPES += "tar.bz2"
339
340 # Make use of SMP:
341 #   PARALLEL_MAKE specifies how many concurrent compiler threads are spawned per bitbake process
342 #   BB_NUMBER_THREADS specifies how many concurrent bitbake tasks will be run
343 #PARALLEL_MAKE     = "-j2"
344 BB_NUMBER_THREADS = "2"
345
346 DISTRO   = "${DISTRO}"
347 MACHINE ?= "${MACHINE}"
348
349 # Set TMPDIR instead of defaulting it to $pwd/tmp
350 TMPDIR = "${OE_BUILD_TMPDIR}"
351
352 # Don't generate the mirror tarball for SCM repos, the snapshot is enough
353 BB_GENERATE_MIRROR_TARBALLS = "0"
354
355 # Go through the Firewall
356 #HTTP_PROXY        = "http://${PROXYHOST}:${PROXYPORT}/"
357
358 _EOF
359 fi
360 }
361
362 ###############################################################################
363 # CONFIG_SVN_PROXY() - Configure subversion proxy information
364 ###############################################################################
365 function config_svn_proxy()
366 {
367     if [ ! -f ${SVN_CONFIG_DIR}/servers ]
368     then
369         mkdir -p ${SVN_CONFIG_DIR}
370         cat >> ${SVN_CONFIG_DIR}/servers <<_EOF
371 [global]
372 http-proxy-host = ${PROXYHOST}
373 http-proxy-port = ${PROXYPORT}
374 _EOF
375     fi
376 }
377
378
379 ###############################################################################
380 # CONFIG_GIT_PROXY() - Configure GIT proxy information
381 ###############################################################################
382 function config_git_proxy()
383 {
384     if [ ! -f ${GIT_CONFIG_DIR}/git-proxy.sh ]
385     then
386         mkdir -p ${GIT_CONFIG_DIR}
387         cat > ${GIT_CONFIG_DIR}/git-proxy.sh <<_EOF
388 if [ -x /bin/env ] ; then
389     exec /bin/env corkscrew ${PROXYHOST} ${PROXYPORT} \$*
390 else
391     exec /usr/bin/env corkscrew ${PROXYHOST} ${PROXYPORT} \$*
392 fi
393 _EOF
394         chmod +x ${GIT_CONFIG_DIR}/git-proxy.sh
395         export GIT_PROXY_COMMAND=${GIT_CONFIG_DIR}/git-proxy.sh
396         echo "export GIT_PROXY_COMMAND=\"\${GIT_CONFIG_DIR}/git-proxy.sh\"" >> ~/.oe/environment
397     fi
398 }
399
400
401 ###############################################################################
402 # Build the specified OE packages or images.
403 ###############################################################################
404
405 # FIXME: convert to case/esac
406
407 if [ $# -gt 0 ]
408 then
409     if [ $1 = "update" ]
410     then
411         shift
412         if [ ! -r $1 ]; then
413             if [  $1 == "commit" ]
414             then
415                 shift
416                 OE_COMMIT_ID=$1
417             fi
418         fi
419         update_all
420         exit 0
421     fi
422
423     if [ $1 = "bitbake" ]
424     then
425         shift
426         oe_build $*
427         exit 0
428     fi
429
430     if [ $1 = "config" ]
431     then
432         shift
433         CL_MACHINE=$1
434         shift
435         oe_config $*
436         exit 0
437     fi
438
439     if [ $1 = "clean" ]
440     then
441         clean_oe
442         exit 0
443     fi
444 fi
445
446 # Help Screen
447 echo ""
448 echo "Usage: $0 config <machine>"
449 echo "       $0 update"
450 echo ""
451 echo "       Not recommended, but also possible:"
452 echo "       $0 bitbake <bitbake target>"
453 echo "       It is recommended to do '. ~/.oe/environment' and run 'bitbake something' without using oebb.sh as wrapper"
454 echo ""
455 echo "You must invoke \"$0 config <machine>\" and then \"$0 update\" prior"
456 echo "to your first bitbake command"
457 echo ""
458 echo "The <machine> argument can be one of the following"
459 echo "       beagleboard:    BeagleBoard"
460 echo "       davinci-evm:    DM6446 EVM"
461 echo "       omap3evm:       OMAP35x EVM"
462 echo "       am3517-evm:     AM3517 (Shiva) EVM"
463 echo ""
464 echo "Other machines are valid as well, but listing those would make this message way too long"