X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=MAKEALL;h=5b06c5477decafc2d18dafd0ad8520e96a572ca0;hb=a615850ab84267f5bb8d9ecf22c9d23e6141f4b0;hp=21b4cbd7d7cad559f91b5eb93b8e293ac0df4008;hpb=8fea51a4acb0c7da6fb375c9a708c50c0a1b66ad;p=karo-tx-uboot.git diff --git a/MAKEALL b/MAKEALL index 21b4cbd7d7..5b06c5477d 100755 --- a/MAKEALL +++ b/MAKEALL @@ -1,4 +1,170 @@ #!/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 + -l, --list List all targets to be built + -m, --maintainers List all targets and maintainer email + -M, --mails List all targets and all affilated emails + -C, --check Enable build checking + -n, --continue Continue (skip boards already built) + -r, --rebuild-errors Rebuild any boards that errored + -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: ./) + BUILD_NBUILDS number of parallel targets (default: 1) + + 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:lmMCnr" +LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers,mails,check,continue,rebuild-errors" + +# 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='' +ONLY_LIST='' +PRINT_MAINTS='' +MAINTAINERS_ONLY='' +CONTINUE='' +REBUILD_ERRORS='' + +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\" || \$3 ~ /$2:/)" + else + opt_c="(\$3 == \"$2\" || \$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 ;; + -C|--check) + CHECK='C=1' + shift ;; + -n|--continue) + CONTINUE='y' + shift ;; + -r|--rebuild-errors) + REBUILD_ERRORS='y' + shift ;; + -l|--list) + ONLY_LIST='y' + shift ;; + -m|--maintainers) + ONLY_LIST='y' + PRINT_MAINTS='y' + MAINTAINERS_ONLY='y' + shift ;; + -M|--mails) + ONLY_LIST='y' + PRINT_MAINTS='y' + shift ;; + -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 @@ -27,466 +193,125 @@ else LOG_DIR="LOG" fi -if [ ! "${BUILD_DIR}" ] ; then - BUILD_DIR="." +: ${BUILD_NBUILDS:=1} +BUILD_MANY=0 + +if [ "${BUILD_NBUILDS}" -gt 1 ] ; then + BUILD_MANY=1 + : ${BUILD_DIR:=./build} + mkdir -p "${BUILD_DIR}/ERR" + find "${BUILD_DIR}/ERR/" -type f -exec rm -f {} + fi -[ -d ${LOG_DIR} ] || mkdir ${LOG_DIR} || exit 1 +: ${BUILD_DIR:=.} + +OUTPUT_PREFIX="${BUILD_DIR}" + +[ -d ${LOG_DIR} ] || mkdir "${LOG_DIR}" || exit 1 +if [ "$CONTINUE" != 'y' -a "$REBUILD_ERRORS" != 'y' ] ; then + find "${LOG_DIR}/" -type f -exec rm -f {} + +fi LIST="" # Keep track of the number of builds and errors ERR_CNT=0 ERR_LIST="" +WRN_CNT=0 +WRN_LIST="" TOTAL_CNT=0 +SKIP_CNT=0 +CURRENT_CNT=0 +OLDEST_IDX=1 RC=0 +# Helper funcs for parsing boards.cfg +boards_by_field() +{ + FS="[ \t]+" + [ -n "$3" ] && FS="$3" + awk \ + -v field="$1" \ + -v select="$2" \ + -F "$FS" \ + '($1 !~ /^#/ && $field == select) { print $1 }' \ + boards.cfg +} +boards_by_arch() { boards_by_field 2 "$@" ; } +boards_by_cpu() { boards_by_field 3 "$@" "[: \t]+" ; } +boards_by_soc() { boards_by_field 6 "$@" ; } + ######################################################################### ## MPC5xx Systems ######################################################################### -LIST_5xx=" \ - cmi_mpc5xx \ -" +LIST_5xx="$(boards_by_cpu mpc5xx)" ######################################################################### ## MPC5xxx Systems ######################################################################### -LIST_5xxx=" \ - BC3450 \ - cm5200 \ - cpci5200 \ - digsy_mtc \ - EVAL5200 \ - fo300 \ - galaxy5200 \ - icecube_5200 \ - inka4x0 \ - ipek01 \ - lite5200b \ - mcc200 \ - mecp5200 \ - motionpro \ - munices \ - MVBC_P \ - MVSMR \ - o2dnt \ - pcm030 \ - pf5200 \ - PM520 \ - TB5200 \ - Total5200 \ - Total5200_Rev2 \ - TQM5200 \ - TQM5200_B \ - TQM5200S \ - v38b \ -" +LIST_5xxx="$(boards_by_cpu mpc5xxx)" ######################################################################### ## MPC512x Systems ######################################################################### -LIST_512x=" \ - aria \ - mecp5123 \ - mpc5121ads \ - pdm360ng \ -" +LIST_512x="$(boards_by_cpu mpc512x)" ######################################################################### ## MPC8xx Systems ######################################################################### -LIST_8xx=" \ - Adder87x \ - AdderII \ - ADS860 \ - AMX860 \ - c2mon \ - CCM \ - cogent_mpc8xx \ - ELPT860 \ - EP88x \ - ESTEEM192E \ - ETX094 \ - FADS823 \ - FADS850SAR \ - FADS860T \ - FLAGADM \ - FPS850L \ - GEN860T \ - GEN860T_SC \ - GENIETV \ - hermes \ - IAD210 \ - ICU862_100MHz \ - IP860 \ - IVML24 \ - IVML24_128 \ - IVML24_256 \ - IVMS8 \ - IVMS8_128 \ - IVMS8_256 \ - KUP4K \ - KUP4X \ - LANTEC \ - lwmon \ - kmsupx4 \ - MBX \ - MBX860T \ - mgsuvd \ - MHPC \ - MPC86xADS \ - MPC885ADS \ - NETPHONE \ - NETTA \ - NETTA2 \ - NETTA_ISDN \ - NETVIA \ - NETVIA_V2 \ - NX823 \ - pcu_e \ - QS823 \ - QS850 \ - QS860T \ - quantum \ - R360MPI \ - RBC823 \ - rmu \ - RPXClassic \ - RPXlite \ - RPXlite_DW \ - RRvision \ - SM850 \ - spc1920 \ - SPD823TS \ - svm_sc8xx \ - SXNI855T \ - TK885D \ - TOP860 \ - TQM823L \ - TQM823L_LCD \ - TQM850L \ - TQM855L \ - TQM860L \ - TQM885D \ - uc100 \ - v37 \ -" + +LIST_8xx="$(boards_by_cpu mpc8xx)" ######################################################################### ## PPC4xx Systems ######################################################################### -LIST_4xx=" \ - acadia \ - acadia_nand \ - ADCIOP \ - alpr \ - AP1000 \ - APC405 \ - AR405 \ - arches \ - ASH405 \ - bamboo \ - bamboo_nand \ - bubinga \ - CANBT \ - canyonlands \ - canyonlands_nand \ - CMS700 \ - CPCI2DP \ - CPCI405 \ - CPCI4052 \ - CPCI405AB \ - CPCI405DT \ - CPCIISER4 \ - CRAYL1 \ - csb272 \ - csb472 \ - DASA_SIM \ - devconcenter \ - dlvision \ - DP405 \ - DU405 \ - DU440 \ - ebony \ - ERIC \ - fx12mm \ - G2000 \ - gdppc440etx \ - glacier \ - haleakala \ - haleakala_nand \ - hcu4 \ - hcu5 \ - HH405 \ - HUB405 \ - icon \ - intip \ - JSE \ - KAREF \ - katmai \ - kilauea \ - kilauea_nand \ - korat \ - luan \ - lwmon5 \ - makalu \ - mcu25 \ - METROBOX \ - MIP405 \ - MIP405T \ - ML2 \ - ml507 \ - ml507_flash \ - neo \ - ocotea \ - OCRTC \ - ORSG \ - p3p440 \ - PCI405 \ - pcs440ep \ - PIP405 \ - PLU405 \ - PMC405 \ - PMC405DE \ - PMC440 \ - PPChameleonEVB \ - quad100hd \ - rainier \ - redwood \ - sbc405 \ - sc3 \ - sequoia \ - sequoia_nand \ - t3corp \ - taihu \ - taishan \ - v5fx30teval \ - v5fx30teval_flash \ - VOH405 \ - VOM405 \ - W7OLMC \ - W7OLMG \ - walnut \ - WUH405 \ - xilinx-ppc440-generic \ - xilinx-ppc440-generic_flash \ - XPEDITE1000 \ - yellowstone \ - yosemite \ - yucca \ - zeus \ -" +LIST_4xx="$(boards_by_cpu ppc4xx)" ######################################################################### ## MPC8220 Systems ######################################################################### -LIST_8220=" \ - Alaska8220 \ - Yukon8220 \ -" +LIST_8220="$(boards_by_cpu mpc8220)" ######################################################################### ## MPC824x Systems ######################################################################### -LIST_824x=" \ - A3000 \ - barco \ - BMW \ - CPC45 \ - CU824 \ - debris \ - eXalion \ - HIDDEN_DRAGON \ - IDS8247 \ - linkstation_HGLAN \ - MOUSSE \ - MUSENKI \ - MVBLUE \ - OXC \ - PN62 \ - Sandpoint8240 \ - Sandpoint8245 \ - sbc8240 \ - utx8245 \ -" +LIST_824x="$(boards_by_cpu mpc824x)" ######################################################################### ## MPC8260 Systems (includes 8250, 8255 etc.) ######################################################################### -LIST_8260=" \ - atc \ - cogent_mpc8260 \ - CPU86 \ - CPU87 \ - ep8248 \ - ep8260 \ - ep82xxm \ - gw8260 \ - hymod \ - IPHASE4539 \ - ISPAN \ - mgcoge \ - MPC8260ADS \ - MPC8266ADS \ - MPC8272ADS \ - PM826 \ - PM828 \ - ppmc8260 \ - Rattler8248 \ - RPXsuper \ - rsdproto \ - sacsng \ - sbc8260 \ - SCM \ - TQM8260_AC \ - TQM8260_AD \ - TQM8260_AE \ - TQM8272 \ - ZPC1900 \ -" +LIST_8260="$(boards_by_cpu mpc8260)" ######################################################################### ## MPC83xx Systems (includes 8349, etc.) ######################################################################### -LIST_83xx=" \ - caddy2 \ - kmeter1 \ - MPC8308RDB \ - MPC8313ERDB_33 \ - MPC8313ERDB_NAND_66 \ - MPC8315ERDB \ - MPC8315ERDB_NAND \ - MPC8323ERDB \ - MPC832XEMDS \ - MPC832XEMDS_ATM \ - MPC8349EMDS \ - MPC8349ITX \ - MPC8349ITXGP \ - MPC8360EMDS \ - MPC8360EMDS_ATM \ - MPC8360ERDK_33 \ - MPC8360ERDK_66 \ - MPC837XEMDS \ - MPC837XERDB \ - MVBLM7 \ - sbc8349 \ - SIMPC8313_LP \ - TQM834x \ - ve8313 \ - vme8349 \ -" - +LIST_83xx="$(boards_by_cpu mpc83xx)" ######################################################################### ## MPC85xx Systems (includes 8540, 8560 etc.) ######################################################################### -LIST_85xx=" \ - ATUM8548 \ - MPC8536DS \ - MPC8536DS_NAND \ - MPC8536DS_SDCARD \ - MPC8536DS_SPIFLASH \ - MPC8536DS_36BIT \ - MPC8540ADS \ - MPC8540EVAL \ - MPC8541CDS \ - MPC8544DS \ - MPC8548CDS \ - MPC8555CDS \ - MPC8560ADS \ - MPC8568MDS \ - MPC8569MDS \ - MPC8569MDS_ATM \ - MPC8569MDS_NAND \ - MPC8572DS \ - MPC8572DS_36BIT \ - P1022DS \ - P2020DS \ - P2020DS_36BIT \ - P1011RDB \ - P1011RDB_NAND \ - P1011RDB_SDCARD \ - P1011RDB_SPIFLASH \ - P1020RDB \ - P1020RDB_NAND \ - P1020RDB_SDCARD \ - P1020RDB_SPIFLASH \ - P2010RDB \ - P2010RDB_NAND \ - P2010RDB_SDCARD \ - P2010RDB_SPIFLASH \ - P2020RDB \ - P2020RDB_NAND \ - P2020RDB_SDCARD \ - P2020RDB_SPIFLASH \ - P4080DS \ - PM854 \ - PM856 \ - sbc8540 \ - sbc8548 \ - sbc8548_PCI_33 \ - sbc8548_PCI_66 \ - sbc8548_PCI_33_PCIE \ - sbc8548_PCI_66_PCIE \ - sbc8560 \ - socrates \ - stxgp3 \ - stxssa \ - TQM8540 \ - TQM8541 \ - TQM8548 \ - TQM8548_AG \ - TQM8548_BE \ - TQM8555 \ - TQM8560 \ - XPEDITE5200 \ - XPEDITE5370 \ -" +LIST_85xx="$(boards_by_cpu mpc85xx)" ######################################################################### ## MPC86xx Systems ######################################################################### -LIST_86xx=" \ - MPC8610HPCD \ - MPC8641HPCN_36BIT \ - MPC8641HPCN \ - sbc8641d \ - XPEDITE5170 \ -" +LIST_86xx="$(boards_by_cpu mpc86xx)" ######################################################################### ## 74xx/7xx Systems ######################################################################### -LIST_74xx=" \ - DB64360 \ - DB64460 \ - EVB64260 \ - mpc7448hpc2 \ - P3G4 \ - p3m7448 \ - PCIPPC2 \ - PCIPPC6 \ - ZUMA \ -" - -LIST_7xx=" \ - BAB7xx \ - CPCI750 \ - ELPPC \ - p3m750 \ - ppmc7xx \ -" +LIST_74xx_7xx="$(boards_by_cpu 74xx_7xx)" ######################################################################### ## PowerPC groups @@ -510,8 +335,7 @@ LIST_powerpc=" \ ${LIST_85xx} \ ${LIST_86xx} \ ${LIST_4xx} \ - ${LIST_74xx} \ - ${LIST_7xx} \ + ${LIST_74xx_7xx}\ " # Alias "ppc" -> "powerpc" to not break compatibility with older scripts @@ -524,236 +348,62 @@ LIST_ppc=" \ ## StrongARM Systems ######################################################################### -LIST_SA=" \ - assabet \ - dnp1110 \ - gcplus \ - lart \ - shannon \ -" +LIST_SA="$(boards_by_cpu sa1100)" ######################################################################### ## ARM7 Systems ######################################################################### -LIST_ARM7=" \ - ap7 \ - ap720t \ - armadillo \ - B2 \ - ep7312 \ - evb4510 \ - impa7 \ - integratorap \ - lpc2292sodimm \ - modnet50 \ - SMN42 \ -" +LIST_ARM7="$(boards_by_cpu arm720t)" ######################################################################### ## ARM9 Systems ######################################################################### -LIST_ARM9=" \ - a320evb \ - ap920t \ - ap922_XA10 \ - ap926ejs \ - ap946es \ - ap966 \ - cp920t \ - cp922_XA10 \ - cp926ejs \ - cp946es \ - cp966 \ - da830evm \ - da850evm \ - edb9301 \ - edb9302 \ - edb9302a \ - edb9307 \ - edb9307a \ - edb9312 \ - edb9315 \ - edb9315a \ - edminiv2 \ - guruplug \ - imx27lite \ - jadecpu \ - lpd7a400 \ - magnesium \ - mv88f6281gtw_ge \ - mx1ads \ - mx1fs2 \ - netstar \ - nhk8815 \ - nhk8815_onenand \ - omap1510inn \ - omap1610h2 \ - omap1610inn \ - omap5912osk \ - omap730p2 \ - openrd_base \ - rd6281a \ - sbc2410x \ - scb9328 \ - sheevaplug \ - smdk2400 \ - smdk2410 \ - spear300 \ - spear310 \ - spear320 \ - spear600 \ - suen3 \ - trab \ - 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 \ +LIST_ARM9="$(boards_by_cpu arm920t) \ + $(boards_by_cpu arm926ejs) \ + $(boards_by_cpu arm925t) \ + $(boards_by_cpu arm946es) \ " ######################################################################### ## ARM11 Systems ######################################################################### -LIST_ARM11=" \ - cp1136 \ - omap2420h4 \ - apollon \ - imx31_litekit \ - imx31_phycore \ - imx31_phycore_eet \ - mx31ads \ - mx31pdk \ - mx31pdk_nand \ - qong \ - smdk6400 \ - tnetv107x_evm \ +LIST_ARM11="$(boards_by_cpu arm1136) \ + $(boards_by_cpu arm1176) \ " ######################################################################### ## ARMV7 Systems ######################################################################### -LIST_ARMV7=" \ - am3517_evm \ - devkit8000 \ - mx51evk \ - omap3_beagle \ - omap3_overo \ - omap3_evm \ - omap3_pandora \ - omap3_sdp3430 \ - omap3_zoom1 \ - omap3_zoom2 \ - omap4_panda \ - omap4_sdp4430 \ - s5p_goni \ - smdkc100 \ -" + +LIST_ARMV7="$(boards_by_cpu armv7)" ######################################################################### ## AT91 Systems ######################################################################### -LIST_at91=" \ - afeb9260 \ - at91cap9adk \ - at91rm9200dk \ - at91rm9200ek \ - at91sam9260ek \ - at91sam9261ek \ - at91sam9263ek \ - at91sam9g10ek \ - at91sam9g20ek \ - at91sam9m10g45ek \ - at91sam9rlek \ - cmc_pu2 \ - CPUAT91 \ - CPU9260 \ - CPU9G20 \ - csb637 \ - eb_cpux9k2 \ - kb9202 \ - meesc \ - mp2usb \ - m501sk \ - otc570 \ - pm9261 \ - pm9263 \ - pm9g45 \ - SBC35_A9G20 \ - TNY_A9260 \ - TNY_A9G20 \ -" +LIST_at91="$(boards_by_soc at91)" ######################################################################### ## Xscale Systems ######################################################################### -LIST_pxa=" \ - cerf250 \ - colibri_pxa270 \ - cradle \ - csb226 \ - delta \ - innokom \ - lubbock \ - pleb2 \ - polaris \ - pxa255_idp \ - trizepsiv \ - vpac270_nor \ - vpac270_onenand \ - wepep250 \ - xaeniax \ - xm250 \ - xsengine \ - zipitz2 \ - zylonite \ -" +LIST_pxa="$(boards_by_cpu pxa)" -LIST_ixp=" \ - actux1 \ - actux2 \ - actux3 \ - actux4 \ - ixdp425 \ - ixdpg425 \ - pdnb3 \ - scpu \ -" +LIST_ixp="$(boards_by_cpu ixp)" + +######################################################################### +## SPEAr Systems +######################################################################### + +LIST_spear="$(boards_by_soc spear)" ######################################################################### ## ARM groups ######################################################################### -LIST_arm=" \ - ${LIST_SA} \ - ${LIST_ARM7} \ - ${LIST_ARM9} \ - ${LIST_ARM10} \ - ${LIST_ARM11} \ - ${LIST_ARMV7} \ - ${LIST_at91} \ - ${LIST_pxa} \ - ${LIST_ixp} \ -" +LIST_arm="$(boards_by_arch arm)" ######################################################################### ## MIPS Systems (default = big endian) @@ -761,6 +411,9 @@ LIST_arm=" \ LIST_mips4kc=" \ incaip \ + incaip_100MHz \ + incaip_133MHz \ + incaip_150MHz \ qemu_mips \ vct_platinum \ vct_platinum_small \ @@ -776,17 +429,11 @@ LIST_mips4kc=" \ vct_premium_onenand_small \ " -LIST_mips5kc=" \ - purple \ -" - LIST_au1xx0=" \ dbau1000 \ dbau1100 \ dbau1500 \ dbau1550 \ - dbau1550_el \ - gth2 \ " LIST_mips=" \ @@ -799,238 +446,400 @@ LIST_mips=" \ ## MIPS Systems (little endian) ######################################################################### -LIST_mips4kc_el="" - -LIST_mips5kc_el="" +LIST_xburst_el=" \ + qi_lb60 \ +" LIST_au1xx0_el=" \ dbau1550_el \ pb1000 \ " - LIST_mips_el=" \ - ${LIST_mips4kc_el} \ - ${LIST_mips5kc_el} \ + ${LIST_xburst_el} \ ${LIST_au1xx0_el} \ " - ######################################################################### -## i386 Systems +## OpenRISC Systems ######################################################################### -LIST_I486=" \ - sc520_cdp \ - sc520_eNET \ - sc520_spunk \ - sc520_spunk_rel \ -" +LIST_openrisc="$(boards_by_arch openrisc)" -LIST_x86=" \ - ${LIST_I486} \ -" +######################################################################### +## x86 Systems +######################################################################### + +LIST_x86="$(boards_by_arch x86)" ######################################################################### ## Nios-II Systems ######################################################################### -LIST_nios2=" \ - PCI5441 \ - PK1C20 \ - nios2-generic \ -" +LIST_nios2="$(boards_by_arch nios2)" ######################################################################### ## MicroBlaze Systems ######################################################################### -LIST_microblaze=" \ - microblaze-generic \ -" +LIST_microblaze="$(boards_by_arch microblaze)" ######################################################################### ## ColdFire Systems ######################################################################### -LIST_coldfire=" \ - astro_mcf5373l \ - cobra5272 \ - EB+MCF-EV123 \ - EB+MCF-EV123_internal \ - idmr \ - M5208EVBE \ - M52277EVB \ - M5235EVB \ - M5249EVB \ - M5253DEMO \ - M5253EVBE \ - M5271EVB \ - M5272C3 \ - M5275EVB \ - M5282EVB \ - M53017EVB \ - M5329AFEE \ - M5373EVB \ - M54451EVB \ - M54455EVB \ - M5475AFE \ - M5485AFE \ - TASREG \ -" +LIST_m68k="$(boards_by_arch m68k)" +LIST_coldfire=${LIST_m68k} ######################################################################### ## AVR32 Systems ######################################################################### -LIST_avr32=" \ - atstk1002 \ - atstk1003 \ - atstk1004 \ - atstk1006 \ - atngw100 \ - favr-32-ezkit \ - hammerhead \ - mimc200 \ -" +LIST_avr32="$(boards_by_arch avr32)" ######################################################################### ## Blackfin Systems ######################################################################### -LIST_blackfin=" \ - bf518f-ezbrd \ - bf526-ezbrd \ - bf527-ad7160-eval \ - bf527-ezkit \ - bf527-ezkit-v2 \ - bf533-ezkit \ - bf533-stamp \ - bf537-minotaur \ - bf537-pnav \ - bf537-srv1 \ - bf537-stamp \ - bf538f-ezkit \ - bf548-ezkit \ - bf561-acvilon \ - bf561-ezkit \ - blackstamp \ - cm-bf527 \ - cm-bf533 \ - cm-bf537e \ - cm-bf537u \ - cm-bf548 \ - cm-bf561 \ - ibf-dsp561 \ - ip04 \ - tcm-bf518 \ - tcm-bf537 \ -" +LIST_blackfin="$(boards_by_arch blackfin)" ######################################################################### ## SH Systems ######################################################################### -LIST_sh2=" \ - rsk7203 \ -" -LIST_sh3=" \ - mpr2 \ - ms7720se \ -" - -LIST_sh4=" \ - ms7750se \ - ms7722se \ - MigoR \ - r7780mp \ - r2dplus \ - sh7763rdp \ - sh7785lcr \ - ap325rxa \ - espt \ -" +LIST_sh2="$(boards_by_cpu sh2)" +LIST_sh3="$(boards_by_cpu sh3)" +LIST_sh4="$(boards_by_cpu sh4)" -LIST_sh=" \ - ${LIST_sh2} \ - ${LIST_sh3} \ - ${LIST_sh4} \ -" +LIST_sh="$(boards_by_arch sh)" ######################################################################### ## SPARC Systems ######################################################################### -LIST_sparc="gr_xc3s_1500 gr_cpci_ax2000 gr_ep2s60 grsim grsim_leon2" +LIST_sparc="$(boards_by_arch sparc)" -#----------------------------------------------------------------------- +######################################################################### +## NDS32 Systems +######################################################################### -#----- for now, just run PowerPC by default ----- -[ $# = 0 ] && set $LIST_powerpc +LIST_nds32="$(boards_by_arch nds32)" #----------------------------------------------------------------------- +get_target_location() { + local target=$1 + local BOARD_NAME="" + local CONFIG_NAME="" + local board="" + local vendor="" + + # Automatic mode + local line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg` + + if [ -z "${line}" ] ; then echo "" ; return ; fi + + set ${line} + + # add default board name if needed + [ $# = 3 ] && set ${line} ${1} + + CONFIG_NAME="${1%_config}" + + [ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}" + + if [ "$4" = "-" ] ; then + board=${BOARD_NAME} + else + board="$4" + fi + + [ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5" + [ $# -gt 6 ] && [ "$7" != "-" ] && { + tmp="${7%:*}" + if [ "$tmp" ] ; then + CONFIG_NAME="$tmp" + fi + } + + # Assign board directory to BOARDIR variable + if [ -z "${vendor}" ] ; then + BOARDDIR=${board} + else + BOARDDIR=${vendor}/${board} + fi + + echo "${CONFIG_NAME}:${BOARDDIR}" +} + +get_target_maintainers() { + local name=`echo $1 | cut -d : -f 1` + + if ! grep -qsi "[[:blank:]]${name}[[:blank:]]" MAINTAINERS ; then + echo "" + return ; + fi + + local line=`tac MAINTAINERS | grep -ni "[[:blank:]]${name}[[:blank:]]" | cut -d : -f 1` + local mail=`tac MAINTAINERS | tail -n +${line} | \ + sed -n ":start /.*@.*/ { b mail } ; n ; b start ; :mail /.*@.*/ { p ; n ; b mail } ; q" | \ + sed "s/^.*.*$//"` + echo "$mail" +} + +list_target() { + if [ "$PRINT_MAINTS" != 'y' ] ; then + echo "$1" + return + fi + + echo -n "$1:" + + local loc=`get_target_location $1` + + if [ -z "${loc}" ] ; then echo "ERROR" ; return ; fi + + local maintainers_result=`get_target_maintainers ${loc} | tr " " "\n"` + + if [ "$MAINTAINERS_ONLY" != 'y' ] ; then + + local dir=`echo ${loc} | cut -d ":" -f 2` + local cfg=`echo ${loc} | cut -d ":" -f 1` + local git_result=`git log --format=%aE board/${dir} \ + include/configs/${cfg}.h | grep "@"` + local git_result_recent=`echo ${git_result} | tr " " "\n" | \ + head -n 3` + local git_result_top=`echo ${git_result} | tr " " "\n" | \ + sort | uniq -c | sort -nr | head -n 3 | \ + sed "s/^ \+[0-9]\+ \+//"` + + echo -e "$git_result_recent\n$git_result_top\n$maintainers_result" | \ + sort -u | tr "\n" " " | sed "s/ $//" ; + else + echo -e "$maintainers_result" | sort -u | tr "\n" " " | \ + sed "s/ $//" ; + fi + + echo "" +} + +# Each finished build will have a file called ${donep}${n}, +# where n is the index of the build. Each build +# we've already noted as finished will have ${skipp}${n}. +# The code managing the build process will use this information +# to ensure that only BUILD_NBUILDS builds are in flight at once +donep="${LOG_DIR}/._done_" +skipp="${LOG_DIR}/._skip_" + +build_target_killed() { + echo "Aborted $target build." + # Remove the logs for this board since it was aborted + rm -f ${LOG_DIR}/$target.MAKELOG ${LOG_DIR}/$target.ERR + exit +} + build_target() { target=$1 + build_idx=$2 + + if [ "$ONLY_LIST" == 'y' ] ; then + list_target ${target} + return + fi + + if [ $BUILD_MANY == 1 ] ; then + output_dir="${OUTPUT_PREFIX}/${target}" + mkdir -p "${output_dir}" + trap build_target_killed TERM + else + output_dir="${OUTPUT_PREFIX}" + fi + + export BUILD_DIR="${output_dir}" ${MAKE} distclean >/dev/null - ${MAKE} ${target}_config + ${MAKE} -s ${target}_config - ${MAKE} ${JOBS} all 2>&1 >${LOG_DIR}/$target.MAKELOG \ - | tee ${LOG_DIR}/$target.ERR + ${MAKE} ${JOBS} ${CHECK} all \ + >${LOG_DIR}/$target.MAKELOG 2> ${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" + if [ $BUILD_MANY == 1 ] ; then + trap - TERM + + ${MAKE} -s tidy + + if [ -s ${LOG_DIR}/${target}.ERR ] ; then + cp ${LOG_DIR}/${target}.ERR ${OUTPUT_PREFIX}/ERR/${target} + else + rm ${LOG_DIR}/${target}.ERR + fi else - rm ${LOG_DIR}/$target.ERR + if [ -s ${LOG_DIR}/${target}.ERR ] ; then + if grep -iw error ${LOG_DIR}/${target}.ERR ; then + : $(( ERR_CNT += 1 )) + ERR_LIST="${ERR_LIST} $target" + else + : $(( WRN_CNT += 1 )) + WRN_LIST="${WRN_LIST} $target" + fi + else + rm ${LOG_DIR}/${target}.ERR + fi + fi + + OBJS=${output_dir}/u-boot + if [ -e ${output_dir}/spl/u-boot-spl ]; then + OBJS="${OBJS} ${output_dir}/spl/u-boot-spl" fi - TOTAL_CNT=$((TOTAL_CNT + 1)) + ${CROSS_COMPILE}size ${OBJS} | tee -a ${LOG_DIR}/$target.MAKELOG + + [ -e "${LOG_DIR}/${target}.ERR" ] && cat "${LOG_DIR}/${target}.ERR" + + touch "${donep}${build_idx}" +} + +manage_builds() { + search_idx=${OLDEST_IDX} + if [ "$ONLY_LIST" == 'y' ] ; then return ; fi + + while true; do + if [ -e "${donep}${search_idx}" ] ; then + : $(( CURRENT_CNT-- )) + [ ${OLDEST_IDX} -eq ${search_idx} ] && + : $(( OLDEST_IDX++ )) + + # Only want to count it once + rm -f "${donep}${search_idx}" + touch "${skipp}${search_idx}" + elif [ -e "${skipp}${search_idx}" ] ; then + [ ${OLDEST_IDX} -eq ${search_idx} ] && + : $(( OLDEST_IDX++ )) + fi + : $(( search_idx++ )) + if [ ${search_idx} -gt ${TOTAL_CNT} ] ; then + if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then + search_idx=${OLDEST_IDX} + sleep 1 + else + break + fi + fi + done +} - ${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 + : $((TOTAL_CNT += 1)) + : $((CURRENT_CNT += 1)) + rm -f "${donep}${TOTAL_CNT}" + rm -f "${skipp}${TOTAL_CNT}" + if [ "$CONTINUE" = 'y' -a -e ${LOG_DIR}/$t.MAKELOG ] ; then + : $((SKIP_CNT += 1)) + touch "${donep}${TOTAL_CNT}" + elif [ "$REBUILD_ERRORS" = 'y' -a ! -e ${LOG_DIR}/$t.ERR ] ; then + : $((SKIP_CNT += 1)) + touch "${donep}${TOTAL_CNT}" + else + if [ $BUILD_MANY == 1 ] ; then + build_target ${t} ${TOTAL_CNT} & + else + CUR_TGT="${t}" + build_target ${t} ${TOTAL_CNT} + CUR_TGT='' + fi + fi + fi + + # We maintain a running count of all the builds we have done. + # Each finished build will have a file called ${donep}${n}, + # where n is the index of the build. Each build + # we've already noted as finished will have ${skipp}${n}. + # We track the current index via TOTAL_CNT, and the oldest + # index. When we exceed the maximum number of parallel builds, + # We look from oldest to current for builds that have completed, + # and update the current count and oldest index as appropriate. + # If we've gone through the entire list, wait a second, and + # reprocess the entire list until we find a build that has + # completed + if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then + manage_builds + fi + done } #----------------------------------------------------------------------- +kill_children() { + local pgid=`ps -p $$ --no-headers -o "%r" | tr -d ' '` + local children=`pgrep -g $pgid | grep -v $$ | grep -v $pgid` + + kill $children 2> /dev/null + wait $children 2> /dev/null + + exit +} + print_stats() { + if [ "$ONLY_LIST" == 'y' ] ; then return ; fi + + # Only count boards that completed + : $((TOTAL_CNT = `find ${skipp}* 2> /dev/null | wc -l`)) + + rm -f ${donep}* ${skipp}* + + if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then + ERR_LIST=`grep -riwl error ${OUTPUT_PREFIX}/ERR/` + ERR_LIST=`for f in $ERR_LIST ; do echo -n " $(basename $f)" ; done` + ERR_CNT=`echo $ERR_LIST | wc -w | awk '{print $1}'` + WRN_LIST=`grep -riwL error ${OUTPUT_PREFIX}/ERR/` + WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done` + WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'` + else + # Remove the logs for any board that was interrupted + rm -f ${LOG_DIR}/${CUR_TGT}.MAKELOG ${LOG_DIR}/${CUR_TGT}.ERR + fi + + : $((TOTAL_CNT -= ${SKIP_CNT})) echo "" echo "--------------------- SUMMARY ----------------------------" + if [ "$CONTINUE" = 'y' -o "$REBUILD_ERRORS" = 'y' ] ; then + echo "Boards skipped: ${SKIP_CNT}" + fi echo "Boards compiled: ${TOTAL_CNT}" if [ ${ERR_CNT} -gt 0 ] ; then - echo "Boards with warnings or errors: ${ERR_CNT} (${ERR_LIST} )" + echo "Boards with errors: ${ERR_CNT} (${ERR_LIST} )" + fi + if [ ${WRN_CNT} -gt 0 ] ; then + echo "Boards with warnings but no errors: ${WRN_CNT} (${WRN_LIST} )" fi echo "----------------------------------------------------------" + if [ $BUILD_MANY == 1 ] ; then + kill_children + fi + exit $RC } #----------------------------------------------------------------------- -for arg in $@ -do - case "$arg" in - arm|SA|ARM7|ARM9|ARM10|ARM11|ARMV7|at91|ixp|pxa \ - |avr32 \ - |blackfin \ - |coldfire \ - |microblaze \ - |mips|mips_el \ - |nios2 \ - |ppc|powerpc|5xx|5xxx|512x|8xx|8220|824x|8260|83xx|85xx|86xx|4xx|7xx|74xx|TSEC \ - |sh|sh2|sh3|sh4 \ - |sparc \ - |x86|I486 \ - ) - for target in `eval echo '$LIST_'${arg}` - do - build_target ${target} - done - ;; - *) build_target ${arg} - ;; - esac -done + +# Build target groups selected by options, plus any command line args +set -- ${SELECTED} "$@" +# run PowerPC by default +[ $# = 0 ] && set -- powerpc +build_targets "$@" +wait