From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
To: barebox@lists.infradead.org
Subject: [PATCH v2] MAKEALL: make it generic
Date: Mon, 27 Sep 2010 08:12:34 +0200 [thread overview]
Message-ID: <1285567954-1394-1-git-send-email-plagnioj@jcrosoft.com> (raw)
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 <plagnioj@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@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next reply other threads:[~2010-09-27 6:14 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-27 6:12 Jean-Christophe PLAGNIOL-VILLARD [this message]
2010-09-27 14:35 ` Sascha Hauer
2010-09-27 16:02 ` Jean-Christophe PLAGNIOL-VILLARD
2010-09-29 7:29 ` Sascha Hauer
2010-09-29 10:31 ` Jean-Christophe PLAGNIOL-VILLARD
2010-09-29 13:33 ` Sascha Hauer
2010-10-01 3:19 ` [PATCH v3] " Jean-Christophe PLAGNIOL-VILLARD
2010-10-01 7:16 ` Sascha Hauer
2010-10-01 16:48 ` Jean-Christophe PLAGNIOL-VILLARD
2010-10-01 16:48 ` [PATCH v4] " Jean-Christophe PLAGNIOL-VILLARD
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1285567954-1394-1-git-send-email-plagnioj@jcrosoft.com \
--to=plagnioj@jcrosoft.com \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox