1#!/bin/bash
2
3function usage {
4    echo "Usage:  $0 [--sparse][--valgrind][--debug] path/to/file.c"
5    exit 1
6}
7
8SCRIPT_DIR=$(dirname $0)
9if [ -e $SCRIPT_DIR/../smatch ] ; then
10    CMD=$SCRIPT_DIR/../smatch
11elif which smatch | grep smatch > /dev/null ; then
12    CMD=smatch
13else
14    echo "Smatch binary not found."
15    exit 1
16fi
17
18while true ; do
19    if [[ "$1" == "--sparse" ]] ; then
20	CMD="sparse"
21	shift
22    elif [[ "$1" == "--test-parsing" ]] ; then
23	CMD="$SCRIPT_DIR/../test-parsing -no-lineno"
24	shift
25    elif echo "$1" | grep -q -- "--outfile=" ; then
26	outfile=$(echo "$1" | cut -d '=' -f 2)
27	if [ "outfile" != "" ] ; then
28	    POST="$POST > $outfile"
29	fi
30	shift
31    elif [[ "$1" == "--valgrind" ]] ; then
32	PRE="valgrind"
33	shift
34    elif [[ "$1" == "--endian" ]] ; then
35        ENDIAN="CF=-D__CHECK_ENDIAN__"
36	shift
37    elif [[ "$1" == "" ]] ; then
38	break
39    else
40	if [[ "$1" == "--help" ]] ; then
41		$CMD --help
42		exit 1
43	fi
44	if echo $1 | grep -q ^- ; then
45		POST="$1 $POST"
46	else
47		break
48	fi
49	shift
50    fi
51done
52if echo $CMD | grep -q smatch ; then
53    POST="--project=kernel --succeed $POST"
54fi
55
56cname=$1
57cname=$(echo ${cname/.o/.c})
58if [[ "$cname" == "" ]] ; then
59    usage
60fi
61if ! test -e $cname ; then
62    usage
63fi
64
65oname=$(echo ${cname/.c/.o})
66if ! echo $oname | grep -q .o$ && ! echo $oname | grep -q /$ ; then
67    usage
68fi
69if  echo $oname | grep -q .o$ ; then
70    rm -f $oname
71fi
72
73if [[ ! -z $ARCH ]]; then
74	KERNEL_ARCH="ARCH=$ARCH"
75fi
76if [[ ! -z $CROSS_COMPILE ]] ; then
77	KERNEL_CROSS_COMPILE="CROSS_COMPILE=$CROSS_COMPILE"
78fi
79
80make $KERNEL_CROSS_COMPILE $KERNEL_ARCH C=2 $ENDIAN CHECK="$PRE $CMD $POST" $oname
81