diff options
-rw-r--r-- | Makefile | 30 | ||||
-rw-r--r-- | src/Kconfig | 23 | ||||
-rw-r--r-- | toolchain.inc | 16 | ||||
-rwxr-xr-x | util/abuild/abuild | 28 | ||||
-rwxr-xr-x | util/lint/lint-stable-002-build-dir-handling | 2 |
5 files changed, 37 insertions, 62 deletions
@@ -30,19 +30,9 @@ ## SUCH DAMAGE. ## -ifeq ($(INNER_SCANBUILD),y) -CC_real:=$(CC) -endif - $(if $(wildcard .xcompile),,$(eval $(shell bash util/xcompile/xcompile $(XGCCPATH) > .xcompile))) include .xcompile -ifeq ($(INNER_SCANBUILD),y) -CC:=$(CC_real) -HOSTCC:=$(CC_real) --hostcc -HOSTCXX:=$(CC_real) --hostcxx -endif - export top := $(CURDIR) export src := src export srck := $(top)/util/kconfig @@ -119,12 +109,10 @@ include $(HAVE_DOTCONFIG) include toolchain.inc -ifneq ($(INNER_SCANBUILD),y) ifeq ($(CONFIG_COMPILER_LLVM_CLANG),y) CC:=clang -m32 -mno-mmx -mno-sse -no-integrated-as HOSTCC:=clang endif -endif ifeq ($(CONFIG_CCACHE),y) CCACHE:=$(word 1,$(wildcard $(addsuffix /ccache,$(subst :, ,$(PATH))))) @@ -143,25 +131,7 @@ strip_quotes = $(subst ",,$(subst \",,$(1))) # The primary target needs to be here before we include the # other files -ifeq ($(INNER_SCANBUILD),y) -CONFIG_SCANBUILD_ENABLE:= -endif - -ifeq ($(CONFIG_SCANBUILD_ENABLE),y) -ifneq ($(CONFIG_SCANBUILD_REPORT_LOCATION),) -CONFIG_SCANBUILD_REPORT_LOCATION:=-o $(CONFIG_SCANBUILD_REPORT_LOCATION) -endif -real-all: - echo '#!/bin/sh' > .ccwrap - echo 'CC="$(CC)"' >> .ccwrap - echo 'if [ "$$1" = "--hostcc" ]; then shift; CC="$(HOSTCC)"; fi' >> .ccwrap - echo 'if [ "$$1" = "--hostcxx" ]; then shift; CC="$(HOSTCXX)"; fi' >> .ccwrap - echo 'eval $$CC $$*' >> .ccwrap - chmod +x .ccwrap - scan-build $(CONFIG_SCANBUILD_REPORT_LOCATION) -analyze-headers --use-cc=$(top)/.ccwrap --use-c++=$(top)/.ccwrap $(MAKE) INNER_SCANBUILD=y -else real-all: real-target -endif # must come rather early .SECONDEXPANSION: diff --git a/src/Kconfig b/src/Kconfig index 30f996d228c5..53a23bb41392 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -80,29 +80,6 @@ config ANY_TOOLCHAIN we'll have to assume that they use their distro compiler by mistake. Make sure that using patched compilers is a conscious decision. -config SCANBUILD_ENABLE - bool "Build with scan-build for static code analysis" - default n - help - Changes the build process to use scan-build (a utility for - running the clang static code analyzer from the command line). - - Requires the scan-build utility in your system $PATH. - - For details see http://clang-analyzer.llvm.org/scan-build.html. - -config SCANBUILD_REPORT_LOCATION - string "Directory for the scan-build report(s)" - default "" - depends on SCANBUILD_ENABLE - help - Directory where the scan-build reports should be stored in. The - reports are stored in subdirectories of the form 'yyyy-mm-dd-*' - in the specified directory. - - If this setting is left empty, the coreboot top-level directory - will be used to store the report subdirectories. - config CCACHE bool "Use ccache to speed up (re)compilation" default n diff --git a/toolchain.inc b/toolchain.inc index 9417a7323c1a..bfa604b98662 100644 --- a/toolchain.inc +++ b/toolchain.inc @@ -19,6 +19,22 @@ ARCH_SUPPORTED := armv7 x86_32 + +# scan-build integration +ifneq ($(CCC_ANALYZER_OUTPUT_FORMAT),) + +ifeq ($(CCC_ANALYZER_ANALYSIS),) +export CCC_ANALYZER_ANALYSIS := -analyzer-opt-analyze-headers +endif + +$(foreach arch,$(ARCH_SUPPORTED), \ + $(eval CC_$(arch):=CCC_CC=$(CC_$(arch)) $(CC) )) + +HOSTCC:=CCC_CC="$(HOSTCC)" $(CC) +HOSTCXX:=CCC_CXX="$(HOSTCXX)" $(CXX) +ROMCC=CCC_CC="$(ROMCC_BIN)" $(CC) +endif + COREBOOT_STANDARD_STAGES := bootblock romstage ramstage ARCHDIR-i386 := x86 diff --git a/util/abuild/abuild b/util/abuild/abuild index 434bcc6ea7b0..d4ee752cb0eb 100755 --- a/util/abuild/abuild +++ b/util/abuild/abuild @@ -238,7 +238,7 @@ function compile_target CURR=$( pwd ) #stime=`perl -e 'print time();' 2>/dev/null || date +%s` build_dir=$TARGET/${VENDOR}_${MAINBOARD} - eval $MAKE $silent DOTCONFIG=${build_dir}/config.build obj=${build_dir} objutil=$TARGET/sharedutils \ + eval $BUILDPREFIX $MAKE $silent DOTCONFIG=${build_dir}/config.build obj=${build_dir} objutil=$TARGET/sharedutils \ &> ${build_dir}/make.log ret=$? cp .xcompile ${build_dir}/xcompile.build @@ -291,13 +291,16 @@ function build_target stime=`perl -e 'print time();' 2>/dev/null || date +%s` create_buildenv $VENDOR $MAINBOARD $CONFIG if [ $? -eq 0 -a $configureonly -eq 0 ]; then + BUILDPREFIX= if [ "$scanbuild" = "true" ]; then - rm -rf $TARGET/scan-build-results-tmp + scanbuild_out=$TARGET/${VENDOR}_${MAINBOARD}-scanbuild + rm -rf ${scanbuild_out} + BUILDPREFIX="scan-build -o ${scanbuild_out}tmp" fi compile_target $VENDOR $MAINBOARD if [ "$scanbuild" = "true" ]; then - rm -rf $TARGET/${VENDOR}_${MAINBOARD}-scanbuild - mv `dirname $TARGET/scan-build-results-tmp/*/index.html` $TARGET/${VENDOR}_${MAINBOARD}-scanbuild + mv ${scanbuild_out}tmp/* ${scanbuild_out} + rmdir ${scanbuild_out}tmp fi fi # Not calculated here because we still print it in compile_target @@ -386,7 +389,6 @@ function myhelp printf " [-T|--test] submit image(s) to automated test system\n" printf " [-c|--cpus <numcpus>] build on <numcpus> at the same time\n" printf " [-s|--silent] omit compiler calls in logs\n" - printf " [-sb|--scan-build] use clang's static analyzer\n" printf " [-y|--ccache] use ccache\n" printf " [-C|--config] configure-only mode\n" printf " [-l|--loglevel <num>] set loglevel\n" @@ -394,6 +396,7 @@ function myhelp printf " [-P|--prefix <name>] file name prefix in CBFS\n" printf " [-B|--blobs] Allow using binary files\n" printf " [-L|--clang] Use clang\n" + printf " [--scan-build] use clang's static analyzer\n" printf " [cbroot] absolute path to coreboot sources\n" printf " (defaults to $ROOT)\n\n" } @@ -468,10 +471,9 @@ while true ; do expr "$1" : '-\?[0-9]\+$' > /dev/null && test 0$1 -gt 1 && cpuconfig="on $1 cpus in parallel" shift;; -s|--silent) shift; silent="-s";; - -sb|--scan-build) shift + --scan-build) shift scanbuild=true customizing="${customizing}, scan-build" - configoptions="${configoptions}CONFIG_SCANBUILD_ENABLE=y\nCONFIG_SCANBUILD_REPORT_LOCATION=\"$TARGET/scan-build-results-tmp\"" ;; -y|--ccache) shift customizing="${customizing}, ccache" @@ -546,7 +548,17 @@ build_all_targets() echo "CONFIG_USE_BLOBS=y" > $TMPCFG fi $MAKE -j $cpus DOTCONFIG=$TMPCFG obj=$TARGET/temp objutil=$TARGET/sharedutils allnoconfig - $MAKE -j $cpus DOTCONFIG=$TMPCFG obj=$TARGET/temp objutil=$TARGET/sharedutils tools || exit 1 + BUILDPREFIX= + if [ "$scanbuild" = "true" ]; then + scanbuild_out=$TARGET/sharedutils-scanbuild + rm -rf ${scanbuild_out} + BUILDPREFIX="scan-build -o ${scanbuild_out}tmp" + fi + $BUILDPREFIX $MAKE -j $cpus DOTCONFIG=$TMPCFG obj=$TARGET/temp objutil=$TARGET/sharedutils tools || exit 1 + if [ "$scanbuild" = "true" ]; then + mv ${scanbuild_out}tmp/* ${scanbuild_out} + rmdir ${scanbuild_out}tmp + fi rm -rf $TARGET/temp $TMPCFG for VENDOR in $( vendors ); do for MAINBOARD in $( mainboards $VENDOR ); do diff --git a/util/lint/lint-stable-002-build-dir-handling b/util/lint/lint-stable-002-build-dir-handling index 03f0b62ec510..013d84a2651c 100755 --- a/util/lint/lint-stable-002-build-dir-handling +++ b/util/lint/lint-stable-002-build-dir-handling @@ -33,7 +33,7 @@ fi # $1: object directory run_printall() { -$MAKE CONFIG_USE_BLOBS=n CONFIG_CCACHE=n CONFIG_SCANBUILD_ENABLE=n NOMKDIR=1 \ +$MAKE CONFIG_USE_BLOBS=n CONFIG_CCACHE=n NOMKDIR=1 \ DOTCONFIG=$TMPCONFIG obj=$1 printall | \ sed -e "s,^ *,," -e "s,^r.mstage-objs:=,," \ -e "s,mainboard/[^/]*/[^/]*/,.../,g" | \ |