summaryrefslogtreecommitdiff
path: root/TestRelease.job
blob: c5ec5be2dd5c76a30bf0616043e64d524bed2b3c (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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/bash

user_workspace="$PWD"
tcwg_regression_rev=master

OPTS="`getopt -o w:t:h -l tarball:,workspace:,help,tcwg-regression-rev:`"
while test $# -gt 0; do
    case $1 in
	-w|--workspace) user_workspace=$2; shift ;;
	-t|--tarball) tarball_url=$2; shift ;;
	--tcwg-regression-rev) tcwg_regression_rev=$2; shift ;;
	--) break ;;
    esac
    shift
done

testdir=${user_workspace}/_test

# Create a test directory
if test ! -d ${testdir}; then
    mkdir -p ${testdir}
fi

. jenkins-helper.sh

url_basename=$(basename "$tarball_url")
rm -f $url_basename
wget_wildcard_url "$tarball_url"
file="$(ls $url_basename)"
mv $file $testdir/
file="$(basename "$file")"

tarball_name="${testdir}/${file}"

# Extract the tarball
dir="`echo ${file} | sed -e 's:.tar.xz::'`"
tar Jxf ${tarball_name} --directory=${testdir}
if test $? -gt 0; then
    echo "ERROR: ${tarball} is corrupted!"
    exit 1
fi

# Create a simple test case
if test ! -e ${testdir}/hello.cpp; then
    # Create the usual Hello World! test case
    cat <<EOF > ${testdir}/hello.cpp
#include <iostream>
int
main(int argc, char *argv[])
{
    std::cout << "Hello World!" << std::endl; 
}
EOF
fi

target="`echo ${dir} | egrep -o '(arm|aarch64)[_0-9a-z-]*' | sed -e 's:-\$::'`"
win32="`echo {$file} | grep -c mingw`"

# For Windows releases, check for symlinks in the release tarball. Some
# extractors for Windows do not handle symlinks well, so Abe should
# generate tarballs without symlinks.
if test ${win32} -ne 0; then
    find "${testdir}" -type l > ${testdir}/symlinks.txt 2>&1
    SYMLINKS="$(grep -c ^ ${testdir}/symlinks.txt)"
    if [ "$SYMLINKS" -eq 0 ]; then
        echo "No symlinks found in release"
    else
        cat ${testdir}/symlinks.txt
        echo "Found symlinks in release: FAILURE"
        exit 1
    fi
fi


# Bare metal builds need special care
baremetal="`echo ${target} | egrep -c "\-eabi|\-elf"`"
if test ${baremetal} -gt 0; then
    case ${target} in
	aarch64*)
	    # AArch64 needs specs
	    rdimon="`find ${testdir} -name rdimon.specs | head -1`"
	    specs="${rdimon:+--specs=${rdimon}}"
	    ;;
	arm*)
	    # ARM does not need specs, but the default cpu implies
	    # undefined references to __sync_synchronize
	    specs="-mcpu=cortex-a9"
	    ;;
    esac
fi

# Compile the test case
rm -f ${testdir}/hi
params="-o ${testdir}/hi ${testdir}/hello.cpp ${specs:-} -static"
if test ${win32} -eq 0; then
    ${testdir}/${dir}/bin/${target}-c++ ${params}
else
    # Compilation may fail if the paths are too long.
    # Create a G: drive, as a shortcut makes wine automagically use
    # it.
    # Make sure WINEPREFIX exists by running a dummy command
    export WINEPREFIX="$(pwd)/dotwine"
    echo "ECHO Hello" | wine cmd
    rm -f ${WINEPREFIX}/dosdevices/g:
    ln -s ${testdir}/${dir} ${WINEPREFIX}/dosdevices/g:
    wine ${testdir}/${dir}/bin/${target}-c++ ${params}
fi

# See if the compilation worked
if test -e ${testdir}/hi; then
    echo Compilation of hello.cpp: SUCCESS
else
    echo Compilation of hello.cpp: FAILED
    exit 1
fi

clone_or_update_repo tcwg-regression $tcwg_regression_rev https://git-us.linaro.org/toolchain/tcwg-regression

make -C tcwg-regression check TOOLCHAIN=${testdir}/${dir} TARGET=${target}
if [ $? -ne 0 ]; then
    echo "TCWG regression tests FAILED"
    exit 1
fi

exit 0