From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from 63.mail-out.ovh.net ([91.121.185.56]) by bombadil.infradead.org with smtp (Exim 4.72 #1 (Red Hat Linux)) id 1P06yW-0007zC-Ot for barebox@lists.infradead.org; Mon, 27 Sep 2010 06:14:10 +0000 From: Jean-Christophe PLAGNIOL-VILLARD Date: Mon, 27 Sep 2010 08:12:34 +0200 Message-Id: <1285567954-1394-1-git-send-email-plagnioj@jcrosoft.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: barebox-bounces@lists.infradead.org Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH v2] MAKEALL: make it generic To: barebox@lists.infradead.org add MAKEALL.cfg example it's allow you to compile specific defconfig or ARCH or all as CROSS_COMPILE=arm-linux- ARCH=arm ./MAKEALL at91sam9263ek_defconfig CROSS_COMPILE=arm-linux- ARCH=arm ./MAKEALL or via config CONFIG=./MAKEALL.cfg ARCH=arm ./MAKEALL at91sam9263ek_defconfig CONFIG=./MAKEALL.cfg ARCH=arm ./MAKEALL and for all CONFIG=./MAKEALL.cfg ./MAKEALL you can specify JOBS jobs BUILDDIR build dir LOGDIR log dir Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD --- v2: remove example but not use ${LOGDIR:=log} as it not sh add total compile time Best Regards, J. MAKEALL | 214 +++++++++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 154 insertions(+), 60 deletions(-) diff --git a/MAKEALL b/MAKEALL index dd0f66b..739163a 100755 --- a/MAKEALL +++ b/MAKEALL @@ -1,89 +1,183 @@ -#!/bin/bash +#!/bin/sh -check_pipe_status() { - for i in "${PIPESTATUS[@]}"; do - [ $i -gt 0 ] && return 1 - done - return 0 -} +# Print statistics when we exit +trap exit 1 2 3 15 +trap print_stats 0 +# Keep track of the number of builds and errors +nb_errors=0 +errors_list="" +nb_defconfigs=0 +ret=0 -HERE=$(pwd) -AUTOBUILD_DIR=${HERE}/autobuild -REPORT=${AUTOBUILD_DIR}/REPORT +here=$(pwd) -if [ -d "${AUTOBUILD_DIR}" ]; then - echo "warning: ${AUTOBUILD_DIR} exists, press to exit or wait for 3 seconds" - sleep 3 - rm -fr ${AUTOBUILD_DIR} -fi +time_start=$(date +%s) -mkdir -p ${AUTOBUILD_DIR} +#----------------------------------------------------------------------- -BOARDS="${BOARDS} sandbox" -sandbox_ARCH=sandbox -sandbox_CROSS_COMPILE= +print_stats() { + echo "" + echo "--------------------- SUMMARY ----------------------------" + echo "defconfigs compiled: ${nb_defconfigs}" + time_stop=$(date +%s) + time_diff=$((${time_stop} - ${time_start})) + printf "compiled in %4is\n" ${time_diff} + if [ ${nb_errors} -gt 0 ] ; then + echo "defcongids with warnings or errors: ${nb_errors} (${errors_list} )" + fi + echo "----------------------------------------------------------" + + exit ${ret} +} -BOARDS="${BOARDS} ipe337" -ipe337_ARCH=blackfin -ipe337_CROSS_COMPILE=bfin-elf- +if [ ! "${JOBS}" ] ; then + #linux, BSD, MacOS + nb_cpu=`getconf _NPROCESSORS_ONLN` + + if [ $? -gt 0 ] + then + nb_cpu=1 + fi -BOARDS="${BOARDS} netx_nxdb500" -netx_nxdb500_ARCH=arm -netx_nxdb500_CROSS_COMPILE=arm-v4t-linux-gnueabi- + JOBS=$((${nb_cpu} * 2)) +fi -BOARDS="${BOARDS} pcm030" -pcm030_ARCH=ppc -pcm030_CROSS_COMPILE=powerpc-603e-linux-gnu- +if [ ! "${LOGDIR}" ] +then + LOGDIR="log" +fi -BOARDS="${BOARDS} pcm037" -pcm037_ARCH=arm -pcm037_CROSS_COMPILE=arm-1136jfs-linux-gnueabi- +if [ ! "${BUILDDIR}" ] +then + BUILDDIR="makeall_builddir" +fi -BOARDS="${BOARDS} pcm038" -pcm038_ARCH=arm -pcm038_CROSS_COMPILE=arm-v4t-linux-gnueabi- +[ -d "${LOGDIR}" ] || mkdir ${LOGDIR} || exit 1 -for board in ${BOARDS}; do +if [ ! "${CONFIG}" ] && [ ! "${CROSS_COMPILE}" ] +then + echo "You need to specify a CONFIG or a CROSS_COMPILE" + exit 1 +fi - time_start=$(date +%s) - arch=${board}_ARCH - cross_compile=${board}_CROSS_COMPILE - mkdir -p ${AUTOBUILD_DIR}/${board} - printf "%-20s defconfig: " ${board} | tee -a ${REPORT} +if [ "${CONFIG}" ] +then + source "${CONFIG}" +fi - make -C ${HERE} \ - O=${AUTOBUILD_DIR}/${board} \ - ARCH=${!arch} \ - ${board}_defconfig \ - > ${AUTOBUILD_DIR}/${board}.log 2>&1 +check_pipe_status() { + for i in "${PIPESTATUS[@]}" + do + [ $i -gt 0 ] && return 1 + done + return 0 +} +do_build_target() { + local arch=$1 + local target=$2 + local target_time_start=$(date +%s) + local log_report="${LOGDIR}/${target}/report.log" + local log_err="${LOGDIR}/${target}/errors.log" + + rm -rf "${BUILDDIR}" + mkdir -p "${BUILDDIR}" + mkdir -p "${LOGDIR}/${target}" + printf "Building ${arch} ${target} \n" >&2 | tee -a "${log_report}" + + cross_compile=`eval echo '$CROSS_COMPILE_'${target}` + if [ ! "${cross_compile}" ] + then + cross_compile=`eval echo '$CROSS_COMPILE_'${arch}` + if [ ! "${cross_compile}" ] + then + cross_compile=${CROSS_COMPILE} + fi + fi + + MAKE="make -C ${here} CROSS_COMPILE=${cross_compile} ARCH=${arch} O=${BUILDDIR}" + ${MAKE} -j${JOBS} ${target} 2>&1 > "${log_report}" | tee "${log_err}" + + printf "Configure: " | tee -a "${log_report}" check_pipe_status if [ "$?" = "0" ]; then + printf "OK \n" | tee -a "${log_report}" - printf "OK " | tee -a ${REPORT} - printf "compile: " ${board} | tee -a ${REPORT} + ${MAKE} -j${JOBS} -s 2>&1 >> "${log_report}" | tee -a "${log_err}" - make -C ${HERE} \ - O=${AUTOBUILD_DIR}/${board} \ - ARCH=${!arch} \ - CROSS_COMPILE=${!cross_compile} \ - > ${AUTOBUILD_DIR}/${board}.log 2>&1 + printf "Compile: " ${target} | tee -a "${log_report}" check_pipe_status if [ "$?" = "0" ]; then - printf "OK " | tee -a ${REPORT} + printf "OK \n" | tee -a "${log_report}" + ${cross_compile}size ${BUILDDIR}/barebox | tee -a "${log_report}" else - printf "FAILED " | tee -a ${REPORT} + printf "FAILED \n" | tee -a "${log_report}" + ret=1 fi + else + printf "FAILED \n" | tee -a "${log_report}" + printf "Compile: ------ \n" | tee -a "${log_report}" + ret=1 + fi + if [ -s "${log_err}" ] ; then + nb_errors=$((nb_errors + 1)) + errors_list="${errors_list} ${target}" else - printf "FAILED " | tee -a ${REPORT} - printf "compile: ------ " | tee -a ${REPORT} + rm "${log_err}" fi - time_stop=$(date +%s) - time_diff=$(($time_stop - $time_start)) - printf "%4is\n" $time_diff | tee -a ${REPORT} -done + nb_defconfigs=$((nb_defconfigs + 1)) + + target_time_stop=$(date +%s) + target_time_diff=$((${target_time_stop} - ${target_time_start})) + printf "Compiled in %4is\n" ${target_time_diff} | tee -a "${log_report}" +} + +do_build() { + local arch=$1 + + for i in arch/${arch}/configs/*_defconfig + do + local target=$(basename $i) + + do_build_target ${arch} ${target} + done +} +do_build_all() { + local build_target=0 + + for i in arch/* + do + local arch=$(basename $i) + + if [ -d $i ] + then + do_build ${arch} + build_target=$((build_target + 1)) + fi + done + + return $build_target +} + +if [ ! "${ARCH}" ] || [ ! -d arch/${ARCH} ] +then + do_build_all + if [ $? -eq 0 ] + then + echo "You need to specify the ARCH or CROSS_COMPILE_ or CROSS_COMPILE_ in your config file" + exit 1 + fi + exit 0 +fi + +if [ $# -eq 0 ] +then + do_build ${ARCH} +else + do_build_target ${ARCH} $1 +fi -- 1.7.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox