summaryrefslogtreecommitdiff
path: root/TestRelease.job
blob: 8819caff4226ea236f7da35d42e0c79e630fc03f (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
#!/bin/bash

# Set defaults
if test x"${debug}" = x"true"; then
    export CONFIG_SHELL="/bin/bash -x"
else
    export CONFIG_SHELL="/bin/bash"
fi

user_workspace="$PWD"

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

if test -e ${user_workspace}; then
    cat << EOF > ${user_workspace}/BUILD-INFO.txt
Format-Version: 0.5

Files-Pattern: *
License-Type: open
EOF
fi

testdir=${user_workspace}/_test

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

# Use the newly created build directory
cd ${testdir}

file=`basename ${tarball}`
tarball_name="${testdir}/${file}"
protocol="`echo ${tarball} | cut -d ':' -f 1`"
if test x${protocol} = x"file"; then
    tarball_name="`echo ${tarball} | sed -e 's:file./::'`"
else
    # Download the toolchain binary tarball
    if test ! -e ${testdir}/${file}; then
	wget ${tarball} --directory=${testdir} --progress=dot:giga
	if test $? -gt 0; then
	    echo "ERROR: ${tarball} doesn't exist on remote machine!"
	    exit 1
	fi
    fi
fi

# 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`"

# Bare metal builds use a specs file
# Do work for ARM : rdpmon.spec dimon.spec linux.specs profile-ve.spec
#                   aprofile-validation.specs
# Don't work for ARM : iq80310.spec nano.specs pid.specs edboot.spec
baremetal="`echo ${target} | egrep -c "\-eabi|\-elf"`"
if test ${baremetal} -gt 0; then
    rdimon="`find ${testdir} -name rdimon.specs | head -1`"
    specs="${rdimon:+--specs=${rdimon}}"
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
    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
    exit 0
else
    echo Compilation of hello.cpp: FAILED
    exit 1
fi