Author: oxygene Date: Sun Mar 14 22:25:03 2010 New Revision: 5208 URL: http://tracker.coreboot.org/trac/coreboot/changeset/5208
Log: Add scan-build support to the build system. When configured in Kconfig, just running "make" calls scan-build as appropriate (however, it does not check for the presence of scan-build)
The target directory for the scan-build report is configurable and defaults to the scan-build default of /tmp/scan-build-$date-$num
abuild is adapted to properly run scanbuild when ran with the -sb option.
Signed-off-by: Patrick Georgi patrick.georgi@coresystems.de Acked-by: Stefan Reinauer stepan@coresystems.de
Modified: trunk/ (props changed) trunk/Makefile trunk/src/Kconfig trunk/src/arch/i386/Makefile.inc trunk/src/cpu/x86/smm/Makefile.inc trunk/util/abuild/abuild
Modified: trunk/Makefile ============================================================================== --- trunk/Makefile Sun Mar 14 18:01:08 2010 (r5207) +++ trunk/Makefile Sun Mar 14 22:25:03 2010 (r5208) @@ -19,8 +19,16 @@ ## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ##
+ifeq ($(INNER_SCANBUILD),y) +CC_real:=$(CC) +endif $(if $(wildcard .xcompile),,$(eval $(shell bash util/xcompile/xcompile > .xcompile))) include .xcompile +ifeq ($(INNER_SCANBUILD),y) +CC:=$(CC_real) +HOSTCC:=$(CC_real) --hostcc +HOSTCXX:=$(CC_real) --hostcxx +endif
export top := $(PWD) export src := $(top)/src @@ -90,7 +98,25 @@ # 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 +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 all: coreboot +endif
####################################################################### @@ -110,7 +136,12 @@ (cd $(obj)/mainboard/$(MAINBOARDDIR) ; PYTHONPATH=$(top)/util/sconfig export PYTHONPATH; python config.py $(MAINBOARDDIR) $(top) $(obj)/mainboard/$(MAINBOARDDIR))
$(obj)/mainboard/$(MAINBOARDDIR)/static.o: $(obj)/mainboard/$(MAINBOARDDIR)/static.c -# + @printf " CC $(subst $(obj)/,,$(@))\n" + $(CC) $(CFLAGS) -c -o $@ $< + +$(obj)/arch/i386/../../option_table.o: $(obj)/arch/i386/../../option_table.c + @printf " CC $(subst $(obj)/,,$(@))\n" + $(CC) $(CFLAGS) -c -o $@ $<
objs:=$(obj)/mainboard/$(MAINBOARDDIR)/static.o initobjs:= @@ -325,7 +356,7 @@ $(MAKE) -C util/sconfig clean
clean: clean-for-update - rm -f $(obj)/coreboot* + rm -f $(obj)/coreboot* .ccwrap
distclean: clean rm -rf $(obj)
Modified: trunk/src/Kconfig ============================================================================== --- trunk/src/Kconfig Sun Mar 14 18:01:08 2010 (r5207) +++ trunk/src/Kconfig Sun Mar 14 22:25:03 2010 (r5208) @@ -46,6 +46,20 @@ Select the prefix to all files put into the image. It's "fallback" by default, "normal" is a common alternative.
+config SCANBUILD_ENABLE + bool "build with scan-build for static analysis" + default n + help + Changes the build process to scan-build is used. + Requires scan-build in path. + +config SCANBUILD_REPORT_LOCATION + string "directory to put scan-build report in" + default "" + depends on SCANBUILD_ENABLE + help + Where the scan-build report should be stored + endmenu
source src/mainboard/Kconfig
Modified: trunk/src/arch/i386/Makefile.inc ============================================================================== --- trunk/src/arch/i386/Makefile.inc Sun Mar 14 18:01:08 2010 (r5207) +++ trunk/src/arch/i386/Makefile.inc Sun Mar 14 22:25:03 2010 (r5208) @@ -60,7 +60,7 @@
$(obj)/coreboot_ram.o: $(obj)/arch/i386/lib/c_start.o $(drivers) $(obj)/coreboot.a $(LIBGCC_FILE_NAME) @printf " CC $(subst $(obj)/,,$(@))\n" - $(CC) -nostdlib -r -o $@ $(obj)/arch/i386/lib/c_start.o $(drivers) -Wl,-( $(obj)/coreboot.a $(LIBGCC_FILE_NAME) -Wl,-) + $(CC) -nostdlib -r -o $@ $(obj)/arch/i386/lib/c_start.o $(drivers) -Wl,--start-group $(obj)/coreboot.a $(LIBGCC_FILE_NAME) -Wl,--end-group
$(obj)/coreboot.a: $(objs) @printf " AR $(subst $(obj)/,,$(@))\n"
Modified: trunk/src/cpu/x86/smm/Makefile.inc ============================================================================== --- trunk/src/cpu/x86/smm/Makefile.inc Sun Mar 14 18:01:08 2010 (r5207) +++ trunk/src/cpu/x86/smm/Makefile.inc Sun Mar 14 22:25:03 2010 (r5208) @@ -38,5 +38,9 @@ $(obj)/cpu/x86/smm/smm_bin.c: $(obj)/cpu/x86/smm/smm (echo 'unsigned char smm[] = {'; od -vtx1 $(obj)/cpu/x86/smm/smm | sed -e 's,^[0-9]* *,,' -e 's:[0-9a-f][0-9a-f] :0x&,:g' -e 's:[0-9a-f][0-9a-f]$$:0x&,:'; echo '}; unsigned int smm_len = '; wc -c $(obj)/cpu/x86/smm/smm |awk '{print $$1;}' ; echo ';') > $@
+$(obj)/cpu/x86/smm/smm_bin.o: $(obj)/cpu/x86/smm/smm_bin.c + @printf " CC $(subst $(obj)/,,$(@))\n" + $(CC) $(CFLAGS) -c -o $@ $< + endif
Modified: trunk/util/abuild/abuild ============================================================================== --- trunk/util/abuild/abuild Sun Mar 14 18:01:08 2010 (r5207) +++ trunk/util/abuild/abuild Sun Mar 14 22:25:03 2010 (r5208) @@ -173,6 +173,12 @@ echo "CONFIG_DEFAULT_CONSOLE_LOGLEVEL_$loglevel=y" >> .config echo "CONFIG_DEFAULT_CONSOLE_LOGLEVEL=$loglevel" >> .config fi + + if [ "$scanbuild" = "true" ]; then + printf "(scan-build enabled) " + echo "CONFIG_SCANBUILD_ENABLE=y" >> .config + echo "CONFIG_SCANBUILD_REPORT_LOCATION="$TARGET/scan-build-results-tmp"" >> .config + fi fi
yes "" | $MAKE oldconfig obj=${build_dir} > ${build_dir}/config.log @@ -364,21 +370,6 @@ CC="$CC -fno-stack-protector" fi
- if [ "$scanbuild" = "true" ]; then - ccwrap=`mktemp` - mkdir -p $TARGET/${VENDOR}_${MAINBOARD} - mkdir -p $TARGET/scan-build-results-tmp - mv $ccwrap $TARGET/${VENDOR}_${MAINBOARD} - ccwrap=$TARGET/${VENDOR}_${MAINBOARD}/`basename $ccwrap` - echo '#!/bin/sh' > $ccwrap - echo $CC' "$@"' >> $ccwrap - chmod +x $ccwrap - origMAKE=$MAKE - MAKE="scan-build --use-cc=$ccwrap -o $TARGET/scan-build-results-tmp -analyze-headers $MAKE GCC=$ccwrap" - CC="$(CC)" - HOSTCC="CCC_CC=$HOSTCC $(CC)" - fi - built_successfully $VENDOR $MAINBOARD && \ { printf " ( mainboard/$VENDOR/$MAINBOARD previously ok )\n\n"