3 NR_CPU
=$
(cat /proc
/cpuinfo |
grep ^processor |
wc -l)
4 TARGET
="bzImage modules"
5 WLOG
="smatch_warns.txt"
6 LOG
="smatch_compile.warns"
9 echo "Usage: $0 [smatch options]"
10 echo "Compiles the kernel with -j${NR_CPU}"
11 echo " available options:"
12 echo " --endian : enable endianess check"
13 echo " --target {TARGET} : specify build target, default: $TARGET"
14 echo " --log {FILE} : Output compile log to file, default is: $LOG"
15 echo " --wlog {FILE} : Output warnigs to file, default is: $WLOG"
16 echo " --help : Show this usage"
22 if [[ "$1" == "--endian" ]] ; then
23 ENDIAN
="CF=-D__CHECK_ENDIAN__"
25 elif [[ "$1" == "--target" ]] ; then
29 elif [[ "$1" == "--log" ]] ; then
33 elif [[ "$1" == "--wlog" ]] ; then
37 elif [[ "$1" == "--help" ]] ; then
45 if echo "$*" |
grep -q info
; then
49 # receive parameters from environment, which override
50 [ -z "${SMATCH_ENV_TARGET:-}" ] || TARGET
="$SMATCH_ENV_TARGET"
51 [ -z "${SMATCH_ENV_BUILD_PARAM:-}" ] || BUILD_PARAM
="$SMATCH_ENV_BUILD_PARAM"
53 SCRIPT_DIR
=$
(dirname $0)
54 if [ -e $SCRIPT_DIR/..
/smatch
] ; then
55 cp $SCRIPT_DIR/..
/smatch
$SCRIPT_DIR/..
/bak.smatch
56 CMD
=$SCRIPT_DIR/..
/bak.smatch
57 elif which smatch |
grep smatch
> /dev
/null
; then
60 echo "Smatch binary not found."
64 if [[ ! -z $ARCH ]]; then
65 KERNEL_ARCH
="ARCH=$ARCH"
67 if [[ ! -z $CROSS_COMPILE ]] ; then
68 KERNEL_CROSS_COMPILE
="CROSS_COMPILE=$CROSS_COMPILE"
71 make $KERNEL_ARCH $KERNEL_CROSS_COMPILE clean
72 find -name \
*.c.smatch
-exec rm \
{\
} \
;
73 find -name \
*.c.smatch.sql
-exec rm \
{\
} \
;
74 find -name \
*.c.smatch.caller_info
-exec rm \
{\
} \
;
75 make $KERNEL_ARCH $KERNEL_CROSS_COMPILE -j${NR_CPU} $ENDIAN -k CHECK
="$CMD -p=kernel --file-output --succeed $*" \
76 C
=1 $BUILD_PARAM $TARGET 2>&1 |
tee $LOG
77 BUILD_STATUS
=${PIPESTATUS[0]}
78 find -name \
*.c.smatch
-exec cat \
{\
} \
; -exec rm \
{\
} \
; > $WLOG
79 if [[ $INFO -eq 1 ]] ; then
80 find -name \
*.c.smatch.sql
-exec cat \
{\
} \
; -exec rm \
{\
} \
; > $WLOG.sql
81 find -name \
*.c.smatch.caller_info
-exec cat \
{\
} \
; -exec rm \
{\
} \
; > $WLOG.caller_info
84 echo "Done. Build with status $BUILD_STATUS. The warnings are saved to $WLOG"