#!/bin/sh # # GCC compatible C compiler based on Sparse LLVM set +e SPARSEOPTS="" DIRNAME=`dirname $0` NEED_LINK=1 if [ $# -eq 0 ]; then echo "`basename $0`: no input files" exit 1 fi while [ $# -gt 0 ]; do case $1 in '-o') OUTFILE=$2 shift ;; '-c') NEED_LINK=0 ;; *) SPARSEOPTS="$SPARSEOPTS $1 " ;; esac shift done TMPFILE=`mktemp -t tmp.XXXXXX` LLC=`"${LLVM_CONFIG:-llvm-config}" --bindir`/llc LLC_ARCH_OPTS= case "$(uname -s)" in *CYGWIN*) # cygwin uses the sjlj (setjmp-longjmp) exception model LLC_ARCH_OPTS="-exception-model=sjlj" ;; *) ;; esac $DIRNAME/sparse-llvm $SPARSEOPTS | $LLC ${LLC_ARCH_OPTS} | as -o $TMPFILE if [ $NEED_LINK -eq 1 ]; then if [ -z $OUTFILE ]; then OUTFILE=a.out fi gcc $TMPFILE -o $OUTFILE rm -f $TMPFILE else if [ -z $OUTFILE ]; then echo "`basename $0`: no output file" exit 1 fi mv $TMPFILE $OUTFILE fi