#!/usr/bin/env bash # This script is an experiment on how to run the LLVM test-suite in Jenkins. # The steps here are based on the scripts currently in: # https://git.linaro.org/toolchain/llvm/linaro-scripts.git set -e set -o pipefail set -u # Syntax SYN_TOOLCHAIN="--toolchain=http://url/for/tarball" SYN_WORKSPACE="--workspace=/full/path/to/workspace" SYNTAX="$0 $SYN_TOOLCHAIN $SYN_WORKSPACE" # Environment Variables and default values CPUS=$(nproc --all) TOOLCHAIN="" WORKSPACE="" # Command line parsing while [ "$#" -gt 0 ]; do ARG=$(echo "$1" | cut -d "=" -f 1) VAL=$(echo "$1" | cut -d "=" -f 2) case "$ARG" in --workspace) if [ -d "$VAL" ]; then WORKSPACE=$VAL else echo "ERROR: Workspace '$VAL' not valid" echo "Syntax: $SYN_WORKSPACE" exit 1 fi shift ;; --toolchain) if [ "$VAL" != "" ]; then file=$(basename "$VAL") dir=$(echo "$file" | sed 's/\.tar.*//g') # Download the toolchain if [ ! -d "$WORKSPACE/$dir" ]; then echo "No dir '$WORKSPACE/$dir'..." if [ ! -f "$WORKSPACE/$file" ]; then echo "No file '$WORKSPACE/$file'..." echo "Downloading from '$VAL'" wget -q "$VAL" -O "$WORKSPACE/$file" fi echo "Unpacking '$WORKSPACE/$file'" tar xf "$WORKSPACE/$file" -C "$WORKSPACE" fi # Clang or GCC? if [ -f "$WORKSPACE/$dir/bin/clang" ]; then export CC="$WORKSPACE/$dir/bin/clang" export CXX="$WORKSPACE/$dir/bin/clang++" elif [ -f "$WORKSPACE/$dir/bin/gcc" ]; then export CC="$WORKSPACE/$dir/bin/gcc" export CXX="$WORKSPACE/$dir/bin/g++" else echo "ERROR: Toolchain '$VAL' has no known compiler in $dir/bin" echo "Syntax: $SYN_TOOLCHAIN" exit 1 fi else echo "ERROR: Toolchain '$VAL' not valid" echo "Syntax: $SYN_TOOLCHAIN",xit 1 fi shift ;; *) echo "ERROR: Invalid argument '$1'" echo "Syntax: $SYNTAX" exit 1 ;; esac done # Dump echo "WORKSPACE = $WORKSPACE" echo "TOOLCHAIN = $TOOLCHAIN" echo "CC = $CC" echo "CXX = $CXX" # Logs LOGBASE="$WORKSPACE/tcwg-llvm" LOGEXT="txt" # Checkout git clone http://llvm.org/git/test-suite.git "$WORKSPACE/test-suite" |& tee "$LOGBASE-clone.$LOGEXT" git clone http://llvm.org/git/lnt.git "$WORKSPACE/lnt" |& tee -a "$LOGBASE-clone.$LOGEXT" # Prepare export LC_ALL=C # This ignores locales, which could cause python problems. python=$(which python2) cd "$WORKSPACE" && virtualenv --python=$python sandbox |& tee "$LOGBASE-setup.$LOGEXT" cd "$WORKSPACE" && "$WORKSPACE/sandbox/bin/python" "$WORKSPACE/lnt/setup.py" develop |& tee "$LOGBASE-setup.$LOGEXT" # Run the test-suite cd "$WORKSPACE" && CC="$CC" CXX="$CXX" "$WORKSPACE/sandbox/bin/python" \ "$WORKSPACE/sandbox/bin/lnt" runtest nt \ "-j$CPUS" \ --no-timestamp \ --sandbox "$WORKSPACE/sandbox" \ --test-suite "$WORKSPACE/test-suite" \ --cc "$CC" --cxx "$CXX" |& tee "$LOGBASE-test.$LOGEXT"