blob: e7db8878beab595fd22b75b78cbec3d101c95219 (
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
126
|
#!/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-helpers.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:-\$::'`"
host="`echo "$dir" | grep -oP '\-[0-9]{4}\.[0-9]{1,2}\-(rc[0-9]+\-)?\\K.*' | sed -r 's:_?'"$target"'::'`"
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} HOST=${host}
if [ $? -ne 0 ]; then
echo "TCWG regression tests FAILED"
exit 1
fi
exit 0
|