xref: /illumos-gate/usr/src/tools/smatch/src/sparsec (revision c85f09cc)
11f5207b7SJohn Levon#!/bin/sh
21f5207b7SJohn Levon#
31f5207b7SJohn Levon# GCC compatible C compiler based on Sparse LLVM
41f5207b7SJohn Levon
51f5207b7SJohn Levonset +e
61f5207b7SJohn Levon
71f5207b7SJohn LevonSPARSEOPTS=""
81f5207b7SJohn LevonDIRNAME=`dirname $0`
91f5207b7SJohn Levon
101f5207b7SJohn LevonNEED_LINK=1
111f5207b7SJohn Levon
121f5207b7SJohn Levonif [ $# -eq 0 ]; then
131f5207b7SJohn Levon  echo "`basename $0`: no input files"
141f5207b7SJohn Levon  exit 1
151f5207b7SJohn Levonfi
161f5207b7SJohn Levon
171f5207b7SJohn Levonwhile [ $# -gt 0 ]; do
181f5207b7SJohn Levon	case $1 in
191f5207b7SJohn Levon	'-o')
201f5207b7SJohn Levon		OUTFILE=$2
211f5207b7SJohn Levon		shift
221f5207b7SJohn Levon		;;
231f5207b7SJohn Levon	'-c')
241f5207b7SJohn Levon		NEED_LINK=0
251f5207b7SJohn Levon		;;
261f5207b7SJohn Levon	*)
271f5207b7SJohn Levon		SPARSEOPTS="$SPARSEOPTS $1 " ;;
281f5207b7SJohn Levon	esac
291f5207b7SJohn Levon	shift
301f5207b7SJohn Levondone
311f5207b7SJohn Levon
32*c85f09ccSJohn LevonTMPFILE=`mktemp -t tmp.XXXXXX`
331f5207b7SJohn Levon
341f5207b7SJohn Levon
351f5207b7SJohn LevonLLC=`"${LLVM_CONFIG:-llvm-config}" --bindir`/llc
361f5207b7SJohn Levon
37*c85f09ccSJohn LevonLLC_ARCH_OPTS=
38*c85f09ccSJohn Levoncase "$(uname -s)" in
39*c85f09ccSJohn Levon*CYGWIN*)
40*c85f09ccSJohn Levon	# cygwin uses the sjlj (setjmp-longjmp) exception model
41*c85f09ccSJohn Levon	LLC_ARCH_OPTS="-exception-model=sjlj"
42*c85f09ccSJohn Levon	;;
43*c85f09ccSJohn Levon*)
44*c85f09ccSJohn Levon	;;
45*c85f09ccSJohn Levonesac
46*c85f09ccSJohn Levon
47*c85f09ccSJohn Levon$DIRNAME/sparse-llvm $SPARSEOPTS | $LLC ${LLC_ARCH_OPTS} | as -o $TMPFILE
481f5207b7SJohn Levon
491f5207b7SJohn Levonif [ $NEED_LINK -eq 1 ]; then
501f5207b7SJohn Levon	if [ -z $OUTFILE ]; then
511f5207b7SJohn Levon		OUTFILE=a.out
521f5207b7SJohn Levon	fi
531f5207b7SJohn Levon	gcc $TMPFILE -o $OUTFILE
54*c85f09ccSJohn Levon	rm -f $TMPFILE
551f5207b7SJohn Levonelse
561f5207b7SJohn Levon	if [ -z $OUTFILE ]; then
571f5207b7SJohn Levon		echo "`basename $0`: no output file"
581f5207b7SJohn Levon		exit 1
591f5207b7SJohn Levon	fi
601f5207b7SJohn Levon	mv $TMPFILE $OUTFILE
611f5207b7SJohn Levonfi
62