summaryrefslogtreecommitdiff
path: root/tcwg-llvm-testsuite.sh
blob: 1a94715a49d34d9f3d6653b9948f93f21d5b6ec1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/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"