3 # Tool mainly for U-Boot Quality Assurance: build one or more board
4 # configurations with minimal verbosity, showing only warnings and
7 # There are several ways to select which boards to build.
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").
14 # With the iontroduction of the board.cfg file, it has become possible
15 # to provide additional selections. We use standard command line
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
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.
31 # - build all Power Architecture boards:
35 # MAKEALL --arch powerpc
39 # - build all PowerPC boards manufactured by vendor "esd":
41 # MAKEALL -a powerpc -v esd
43 # - build all PowerPC boards manufactured either by "keymile" or
46 # MAKEALL -a powerpc -v keymile -v siemens
48 # - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards:
50 # MAKEALL -c mpc83xx -v freescale 4xx
52 #########################################################################
55 LONG_OPTS="arch:,cpu:,vendor:,soc:"
57 # Option processing based on util-linux-2.13/getopt-parse.bash
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
63 TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} \
66 if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
68 # Note the quotes around `$TEMP': they are essential!
76 # echo "Option ARCH: argument \`$2'"
77 if [ "$opt_a" ] ; then
78 opt_a="${opt_a%)} || \$2 == \"$2\")"
80 opt_a="(\$2 == \"$2\")"
85 # echo "Option CPU: argument \`$2'"
86 if [ "$opt_c" ] ; then
87 opt_c="${opt_c%)} || \$3 == \"$2\")"
89 opt_c="(\$3 == \"$2\")"
94 # echo "Option SoC: argument \`$2'"
95 if [ "$opt_s" ] ; then
96 opt_s="${opt_s%)} || \$6 == \"$2\")"
98 opt_s="(\$6 == \"$2\")"
103 # echo "Option VENDOR: argument \`$2'"
104 if [ "$opt_v" ] ; then
105 opt_v="${opt_v%)} || \$5 == \"$2\")"
107 opt_v="(\$5 == \"$2\")"
114 echo "Internal error!" >&2 ; exit 1 ;;
117 # echo "Remaining arguments:"
118 # for arg do echo '--> '"\`$arg'" ; done
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"
126 if [ "$SELECTED" ] ; then
127 SELECTED=$(awk '('"$FILTER"') { print $1 }' boards.cfg)
130 #########################################################################
132 # Print statistics when we exit
136 # Determine number of CPU cores if no default was set
137 : ${BUILD_NCPUS:="`getconf _NPROCESSORS_ONLN`"}
139 if [ "$BUILD_NCPUS" -gt 1 ]
141 JOBS="-j $((BUILD_NCPUS + 1))"
147 if [ "${CROSS_COMPILE}" ] ; then
148 MAKE="make CROSS_COMPILE=${CROSS_COMPILE}"
153 if [ "${MAKEALL_LOGDIR}" ] ; then
154 LOG_DIR=${MAKEALL_LOGDIR}
159 if [ ! "${BUILD_DIR}" ] ; then
163 [ -d ${LOG_DIR} ] || mkdir ${LOG_DIR} || exit 1
167 # Keep track of the number of builds and errors
173 # Helper funcs for parsing boards.cfg
179 '($1 !~ /^#/ && $field == select) { print $1 }' \
182 boards_by_arch() { boards_by_field 2 "$@" ; }
183 boards_by_cpu() { boards_by_field 3 "$@" ; }
185 #########################################################################
187 #########################################################################
189 LIST_5xx="$(boards_by_cpu mpc5xx)"
191 #########################################################################
193 #########################################################################
195 LIST_5xxx="$(boards_by_cpu mpc5xxx)"
197 #########################################################################
199 #########################################################################
201 LIST_512x="$(boards_by_cpu mpc512x)"
203 #########################################################################
205 #########################################################################
207 LIST_8xx="$(boards_by_cpu mpc8xx)"
209 #########################################################################
211 #########################################################################
213 LIST_4xx="$(boards_by_cpu ppc4xx)"
215 #########################################################################
217 #########################################################################
219 LIST_8220="$(boards_by_cpu mpc8220)"
221 #########################################################################
223 #########################################################################
225 LIST_824x="$(boards_by_cpu mpc824x)"
227 #########################################################################
228 ## MPC8260 Systems (includes 8250, 8255 etc.)
229 #########################################################################
231 LIST_8260="$(boards_by_cpu mpc8260)"
233 #########################################################################
234 ## MPC83xx Systems (includes 8349, etc.)
235 #########################################################################
237 LIST_83xx="$(boards_by_cpu mpc83xx)"
239 #########################################################################
240 ## MPC85xx Systems (includes 8540, 8560 etc.)
241 #########################################################################
243 LIST_85xx="$(boards_by_cpu mpc85xx)"
245 #########################################################################
247 #########################################################################
249 LIST_86xx="$(boards_by_cpu mpc86xx)"
251 #########################################################################
253 #########################################################################
255 LIST_74xx_7xx="$(boards_by_cpu 74xx_7xx)"
257 #########################################################################
259 #########################################################################
282 # Alias "ppc" -> "powerpc" to not break compatibility with older scripts
283 # still using "ppc" instead of "powerpc"
288 #########################################################################
290 #########################################################################
292 LIST_SA="$(boards_by_cpu sa1100)"
294 #########################################################################
296 #########################################################################
312 #########################################################################
314 #########################################################################
378 davinci_dm355leopard \
383 #########################################################################
385 #########################################################################
391 #########################################################################
393 #########################################################################
409 #########################################################################
411 #########################################################################
432 #########################################################################
434 #########################################################################
467 #########################################################################
469 #########################################################################
471 LIST_pxa="$(boards_by_cpu pxa)"
473 LIST_ixp="$(boards_by_cpu ixp)
478 #########################################################################
480 #########################################################################
494 #########################################################################
495 ## MIPS Systems (default = big endian)
496 #########################################################################
503 vct_platinum_onenand \
504 vct_platinum_onenand_small \
506 vct_platinumavc_small \
507 vct_platinumavc_onenand \
508 vct_platinumavc_onenand_small \
511 vct_premium_onenand \
512 vct_premium_onenand_small \
534 #########################################################################
535 ## MIPS Systems (little endian)
536 #########################################################################
553 #########################################################################
555 #########################################################################
557 LIST_x86="$(boards_by_arch i386)"
559 #########################################################################
561 #########################################################################
563 LIST_nios2="$(boards_by_arch nios2)
567 #########################################################################
568 ## MicroBlaze Systems
569 #########################################################################
571 LIST_microblaze="$(boards_by_arch microblaze)"
573 #########################################################################
575 #########################################################################
577 LIST_coldfire="$(boards_by_arch m68k)
581 EB+MCF-EV123_internal \
592 #########################################################################
594 #########################################################################
596 LIST_avr32="$(boards_by_arch avr32)"
598 #########################################################################
600 #########################################################################
602 LIST_blackfin="$(boards_by_arch blackfin)"
604 #########################################################################
606 #########################################################################
608 LIST_sh2="$(boards_by_cpu sh2)"
609 LIST_sh3="$(boards_by_cpu sh3)"
610 LIST_sh4="$(boards_by_cpu sh4)"
612 LIST_sh="$(boards_by_arch sh)"
614 #########################################################################
616 #########################################################################
618 LIST_sparc="$(boards_by_arch sparc)"
620 #-----------------------------------------------------------------------
625 ${MAKE} distclean >/dev/null
626 ${MAKE} -s ${target}_config
628 ${MAKE} ${JOBS} all 2>&1 >${LOG_DIR}/$target.MAKELOG \
629 | tee ${LOG_DIR}/$target.ERR
631 # Check for 'make' errors
632 if [ ${PIPESTATUS[0]} -ne 0 ] ; then
636 if [ -s ${LOG_DIR}/$target.ERR ] ; then
637 ERR_CNT=$((ERR_CNT + 1))
638 ERR_LIST="${ERR_LIST} $target"
640 rm ${LOG_DIR}/$target.ERR
643 TOTAL_CNT=$((TOTAL_CNT + 1))
645 ${CROSS_COMPILE}size ${BUILD_DIR}/u-boot \
646 | tee -a ${LOG_DIR}/$target.MAKELOG
650 # If a LIST_xxx var exists, use it. But avoid variable
651 # expansion in the eval when a board name contains certain
652 # characters that the shell interprets.
655 *) list=$(eval echo '${LIST_'$t'}') ;;
657 if [ -n "${list}" ] ; then
658 build_targets ${list}
665 #-----------------------------------------------------------------------
669 echo "--------------------- SUMMARY ----------------------------"
670 echo "Boards compiled: ${TOTAL_CNT}"
671 if [ ${ERR_CNT} -gt 0 ] ; then
672 echo "Boards with warnings or errors: ${ERR_CNT} (${ERR_LIST} )"
674 echo "----------------------------------------------------------"
679 #-----------------------------------------------------------------------
681 # Build target groups selected by options, plus any command line args
682 set -- ${SELECTED} "$@"
683 # run PowerPC by default
684 [ $# = 0 ] && set -- powerpc