summaryrefslogtreecommitdiff
path: root/tcwg-llvm-build.sh
diff options
context:
space:
mode:
authorRenato Golin <renato.golin@linaro.org>2017-03-31 11:08:38 +0100
committerRenato Golin <renato.golin@linaro.org>2017-03-31 14:29:52 +0100
commitfe1d0073aa293c16b83c154820ed68914ab471b9 (patch)
treea2ede8bd9f7af56439dc6b767dc27b35033b16c4 /tcwg-llvm-build.sh
parente1b6e0f887a1e67c53037e9de8d87405f3c03910 (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-xtcwg-llvm-build.sh123
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"