From ad27322702a0e31817d1a58aa4b8ceff004a4e56 Mon Sep 17 00:00:00 2001 From: Patrick Georgi Date: Wed, 21 May 2014 23:00:32 +0200 Subject: abuild: allow build results outside the source tree A reasonable configuration that minimizes disk traffic could be $ abuild -o /tmp/abuild-$$ -z Change-Id: Ic91798af7e799a40a77025e09a6078ea6758cdac Signed-off-by: Patrick Georgi Reviewed-on: http://review.coreboot.org/5805 Tested-by: build bot (Jenkins) Reviewed-by: Edward O'Callaghan Reviewed-by: Stefan Reinauer --- util/abuild/abuild | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'util') diff --git a/util/abuild/abuild b/util/abuild/abuild index 6c8c304984..0759a80b01 100755 --- a/util/abuild/abuild +++ b/util/abuild/abuild @@ -277,7 +277,7 @@ function build_target CONFIG=$3 TARCH=$( architecture $VENDOR $MAINBOARD ) - if [ "`cat $TOP/$TARGET/${VENDOR}_${MAINBOARD}/compile.status 2>/dev/null`" = "ok" -a \ + if [ "`cat $TARGET/${VENDOR}_${MAINBOARD}/compile.status 2>/dev/null`" = "ok" -a \ "$buildall" = "false" ]; then printf "Skipping $VENDOR/$MAINBOARD; (already successful)\n" return @@ -286,8 +286,9 @@ function build_target HOSTCC='gcc' printf "Building $VENDOR/$MAINBOARD; " - mkdir -p $TOP/$TARGET/${VENDOR}_${MAINBOARD} $TOP/$TARGET/abuild - XMLFILE=$TOP/$TARGET/abuild/${VENDOR}_${MAINBOARD}.xml + mkdir -p $TARGET/${VENDOR}_${MAINBOARD} $TARGET/abuild + ABSPATH=`cd $TARGET/abuild; pwd` + XMLFILE=$ABSPATH/${VENDOR}_${MAINBOARD}.xml stime=`perl -e 'print time();' 2>/dev/null || date +%s` @@ -398,6 +399,8 @@ function myhelp printf " [-P|--prefix ] file name prefix in CBFS\n" printf " [-B|--blobs] Allow using binary files\n" printf " [-z|--clean] Remove build results when finished\n" + printf " [-o|--outdir ] store build results in path\n" + printf " (defaults to $TARGET)\n" printf " [-L|--clang] Use clang\n" printf " [--scan-build] use clang's static analyzer\n" printf " [cbroot] absolute path to coreboot sources\n" @@ -440,7 +443,7 @@ cmdline="$* -c 1" getoptbrand="`getopt -V`" if [ "${getoptbrand:0:6}" == "getopt" ]; then # Detected GNU getopt that supports long options. - args=`getopt -l version,verbose,help,all,target:,payloads:,test,cpus:,silent,junit,config,loglevel:,remove,prefix:,update,scan-build,ccache,blobs,clang,clean -o Vvhat:p:Tc:sJCl:rP:uyBLz -- "$@"` || exit 1 + args=`getopt -l version,verbose,help,all,target:,payloads:,test,cpus:,silent,junit,config,loglevel:,remove,prefix:,update,scan-build,ccache,blobs,clang,clean,outdir: -o Vvhat:p:Tc:sJCl:rP:uyBLzo: -- "$@"` || exit 1 eval set -- $args else # Detected non-GNU getopt @@ -509,12 +512,20 @@ while true ; do customizing="${customizing}, clean" clean_work=true ;; + -o|--outdir) shift + TARGET=$1; shift + ;; --) shift; break;; -*) printf "Invalid option\n\n"; myhelp; exit 1;; *) break;; esac done +if [ -z "$TARGET" -o "$TARGET" = "/" ]; then + echo "Please specify a valid, non-root build directory." + exit 1 +fi + customizing=`echo $customizing |cut -c3-` if [ "$customizing" = "" ]; then customizing="default configuration" -- cgit v1.2.3