X-Git-Url: https://git.kernelconcepts.de/?p=karo-tx-uboot.git;a=blobdiff_plain;f=MAKEALL;h=bed99dea054b93932530d67ff0520259e3c39c44;hp=e6c801cbb88457ec58de8e8f60d20ab392966fe4;hb=ab62e387cafb5e99819e24715dbc6496f5516e5a;hpb=e0f6a4e8b17afead8add6e528936a505367c091c diff --git a/MAKEALL b/MAKEALL index e6c801cbb8..bed99dea05 100755 --- a/MAKEALL +++ b/MAKEALL @@ -2,6 +2,8 @@ # Tool mainly for U-Boot Quality Assurance: build one or more board # configurations with minimal verbosity, showing only warnings and # errors. +# +# SPDX-License-Identifier: GPL-2.0+ usage() { @@ -19,6 +21,9 @@ usage() -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 @@ -32,6 +37,9 @@ usage() Environment variables: BUILD_NCPUS number of parallel make jobs (default: auto) CROSS_COMPILE cross-compiler toolchain prefix (default: "") + CROSS_COMPILE_ cross-compiler toolchain prefix for + architecture "ARCH". Substitute "ARCH" for any + supported architecture (default: "") MAKEALL_LOGDIR output all logs to here (default: ./LOG/) BUILD_DIR output build directory (default: ./) BUILD_NBUILDS number of parallel targets (default: 1) @@ -51,8 +59,8 @@ usage() exit ${ret} } -SHORT_OPTS="ha:c:v:s:lmM" -LONG_OPTS="help,arch:,cpu:,vendor:,soc:,list,maintainers,mails" +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 @@ -72,6 +80,8 @@ SELECTED='' ONLY_LIST='' PRINT_MAINTS='' MAINTAINERS_ONLY='' +CONTINUE='' +REBUILD_ERRORS='' while true ; do case "$1" in @@ -87,18 +97,18 @@ while true ; do -c|--cpu) # echo "Option CPU: argument \`$2'" if [ "$opt_c" ] ; then - opt_c="${opt_c%)} || \$3 == \"$2\")" + opt_c="${opt_c%)} || \$3 == \"$2\" || \$3 ~ /$2:/)" else - opt_c="(\$3 == \"$2\")" + 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\")" + opt_s="${opt_s%)} || \$6 == \"$2\" || \$6 ~ /$2/)" else - opt_s="(\$6 == \"$2\")" + opt_s="(\$6 == \"$2\" || \$6 ~ /$2/)" fi SELECTED='y' shift 2 ;; @@ -111,6 +121,15 @@ while true ; do 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 ;; @@ -166,13 +185,6 @@ 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 @@ -194,14 +206,19 @@ fi OUTPUT_PREFIX="${BUILD_DIR}" [ -d ${LOG_DIR} ] || mkdir "${LOG_DIR}" || exit 1 -find "${LOG_DIR}/" -type f -exec rm -f {} + +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 @@ -209,14 +226,17 @@ 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 "$@" ; } +boards_by_cpu() { boards_by_field 3 "$@" "[: \t]+" ; } boards_by_soc() { boards_by_field 6 "$@" ; } ######################################################################### @@ -249,12 +269,6 @@ LIST_8xx="$(boards_by_cpu mpc8xx)" LIST_4xx="$(boards_by_cpu ppc4xx)" -######################################################################### -## MPC8220 Systems -######################################################################### - -LIST_8220="$(boards_by_cpu mpc8220)" - ######################################################################### ## MPC824x Systems ######################################################################### @@ -306,7 +320,6 @@ LIST_powerpc=" \ ${LIST_512x} \ ${LIST_5xxx} \ ${LIST_8xx} \ - ${LIST_8220} \ ${LIST_824x} \ ${LIST_8260} \ ${LIST_83xx} \ @@ -328,6 +341,12 @@ LIST_ppc=" \ LIST_SA="$(boards_by_cpu sa1100)" +######################################################################### +## ARM7 Systems +######################################################################### + +LIST_ARM7="$(boards_by_cpu arm720t)" + ######################################################################### ## ARM9 Systems ######################################################################### @@ -335,16 +354,14 @@ LIST_SA="$(boards_by_cpu sa1100)" LIST_ARM9="$(boards_by_cpu arm920t) \ $(boards_by_cpu arm926ejs) \ $(boards_by_cpu arm925t) \ + $(boards_by_cpu arm946es) \ " ######################################################################### ## ARM11 Systems ######################################################################### LIST_ARM11="$(boards_by_cpu arm1136) \ - imx31_phycore \ - imx31_phycore_eet \ - mx31pdk \ - smdk6400 \ + $(boards_by_cpu arm1176) \ " ######################################################################### @@ -365,25 +382,19 @@ LIST_at91="$(boards_by_soc at91)" LIST_pxa="$(boards_by_cpu pxa)" -LIST_ixp="$(boards_by_cpu ixp) - pdnb3 \ - scpu \ -" +LIST_ixp="$(boards_by_cpu ixp)" + +######################################################################### +## SPEAr Systems +######################################################################### + +LIST_spear="$(boards_by_soc spear)" ######################################################################### ## ARM groups ######################################################################### -LIST_arm=" \ - ${LIST_SA} \ - ${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) @@ -391,6 +402,9 @@ LIST_arm=" \ LIST_mips4kc=" \ incaip \ + incaip_100MHz \ + incaip_133MHz \ + incaip_150MHz \ qemu_mips \ vct_platinum \ vct_platinum_small \ @@ -411,7 +425,6 @@ LIST_au1xx0=" \ dbau1100 \ dbau1500 \ dbau1550 \ - gth2 \ " LIST_mips=" \ @@ -424,16 +437,11 @@ LIST_mips=" \ ## MIPS Systems (little endian) ######################################################################### -LIST_xburst_el=" \ - qi_lb60 \ -" - LIST_au1xx0_el=" \ dbau1550_el \ pb1000 \ " LIST_mips_el=" \ - ${LIST_xburst_el} \ ${LIST_au1xx0_el} \ " ######################################################################### @@ -464,14 +472,7 @@ LIST_microblaze="$(boards_by_arch microblaze)" ## ColdFire Systems ######################################################################### -LIST_m68k="$(boards_by_arch m68k) - EB+MCF-EV123 \ - EB+MCF-EV123_internal \ - M52277EVB \ - M5235EVB \ - M54451EVB \ - M54455EVB \ -" +LIST_m68k="$(boards_by_arch m68k)" LIST_coldfire=${LIST_m68k} ######################################################################### @@ -570,6 +571,18 @@ get_target_maintainers() { echo "$mail" } +get_target_arch() { + local target=$1 + + # Automatic mode + local line=`egrep -i "^[[:space:]]*${target}[[:space:]]" boards.cfg` + + if [ -z "${line}" ] ; then echo "" ; return ; fi + + set ${line} + echo "$2" +} + list_target() { if [ "$PRINT_MAINTS" != 'y' ] ; then echo "$1" @@ -614,28 +627,46 @@ list_target() { 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}" - if [ "$ONLY_LIST" == 'y' ] ; then - list_target ${target} - return + target_arch=$(get_target_arch ${target}) + eval cross_toolchain=\$CROSS_COMPILE_`echo $target_arch | tr '[:lower:]' '[:upper:]'` + if [ "${cross_toolchain}" ] ; then + MAKE="make CROSS_COMPILE=${cross_toolchain}" + elif [ "${CROSS_COMPILE}" ] ; then + MAKE="make CROSS_COMPILE=${CROSS_COMPILE}" + else + MAKE=make fi ${MAKE} distclean >/dev/null ${MAKE} -s ${target}_config - ${MAKE} ${JOBS} all \ + ${MAKE} ${JOBS} ${CHECK} all \ >${LOG_DIR}/$target.MAKELOG 2> ${LOG_DIR}/$target.ERR # Check for 'make' errors @@ -644,17 +675,24 @@ build_target() { fi if [ $BUILD_MANY == 1 ] ; then - ${MAKE} tidy + trap - TERM + + ${MAKE} -s tidy if [ -s ${LOG_DIR}/${target}.ERR ] ; then - touch ${OUTPUT_PREFIX}/ERR/${target} + cp ${LOG_DIR}/${target}.ERR ${OUTPUT_PREFIX}/ERR/${target} else rm ${LOG_DIR}/${target}.ERR fi else if [ -s ${LOG_DIR}/${target}.ERR ] ; then - : $(( ERR_CNT += 1 )) - ERR_LIST="${ERR_LIST} $target" + 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 @@ -669,16 +707,15 @@ build_target() { [ -e "${LOG_DIR}/${target}.ERR" ] && cat "${LOG_DIR}/${target}.ERR" - #echo "Writing ${donep}${build_idx}" touch "${donep}${build_idx}" } manage_builds() { search_idx=${OLDEST_IDX} - #echo "Searching ${OLDEST_IDX} to ${TOTAL_CNT}" + if [ "$ONLY_LIST" == 'y' ] ; then return ; fi + while true; do if [ -e "${donep}${search_idx}" ] ; then - # echo "Found ${donep}${search_idx}" : $(( CURRENT_CNT-- )) [ ${OLDEST_IDX} -eq ${search_idx} ] && : $(( OLDEST_IDX++ )) @@ -690,10 +727,8 @@ manage_builds() { [ ${OLDEST_IDX} -eq ${search_idx} ] && : $(( OLDEST_IDX++ )) fi - #echo "Checking search ${search_idx} vs ${TOTAL_CNT}" : $(( search_idx++ )) if [ ${search_idx} -gt ${TOTAL_CNT} ] ; then - #echo "Checking current ${CURRENT_CNT} vs ${BUILD_NBUILDS}" if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then search_idx=${OLDEST_IDX} sleep 1 @@ -720,7 +755,21 @@ build_targets() { : $((CURRENT_CNT += 1)) rm -f "${donep}${TOTAL_CNT}" rm -f "${skipp}${TOTAL_CNT}" - build_target ${t} ${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. @@ -742,26 +791,67 @@ build_targets() { #----------------------------------------------------------------------- +kill_children() { + local OS=$(uname -s) + local children="" + case "${OS}" in + "Darwin") + # Mac OS X is known to have BSD style ps + local pgid=$(ps -p $$ -o pgid | sed -e "/PGID/d") + children=$(ps -g $pgid -o pid | sed -e "/PID\|$$\|$pgid/d") + ;; + *) + # everything else tries the GNU style + local pgid=$(ps -p $$ --no-headers -o "%r" | tr -d ' ') + children=$(pgrep -g $pgid | sed -e "/$$\|$pgid/d") + ;; + esac + + 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=$(ls ${OUTPUT_PREFIX}/ERR/) - ERR_CNT=`ls -1 ${OUTPUT_PREFIX}/ERR/ | wc | awk '{print $1}'` + 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 - ERR_CNT=0 + # 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 }