more compiler warnings...
[qbe.git] / tools / test.sh
blob8abdb21a8f185944bc008295ffaa3069884471d7
1 #!/bin/sh
3 dir=`cd $(dirname "$0"); pwd`
4 bin=$dir/../obj/qbe
6 tmp=/tmp/qbe.zzzz
8 drv=$tmp.c
9 asm=$tmp.s
10 exe=$tmp.exe
11 out=$tmp.out
13 testcc() {
14 echo "int main() { }" | $1 -x c -o /dev/null - >/dev/null 2>&1
15 return $?
18 init() {
19 case "$TARGET" in
20 arm64)
21 for p in aarch64-linux-musl aarch64-linux-gnu
23 cc=$p-gcc
24 qemu="qemu-aarch64 -L /usr/$p"
26 $cc -v >/dev/null 2>&1 &&
27 $qemu -version >/dev/null 2>&1 &&
28 test -d /usr/$p
29 then
30 break
32 cc=
33 done
34 if test -z "$cc"
35 then
36 echo "Cannot find arm64 compiler or qemu."
37 exit 1
39 bin="$bin -t arm64"
41 "")
42 case `uname` in
43 *Darwin*)
44 cc="cc -Wl,-no_pie"
46 *OpenBSD*)
47 cc="cc -nopie"
49 *FreeBSD*)
50 cc="cc"
53 cc="cc -no-pie"
54 testcc "$cc" || cc="cc"
56 esac
59 echo "Unknown target '$TARGET'."
60 exit 1
62 esac
65 cleanup() {
66 rm -f $drv $asm $exe $out
69 extract() {
70 WHAT="$1"
71 FILE="$2"
73 awk "
74 /^# >>> $WHAT/ {
75 p = 1
76 next
78 /^# <<</ {
79 p = 0
82 " $FILE \
83 | sed -e 's/# //' \
84 | sed -e 's/#$//'
87 once() {
88 t="$1"
90 if ! test -f $t
91 then
92 echo "invalid test file $t" >&2
93 exit 1
97 sed -e 1q $t |
98 grep "skip.* $TARGET\( .*\)\?$" \
99 >/dev/null
100 then
101 return 0
104 printf "%-45s" "$(basename $t)..."
106 if ! $bin -o $asm $t
107 then
108 echo "[qbe fail]"
109 return 1
112 extract driver $t > $drv
113 extract output $t > $out
115 if test -s $drv
116 then
117 src="$drv $asm"
118 else
119 src="$asm"
122 if ! $cc -g -o $exe $src
123 then
124 echo "[cc fail]"
125 return 1
128 if test -s $out
129 then
130 $qemu $exe a b c | diff - $out
131 ret=$?
132 reason="output"
133 else
134 $qemu $exe a b c
135 ret=$?
136 reason="returned $RET"
139 if test $ret -ne 0
140 then
141 echo "[$reason fail]"
142 return 1
145 echo "[ok]"
148 #trap cleanup TERM QUIT
150 init
152 if test -z "$1"
153 then
154 echo "usage: tools/test.sh {all, SSAFILE}" 2>&1
155 exit 1
158 case "$1" in
159 "all")
160 fail=0
161 for t in $dir/../test/[!_]*.ssa
163 once $t
164 fail=`expr $fail + $?`
165 done
166 if test $fail -ge 1
167 then
168 echo
169 echo "$fail test(s) failed!"
170 else
171 echo
172 echo "All is fine!"
174 exit $fail
177 once $1
178 exit $?
180 esac