diff options
author | Renato Golin <renato.golin@linaro.org> | 2017-03-31 11:08:38 +0100 |
---|---|---|
committer | Renato Golin <renato.golin@linaro.org> | 2017-03-31 14:29:52 +0100 |
commit | fe1d0073aa293c16b83c154820ed68914ab471b9 (patch) | |
tree | a2ede8bd9f7af56439dc6b767dc27b35033b16c4 /tcwg-llvm-build.sh | |
parent | e1b6e0f887a1e67c53037e9de8d87405f3c03910 (diff) |
tcwg-llvm-build.sh: Large refactor, simplifying the script a lot
* Using "set -exu" to catch a lot of errors
* Forcing ninja, since we really need to control the link jobs
* Removing build/src/install dir settings
* Controlling dirs internally (mkdir -p)
* Explicitly passing the workspace, build ID
Tested locally, multiple steps, no unbound variables,
checkouts, builds and ships.
Change-Id: Ie3445603f442e3fe596324f48478c61719c92f91
Diffstat (limited to 'tcwg-llvm-build.sh')
-rwxr-xr-x | tcwg-llvm-build.sh | 123 |
1 files changed, 44 insertions, 79 deletions
diff --git a/tcwg-llvm-build.sh b/tcwg-llvm-build.sh index f8839f04..bcac6e81 100755 --- a/tcwg-llvm-build.sh +++ b/tcwg-llvm-build.sh @@ -4,24 +4,21 @@ # The steps here are based on the scripts currently in: # https://git.linaro.org/toolchain/llvm/linaro-scripts.git -set -e +set -exu set -o pipefail # Syntax -SYN_BUILD="--build={ninja|make} (def. make)" +SYN_WORKSPACE="--workspace=/path/to/workspace" SYN_BUILDTYPE="--buildtype={Release|Debug} (def. Release)" SYN_ASSERTS="--asserts={True|False} (def. True)" -SYN_SRCDIR="--srcdir=path/to/source" -SYN_BUILDDIR="--builddir=path/to/build" -SYN_INSTDIR="--instdir=path/to/install" SYN_BUILDJOBS="--buildjobs=N (def. CPUS)" SYN_LINKJOBS="--linkjobs=N (def. RAM+1)" SYN_TOOLCHAIN="--toolchain=http://url/for/tarball" -SYNTAX="$0 $SYN_BUILD $SYN_ASSERTS $SYN_RELEASETYPE $SYN_SRCDIR $SYN_BUILDDIR $SYN_INSTDIR $SYN_LINKJOBS $SYN_BUILDJOBS $STN_TOOLCHAIN" +SYN_BUILDID="--buildid=<text-to-add-to-tarball>" +SYNTAX="$0 $SYN_WORKSPACE $SYN_ASSERTS $SYN_LINKJOBS $SYN_BUILDJOBS $SYN_TOOLCHAIN $SYN_BUILDID" # Environment Variables and default values -GEN="Unix Makefiles" -BUILD="make" +WORKSPACE=$(pwd) BUILDTYPE="Release" ASSERTS="True" CPUS=$(nproc --all) @@ -31,6 +28,9 @@ INSTDIR="" BUILDJOBS=$CPUS LINKJOBS=$(free -g | awk '/Mem/ {print $2}') TOOLCHAIN="" +BUILDID="" +CC="" +CXX="" # We don't want more link jobs than CPUs, even if there's plenty of RAM if [ "$LINKJOBS" -ge "$CPUS" ]; then LINKJOBS=$CPUS @@ -44,13 +44,21 @@ while [ "$#" -gt 0 ]; do ARG=$(echo "$1" | cut -d "=" -f 1) VAL=$(echo "$1" | cut -d "=" -f 2) case "$ARG" in - --build) - if [ "$VAL" = "ninja" ]; then - GEN="Ninja" - BUILD="ninja" - elif [ "$VAL" != "make" ]; then + --workspace) + if [ -d "$VAL" ]; then + WORKSPACE="$VAL" + else + echo "ERROR: $1" + echo "Syntax: $SYN_WORKSPACE" + exit 1 + fi + shift ;; + --buildid) + if [ "$VAL" != "" ]; then + BUILDID="$VAL" + else echo "ERROR: $1" - echo "Syntax: $SYN_BUILD" + echo "Syntax: $SYN_BUILDID" exit 1 fi shift ;; @@ -72,31 +80,6 @@ while [ "$#" -gt 0 ]; do exit 1 fi shift ;; - --srcdir) - if [ -d "$VAL" ]; then - SRCDIR="$VAL" - else - echo "ERROR: Source dir '$VAL' doesn't exist" - echo "Syntax: $SYN_SRCDIR" - exit 1 - fi - shift ;; - --builddir) - if [ ! -d "$VAL" ] && ! mkdir -p "$VAL"; then - echo "ERROR: Build dir '$VAL' doesn't exist and can't be created" - echo "Syntax: $SYN_BUILDDIR" - exit 1 - fi - BUILDDIR="$VAL" - shift ;; - --instdir) - if [ ! -d "$VAL" ] && ! mkdir -p "$VAL"; then - echo "ERROR: Install dir '$VAL' doesn't exist and can't be created" - echo "Syntax: $SYN_INSTDIR" - exit 1 - fi - INSTDIR="$VAL" - shift ;; --buildjobs) if [ "$VAL" -gt 0 ]; then BUILDJOBS="$VAL" @@ -144,7 +127,7 @@ while [ "$#" -gt 0 ]; do fi else echo "ERROR: Toolchain '$VAL' not valid" - echo "Syntax: $SYN_LINKJOBS" + echo "Syntax: $SYN_TOOLCHAIN" exit 1 fi shift ;; @@ -157,8 +140,8 @@ while [ "$#" -gt 0 ]; do done # Validate options -if [ "$GEN" = "" ] || [ "$BUILD" = "" ]; then - echo "ERROR: Missing Generator / Builder" +if [ "$WORKSPACE" = "" ] || [ ! -d "$WORKSPACE" ]; then + echo "ERROR: Missing workspace" echo "$SYNTAX" exit 1 fi @@ -167,36 +150,18 @@ if [ "$BUILDTYPE" = "" ] || [ "$ASSERTS" = "" ]; then echo "$SYNTAX" exit 1 fi -if [ "$BUILDDIR" = "" ] && [ "$SRCDIR" != "" ]; then - BUILDDIR="$SRCDIR/../build" - if [ ! -d "BUILDDIR" ] && ! mkdir -p "$BUILDDIR"; then - echo "ERROR: Forced build dir '$BUILDDIR' can't be created" - echo "Syntax: $SYN_BUILDDIR" - exit 1 - fi -fi -if [ "$INSTDIR" = "" ] && [ "$BUILDDIR" != "" ]; then - INSTDIR="$BUILDDIR/../install" - if [ ! -d "INSTDIR" ] && ! mkdir -p "$INSTDIR"; then - echo "ERROR: Forced install dir '$INSTDIR' can't be created" - echo "Syntax: $SYN_INSTDIR" - exit 1 - fi -fi -if [ "$SRCDIR" = "" ] || [ "$BUILDDIR" = "" ] || [ "$INSTDIR" = "" ]; then - echo "ERROR: Missing source / build / install directories" - echo "$SYNTAX" - exit 1 -fi if [ "$LINKJOBS" = "" ] || [ "$BUILDJOBS" = "" ]; then echo "ERROR: Missing number of build / link jobs" echo "$SYNTAX" exit 1 fi +# Dirs +SRCDIR="$WORKSPACE/llvm" +BUILDDIR="$WORKSPACE/build" +INSTDIR="$WORKSPACE/install" + # Dump -echo "GEN = $GEN" -echo "BUILD = $BUILD" echo "BUILDTYPE = $BUILDTYPE" echo "ASSERTS = $ASSERTS" echo "SRCDIR = $SRCDIR" @@ -209,7 +174,7 @@ echo "CC = $CC" echo "CXX = $CXX" # Logs -LOGBASE="$SRCDIR/../tcwg-llvm" +LOGBASE="$WORKSPACE/tcwg-llvm" LOGEXT="txt" # Checkout @@ -222,27 +187,27 @@ OPTIONS+="-DCMAKE_BUILD_TYPE='$BUILDTYPE' " OPTIONS+="-DLLVM_ENABLE_ASSERTIONS='$ASSERTS' " OPTIONS+="-DLLVM_PARALLEL_COMPILE_JOBS='$BUILDJOBS' " OPTIONS+="-DLLVM_PARALLEL_LINK_JOBS='$LINKJOBS' " -cd "$BUILDDIR" && cmake -G "$GEN" "$SRCDIR" $OPTIONS -DLLVM_LIT_ARGS="-sv -j$CPUS" |& tee "$LOGBASE-cmake.$LOGEXT" +OPTIONS+="-DCMAKE_INSTALL_PREFIX='$INSTDIR' " +mkdir -p "$BUILDDIR" +cd "$BUILDDIR" && cmake -G Ninja "$SRCDIR" $OPTIONS -DLLVM_LIT_ARGS="-sv -j$CPUS" |& tee "$LOGBASE-cmake.$LOGEXT" # Build + check -cd "$BUILDDIR" && $BUILD "-j$CPUS" |& tee "$LOGBASE-build.$LOGEXT" -cd "$BUILDDIR" && $BUILD "-j$CPUS" check-all |& tee "$LOGBASE-check.$LOGEXT" +cd "$BUILDDIR" && ninja "-j$CPUS" |& tee "$LOGBASE-build.$LOGEXT" +cd "$BUILDDIR" && ninja "-j$CPUS" check-all |& tee "$LOGBASE-check.$LOGEXT" # Install -DESTDIR="" -if [ "$BUILD" = "make" ]; then - DESTDIR="DESTDIR=$INSTDIR" -fi -cd "$BUILDDIR" && $BUILD "-j$CPUS" "$DESTDIR" install |& tee "$LOGBASE-install.$LOGEXT" +mkdir -p "$INSTDIR" +cd "$BUILDDIR" && ninja "-j$CPUS" install |& tee "$LOGBASE-install.$LOGEXT" # Pack & Ship VERSION=$("$BUILDDIR/bin/clang" --version | awk '/clang version/ { print $3 }') TARGET=$("$BUILDDIR/bin/clang" --version | awk '/Target:/ { print $2 }') -TARBALL=clang+llvm-$VERSION-ci$BUILD_ID-$TARGET -PUSHDIR=public_html/builds/binaries/$TARBALL +PKGNAME=clang+llvm-$VERSION-ci$BUILDID-$TARGET +PKGDIR="$WORKSPACE/$PKGNAME" +PUSHDIR=public_html/builds/binaries/$PKGNAME FILESERVER=dev-01.tcwglab -cd "$INSTDIR" && ln -s usr/local "$TARBALL" -cd "$INSTDIR" && tar hcf "$TARBALL.tar.xz" "$TARBALL" +cd "$WORKSPACE" && [ ! -d "$PKGDIR" ] && mv "$INSTDIR" "$PKGDIR" +cd "$WORKSPACE" && tar cf "$PKGNAME.tar.xz" "$PKGNAME" ssh $FILESERVER mkdir -p $PUSHDIR -cd "$INSTDIR" && scp "$TARBALL.tar.xz" $FILESERVER:"$PUSHDIR" +cd "$INSTDIR" && scp "$PKGNAME.tar.xz" $FILESERVER:"$PUSHDIR" |