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> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5208 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
8702ab5ab1
commit
020f51fdc0
35
Makefile
35
Makefile
|
@ -19,8 +19,16 @@
|
||||||
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
## 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)))
|
$(if $(wildcard .xcompile),,$(eval $(shell bash util/xcompile/xcompile > .xcompile)))
|
||||||
include .xcompile
|
include .xcompile
|
||||||
|
ifeq ($(INNER_SCANBUILD),y)
|
||||||
|
CC:=$(CC_real)
|
||||||
|
HOSTCC:=$(CC_real) --hostcc
|
||||||
|
HOSTCXX:=$(CC_real) --hostcxx
|
||||||
|
endif
|
||||||
|
|
||||||
export top := $(PWD)
|
export top := $(PWD)
|
||||||
export src := $(top)/src
|
export src := $(top)/src
|
||||||
|
@ -90,7 +98,25 @@ endif
|
||||||
# The primary target needs to be here before we include the
|
# The primary target needs to be here before we include the
|
||||||
# other files
|
# 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
|
all: coreboot
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
@ -110,7 +136,12 @@ $(obj)/mainboard/$(MAINBOARDDIR)/static.c: $(src)/mainboard/$(MAINBOARDDIR)/devi
|
||||||
(cd $(obj)/mainboard/$(MAINBOARDDIR) ; PYTHONPATH=$(top)/util/sconfig export PYTHONPATH; python config.py $(MAINBOARDDIR) $(top) $(obj)/mainboard/$(MAINBOARDDIR))
|
(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
|
$(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
|
objs:=$(obj)/mainboard/$(MAINBOARDDIR)/static.o
|
||||||
initobjs:=
|
initobjs:=
|
||||||
|
@ -325,7 +356,7 @@ clean-for-update: doxygen-clean
|
||||||
$(MAKE) -C util/sconfig clean
|
$(MAKE) -C util/sconfig clean
|
||||||
|
|
||||||
clean: clean-for-update
|
clean: clean-for-update
|
||||||
rm -f $(obj)/coreboot*
|
rm -f $(obj)/coreboot* .ccwrap
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -rf $(obj)
|
rm -rf $(obj)
|
||||||
|
|
14
src/Kconfig
14
src/Kconfig
|
@ -46,6 +46,20 @@ config CBFS_PREFIX
|
||||||
Select the prefix to all files put into the image. It's "fallback"
|
Select the prefix to all files put into the image. It's "fallback"
|
||||||
by default, "normal" is a common alternative.
|
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
|
endmenu
|
||||||
|
|
||||||
source src/mainboard/Kconfig
|
source src/mainboard/Kconfig
|
||||||
|
|
|
@ -60,7 +60,7 @@ $(obj)/coreboot_ram: $(obj)/coreboot_ram.o $(src)/arch/i386/coreboot_ram.ld #ldo
|
||||||
|
|
||||||
$(obj)/coreboot_ram.o: $(obj)/arch/i386/lib/c_start.o $(drivers) $(obj)/coreboot.a $(LIBGCC_FILE_NAME)
|
$(obj)/coreboot_ram.o: $(obj)/arch/i386/lib/c_start.o $(drivers) $(obj)/coreboot.a $(LIBGCC_FILE_NAME)
|
||||||
@printf " CC $(subst $(obj)/,,$(@))\n"
|
@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)
|
$(obj)/coreboot.a: $(objs)
|
||||||
@printf " AR $(subst $(obj)/,,$(@))\n"
|
@printf " AR $(subst $(obj)/,,$(@))\n"
|
||||||
|
|
|
@ -38,5 +38,9 @@ $(obj)/cpu/x86/smm/smm: $(obj)/cpu/x86/smm/smm.o $(src)/cpu/x86/smm/smm.ld $(obj
|
||||||
$(obj)/cpu/x86/smm/smm_bin.c: $(obj)/cpu/x86/smm/smm
|
$(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 ';') > $@
|
(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
|
endif
|
||||||
|
|
||||||
|
|
|
@ -173,6 +173,12 @@ function create_config
|
||||||
echo "CONFIG_DEFAULT_CONSOLE_LOGLEVEL_$loglevel=y" >> .config
|
echo "CONFIG_DEFAULT_CONSOLE_LOGLEVEL_$loglevel=y" >> .config
|
||||||
echo "CONFIG_DEFAULT_CONSOLE_LOGLEVEL=$loglevel" >> .config
|
echo "CONFIG_DEFAULT_CONSOLE_LOGLEVEL=$loglevel" >> .config
|
||||||
fi
|
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
|
fi
|
||||||
|
|
||||||
yes "" | $MAKE oldconfig obj=${build_dir} > ${build_dir}/config.log
|
yes "" | $MAKE oldconfig obj=${build_dir} > ${build_dir}/config.log
|
||||||
|
@ -364,21 +370,6 @@ function build_target
|
||||||
CC="$CC -fno-stack-protector"
|
CC="$CC -fno-stack-protector"
|
||||||
fi
|
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 && \
|
built_successfully $VENDOR $MAINBOARD && \
|
||||||
{
|
{
|
||||||
printf " ( mainboard/$VENDOR/$MAINBOARD previously ok )\n\n"
|
printf " ( mainboard/$VENDOR/$MAINBOARD previously ok )\n\n"
|
||||||
|
|
Loading…
Reference in New Issue