xref: /illumos-gate/usr/src/tools/smatch/src/sparsec (revision c85f09cc)
1#!/bin/sh
2#
3# GCC compatible C compiler based on Sparse LLVM
4
5set +e
6
7SPARSEOPTS=""
8DIRNAME=`dirname $0`
9
10NEED_LINK=1
11
12if [ $# -eq 0 ]; then
13  echo "`basename $0`: no input files"
14  exit 1
15fi
16
17while [ $# -gt 0 ]; do
18	case $1 in
19	'-o')
20		OUTFILE=$2
21		shift
22		;;
23	'-c')
24		NEED_LINK=0
25		;;
26	*)
27		SPARSEOPTS="$SPARSEOPTS $1 " ;;
28	esac
29	shift
30done
31
32TMPFILE=`mktemp -t tmp.XXXXXX`
33
34
35LLC=`"${LLVM_CONFIG:-llvm-config}" --bindir`/llc
36
37LLC_ARCH_OPTS=
38case "$(uname -s)" in
39*CYGWIN*)
40	# cygwin uses the sjlj (setjmp-longjmp) exception model
41	LLC_ARCH_OPTS="-exception-model=sjlj"
42	;;
43*)
44	;;
45esac
46
47$DIRNAME/sparse-llvm $SPARSEOPTS | $LLC ${LLC_ARCH_OPTS} | as -o $TMPFILE
48
49if [ $NEED_LINK -eq 1 ]; then
50	if [ -z $OUTFILE ]; then
51		OUTFILE=a.out
52	fi
53	gcc $TMPFILE -o $OUTFILE
54	rm -f $TMPFILE
55else
56	if [ -z $OUTFILE ]; then
57		echo "`basename $0`: no output file"
58		exit 1
59	fi
60	mv $TMPFILE $OUTFILE
61fi
62