123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675 |
- #!/bin/bash
- # Tool mainly for U-Boot Quality Assurance: build one or more board
- # configurations with minimal verbosity, showing only warnings and
- # errors.
- usage()
- {
- # if exiting with 0, write to stdout, else write to stderr
- local ret=${1:-0}
- [ "${ret}" -eq 1 ] && exec 1>&2
- cat <<-EOF
- Usage: MAKEALL [options] [--] [boards-to-build]
- Options:
- -a ARCH, --arch ARCH Build all boards with arch ARCH
- -c CPU, --cpu CPU Build all boards with cpu CPU
- -v VENDOR, --vendor VENDOR Build all boards with vendor VENDOR
- -s SOC, --soc SOC Build all boards with soc SOC
- -h, --help This help output
- Selections by these options are logically ANDed; if the same option
- is used repeatedly, such selections are ORed. So "-v FOO -v BAR"
- will select all configurations where the vendor is either FOO or
- BAR. Any additional arguments specified on the command line are
- always build additionally. See the boards.cfg file for more info.
- If no boards are specified, then the default is "powerpc".
- Environment variables:
- BUILD_NCPUS number of parallel make jobs (default: auto)
- CROSS_COMPILE cross-compiler toolchain prefix (default: "")
- MAKEALL_LOGDIR output all logs to here (default: ./LOG/)
- BUILD_DIR output build directory (default: ./)
- Examples:
- - build all Power Architecture boards:
- MAKEALL -a powerpc
- MAKEALL --arch powerpc
- MAKEALL powerpc
- - build all PowerPC boards manufactured by vendor "esd":
- MAKEALL -a powerpc -v esd
- - build all PowerPC boards manufactured either by "keymile" or "siemens":
- MAKEALL -a powerpc -v keymile -v siemens
- - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards:
- MAKEALL -c mpc83xx -v freescale 4xx
- EOF
- exit ${ret}
- }
- SHORT_OPTS="ha:c:v:s:"
- LONG_OPTS="help,arch:,cpu:,vendor:,soc:"
- # Option processing based on util-linux-2.13/getopt-parse.bash
- # Note that we use `"$@"' to let each command-line parameter expand to a
- # separate word. The quotes around `$@' are essential!
- # We need TEMP as the `eval set --' would nuke the return value of
- # getopt.
- TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} \
- -n 'MAKEALL' -- "$@"`
- [ $? != 0 ] && usage 1
- # Note the quotes around `$TEMP': they are essential!
- eval set -- "$TEMP"
- SELECTED=''
- while true ; do
- case "$1" in
- -a|--arch)
- # echo "Option ARCH: argument \`$2'"
- if [ "$opt_a" ] ; then
- opt_a="${opt_a%)} || \$2 == \"$2\")"
- else
- opt_a="(\$2 == \"$2\")"
- fi
- SELECTED='y'
- shift 2 ;;
- -c|--cpu)
- # echo "Option CPU: argument \`$2'"
- if [ "$opt_c" ] ; then
- opt_c="${opt_c%)} || \$3 == \"$2\")"
- else
- opt_c="(\$3 == \"$2\")"
- fi
- SELECTED='y'
- shift 2 ;;
- -s|--soc)
- # echo "Option SoC: argument \`$2'"
- if [ "$opt_s" ] ; then
- opt_s="${opt_s%)} || \$6 == \"$2\")"
- else
- opt_s="(\$6 == \"$2\")"
- fi
- SELECTED='y'
- shift 2 ;;
- -v|--vendor)
- # echo "Option VENDOR: argument \`$2'"
- if [ "$opt_v" ] ; then
- opt_v="${opt_v%)} || \$5 == \"$2\")"
- else
- opt_v="(\$5 == \"$2\")"
- fi
- SELECTED='y'
- shift 2 ;;
- -h|--help)
- usage ;;
- --)
- shift ; break ;;
- *)
- echo "Internal error!" >&2 ; exit 1 ;;
- esac
- done
- # echo "Remaining arguments:"
- # for arg do echo '--> '"\`$arg'" ; done
- FILTER="\$1 !~ /^#/"
- [ "$opt_a" ] && FILTER="${FILTER} && $opt_a"
- [ "$opt_c" ] && FILTER="${FILTER} && $opt_c"
- [ "$opt_s" ] && FILTER="${FILTER} && $opt_s"
- [ "$opt_v" ] && FILTER="${FILTER} && $opt_v"
- if [ "$SELECTED" ] ; then
- SELECTED=$(awk '('"$FILTER"') { print $1 }' boards.cfg)
- # Make sure some boards from boards.cfg are actually found
- if [ -z "$SELECTED" ] ; then
- echo "Error: No boards selected, invalid arguments"
- exit 1
- fi
- fi
- #########################################################################
- # Print statistics when we exit
- trap exit 1 2 3 15
- trap print_stats 0
- # Determine number of CPU cores if no default was set
- : ${BUILD_NCPUS:="`getconf _NPROCESSORS_ONLN`"}
- if [ "$BUILD_NCPUS" -gt 1 ]
- then
- JOBS="-j $((BUILD_NCPUS + 1))"
- else
- JOBS=""
- fi
- if [ "${CROSS_COMPILE}" ] ; then
- MAKE="make CROSS_COMPILE=${CROSS_COMPILE}"
- else
- MAKE=make
- fi
- if [ "${MAKEALL_LOGDIR}" ] ; then
- LOG_DIR=${MAKEALL_LOGDIR}
- else
- LOG_DIR="LOG"
- fi
- if [ ! "${BUILD_DIR}" ] ; then
- BUILD_DIR="."
- fi
- [ -d ${LOG_DIR} ] || mkdir ${LOG_DIR} || exit 1
- LIST=""
- # Keep track of the number of builds and errors
- ERR_CNT=0
- ERR_LIST=""
- TOTAL_CNT=0
- RC=0
- # Helper funcs for parsing boards.cfg
- boards_by_field()
- {
- awk \
- -v field="$1" \
- -v select="$2" \
- '($1 !~ /^#/ && $field == select) { print $1 }' \
- boards.cfg
- }
- boards_by_arch() { boards_by_field 2 "$@" ; }
- boards_by_cpu() { boards_by_field 3 "$@" ; }
- boards_by_soc() { boards_by_field 6 "$@" ; }
- #########################################################################
- ## MPC5xx Systems
- #########################################################################
- LIST_5xx="$(boards_by_cpu mpc5xx)"
- #########################################################################
- ## MPC5xxx Systems
- #########################################################################
- LIST_5xxx="$(boards_by_cpu mpc5xxx)"
- #########################################################################
- ## MPC512x Systems
- #########################################################################
- LIST_512x="$(boards_by_cpu mpc512x)"
- #########################################################################
- ## MPC8xx Systems
- #########################################################################
- LIST_8xx="$(boards_by_cpu mpc8xx)"
- #########################################################################
- ## PPC4xx Systems
- #########################################################################
- LIST_4xx="$(boards_by_cpu ppc4xx)"
- #########################################################################
- ## MPC8220 Systems
- #########################################################################
- LIST_8220="$(boards_by_cpu mpc8220)"
- #########################################################################
- ## MPC824x Systems
- #########################################################################
- LIST_824x="$(boards_by_cpu mpc824x)"
- #########################################################################
- ## MPC8260 Systems (includes 8250, 8255 etc.)
- #########################################################################
- LIST_8260="$(boards_by_cpu mpc8260)"
- #########################################################################
- ## MPC83xx Systems (includes 8349, etc.)
- #########################################################################
- LIST_83xx="$(boards_by_cpu mpc83xx)"
- #########################################################################
- ## MPC85xx Systems (includes 8540, 8560 etc.)
- #########################################################################
- LIST_85xx="$(boards_by_cpu mpc85xx)"
- #########################################################################
- ## MPC86xx Systems
- #########################################################################
- LIST_86xx="$(boards_by_cpu mpc86xx)"
- #########################################################################
- ## 74xx/7xx Systems
- #########################################################################
- LIST_74xx_7xx="$(boards_by_cpu 74xx_7xx)"
- #########################################################################
- ## PowerPC groups
- #########################################################################
- LIST_TSEC=" \
- ${LIST_83xx} \
- ${LIST_85xx} \
- ${LIST_86xx} \
- "
- LIST_powerpc=" \
- ${LIST_5xx} \
- ${LIST_512x} \
- ${LIST_5xxx} \
- ${LIST_8xx} \
- ${LIST_8220} \
- ${LIST_824x} \
- ${LIST_8260} \
- ${LIST_83xx} \
- ${LIST_85xx} \
- ${LIST_86xx} \
- ${LIST_4xx} \
- ${LIST_74xx_7xx}\
- "
- # Alias "ppc" -> "powerpc" to not break compatibility with older scripts
- # still using "ppc" instead of "powerpc"
- LIST_ppc=" \
- ${LIST_powerpc} \
- "
- #########################################################################
- ## StrongARM Systems
- #########################################################################
- LIST_SA="$(boards_by_cpu sa1100)"
- #########################################################################
- ## ARM7 Systems
- #########################################################################
- LIST_ARM7=" \
- ap7 \
- ap720t \
- armadillo \
- B2 \
- ep7312 \
- evb4510 \
- impa7 \
- integratorap \
- lpc2292sodimm \
- modnet50 \
- SMN42 \
- "
- #########################################################################
- ## ARM9 Systems
- #########################################################################
- LIST_ARM9=" \
- a320evb \
- ap920t \
- ap922_XA10 \
- ap926ejs \
- ap946es \
- ap966 \
- aspenite \
- cp920t \
- cp922_XA10 \
- cp926ejs \
- cp946es \
- cp966 \
- da830evm \
- da850evm \
- edb9301 \
- edb9302 \
- edb9302a \
- edb9307 \
- edb9307a \
- edb9312 \
- edb9315 \
- edb9315a \
- edminiv2 \
- guruplug \
- imx27lite \
- jadecpu \
- km_kirkwood \
- lpd7a400 \
- magnesium \
- mv88f6281gtw_ge \
- mx1ads \
- mx1fs2 \
- netstar \
- nhk8815 \
- nhk8815_onenand \
- omap1510inn \
- omap1610h2 \
- omap1610inn \
- omap5912osk \
- omap730p2 \
- openrd_base \
- openrd_client \
- openrd_ultimate \
- portl2 \
- rd6281a \
- sbc2410x \
- scb9328 \
- sheevaplug \
- smdk2400 \
- smdk2410 \
- spear300 \
- spear310 \
- spear320 \
- spear600 \
- VCMA9 \
- versatile \
- versatileab \
- versatilepb \
- voiceblue \
- davinci_dvevm \
- davinci_schmoogie \
- davinci_sffsdr \
- davinci_sonata \
- davinci_dm355evm \
- davinci_dm355leopard \
- davinci_dm365evm \
- davinci_dm6467evm \
- "
- #########################################################################
- ## ARM10 Systems
- #########################################################################
- LIST_ARM10=" \
- integratorcp \
- cp1026 \
- "
- #########################################################################
- ## ARM11 Systems
- #########################################################################
- LIST_ARM11=" \
- cp1136 \
- omap2420h4 \
- apollon \
- imx31_litekit \
- imx31_phycore \
- imx31_phycore_eet \
- mx31ads \
- mx31pdk \
- mx31pdk_nand \
- qong \
- smdk6400 \
- tnetv107x_evm \
- "
- #########################################################################
- ## ARMV7 Systems
- #########################################################################
- LIST_ARMV7=" \
- am3517_crane \
- am3517_evm \
- ca9x4_ct_vxp \
- devkit8000 \
- dig297 \
- igep0020 \
- igep0030 \
- mx51evk \
- omap3_beagle \
- omap3_overo \
- omap3_evm \
- omap3_pandora \
- omap3_sdp3430 \
- omap3_zoom1 \
- omap3_zoom2 \
- omap4_panda \
- omap4_sdp4430 \
- s5p_goni \
- smdkc100 \
- "
- #########################################################################
- ## AT91 Systems
- #########################################################################
- LIST_at91="$(boards_by_soc at91)\
- $(boards_by_soc at91rm9200)\
- at91sam9260ek \
- at91sam9261ek \
- at91sam9263ek \
- at91sam9g10ek \
- at91sam9g20ek \
- at91sam9m10g45ek \
- at91sam9rlek \
- pm9g45 \
- SBC35_A9G20 \
- TNY_A9260 \
- TNY_A9G20 \
- "
- #########################################################################
- ## Xscale Systems
- #########################################################################
- LIST_pxa="$(boards_by_cpu pxa)"
- LIST_ixp="$(boards_by_cpu ixp)
- pdnb3 \
- scpu \
- "
- #########################################################################
- ## ARM groups
- #########################################################################
- LIST_arm=" \
- ${LIST_SA} \
- ${LIST_ARM7} \
- ${LIST_ARM9} \
- ${LIST_ARM10} \
- ${LIST_ARM11} \
- ${LIST_ARMV7} \
- ${LIST_at91} \
- ${LIST_pxa} \
- ${LIST_ixp} \
- "
- #########################################################################
- ## MIPS Systems (default = big endian)
- #########################################################################
- LIST_mips4kc=" \
- incaip \
- qemu_mips \
- vct_platinum \
- vct_platinum_small \
- vct_platinum_onenand \
- vct_platinum_onenand_small \
- vct_platinumavc \
- vct_platinumavc_small \
- vct_platinumavc_onenand \
- vct_platinumavc_onenand_small \
- vct_premium \
- vct_premium_small \
- vct_premium_onenand \
- vct_premium_onenand_small \
- "
- LIST_mips5kc=""
- LIST_au1xx0=" \
- dbau1000 \
- dbau1100 \
- dbau1500 \
- dbau1550 \
- dbau1550_el \
- gth2 \
- "
- LIST_mips=" \
- ${LIST_mips4kc} \
- ${LIST_mips5kc} \
- ${LIST_au1xx0} \
- "
- #########################################################################
- ## MIPS Systems (little endian)
- #########################################################################
- LIST_mips4kc_el=""
- LIST_mips5kc_el=""
- LIST_au1xx0_el=" \
- dbau1550_el \
- pb1000 \
- "
- LIST_mips_el=" \
- ${LIST_mips4kc_el} \
- ${LIST_mips5kc_el} \
- ${LIST_au1xx0_el} \
- "
- #########################################################################
- ## x86 Systems
- #########################################################################
- LIST_x86="$(boards_by_arch x86)"
- #########################################################################
- ## Nios-II Systems
- #########################################################################
- LIST_nios2="$(boards_by_arch nios2)"
- #########################################################################
- ## MicroBlaze Systems
- #########################################################################
- LIST_microblaze="$(boards_by_arch microblaze)"
- #########################################################################
- ## ColdFire Systems
- #########################################################################
- LIST_coldfire="$(boards_by_arch m68k)
- astro_mcf5373l \
- cobra5272 \
- EB+MCF-EV123 \
- EB+MCF-EV123_internal \
- M52277EVB \
- M5235EVB \
- M5329AFEE \
- M5373EVB \
- M54451EVB \
- M54455EVB \
- M5475AFE \
- M5485AFE \
- "
- #########################################################################
- ## AVR32 Systems
- #########################################################################
- LIST_avr32="$(boards_by_arch avr32)"
- #########################################################################
- ## Blackfin Systems
- #########################################################################
- LIST_blackfin="$(boards_by_arch blackfin)"
- #########################################################################
- ## SH Systems
- #########################################################################
- LIST_sh2="$(boards_by_cpu sh2)"
- LIST_sh3="$(boards_by_cpu sh3)"
- LIST_sh4="$(boards_by_cpu sh4)"
- LIST_sh="$(boards_by_arch sh)"
- #########################################################################
- ## SPARC Systems
- #########################################################################
- LIST_sparc="$(boards_by_arch sparc)"
- #-----------------------------------------------------------------------
- build_target() {
- target=$1
- ${MAKE} distclean >/dev/null
- ${MAKE} -s ${target}_config
- ${MAKE} ${JOBS} all 2>&1 >${LOG_DIR}/$target.MAKELOG \
- | tee ${LOG_DIR}/$target.ERR
- # Check for 'make' errors
- if [ ${PIPESTATUS[0]} -ne 0 ] ; then
- RC=1
- fi
- if [ -s ${LOG_DIR}/$target.ERR ] ; then
- ERR_CNT=$((ERR_CNT + 1))
- ERR_LIST="${ERR_LIST} $target"
- else
- rm ${LOG_DIR}/$target.ERR
- fi
- TOTAL_CNT=$((TOTAL_CNT + 1))
- ${CROSS_COMPILE}size ${BUILD_DIR}/u-boot \
- | tee -a ${LOG_DIR}/$target.MAKELOG
- }
- build_targets() {
- for t in "$@" ; do
- # If a LIST_xxx var exists, use it. But avoid variable
- # expansion in the eval when a board name contains certain
- # characters that the shell interprets.
- case ${t} in
- *[-+=]*) list= ;;
- *) list=$(eval echo '${LIST_'$t'}') ;;
- esac
- if [ -n "${list}" ] ; then
- build_targets ${list}
- else
- build_target ${t}
- fi
- done
- }
- #-----------------------------------------------------------------------
- print_stats() {
- echo ""
- echo "--------------------- SUMMARY ----------------------------"
- echo "Boards compiled: ${TOTAL_CNT}"
- if [ ${ERR_CNT} -gt 0 ] ; then
- echo "Boards with warnings or errors: ${ERR_CNT} (${ERR_LIST} )"
- fi
- echo "----------------------------------------------------------"
- exit $RC
- }
- #-----------------------------------------------------------------------
- # Build target groups selected by options, plus any command line args
- set -- ${SELECTED} "$@"
- # run PowerPC by default
- [ $# = 0 ] && set -- powerpc
- build_targets "$@"
|