aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/sparsec
diff options
authorPekka Enberg <penberg@kernel.org>2011-08-30 18:00:25 +0300
committerPekka Enberg <penberg@kernel.org>2011-08-30 18:00:25 +0300
commit57890887bc122c0c9bb4977d5df9fdfa128ac812 (patch)
tree3ec3b43be978863ff17000d3c8cd1bd98c7f3b25 /sparsec
parent2dea6f7fb07cd18255cf1d73079638dc96bdd08b (diff)
downloadsparse-dev-57890887bc122c0c9bb4977d5df9fdfa128ac812.tar.gz
sparse, llvm: Improve sparsec front-end
This patch improves 'sparsec' so that things like ./sparsec hello.c ./sparsec hello.c -o hello work like with GCC. Signed-off-by: Pekka Enberg <penberg@kernel.org>
Diffstat (limited to 'sparsec')
-rwxr-xr-xsparsec29
1 files changed, 21 insertions, 8 deletions
diff --git a/sparsec b/sparsec
index 26062e1e..1e5c8bd0 100755
--- a/sparsec
+++ b/sparsec
@@ -3,19 +3,23 @@
# GCC compatible C compiler based on Sparse LLVM
SPARSEOPTS=""
-ASOPTS=""
DIRNAME=`dirname $0`
-use_gcc=1
+NEED_LINK=1
+
+if [ $# -eq 0 ]; then
+ echo "`basename $0`: no input files"
+ exit 1
+fi
while [ $# -gt 0 ]; do
case $1 in
'-o')
- ASOPTS=$ASOPTS"-o "$2" "
+ OUTFILE=$2
shift
;;
'-c')
- use_gcc=0
+ NEED_LINK=0
;;
*)
SPARSEOPTS="$SPARSEOPTS $1 " ;;
@@ -23,10 +27,19 @@ while [ $# -gt 0 ]; do
shift
done
-if [ $use_gcc -eq 1 ]; then
- echo "Unsupported options, falling back to GCC..."
- gcc $ASOPTS $SPARSEOPTS
+TMPFILE=`mktemp -t tmp.XXXXXX`".o"
+
+$DIRNAME/sparse-llvm $SPARSEOPTS | llc | as -o $TMPFILE
+if [ $NEED_LINK -eq 1 ]; then
+ if [ -z $OUTFILE ]; then
+ OUTFILE=a.out
+ fi
+ gcc $TMPFILE -o $OUTFILE
else
- $DIRNAME/sparse-llvm $SPARSEOPTS | llc | as $ASOPTS
+ if [ -z $OUTFILE ]; then
+ echo "`basename $0`: no output file"
+ exit 1
+ fi
+ mv $TMPFILE $OUTFILE
fi