libqbe/lisc/tools/abitest.sh

88 lines
987 B
Bash
Raw Normal View History

2016-03-21 13:42:16 -04:00
#!/bin/sh
2016-03-22 13:59:48 -04:00
OCAMLC=/usr/bin/ocamlc
2016-03-21 13:42:16 -04:00
QBE=lisc
failure() {
echo "Failure at stage:" $1 >&2
exit 1
}
2016-03-22 13:59:48 -04:00
cleanup() {
rm -fr $TMP
}
compile() {
cp tools/abi.ml $TMP
pushd $TMP > /dev/null
if ! $OCAMLC abi.ml -o gentest
then
popd > /dev/null
cleanup
failure "abifuzz compilation"
fi
popd > /dev/null
}
2016-03-21 13:55:38 -04:00
once() {
if test -z "$1"
then
2016-03-22 13:59:48 -04:00
$TMP/gentest $TMP c ssa
2016-03-21 13:55:38 -04:00
else
2016-03-22 13:59:48 -04:00
$TMP/gentest -s $1 $TMP c ssa
2016-03-21 13:55:38 -04:00
fi
./$QBE -o $TMP/callee.s $TMP/callee.ssa ||
failure "qbe"
c99 -g -o $TMP/abitest $TMP/caller.c $TMP/callee.s ||
failure "cc + linking"
$TMP/abitest ||
failure "runtime"
}
2016-03-22 13:59:48 -04:00
usage() {
echo "usage: abitest.sh [-s SEED] [-n ITERATIONS]" >&2
2016-03-21 13:42:16 -04:00
exit 1
2016-03-22 13:59:48 -04:00
}
N=1
while test -n "$1"
do
test -n "$2" || usage
case "$1" in
"-s")
S="$2"
N=1
;;
"-n")
N="$2"
;;
*)
usage
;;
esac
shift 2
done
TMP=`mktemp -d abifuzz.XXXXXX`
compile
if test -n "$S"
then
once $S
else
for n in `seq $N`
do
once
echo "$n" | grep "00$"
done
2016-03-21 13:42:16 -04:00
fi
2016-03-22 13:59:48 -04:00
echo "All done."
cleanup