11f5207b7SJohn Levon#!/bin/bash 21f5207b7SJohn Levon 31f5207b7SJohn LevonNR_CPU=$(cat /proc/cpuinfo | grep ^processor | wc -l) 41f5207b7SJohn LevonTARGET="bzImage modules" 51f5207b7SJohn LevonWLOG="smatch_warns.txt" 61f5207b7SJohn LevonLOG="smatch_compile.warns" 71f5207b7SJohn Levonfunction usage { 81f5207b7SJohn Levon echo 91f5207b7SJohn Levon echo "Usage: $0 [smatch options]" 101f5207b7SJohn Levon echo "Compiles the kernel with -j${NR_CPU}" 111f5207b7SJohn Levon echo " available options:" 121f5207b7SJohn Levon echo " --endian : enable endianess check" 131f5207b7SJohn Levon echo " --target {TARGET} : specify build target, default: $TARGET" 141f5207b7SJohn Levon echo " --log {FILE} : Output compile log to file, default is: $LOG" 151f5207b7SJohn Levon echo " --wlog {FILE} : Output warnigs to file, default is: $WLOG" 161f5207b7SJohn Levon echo " --help : Show this usage" 171f5207b7SJohn Levon exit 1 181f5207b7SJohn Levon} 191f5207b7SJohn Levon 201f5207b7SJohn Levon 211f5207b7SJohn Levonwhile true ; do 221f5207b7SJohn Levon if [[ "$1" == "--endian" ]] ; then 231f5207b7SJohn Levon ENDIAN="CF=-D__CHECK_ENDIAN__" 241f5207b7SJohn Levon shift 251f5207b7SJohn Levon elif [[ "$1" == "--target" ]] ; then 261f5207b7SJohn Levon shift 271f5207b7SJohn Levon TARGET="$1" 281f5207b7SJohn Levon shift 291f5207b7SJohn Levon elif [[ "$1" == "--log" ]] ; then 301f5207b7SJohn Levon shift 311f5207b7SJohn Levon LOG="$1" 321f5207b7SJohn Levon shift 331f5207b7SJohn Levon elif [[ "$1" == "--wlog" ]] ; then 341f5207b7SJohn Levon shift 351f5207b7SJohn Levon WLOG="$1" 361f5207b7SJohn Levon shift 371f5207b7SJohn Levon elif [[ "$1" == "--help" ]] ; then 381f5207b7SJohn Levon usage 391f5207b7SJohn Levon else 401f5207b7SJohn Levon break 411f5207b7SJohn Levon fi 421f5207b7SJohn Levondone 431f5207b7SJohn Levon 44efe51d0cSJohn Levon# receive parameters from environment, which override 45efe51d0cSJohn Levon[ -z "${SMATCH_ENV_TARGET:-}" ] || TARGET="$SMATCH_ENV_TARGET" 46efe51d0cSJohn Levon[ -z "${SMATCH_ENV_BUILD_PARAM:-}" ] || BUILD_PARAM="$SMATCH_ENV_BUILD_PARAM" 47efe51d0cSJohn Levon 481f5207b7SJohn LevonSCRIPT_DIR=$(dirname $0) 491f5207b7SJohn Levonif [ -e $SCRIPT_DIR/../smatch ] ; then 501f5207b7SJohn Levon cp $SCRIPT_DIR/../smatch $SCRIPT_DIR/../bak.smatch 511f5207b7SJohn Levon CMD=$SCRIPT_DIR/../bak.smatch 521f5207b7SJohn Levonelif which smatch | grep smatch > /dev/null ; then 531f5207b7SJohn Levon CMD=smatch 541f5207b7SJohn Levonelse 551f5207b7SJohn Levon echo "Smatch binary not found." 561f5207b7SJohn Levon exit 1 571f5207b7SJohn Levonfi 581f5207b7SJohn Levon 59*c85f09ccSJohn Levonif [[ ! -z $ARCH ]]; then 60*c85f09ccSJohn Levon KERNEL_ARCH="ARCH=$ARCH" 61*c85f09ccSJohn Levonfi 62*c85f09ccSJohn Levonif [[ ! -z $CROSS_COMPILE ]] ; then 63*c85f09ccSJohn Levon KERNEL_CROSS_COMPILE="CROSS_COMPILE=$CROSS_COMPILE" 64*c85f09ccSJohn Levonfi 65*c85f09ccSJohn Levon 66*c85f09ccSJohn Levonmake $KERNEL_ARCH $KERNEL_CROSS_COMPILE clean 671f5207b7SJohn Levonfind -name \*.c.smatch -exec rm \{\} \; 68*c85f09ccSJohn Levonmake $KERNEL_ARCH $KERNEL_CROSS_COMPILE -j${NR_CPU} $ENDIAN -k CHECK="$CMD -p=kernel --file-output --succeed $*" \ 69efe51d0cSJohn Levon C=1 $BUILD_PARAM $TARGET 2>&1 | tee $LOG 70efe51d0cSJohn LevonBUILD_STATUS=${PIPESTATUS[0]} 711f5207b7SJohn Levonfind -name \*.c.smatch -exec cat \{\} \; -exec rm \{\} \; > $WLOG 721f5207b7SJohn Levonfind -name \*.c.smatch.sql -exec cat \{\} \; -exec rm \{\} \; > $WLOG.sql 731f5207b7SJohn Levonfind -name \*.c.smatch.caller_info -exec cat \{\} \; -exec rm \{\} \; > $WLOG.caller_info 741f5207b7SJohn Levon 75efe51d0cSJohn Levonecho "Done. Build with status $BUILD_STATUS. The warnings are saved to $WLOG" 76efe51d0cSJohn Levonexit $BUILD_STATUS 77