Merge branch 'elf_reloc'
[kernel/u-boot.git] / MAKEALL
1 #!/bin/bash
2
3 # Tool mainly for U-Boot Quality Assurance: build one or more board
4 # configurations with minimal verbosity, showing only warnings and
5 # errors.
6 #
7 # There are several ways to select which boards to build.
8 #
9 # Traditionally, architecture names (like "powerpc"), CPU family names
10 # (like "mpc83xx") or board names can be specified on the command
11 # line; without any arguments, MAKEALL defaults to building all Power
12 # Architecture systems (i. e. same as for "MAKEALL powerpc").
13 #
14 # With the iontroduction of the board.cfg file, it has become possible
15 # to provide additional selections.  We use standard command line
16 # options for this:
17 #
18 # -a or --arch  :       Select architecture
19 # -c or --cpu   :       Select CPU family
20 # -s or --soc   :       Select SoC type
21 # -v or --vendor:       Select board vendor
22 #
23 # Selections by these options are logically ANDed; if the same option
24 # is used repeatedly, such selections are ORed.  So "-v FOO -v BAR"
25 # will select all configurations where the vendor is either FOO or
26 # BAR.  Any additional arguments specified on the command line are
27 # always build additionally.
28 #
29 # Examples:
30 #
31 # - build all Power Architecture boards:
32 #
33 #       MAKEALL -a powerpc
34 #   or
35 #       MAKEALL --arch powerpc
36 #   or
37 #       MAKEALL powerpc
38 #
39 # - build all PowerPC boards manufactured by vendor "esd":
40 #
41 #       MAKEALL -a powerpc -v esd
42 #
43 # - build all PowerPC boards manufactured either by "keymile" or
44 #   "siemens":
45 #
46 #       MAKEALL -a powerpc -v keymile -v siemens
47 #
48 # - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards:
49 #
50 #       MAKEALL -c mpc83xx -v freescale 4xx
51 #
52 #########################################################################
53
54 SHORT_OPTS="a:c:v:s:"
55 LONG_OPTS="arch:,cpu:,vendor:,soc:"
56
57 # Option processing based on util-linux-2.13/getopt-parse.bash
58
59 # Note that we use `"$@"' to let each command-line parameter expand to a 
60 # separate word. The quotes around `$@' are essential!
61 # We need TEMP as the `eval set --' would nuke the return value of
62 # getopt.
63 TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} \
64      -n 'MAKEALL' -- "$@"`
65
66 if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
67
68 # Note the quotes around `$TEMP': they are essential!
69 eval set -- "$TEMP"
70
71 SELECTED=''
72
73 while true ; do
74         case "$1" in
75         -a|--arch)
76                 # echo "Option ARCH: argument \`$2'"
77                 if [ "$opt_a" ] ; then
78                         opt_a="${opt_a%)} || \$2 == \"$2\")"
79                 else
80                         opt_a="(\$2 == \"$2\")"
81                 fi
82                 SELECTED='y'
83                 shift 2 ;;
84         -c|--cpu)
85                 # echo "Option CPU: argument \`$2'"
86                 if [ "$opt_c" ] ; then
87                         opt_c="${opt_c%)} || \$3 == \"$2\")"
88                 else
89                         opt_c="(\$3 == \"$2\")"
90                 fi
91                 SELECTED='y'
92                 shift 2 ;;
93         -s|--soc)
94                 # echo "Option SoC: argument \`$2'"
95                 if [ "$opt_s" ] ; then
96                         opt_s="${opt_s%)} || \$6 == \"$2\")"
97                 else
98                         opt_s="(\$6 == \"$2\")"
99                 fi
100                 SELECTED='y'
101                 shift 2 ;;
102         -v|--vendor)
103                 # echo "Option VENDOR: argument \`$2'"
104                 if [ "$opt_v" ] ; then
105                         opt_v="${opt_v%)} || \$5 == \"$2\")"
106                 else
107                         opt_v="(\$5 == \"$2\")"
108                 fi
109                 SELECTED='y'
110                 shift 2 ;;
111         --)
112                 shift ; break ;;
113         *)
114                 echo "Internal error!" >&2 ; exit 1 ;;
115         esac
116 done
117 # echo "Remaining arguments:"
118 # for arg do echo '--> '"\`$arg'" ; done
119
120 FILTER="\$1 !~ /^#/"
121 [ "$opt_a" ] && FILTER="${FILTER} && $opt_a"
122 [ "$opt_c" ] && FILTER="${FILTER} && $opt_c"
123 [ "$opt_s" ] && FILTER="${FILTER} && $opt_s"
124 [ "$opt_v" ] && FILTER="${FILTER} && $opt_v"
125
126 if [ "$SELECTED" ] ; then
127         SELECTED=$(awk '('"$FILTER"') { print $1 }' boards.cfg)
128 fi
129
130 #########################################################################
131
132 # Print statistics when we exit
133 trap exit 1 2 3 15
134 trap print_stats 0
135
136 # Determine number of CPU cores if no default was set
137 : ${BUILD_NCPUS:="`getconf _NPROCESSORS_ONLN`"}
138
139 if [ "$BUILD_NCPUS" -gt 1 ]
140 then
141         JOBS="-j $((BUILD_NCPUS + 1))"
142 else
143         JOBS=""
144 fi
145
146
147 if [ "${CROSS_COMPILE}" ] ; then
148         MAKE="make CROSS_COMPILE=${CROSS_COMPILE}"
149 else
150         MAKE=make
151 fi
152
153 if [ "${MAKEALL_LOGDIR}" ] ; then
154         LOG_DIR=${MAKEALL_LOGDIR}
155 else
156         LOG_DIR="LOG"
157 fi
158
159 if [ ! "${BUILD_DIR}" ] ; then
160         BUILD_DIR="."
161 fi
162
163 [ -d ${LOG_DIR} ] || mkdir ${LOG_DIR} || exit 1
164
165 LIST=""
166
167 # Keep track of the number of builds and errors
168 ERR_CNT=0
169 ERR_LIST=""
170 TOTAL_CNT=0
171 RC=0
172
173 # Helper funcs for parsing boards.cfg
174 boards_by_field()
175 {
176         awk \
177                 -v field="$1" \
178                 -v select="$2" \
179                 '($1 !~ /^#/ && $field == select) { print $1 }' \
180                 boards.cfg
181 }
182 boards_by_arch() { boards_by_field 2 "$@" ; }
183 boards_by_cpu()  { boards_by_field 3 "$@" ; }
184
185 #########################################################################
186 ## MPC5xx Systems
187 #########################################################################
188
189 LIST_5xx="$(boards_by_cpu mpc5xx)"
190
191 #########################################################################
192 ## MPC5xxx Systems
193 #########################################################################
194
195 LIST_5xxx="$(boards_by_cpu mpc5xxx)"
196
197 #########################################################################
198 ## MPC512x Systems
199 #########################################################################
200
201 LIST_512x="$(boards_by_cpu mpc512x)"
202
203 #########################################################################
204 ## MPC8xx Systems
205 #########################################################################
206
207 LIST_8xx="$(boards_by_cpu mpc8xx)"
208
209 #########################################################################
210 ## PPC4xx Systems
211 #########################################################################
212
213 LIST_4xx="$(boards_by_cpu ppc4xx)"
214
215 #########################################################################
216 ## MPC8220 Systems
217 #########################################################################
218
219 LIST_8220="$(boards_by_cpu mpc8220)"
220
221 #########################################################################
222 ## MPC824x Systems
223 #########################################################################
224
225 LIST_824x="$(boards_by_cpu mpc824x)"
226
227 #########################################################################
228 ## MPC8260 Systems (includes 8250, 8255 etc.)
229 #########################################################################
230
231 LIST_8260="$(boards_by_cpu mpc8260)"
232
233 #########################################################################
234 ## MPC83xx Systems (includes 8349, etc.)
235 #########################################################################
236
237 LIST_83xx="$(boards_by_cpu mpc83xx)"
238
239 #########################################################################
240 ## MPC85xx Systems (includes 8540, 8560 etc.)
241 #########################################################################
242
243 LIST_85xx="$(boards_by_cpu mpc85xx)"
244
245 #########################################################################
246 ## MPC86xx Systems
247 #########################################################################
248
249 LIST_86xx="$(boards_by_cpu mpc86xx)"
250
251 #########################################################################
252 ## 74xx/7xx Systems
253 #########################################################################
254
255 LIST_74xx_7xx="$(boards_by_cpu 74xx_7xx)"
256
257 #########################################################################
258 ## PowerPC groups
259 #########################################################################
260
261 LIST_TSEC="             \
262         ${LIST_83xx}    \
263         ${LIST_85xx}    \
264         ${LIST_86xx}    \
265 "
266
267 LIST_powerpc="          \
268         ${LIST_5xx}     \
269         ${LIST_512x}    \
270         ${LIST_5xxx}    \
271         ${LIST_8xx}     \
272         ${LIST_8220}    \
273         ${LIST_824x}    \
274         ${LIST_8260}    \
275         ${LIST_83xx}    \
276         ${LIST_85xx}    \
277         ${LIST_86xx}    \
278         ${LIST_4xx}     \
279         ${LIST_74xx_7xx}\
280 "
281
282 # Alias "ppc" -> "powerpc" to not break compatibility with older scripts
283 # still using "ppc" instead of "powerpc"
284 LIST_ppc="              \
285         ${LIST_powerpc} \
286 "
287
288 #########################################################################
289 ## StrongARM Systems
290 #########################################################################
291
292 LIST_SA="$(boards_by_cpu sa1100)"
293
294 #########################################################################
295 ## ARM7 Systems
296 #########################################################################
297
298 LIST_ARM7="             \
299         ap7             \
300         ap720t          \
301         armadillo       \
302         B2              \
303         ep7312          \
304         evb4510         \
305         impa7           \
306         integratorap    \
307         lpc2292sodimm   \
308         modnet50        \
309         SMN42           \
310 "
311
312 #########################################################################
313 ## ARM9 Systems
314 #########################################################################
315
316 LIST_ARM9="                     \
317         a320evb                 \
318         ap920t                  \
319         ap922_XA10              \
320         ap926ejs                \
321         ap946es                 \
322         ap966                   \
323         cp920t                  \
324         cp922_XA10              \
325         cp926ejs                \
326         cp946es                 \
327         cp966                   \
328         da830evm                \
329         da850evm                \
330         edb9301                 \
331         edb9302                 \
332         edb9302a                \
333         edb9307                 \
334         edb9307a                \
335         edb9312                 \
336         edb9315                 \
337         edb9315a                \
338         edminiv2                \
339         guruplug                \
340         imx27lite               \
341         jadecpu                 \
342         lpd7a400                \
343         magnesium               \
344         mv88f6281gtw_ge         \
345         mx1ads                  \
346         mx1fs2                  \
347         netstar                 \
348         nhk8815                 \
349         nhk8815_onenand         \
350         omap1510inn             \
351         omap1610h2              \
352         omap1610inn             \
353         omap5912osk             \
354         omap730p2               \
355         openrd_base             \
356         rd6281a                 \
357         sbc2410x                \
358         scb9328                 \
359         sheevaplug              \
360         smdk2400                \
361         smdk2410                \
362         spear300                \
363         spear310                \
364         spear320                \
365         spear600                \
366         suen3                   \
367         trab                    \
368         VCMA9                   \
369         versatile               \
370         versatileab             \
371         versatilepb             \
372         voiceblue               \
373         davinci_dvevm           \
374         davinci_schmoogie       \
375         davinci_sffsdr          \
376         davinci_sonata          \
377         davinci_dm355evm        \
378         davinci_dm355leopard    \
379         davinci_dm365evm        \
380         davinci_dm6467evm       \
381 "
382
383 #########################################################################
384 ## ARM10 Systems
385 #########################################################################
386 LIST_ARM10="            \
387         integratorcp    \
388         cp1026          \
389 "
390
391 #########################################################################
392 ## ARM11 Systems
393 #########################################################################
394 LIST_ARM11="                    \
395         cp1136                  \
396         omap2420h4              \
397         apollon                 \
398         imx31_litekit           \
399         imx31_phycore           \
400         imx31_phycore_eet       \
401         mx31ads                 \
402         mx31pdk                 \
403         mx31pdk_nand            \
404         qong                    \
405         smdk6400                \
406         tnetv107x_evm           \
407 "
408
409 #########################################################################
410 ## ARMV7 Systems
411 #########################################################################
412 LIST_ARMV7="            \
413         am3517_evm              \
414         ca9x4_ct_vxp            \
415         devkit8000              \
416         igep0020                \
417         igep0030                \
418         mx51evk                 \
419         omap3_beagle            \
420         omap3_overo             \
421         omap3_evm               \
422         omap3_pandora           \
423         omap3_sdp3430           \
424         omap3_zoom1             \
425         omap3_zoom2             \
426         omap4_panda             \
427         omap4_sdp4430           \
428         s5p_goni                \
429         smdkc100                \
430 "
431
432 #########################################################################
433 ## AT91 Systems
434 #########################################################################
435
436 LIST_at91="                     \
437         afeb9260                \
438         at91cap9adk             \
439         at91rm9200dk            \
440         at91rm9200ek            \
441         at91sam9260ek           \
442         at91sam9261ek           \
443         at91sam9263ek           \
444         at91sam9g10ek           \
445         at91sam9g20ek           \
446         at91sam9m10g45ek        \
447         at91sam9rlek            \
448         cmc_pu2                 \
449         CPUAT91                 \
450         CPU9260                 \
451         CPU9G20                 \
452         csb637                  \
453         eb_cpux9k2              \
454         kb9202                  \
455         meesc                   \
456         mp2usb                  \
457         m501sk                  \
458         otc570                  \
459         pm9261                  \
460         pm9263                  \
461         pm9g45                  \
462         SBC35_A9G20             \
463         TNY_A9260               \
464         TNY_A9G20               \
465 "
466
467 #########################################################################
468 ## Xscale Systems
469 #########################################################################
470
471 LIST_pxa="$(boards_by_cpu pxa)
472         polaris         \
473         trizepsiv       \
474         vpac270_nor     \
475         vpac270_onenand \
476 "
477
478 LIST_ixp="$(boards_by_cpu ixp)
479         pdnb3           \
480         scpu            \
481 "
482
483 #########################################################################
484 ## ARM groups
485 #########################################################################
486
487 LIST_arm="                      \
488         ${LIST_SA}              \
489         ${LIST_ARM7}            \
490         ${LIST_ARM9}            \
491         ${LIST_ARM10}           \
492         ${LIST_ARM11}           \
493         ${LIST_ARMV7}   \
494         ${LIST_at91}            \
495         ${LIST_pxa}             \
496         ${LIST_ixp}             \
497 "
498
499 #########################################################################
500 ## MIPS Systems         (default = big endian)
501 #########################################################################
502
503 LIST_mips4kc="          \
504         incaip          \
505         qemu_mips       \
506         vct_platinum    \
507         vct_platinum_small      \
508         vct_platinum_onenand    \
509         vct_platinum_onenand_small      \
510         vct_platinumavc \
511         vct_platinumavc_small   \
512         vct_platinumavc_onenand \
513         vct_platinumavc_onenand_small   \
514         vct_premium     \
515         vct_premium_small       \
516         vct_premium_onenand     \
517         vct_premium_onenand_small       \
518 "
519
520 LIST_mips5kc="          \
521         purple          \
522 "
523
524 LIST_au1xx0="           \
525         dbau1000        \
526         dbau1100        \
527         dbau1500        \
528         dbau1550        \
529         dbau1550_el     \
530         gth2            \
531 "
532
533 LIST_mips="             \
534         ${LIST_mips4kc} \
535         ${LIST_mips5kc} \
536         ${LIST_au1xx0}  \
537 "
538
539 #########################################################################
540 ## MIPS Systems         (little endian)
541 #########################################################################
542
543 LIST_mips4kc_el=""
544
545 LIST_mips5kc_el=""
546
547 LIST_au1xx0_el="        \
548         dbau1550_el     \
549         pb1000          \
550 "
551
552 LIST_mips_el="                  \
553         ${LIST_mips4kc_el}      \
554         ${LIST_mips5kc_el}      \
555         ${LIST_au1xx0_el}       \
556 "
557
558 #########################################################################
559 ## i386 Systems
560 #########################################################################
561
562 LIST_x86="$(boards_by_arch i386)
563         sc520_eNET      \
564 "
565
566 #########################################################################
567 ## Nios-II Systems
568 #########################################################################
569
570 LIST_nios2="$(boards_by_arch nios2)
571         nios2-generic   \
572 "
573
574 #########################################################################
575 ## MicroBlaze Systems
576 #########################################################################
577
578 LIST_microblaze="$(boards_by_arch microblaze)"
579
580 #########################################################################
581 ## ColdFire Systems
582 #########################################################################
583
584 LIST_coldfire="$(boards_by_arch m68k)
585         astro_mcf5373l          \
586         cobra5272               \
587         EB+MCF-EV123            \
588         EB+MCF-EV123_internal   \
589         M52277EVB               \
590         M5235EVB                \
591         M5329AFEE               \
592         M5373EVB                \
593         M54451EVB               \
594         M54455EVB               \
595         M5475AFE                \
596         M5485AFE                \
597 "
598
599 #########################################################################
600 ## AVR32 Systems
601 #########################################################################
602
603 LIST_avr32="$(boards_by_arch avr32)"
604
605 #########################################################################
606 ## Blackfin Systems
607 #########################################################################
608
609 LIST_blackfin="$(boards_by_arch blackfin)
610         bf527-ezkit-v2
611 "
612
613 #########################################################################
614 ## SH Systems
615 #########################################################################
616
617 LIST_sh2="              \
618         rsk7203         \
619 "
620 LIST_sh3="              \
621         mpr2            \
622         ms7720se        \
623 "
624
625 LIST_sh4="              \
626         ms7750se        \
627         ms7722se        \
628         MigoR           \
629         r7780mp         \
630         r2dplus         \
631         sh7763rdp       \
632         sh7785lcr       \
633         ap325rxa        \
634         espt            \
635 "
636
637 LIST_sh="               \
638         ${LIST_sh2}     \
639         ${LIST_sh3}     \
640         ${LIST_sh4}     \
641 "
642
643 #########################################################################
644 ## SPARC Systems
645 #########################################################################
646
647 LIST_sparc="$(boards_by_arch sparc)"
648
649 #-----------------------------------------------------------------------
650
651 build_target() {
652         target=$1
653
654         ${MAKE} distclean >/dev/null
655         ${MAKE} -s ${target}_config
656
657         ${MAKE} ${JOBS} all 2>&1 >${LOG_DIR}/$target.MAKELOG \
658                                 | tee ${LOG_DIR}/$target.ERR
659
660         # Check for 'make' errors
661         if [ ${PIPESTATUS[0]} -ne 0 ] ; then
662                 RC=1
663         fi
664
665         if [ -s ${LOG_DIR}/$target.ERR ] ; then
666                 ERR_CNT=$((ERR_CNT + 1))
667                 ERR_LIST="${ERR_LIST} $target"
668         else
669                 rm ${LOG_DIR}/$target.ERR
670         fi
671
672         TOTAL_CNT=$((TOTAL_CNT + 1))
673
674         ${CROSS_COMPILE}size ${BUILD_DIR}/u-boot \
675                                 | tee -a ${LOG_DIR}/$target.MAKELOG
676 }
677 build_targets() {
678         for t in "$@" ; do
679                 # If a LIST_xxx var exists, use it.  But avoid variable
680                 # expansion in the eval when a board name contains certain
681                 # characters that the shell interprets.
682                 case ${t} in
683                         *[-+=]*) list= ;;
684                         *)       list=$(eval echo '${LIST_'$t'}') ;;
685                 esac
686                 if [ -n "${list}" ] ; then
687                         build_targets ${list}
688                 else
689                         build_target ${t}
690                 fi
691         done
692 }
693
694 #-----------------------------------------------------------------------
695
696 print_stats() {
697         echo ""
698         echo "--------------------- SUMMARY ----------------------------"
699         echo "Boards compiled: ${TOTAL_CNT}"
700         if [ ${ERR_CNT} -gt 0 ] ; then
701                 echo "Boards with warnings or errors: ${ERR_CNT} (${ERR_LIST} )"
702         fi
703         echo "----------------------------------------------------------"
704
705         exit $RC
706 }
707
708 #-----------------------------------------------------------------------
709
710 # Build target groups selected by options, plus any command line args
711 set -- ${SELECTED} "$@"
712 # run PowerPC by default
713 [ $# = 0 ] && set -- powerpc
714 build_targets "$@"