From patchwork Thu Jul 28 02:33:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 653540 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3s0GDc5Rz5z9sdm for ; Thu, 28 Jul 2016 12:35:28 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b=FDPD1Qlc; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 3CDCCA773D; Thu, 28 Jul 2016 04:34:35 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ts3OI-wqGH1V; Thu, 28 Jul 2016 04:34:35 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 46D0EB3834; Thu, 28 Jul 2016 04:33:54 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 45E02A756D for ; Thu, 28 Jul 2016 04:33:31 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id uaTTjZvrGbsy for ; Thu, 28 Jul 2016 04:33:31 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-io0-f170.google.com (mail-io0-f170.google.com [209.85.223.170]) by theia.denx.de (Postfix) with ESMTPS id 921E9A76B6 for ; Thu, 28 Jul 2016 04:33:24 +0200 (CEST) Received: by mail-io0-f170.google.com with SMTP id q83so87958441iod.1 for ; Wed, 27 Jul 2016 19:33:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=g80bpb8B0VcLbdB4BLLYCLtWzb2lGvfUUXNnmDoh4q4=; b=FDPD1QlcgutHb4AlZE1kfehNtvuGJg+2vt64vQ9SObUlgHHuwF+WmJFWuMGgmOF9/Q PYP3kaKyB8GRSP3J8uNCSudRLYI3QdWaFstH52X/o5iI1GLSx1lhrDwNkM+QTEtZEOk1 NH1zOWfWscI9dPdnSXM64EPhe9tryQh4xori34Dpupq4h5Yr+r7M0sPsggRXAV50M9Ey RZRJXOmJs4k5D1KP22V6tqjZXTC7dy6ChcGrfhR1KQvC97t6y3S67DwWzK/LWj3z1Q++ tx76dbePIBQo1m3lya3DbDi8ONE6LPqCNMGObuW2O7oRlwKEhou+LU8oZQ+9VBqfD2fS r+XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=g80bpb8B0VcLbdB4BLLYCLtWzb2lGvfUUXNnmDoh4q4=; b=d4VyGEQN2SzxeWCCZhn2F3aKJ/G7nSoZ8hfVXs9ZStB6Qhvp53Kb/DKCPUoX+6ARCB Xl8HJ2+RdSDaDD9F+F++IS6r5cYBzTguc7l5wqy7mjyCril+AS258+Oul9ZxMRq1pkCA bDBBdi9QqK9v1Hi1FILFy2E1Xop0xVfYkUpRIN6PHSMsuochwGW5yInR9EiPmB5KTD0W qvjQyc/SNwMgIPmwfC+fPeH7iCcDKpEcBDqCH98PXLMKQlAPIdAma6Bmi7GCIs3sZiwY 0WKKEzS95leiNVvlmXe+gE2IXCL9Q2cMyUDpotFdWsiBuBL8OscZv8Ja904PDTl+LLce wfNQ== X-Gm-Message-State: AEkooutetZQRorzUZqEZtoV9H6QQ6QV6QXSnTXXiMi20Y7Mjks5TlOf0mGUGJMsTAISU4RHk X-Received: by 10.107.151.143 with SMTP id z137mr34561977iod.191.1469673202720; Wed, 27 Jul 2016 19:33:22 -0700 (PDT) Received: from kaki.bld.corp.google.com ([100.100.202.55]) by smtp.gmail.com with ESMTPSA id d71sm4091614ioj.33.2016.07.27.19.33.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Jul 2016 19:33:19 -0700 (PDT) Received: by kaki.bld.corp.google.com (Postfix, from userid 121222) id 01FBD2240B8; Wed, 27 Jul 2016 20:33:17 -0600 (MDT) From: Simon Glass To: U-Boot Mailing List Date: Wed, 27 Jul 2016 20:33:07 -0600 Message-Id: <1469673188-15834-11-git-send-email-sjg@chromium.org> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <1469673188-15834-1-git-send-email-sjg@chromium.org> References: <1469673188-15834-1-git-send-email-sjg@chromium.org> Cc: Tom Rini , Stephen Warren Subject: [U-Boot] [PATCH v2 10/11] Drop the MAKEALL tool X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Buildman has been around for 3 years now. It has had a lot of use and testing. Perhaps it is time to remove MAKEALL. Signed-off-by: Simon Glass Reviewed-by: Tom Rini --- Changes in v2: None MAKEALL | 850 ---------------------------------------------------------------- 1 file changed, 850 deletions(-) delete mode 100755 MAKEALL diff --git a/MAKEALL b/MAKEALL deleted file mode 100755 index 7e42f10..0000000 --- a/MAKEALL +++ /dev/null @@ -1,850 +0,0 @@ -#!/bin/bash -# 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() -{ - # 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 - -b BOARD, --board BOARD Build all boards with board name BOARD - -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: "") - 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) - - 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} -} - -deprecation() { - echo "** Note: MAKEALL is deprecated - please use buildman instead" - echo "** See tools/buildman/README for details" - echo -} - -deprecation - -SHORT_OPTS="ha:c:v:s:b:lmMCnr" -LONG_OPTS="help,arch:,cpu:,vendor:,soc:,board:,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%)} || \$4 == \"$2\" || \$4 ~ /$2/)" - else - opt_s="(\$4 == \"$2\" || \$4 ~ /$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 ;; - -b|--board) - # echo "Option BOARD: argument \`$2'" - if [ "$opt_b" ] ; then - opt_b="${opt_b%)} || \$6 == \"$2\" || \$7 == \"$2\")" - else - # We need to check the 7th field too - # for boards whose 6th field is "-" - opt_b="(\$6 == \"$2\" || \$7 == \"$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 - -GNU_MAKE=$(scripts/show-gnu-make) || { - echo "GNU Make not found" >&2 - exit 1 -} - -# echo "Remaining arguments:" -# for arg do echo '--> '"\`$arg'" ; done - -tools/genboardscfg.py || { - echo "Failed to generate boards.cfg" >&2 - exit 1 -} - -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" -[ "$opt_b" ] && FILTER="${FILTER} && $opt_b" - -if [ "$SELECTED" ] ; then - SELECTED=$(awk '('"$FILTER"') { print $7 }' 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 [ "${MAKEALL_LOGDIR}" ] ; then - LOG_DIR=${MAKEALL_LOGDIR} -else - LOG_DIR="LOG" -fi - -: ${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 - -: ${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 -targets_by_field() -{ - field=$1 - regexp=$2 - - awk '($1 !~ /^#/ && $'"$field"' ~ /^'"$regexp"'$/) { print $7 }' \ - boards.cfg -} - -targets_by_arch() { targets_by_field 2 "$@" ; } -targets_by_cpu() { targets_by_field 3 "$@" ; targets_by_field 3 "$@:.*" ; } -targets_by_soc() { targets_by_field 4 "$@" ; } - -######################################################################### -## MPC5xx Systems -######################################################################### - -LIST_5xx="$(targets_by_cpu mpc5xx)" - -######################################################################### -## MPC5xxx Systems -######################################################################### - -LIST_5xxx="$(targets_by_cpu mpc5xxx)" - -######################################################################### -## MPC512x Systems -######################################################################### - -LIST_512x="$(targets_by_cpu mpc512x)" - -######################################################################### -## MPC8xx Systems -######################################################################### - -LIST_8xx="$(targets_by_cpu mpc8xx)" - -######################################################################### -## PPC4xx Systems -######################################################################### - -LIST_4xx="$(targets_by_cpu ppc4xx)" - -######################################################################### -## MPC8260 Systems (includes 8250, 8255 etc.) -######################################################################### - -LIST_8260="$(targets_by_cpu mpc8260)" - -######################################################################### -## MPC83xx Systems (includes 8349, etc.) -######################################################################### - -LIST_83xx="$(targets_by_cpu mpc83xx)" - -######################################################################### -## MPC85xx Systems (includes 8540, 8560 etc.) -######################################################################### - -LIST_85xx="$(targets_by_cpu mpc85xx)" - -######################################################################### -## MPC86xx Systems -######################################################################### - -LIST_86xx="$(targets_by_cpu mpc86xx)" - -######################################################################### -## PowerPC groups -######################################################################### - -LIST_TSEC=" \ - ${LIST_83xx} \ - ${LIST_85xx} \ - ${LIST_86xx} \ -" - -LIST_powerpc=" \ - ${LIST_5xx} \ - ${LIST_512x} \ - ${LIST_5xxx} \ - ${LIST_8xx} \ - ${LIST_824x} \ - ${LIST_8260} \ - ${LIST_83xx} \ - ${LIST_85xx} \ - ${LIST_86xx} \ - ${LIST_4xx} \ -" - -# Alias "ppc" -> "powerpc" to not break compatibility with older scripts -# still using "ppc" instead of "powerpc" -LIST_ppc=" \ - ${LIST_powerpc} \ -" - -######################################################################### -## StrongARM Systems -######################################################################### - -LIST_SA="$(targets_by_cpu sa1100)" - -######################################################################### -## ARM7 Systems -######################################################################### - -LIST_ARM7="$(targets_by_cpu arm720t)" - -######################################################################### -## ARM9 Systems -######################################################################### - -LIST_ARM9="$(targets_by_cpu arm920t) \ - $(targets_by_cpu arm926ejs) \ - $(targets_by_cpu arm946es) \ -" - -######################################################################### -## ARM11 Systems -######################################################################### -LIST_ARM11="$(targets_by_cpu arm1136) \ - $(targets_by_cpu arm1176) \ -" - -######################################################################### -## ARMV7 Systems -######################################################################### - -LIST_ARMV7="$(targets_by_cpu armv7)" - -######################################################################### -## ARMV8 Systems -######################################################################### - -LIST_ARMV8="$(targets_by_cpu armv8)" - -######################################################################### -## AT91 Systems -######################################################################### - -LIST_at91="$(targets_by_soc at91)" - -######################################################################### -## Xscale Systems -######################################################################### - -LIST_pxa="$(targets_by_cpu pxa)" - -######################################################################### -## SPEAr Systems -######################################################################### - -LIST_spear="$(targets_by_soc spear)" - -######################################################################### -## ARM groups -######################################################################### - -LIST_arm="$(targets_by_arch arm | \ - for ARMV8_TARGET in $LIST_ARMV8; \ - do sed "/$ARMV8_TARGET/d"; \ - done) \ -" - -######################################################################### -## MIPS Systems (default = big endian) -######################################################################### - -LIST_mips="$(targets_by_arch mips)" - -######################################################################### -## OpenRISC Systems -######################################################################### - -LIST_openrisc="$(targets_by_arch openrisc)" - -######################################################################### -## x86 Systems -######################################################################### - -LIST_x86="$(targets_by_arch x86)" - -######################################################################### -## Nios-II Systems -######################################################################### - -LIST_nios2="$(targets_by_arch nios2)" - -######################################################################### -## MicroBlaze Systems -######################################################################### - -LIST_microblaze="$(targets_by_arch microblaze)" - -######################################################################### -## ColdFire Systems -######################################################################### - -LIST_m68k="$(targets_by_arch m68k)" -LIST_coldfire=${LIST_m68k} - -######################################################################### -## AVR32 Systems -######################################################################### - -LIST_avr32="$(targets_by_arch avr32)" - -######################################################################### -## Blackfin Systems -######################################################################### - -LIST_blackfin="$(targets_by_arch blackfin)" - -######################################################################### -## SH Systems -######################################################################### - -LIST_sh2="$(targets_by_cpu sh2)" -LIST_sh3="$(targets_by_cpu sh3)" -LIST_sh4="$(targets_by_cpu sh4)" - -LIST_sh="$(targets_by_arch sh)" - -######################################################################### -## SPARC Systems -######################################################################### - -LIST_sparc="$(targets_by_arch sparc)" - -######################################################################### -## NDS32 Systems -######################################################################### - -LIST_nds32="$(targets_by_arch nds32)" - -######################################################################### -## ARC Systems -######################################################################### - -LIST_arc="$(targets_by_arch arc)" - -#----------------------------------------------------------------------- - -get_target_location() { - local target=$1 - local BOARD_NAME="" - local CONFIG_NAME="" - local board="" - local vendor="" - - # Automatic mode - local line=`awk '\$7 == "'"$target"'" { print \$0 }' boards.cfg` - if [ -z "${line}" ] ; then echo "" ; return ; fi - - set ${line} - - CONFIG_NAME="${7%_defconfig}" - - [ "${BOARD_NAME}" ] || BOARD_NAME="${7%_defconfig}" - - if [ $# -gt 5 ]; then - if [ "$6" = "-" ] ; then - board=${BOARD_NAME} - else - board="$6" - fi - fi - - [ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5" - [ $# -gt 6 ] && [ "$8" != "-" ] && { - tmp="${8%:*}" - if [ "$tmp" ] ; then - CONFIG_NAME="$tmp" - fi - } - - # Assign board directory to BOARDIR variable - if [ "${vendor}" == "-" ] ; then - BOARDDIR=${board} - else - BOARDDIR=${vendor}/${board} - fi - - echo "${CONFIG_NAME}:${BOARDDIR}:${BOARD_NAME}" -} - -get_target_maintainers() { - local name=`echo $1 | cut -d : -f 3` - - local line=`awk '\$7 == "'"$target"'" { print \$0 }' boards.cfg` - if [ -z "${line}" ]; then - echo "" - return ; - fi - - local mails=`echo ${line} | cut -d ' ' -f 9- | sed -e 's/[^<]*.*[^>]*$//'` - [ "$mails" == "-" ] && mails="" - echo "$mails" -} - -get_target_arch() { - local target=$1 - - awk '$7 == "'$target'" { print $2 }' boards.cfg -} - -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 - - target_arch=$(get_target_arch ${target}) - eval cross_toolchain=\$CROSS_COMPILE_`echo $target_arch | tr '[:lower:]' '[:upper:]'` - if [ "${cross_toolchain}" ] ; then - MAKE="$GNU_MAKE CROSS_COMPILE=${cross_toolchain}" - elif [ "${CROSS_COMPILE}" ] ; then - MAKE="$GNU_MAKE CROSS_COMPILE=${CROSS_COMPILE}" - else - MAKE=$GNU_MAKE - fi - - if [ "${output_dir}" != "." ] ; then - MAKE="${MAKE} O=${output_dir}" - fi - - ${MAKE} mrproper >/dev/null - - echo "Building ${target} board..." - ${MAKE} -s ${target}_defconfig >/dev/null - - ${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 - - OBJS=${output_dir}/u-boot - if [ -e ${output_dir}/spl/u-boot-spl ]; then - OBJS="${OBJS} ${output_dir}/spl/u-boot-spl" - fi - - ${CROSS_COMPILE}size ${OBJS} | tee -a ${LOG_DIR}/$target.MAKELOG - - if [ $BUILD_MANY == 1 ] ; then - trap - TERM - - ${MAKE} -s clean - - if [ -s ${LOG_DIR}/${target}.ERR ] ; then - cp ${LOG_DIR}/${target}.ERR ${OUTPUT_PREFIX}/ERR/${target} - else - rm ${LOG_DIR}/${target}.ERR - fi - else - 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 - - [ -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 -} - -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 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=`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 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 - - deprecation - - exit $RC -} - -#----------------------------------------------------------------------- - -# Build target groups selected by options, plus any command line args -set -- ${SELECTED} "$@" -# run PowerPC by default -[ $# = 0 ] && set -- powerpc -build_targets "$@" -wait