switch is still broken, copying over cparser testcase since noone runs the cparser...
[libfirm] / ir / be / test / makereport.sh
1 #!/bin/bash
2
3 export LANG=
4 export LC_ALL=
5 export LC_COLLATE=
6 if test "$1" != "--recursive-hack"; then
7         "$0" --recursive-hack "$@"
8         exit $?
9 else
10         shift
11 fi
12
13 EXEC_PREFIX=
14 if [ "$ECC" = "" ]; then
15         ECC="eccp"
16 fi
17 #EXEC_PREFIX="qemu-arm"
18 #ECC="/ben/beck/ipd/bin/eccp -march=arm -bra-chordal-co-algo=heur"
19 ECC_CFLAGS="${ADDCFLAGS} -v -O3 -ffp-strict"
20 GCC="icc -restrict"
21 GCC_CFLAGS="-O0 -Itcc -fp-model precise"
22 LINKFLAGS="-lm"
23 TIMEOUT_COMPILE=300
24 TIMEOUT_RUN=30
25 ECC_LINK="gcc -m32"
26
27 CFILES="*.c"
28 OUTPUTDIR="stats-`date +%y.%m.%d`"
29
30 mkdir -p build_firm
31 mkdir -p build_gcc
32 mkdir -p $OUTPUTDIR
33
34 XMLRES=$OUTPUTDIR/result.xml
35 cat > $XMLRES << __END__
36 <?xml version="1.0"?>
37 <results>
38     <environment>
39         <ECC_CFLAGS>${ECC_CFLAGS}</ECC_CFLAGS>
40         <GCC_CFLAGS>${GCC_CFLAGS}</GCC_CFLAGS>
41     </environment>
42 __END__
43
44 # so endless apps stop at some point...
45 #ulimit -t 2
46
47 basedir=`pwd`
48
49 if [ -z "$1" ]; then
50         DIRS=". langshootout ack"
51 else
52         for f in "$@"; do
53                 if test -d "$f"; then
54                         DIRS="$DIRS $f"
55                 else
56                         FILES="$FILES $f"
57                 fi
58         done
59 fi
60 for d in $DIRS; do
61         for f in $d/*.c; do
62                 FILES="$FILES $f"
63         done
64 done
65
66 for file in $FILES; do
67         curdir="`dirname $file`"
68     COMPILE_RES="ok"
69     LINK_RES="omitted"
70     GCC_RES="ok"
71     GCC_RUN_RES="omitted"
72     FIRM_RUN_RES="omitted"
73     DIFF_RES="omitted"
74     FILE_FLAGS=`awk '/\/\\*\\$ .* \\$\\*\// { for (i = 2; i < NF; ++i) printf "%s ", $i }' $file`
75
76     name="`basename $file .c`"
77         obj_name="build_firm/$name.o"
78     res="$OUTPUTDIR/buildresult_$name.txt"
79     echo -n "Building $name"
80     echo "Results for $name" > $res
81     echo "*** ECC/FIRM Compile" >> $res
82     CMD="ulimit -t ${TIMEOUT_COMPILE} ; ${ECC} -c -o ${obj_name} ${ECC_CFLAGS} ${FILE_FLAGS} ${file}"
83     echo "$CMD" >> $res
84     /bin/sh -c "$CMD" >> $res 2>&1 || { COMPILE_RES="failed"; echo -n " ... FAILED"; }
85
86     if [ ${COMPILE_RES} = "ok" ]; then
87         LINK_RES="ok"
88         echo "*** Linking" >> $res
89         CMD="${ECC_LINK} $obj_name ${LINKFLAGS} -o build_firm/$name.exe"
90         echo "$CMD" >> $res
91         $CMD >> $res 2>&1 || { LINK_RES="failed"; echo -n " ... FAILED"; }
92     fi
93
94     echo "*** GCC Compile" >> $res
95      CMD="${GCC} ${GCC_CFLAGS} ${FILE_FLAGS} $file ${LINKFLAGS} -o build_gcc/$name.exe"
96     echo "$CMD" >> $res
97      /bin/sh -c "$CMD" >> $res 2>&1 || { GCC_RES="failed"; echo -n " ... FAILED"; }
98
99     if [ ${GCC_RES} = "ok" ]; then
100         GCC_RUN_RES="ok"
101
102         echo "*** Run GCC" >> $res
103         CMD="ulimit -t ${TIMEOUT_RUN} ; build_gcc/$name.exe > $OUTPUTDIR/result_gcc_$name.txt 2>&1"
104         echo "$CMD" >> $res
105         /bin/sh -c "$CMD" > $OUTPUTDIR/result_gcc_$name.txt 2>&1 || GCC_RUN_RES="failed"
106     fi
107
108     if [ ${LINK_RES} = "ok" ]; then
109         FIRM_RUN_RES="ok"
110
111         echo "*** Run Firm" >> $res
112         CMD="ulimit -t ${TIMEOUT_RUN} ; ${EXEC_PREFIX} build_firm/$name.exe > $OUTPUTDIR/result_firm_$name.txt 2>&1"
113         echo "$CMD" >> $res
114         /bin/sh -c "$CMD" > $OUTPUTDIR/result_firm_$name.txt 2>&1 || { FIRM_RUN_RES="failed"; echo -n " ... FAILED"; }
115     fi
116
117     if [ ${GCC_RUN_RES} = "ok" -a ${FIRM_RUN_RES} = "ok" ]; then
118         DIFF_RES="ok"
119
120         echo "*** Compare Results" >> $res
121         CMD="diff -u $OUTPUTDIR/result_gcc_$name.txt $OUTPUTDIR/result_firm_$name.txt"
122         $CMD > $OUTPUTDIR/result_diff_$name.txt 2>&1 || { DIFF_RES="failed"; echo -n " ... FAILED"; }
123     fi
124     echo
125
126     cat >> $XMLRES << __END__
127     <result name="$name">
128         <compile>$COMPILE_RES</compile>
129         <link>$LINK_RES</link>
130         <gcc_compile>$GCC_RES</gcc_compile>
131         <gcc_run>$GCC_RUN_RES</gcc_run>
132         <firm_run>$FIRM_RUN_RES</firm_run>
133         <diff>$DIFF_RES</diff>
134     </result>
135 __END__
136 done
137
138 echo "</results>" >> $XMLRES
139
140 xsltproc --output $OUTPUTDIR/index.html makehtml.xslt $XMLRES
141
142 # maybe execute custom actions after result has been generated
143 [ -e after_compile.sh ] && ./after_compile.sh "$OUTPUTDIR"