[PATCH v2] MAKEALL: make it generic
Sascha Hauer
s.hauer at pengutronix.de
Mon Sep 27 10:35:08 EDT 2010
On Mon, Sep 27, 2010 at 08:12:34AM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> 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
Would be good to have this example somewhere in the code, maybe as help
text in MAKEALL
Sascha
>
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
> ---
> 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 <ctrl-c> 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_<arch> or CROSS_COMPILE_<target> 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 at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list