]> git.ipfire.org Git - people/ms/u-boot.git/blob - MAKEALL
PXA: Fix reloc, Push lowlevel init into C code
[people/ms/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_128M\
475 vpac270_nor_256M\
476 vpac270_onenand \
477 "
478
479 LIST_ixp="$(boards_by_cpu ixp)
480 pdnb3 \
481 scpu \
482 "
483
484 #########################################################################
485 ## ARM groups
486 #########################################################################
487
488 LIST_arm=" \
489 ${LIST_SA} \
490 ${LIST_ARM7} \
491 ${LIST_ARM9} \
492 ${LIST_ARM10} \
493 ${LIST_ARM11} \
494 ${LIST_ARMV7} \
495 ${LIST_at91} \
496 ${LIST_pxa} \
497 ${LIST_ixp} \
498 "
499
500 #########################################################################
501 ## MIPS Systems (default = big endian)
502 #########################################################################
503
504 LIST_mips4kc=" \
505 incaip \
506 qemu_mips \
507 vct_platinum \
508 vct_platinum_small \
509 vct_platinum_onenand \
510 vct_platinum_onenand_small \
511 vct_platinumavc \
512 vct_platinumavc_small \
513 vct_platinumavc_onenand \
514 vct_platinumavc_onenand_small \
515 vct_premium \
516 vct_premium_small \
517 vct_premium_onenand \
518 vct_premium_onenand_small \
519 "
520
521 LIST_mips5kc=" \
522 purple \
523 "
524
525 LIST_au1xx0=" \
526 dbau1000 \
527 dbau1100 \
528 dbau1500 \
529 dbau1550 \
530 dbau1550_el \
531 gth2 \
532 "
533
534 LIST_mips=" \
535 ${LIST_mips4kc} \
536 ${LIST_mips5kc} \
537 ${LIST_au1xx0} \
538 "
539
540 #########################################################################
541 ## MIPS Systems (little endian)
542 #########################################################################
543
544 LIST_mips4kc_el=""
545
546 LIST_mips5kc_el=""
547
548 LIST_au1xx0_el=" \
549 dbau1550_el \
550 pb1000 \
551 "
552
553 LIST_mips_el=" \
554 ${LIST_mips4kc_el} \
555 ${LIST_mips5kc_el} \
556 ${LIST_au1xx0_el} \
557 "
558
559 #########################################################################
560 ## i386 Systems
561 #########################################################################
562
563 LIST_x86="$(boards_by_arch i386)
564 sc520_eNET \
565 "
566
567 #########################################################################
568 ## Nios-II Systems
569 #########################################################################
570
571 LIST_nios2="$(boards_by_arch nios2)
572 nios2-generic \
573 "
574
575 #########################################################################
576 ## MicroBlaze Systems
577 #########################################################################
578
579 LIST_microblaze="$(boards_by_arch microblaze)"
580
581 #########################################################################
582 ## ColdFire Systems
583 #########################################################################
584
585 LIST_coldfire="$(boards_by_arch m68k)
586 astro_mcf5373l \
587 cobra5272 \
588 EB+MCF-EV123 \
589 EB+MCF-EV123_internal \
590 M52277EVB \
591 M5235EVB \
592 M5329AFEE \
593 M5373EVB \
594 M54451EVB \
595 M54455EVB \
596 M5475AFE \
597 M5485AFE \
598 "
599
600 #########################################################################
601 ## AVR32 Systems
602 #########################################################################
603
604 LIST_avr32="$(boards_by_arch avr32)"
605
606 #########################################################################
607 ## Blackfin Systems
608 #########################################################################
609
610 LIST_blackfin="$(boards_by_arch blackfin)
611 bf527-ezkit-v2
612 "
613
614 #########################################################################
615 ## SH Systems
616 #########################################################################
617
618 LIST_sh2=" \
619 rsk7203 \
620 "
621 LIST_sh3=" \
622 mpr2 \
623 ms7720se \
624 "
625
626 LIST_sh4=" \
627 ms7750se \
628 ms7722se \
629 MigoR \
630 r7780mp \
631 r2dplus \
632 sh7763rdp \
633 sh7785lcr \
634 ap325rxa \
635 espt \
636 "
637
638 LIST_sh=" \
639 ${LIST_sh2} \
640 ${LIST_sh3} \
641 ${LIST_sh4} \
642 "
643
644 #########################################################################
645 ## SPARC Systems
646 #########################################################################
647
648 LIST_sparc="$(boards_by_arch sparc)"
649
650 #-----------------------------------------------------------------------
651
652 build_target() {
653 target=$1
654
655 ${MAKE} distclean >/dev/null
656 ${MAKE} -s ${target}_config
657
658 ${MAKE} ${JOBS} all 2>&1 >${LOG_DIR}/$target.MAKELOG \
659 | tee ${LOG_DIR}/$target.ERR
660
661 # Check for 'make' errors
662 if [ ${PIPESTATUS[0]} -ne 0 ] ; then
663 RC=1
664 fi
665
666 if [ -s ${LOG_DIR}/$target.ERR ] ; then
667 ERR_CNT=$((ERR_CNT + 1))
668 ERR_LIST="${ERR_LIST} $target"
669 else
670 rm ${LOG_DIR}/$target.ERR
671 fi
672
673 TOTAL_CNT=$((TOTAL_CNT + 1))
674
675 ${CROSS_COMPILE}size ${BUILD_DIR}/u-boot \
676 | tee -a ${LOG_DIR}/$target.MAKELOG
677 }
678 build_targets() {
679 for t in "$@" ; do
680 # If a LIST_xxx var exists, use it. But avoid variable
681 # expansion in the eval when a board name contains certain
682 # characters that the shell interprets.
683 case ${t} in
684 *[-+=]*) list= ;;
685 *) list=$(eval echo '${LIST_'$t'}') ;;
686 esac
687 if [ -n "${list}" ] ; then
688 build_targets ${list}
689 else
690 build_target ${t}
691 fi
692 done
693 }
694
695 #-----------------------------------------------------------------------
696
697 print_stats() {
698 echo ""
699 echo "--------------------- SUMMARY ----------------------------"
700 echo "Boards compiled: ${TOTAL_CNT}"
701 if [ ${ERR_CNT} -gt 0 ] ; then
702 echo "Boards with warnings or errors: ${ERR_CNT} (${ERR_LIST} )"
703 fi
704 echo "----------------------------------------------------------"
705
706 exit $RC
707 }
708
709 #-----------------------------------------------------------------------
710
711 # Build target groups selected by options, plus any command line args
712 set -- ${SELECTED} "$@"
713 # run PowerPC by default
714 [ $# = 0 ] && set -- powerpc
715 build_targets "$@"