Author: stepan Date: 2009-03-11 16:43:02 +0100 (Wed, 11 Mar 2009) New Revision: 3996
Modified: trunk/coreboot-v2/util/abuild/abuild Log: 20090310-3-scanbuild: Add support for clang's scan-build utility to abuild. scan-build wraps the compiler and runs its own compiler on the same sources to do some static analysis on them. It adds an option "-sb" or "--scan-build" that creates a coreboot-builds/$target-scanbuild directory for every $target, containing the output of scan-build, which is a HTML documentation on its results. Be aware, that scanbuild significantly increases build time: A board that takes 6-7 seconds normally requires 60 seconds with that option enabled on my test system. The patch also moves the stack-protector option down a bit, so it applies to crosscompiled targets, too (which overwrote the compiler settings before)
Signed-off-by: Patrick Georgi patrick.georgi@coresystems.de Acked-by: Stefan Reinauer stepan@coresystems.de
Modified: trunk/coreboot-v2/util/abuild/abuild =================================================================== --- trunk/coreboot-v2/util/abuild/abuild 2009-03-11 15:36:39 UTC (rev 3995) +++ trunk/coreboot-v2/util/abuild/abuild 2009-03-11 15:43:02 UTC (rev 3996) @@ -46,6 +46,9 @@ # this is disabled per default but can be enabled with -s silent=
+# clang mode enabled by -sb option. +scanbuild=false + # stackprotect mode enabled by -ns option. stackprotect=false
@@ -334,9 +337,7 @@ CROSS_COMPILE="$TARCH-elf-" found_crosscompiler=true fi - if [ "$stackprotect" = "true" ]; then - CC="$CC -fno-stack-protector" - fi + HOSTCC='gcc'
printf "Processing mainboard/$VENDOR/$MAINBOARD" @@ -396,6 +397,25 @@ fi fi
+ if [ "$stackprotect" = "true" ]; then + 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" @@ -419,6 +439,10 @@ compile_target $VENDOR $MAINBOARD && xml " <status>ok</status>" || xml "<status>broken</status>" + if [ "$scanbuild" = "true" ]; then + mv `dirname $TARGET/scan-build-results-tmp/*/index.html` $TARGET/${VENDOR}_${MAINBOARD}-scanbuild + MAKE=$origMAKE + fi fi
xml "" @@ -484,6 +508,7 @@ printf " [-c|--cpus <numcpus>] build on <numcpus> at the same time\n" printf " [-s|--silent] omit compiler calls in logs\n" printf " [-ns|--nostackprotect] use gcc -fno-stack-protector option\n" + printf " [-sb|--scan-build] use clang's static analyzer\n" printf " [-C|--config] configure-only mode\n" printf " [lbroot] absolute path to coreboot sources\n" printf " (defaults to $LBROOT)\n\n" @@ -542,6 +567,7 @@ -c|--cpus) shift; cpus="$1"; test "$cpus" == "max" && cpus=""; shift;; -s|--silent) shift; silent="-s";; -ns|--nostackprotect) shift; stackprotect=true;; + -sb|--scan-build) shift; scanbuild=true;; -C|--config) shift; configureonly=1;; --) shift; break;; -*) printf "Invalid option\n\n"; myhelp; exit 1;;