oebb: be more verbose about ~/oe/.environment and report when config is done
[angstrom: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 ###############################################################################
19 # User specific vars like proxy servers
20 ###############################################################################
21
22 #PROXYHOST=wwwgate.ti.com
23 #PROXYPORT=80
24 PROXYHOST=""
25
26 ###############################################################################
27 # OE_BASE    - The root directory for all OE sources and development.
28 ###############################################################################
29 OE_BASE=${PWD}
30
31 ###############################################################################
32 # SET_ENVIRONMENT() - Setup environment variables for OE development
33 ###############################################################################
34 function set_environment()
35 {
36
37 #--------------------------------------------------------------------------
38 # If an env already exists, use it, otherwise generate it
39 #--------------------------------------------------------------------------
40 if [ -e ~/.oe/environment ] ; then
41         echo "Using ~/.oe/environment to setup needed variables. You can do '. ~/.oe/environment' and run 'bitbake something' without using $0 as wrapper"
42         . ~/.oe/environment
43 else
44
45         mkdir -p ~/.oe/
46
47     #--------------------------------------------------------------------------
48     # Specify distribution information
49     #--------------------------------------------------------------------------
50     DISTRO="angstrom-2008.1"
51     DISTRO_DIRNAME=`echo $DISTRO | sed s#[.-]#_#g`
52
53         echo "export DISTRO=\"${DISTRO}\"" > ~/.oe/environment
54         echo "export DISTRO_DIRNAME=\"${DISTRO_DIRNAME}\"" >> ~/.oe/environment
55
56     #--------------------------------------------------------------------------
57     # Specify the root directory for your OpenEmbedded development
58     #--------------------------------------------------------------------------
59     OE_BUILD_DIR=${OE_BASE}/build
60     OE_BUILD_TMPDIR="${OE_BUILD_DIR}/tmp-${DISTRO_DIRNAME}"
61     OE_SOURCE_DIR=${OE_BASE}/sources
62
63     mkdir -p ${OE_BUILD_DIR}
64     mkdir -p ${OE_SOURCE_DIR}
65     export OE_BASE
66
67     echo "export OE_BUILD_DIR=\"${OE_BUILD_DIR}\"" >> ~/.oe/environment
68     echo "export OE_BUILD_TMPDIR=\"${OE_BUILD_TMPDIR}\"" >> ~/.oe/environment
69     echo "export OE_SOURCE_DIR=\"${OE_SOURCE_DIR}\"" >> ~/.oe/environment
70
71         echo "export OE_BASE=\"${OE_BASE}\"" >> ~/.oe/environment
72
73     #--------------------------------------------------------------------------
74     # Include up-to-date bitbake in our PATH.
75     #--------------------------------------------------------------------------
76     export PATH=${OE_SOURCE_DIR}/bitbake/bin:${PATH}
77
78         echo "export PATH=\"${PATH}\"" >> ~/.oe/environment
79
80     #--------------------------------------------------------------------------
81     # Make sure Bitbake doesn't filter out the following variables from our
82     # environment.
83     #--------------------------------------------------------------------------
84     export BB_ENV_EXTRAWHITE="MACHINE DISTRO http_proxy ftp_proxy no_proxy GIT_PROXY_COMMAND"
85
86         echo "export BB_ENV_EXTRAWHITE=\"${BB_ENV_EXTRAWHITE}\"" >> ~/.oe/environment
87
88     #--------------------------------------------------------------------------
89     # Specify proxy information
90     #--------------------------------------------------------------------------
91     if [ "x$PROXYHOST" != "x"  ] ; then
92         export http_proxy=http://${PROXYHOST}:${PROXYPORT}/
93         export ftp_proxy=http://${PROXYHOST}:${PROXYPORT}/
94
95         export SVN_CONFIG_DIR=${OE_BUILD_DIR}/subversion_config
96         export GIT_CONFIG_DIR=${OE_BUILD_DIR}/git_config
97
98                 echo "export http_proxy=\"${http_proxy}\"" >> ~/.oe/environment
99                 echo "export ftp_proxy=\"${ftp_proxy}\"" >> ~/.oe/environment
100                 echo "export SVN_CONFIG_DIR=\"${SVN_CONFIG_DIR}\"" >> ~/.oe/environment
101                 echo "export GIT_CONFIG_DIR=\"${GIT_CONFIG_DIR}\"" >> ~/.oe/environment
102
103         config_svn_proxy
104         config_git_proxy
105         fi
106
107     #--------------------------------------------------------------------------
108     # Set up the bitbake path to find the OpenEmbedded recipes.
109     #--------------------------------------------------------------------------
110     export BBPATH=${OE_BUILD_DIR}:${OE_SOURCE_DIR}/org.openembedded.dev${BBPATH_EXTRA}
111   
112         echo "export BBPATH=\"${BBPATH}\"" >> ~/.oe/environment
113  
114         #--------------------------------------------------------------------------
115     # Reconfigure dash 
116     #--------------------------------------------------------------------------
117     if [ $(readlink /bin/sh) = "dash" ] ; then
118         sudo dpkg-reconfigure dash
119     fi
120
121         echo "There now is a sourceable script in ~/.oe/enviroment. You can do '. ~/.oe/environment' and run 'bitbake something' without using $0 as wrapper"
122 fi # if -e ~/.oe/environment
123 }
124
125
126 ###############################################################################
127 # UPDATE_ALL() - Make sure everything is up to date
128 ###############################################################################
129 function update_all()
130 {
131     set_environment
132     update_bitbake
133     update_oe
134 }
135
136
137 ###############################################################################
138 # OE_BUILD() - Build an OE package or image
139 ###############################################################################
140 function oe_build()
141 {
142     set_environment
143     cd ${OE_BUILD_DIR}
144     if [ -z $MACHINE ] ; then
145         echo "Executing: bitbake" $*
146         bitbake $*
147     else
148         echo "Executing: MACHINE=${MACHINE} bitbake" $*
149         MACHINE=${MACHINE} bitbake $*
150     fi
151 }
152
153
154 ###############################################################################
155 # OE_CONFIG() - Configure OE for a target 
156 ###############################################################################
157 function oe_config()
158 {
159     set_environment
160     config_oe
161
162     echo ""
163         echo "Setup for ${CL_MACHINE} completed"
164 }
165
166
167 ###############################################################################
168 # UPDATE_BITBAKE() - Update Bitbake distribution
169 ###############################################################################
170 function update_bitbake()
171 {
172     if [ "x$PROXYHOST" != "x" ] ; then
173         config_git_proxy
174     fi
175
176     if [ ! -d ${OE_SOURCE_DIR}/bitbake ]; then
177         echo Checking out bitbake
178         git clone git://git.openembedded.net/bitbake ${OE_SOURCE_DIR}/bitbake
179         cd ${OE_SOURCE_DIR}/bitbake && git checkout -b 1.8 origin/1.8
180     else
181         cd ${OE_SOURCE_DIR}/bitbake && git pull --rebase
182     fi
183 }
184
185
186 ###############################################################################
187 # UPDATE_OE() - Update OpenEmbedded distribution.
188 ###############################################################################
189 function update_oe()
190 {
191     if [ "x$PROXYHOST" != "x" ] ; then
192         config_git_proxy
193     fi
194
195     if [ ! -d  ${OE_SOURCE_DIR}/org.openembedded.dev ]; then
196         echo Checking out OpenEmbedded
197         git clone "git://git.openembedded.net/openembedded" ${OE_SOURCE_DIR}/org.openembedded.dev
198         cd ${OE_SOURCE_DIR}/org.openembedded.dev
199         if [ ! -r ${OE_COMMIT_ID} ]; 
200         then
201             echo "Checkout commit id: ${OE_COMMIT_ID}"
202             git checkout -b install ${OE_COMMIT_ID}
203         else
204             git checkout -b org.openembedded.dev origin/org.openembedded.dev
205         fi
206     else
207         echo Updating OpenEmbedded
208         cd ${OE_SOURCE_DIR}/org.openembedded.dev
209         git pull --rebase 
210     fi
211 }
212
213
214 ###############################################################################
215 # CONFIG_OE() - Configure OpenEmbedded
216 ###############################################################################
217 function config_oe()
218 {
219     #--------------------------------------------------------------------------
220     # Determine the proper machine name
221     #--------------------------------------------------------------------------
222     case ${CL_MACHINE} in
223         beagle|beagleboard)
224             MACHINE="beagleboard"
225             ;;
226         dm6446evm|davinci-evm)
227             MACHINE="davinci-dvevm"
228             ;;
229         omap3evm)
230             MACHINE="omap3evm"
231             ;;
232         shiva|omap3517-evm)
233             MACHINE="omap3517-evm"
234             ;;
235         *)
236             echo "Unknown machine ${CL_MACHINE}, passing it to OE directly"
237             MACHINE="${CL_MACHINE}"
238             ;;
239     esac
240
241     #--------------------------------------------------------------------------
242     # Write out the OE bitbake configuration file.
243     #--------------------------------------------------------------------------
244     mkdir -p ${OE_BUILD_DIR}/conf
245
246     # There's no need to rewrite local.conf when changing MACHINE
247     if [ ! -e ${OE_BUILD_DIR}/conf/local.conf ]; then
248         cat > ${OE_BUILD_DIR}/conf/local.conf <<_EOF
249 # Where to store sources
250 DL_DIR = "${OE_BUILD_DIR}/downloads"
251
252 INHERIT += "rm_work"
253
254 # Which files do we want to parse:
255 BBFILES := "${OE_SOURCE_DIR}/org.openembedded.dev/recipes/*/*.bb"
256 BBMASK = ""
257
258 # What kind of images do we want?
259 IMAGE_FSTYPES += "tar.bz2"
260
261 # Make use of SMP:
262 #   PARALLEL_MAKE specifies how many concurrent compiler threads are spawned per bitbake process
263 #   BB_NUMBER_THREADS specifies how many concurrent bitbake tasks will be run
264 #PARALLEL_MAKE     = "-j2"
265 BB_NUMBER_THREADS = "2"
266
267 DISTRO   = "${DISTRO}"
268 MACHINE ?= "${MACHINE}"
269
270 # Set TMPDIR instead of defaulting it to $pwd/tmp
271 TMPDIR = "${OE_BUILD_TMPDIR}"
272
273 # Go through the Firewall
274 #HTTP_PROXY        = "http://${PROXYHOST}:${PROXYPORT}/"
275
276 _EOF
277 fi
278 }
279
280 ###############################################################################
281 # CONFIG_SVN_PROXY() - Configure subversion proxy information
282 ###############################################################################
283 function config_svn_proxy()
284 {
285     if [ ! -f ${SVN_CONFIG_DIR}/servers ]
286     then
287         mkdir -p ${SVN_CONFIG_DIR}
288         cat >> ${SVN_CONFIG_DIR}/servers <<_EOF
289 [global]
290 http-proxy-host = ${PROXYHOST}
291 http-proxy-port = ${PROXYPORT}
292 _EOF
293     fi
294 }
295
296
297 ###############################################################################
298 # CONFIG_GIT_PROXY() - Configure GIT proxy information
299 ###############################################################################
300 function config_git_proxy()
301 {
302     if [ ! -f ${GIT_CONFIG_DIR}/git-proxy.sh ]
303     then
304         mkdir -p ${GIT_CONFIG_DIR}
305         cat > ${GIT_CONFIG_DIR}/git-proxy.sh <<_EOF
306 if [ -x /bin/env ] ; then
307     exec /bin/env corkscrew ${PROXYHOST} ${PROXYPORT} \$*
308 else
309     exec /usr/bin/env corkscrew ${PROXYHOST} ${PROXYPORT} \$*
310 fi
311 _EOF
312         chmod +x ${GIT_CONFIG_DIR}/git-proxy.sh
313     fi
314     export GIT_PROXY_COMMAND=${GIT_CONFIG_DIR}/git-proxy.sh
315 }
316
317
318 ###############################################################################
319 # Build the specified OE packages or images.
320 ###############################################################################
321 if [ $# -gt 0 ]
322 then
323     if [ $1 = "update" ]
324     then
325         shift
326         if [ ! -r $1 ]; then
327             if [  $1 == "commit" ]
328             then
329                 shift
330                 OE_COMMIT_ID=$1
331             fi
332         fi
333         update_all
334         exit 0
335     fi
336
337     if [ $1 = "bitbake" ]
338     then
339         shift
340         oe_build $*
341         exit 0
342     fi
343
344     if [ $1 = "config" ]
345     then
346         shift
347         CL_MACHINE=$1
348         shift
349         oe_config $*
350         exit 0
351     fi
352 fi
353
354 # Help Screen
355 echo ""
356 echo "Usage: $0 config <machine>"
357 echo "       $0 update"
358 echo "       $0 bitbake <bitbake target>"
359 echo ""
360 echo "You must invoke \"$0 config <machine>\" and then \"$0 update\" prior"
361 echo "to your first bitbake command"
362 echo ""
363 echo "The <machine> argument can be one of the following"
364 echo "       beagleboard:    BeagleBoard"
365 echo "       davinci-evm:    DM6446 EVM"
366 echo "       omap3evm:       OMAP35x EVM"
367 echo "       am3517-evm:     AM3517 (Shiva) EVM"
368 echo ""
369 echo "Other machines are valid as well, but listing those would make this message way too long"