blob: 8f8057e1b79a07335de511bbc364cfb7ed2fd41b [file] [log] [blame] [raw]
#!/bin/sh
[ -z "$CC" ] && CC=gcc
if [ "$1" = "-h" -o "$1" = "--help" ]; then
printf "Usage: %s [-j <n>] [-c] [--] [<compiler>](=\"%s\") [<csmith options>] [...]\\n" "$0" "$CC"
exit 255
fi
multi=1
compile_only=
while case "$1" in
-j)
if [ $# -lt 1 ]; then
echo "Option -j requires an argument" 1>&2
exit 255
fi
multi="$2"
#if [ "$multi" -le 0 ]; then
# exit 1
#fi
shift
;;
-c)
compile_only=1
;;
--)
shift
false
;;
-*)
printf "%s: Invalid option '%s'\\n" "$0" "$1" 1>&2
exit 255
;;
*)
false
;;
esac
do shift
done
CODER=csmith64
[ ! -z "$1" ] && CC="$1" && shift
CFLAGS="-Iruntime -w"
[ "$compile_only" = 1 ] && CFLAGS="$CFLAGS -c"
printf %s "$CC" | grep -Eq -- ' -O[0-9]' || CFLAGS="$CFLAGS -O1"
#coder_version="`$CODER --version | sed -r -e 1!d`"
#printf %s "$coder_version" | grep -Eq "^csmith [0-9]" && eval "`printf %s "$coder_version" | sed -r -e 's/^csmith /version_major=/' -e 's/\\./; version_minor=/' -e 's/\\..+/;/'`" && [ -n "$version_major" ] && [ -n "$version_minor" ] && { [ "$version_major" = 2 -a "$version_minor" -ge 2 ] || [ "$version_major" -gt 2 ]; } && ! { printf %s "$CC" | grep -Eq -- ' -D[[:space:]]*UNSAFE_FLOAT([[:space:]]|=|$)'; } && LIBS="$LIBS -lm"
i=1
unlink test.c > /dev/null 2>&1
set -e
if [ "$multi" -gt 1 ]; then
pids=
while [ "$multi" -gt 0 ]; do
while true; do
#printf \\r\[$multi\] Generating\
printf "\\r[$multi] Generating [$i] "
$CODER "$@" > "test-job-$multi.c"
printf "\\r "
printf "\\r[$multi] Compiling [$i] "
$CC $CFLAGS "test-job-$multi.c" $LIBS
i=$((i+1))
done & pids="$! $pids"
multi=$((multi-1))
done
set +e
#trap "echo; echo; echo \$pids; echo $pids; for pid in $pids; do kill -s INT \$pid; done; exit" INT
trap "for pid in $pids; do kill \$pid; done; echo; exit" INT
trap "for pid in $pids; do kill \$pid; done; exit" TERM
#while wait; do true; done
for pid in $pids; do
while wait $pid && kill -s 0 $pid; do sleep 1 & wait $!; done
done
wait
else
while true
do
printf "\\rGenerating [$i] "
# $CODER | $CC $CFLAGS -xc - -o /dev/null;
$CODER "$@" > test.c
printf \\r\ \
printf "\\rCompiling [$i] "
$CC $CFLAGS test.c $LIBS
i=$((i+1))
done
fi