And next time, I'll actually add the patches the first time.

Patrick

Index: util/abuild/abuild
===================================================================
--- util/abuild/abuild  (revision 3985)
+++ util/abuild/abuild  (working copy)
@@ -43,6 +43,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
 
@@ -326,10 +329,6 @@
                CROSS_COMPILE=''
        fi
        
-       if  [ "$stackprotect" = "true" ]; then
-               CC="$CC -fno-stack-protector"
-       fi
-
        HOSTCC='gcc'
        
        printf "Processing mainboard/$VENDOR/$MAINBOARD"
@@ -389,6 +388,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"
@@ -412,6 +430,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 ""
@@ -477,6 +499,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 "    [lbroot]                      absolute path to coreboot 
sources\n"
        printf "                                  (defaults to $LBROOT)\n\n"
 }
@@ -534,6 +557,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;;
                --)             shift; break;;
                -*)             printf "Invalid option\n\n"; myhelp; exit 1;;
                *)              break;;
Index: src/config/Config.lb
===================================================================
--- src/config/Config.lb        (revision 3985)
+++ src/config/Config.lb        (working copy)
@@ -45,7 +45,7 @@
 
 
 makerule coreboot_ram.o
-       depends "$(TOP)/src/arch/$(ARCH)/lib/c_start.o $(DRIVER) coreboot.a 
$(LIBGCC_FILE_NAME)" 
+       depends "src/arch/$(ARCH)/lib/c_start.o $(DRIVER) coreboot.a 
$(LIBGCC_FILE_NAME)" 
        action  "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ $^"
 end
 
@@ -88,7 +88,7 @@
        end
 
        makerule coreboot_apc.o
-               depends "$(TOP)/src/arch/$(ARCH)/lib/c_start.o coreboot_apc.a 
$(LIBGCC_FILE_NAME)"
+               depends "src/arch/$(ARCH)/lib/c_start.o coreboot_apc.a 
$(LIBGCC_FILE_NAME)"
                action  "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ $^"
        end
 
Index: src/config/Config.lb
===================================================================
--- src/config/Config.lb        (revision 3985)
+++ src/config/Config.lb        (working copy)
@@ -6,7 +6,8 @@
 
 makedefine CPP:= $(CC) -x assembler-with-cpp -DASSEMBLY -E
 makedefine LIBGCC_FILE_NAME := $(shell $(CC) -print-libgcc-file-name)
-makedefine GCC_INC_DIR := $(shell LC_ALL=C $(CC) -print-search-dirs | sed -ne 
"s/install: \(.*\)/\1include/gp")
+makedefine GCC ?= $(CC)
+makedefine GCC_INC_DIR := $(shell LC_ALL=C $(GCC) -print-search-dirs | sed -ne 
"s/install: \(.*\)/\1include/gp")
 
 makedefine CPPFLAGS := -I$(TOP)/src/include -I$(TOP)/src/arch/$(ARCH)/include 
-I$(GCC_INC_DIR) $(CPUFLAGS)
 makedefine CFLAGS := $(CPU_OPT) $(DISTRO_CFLAGS) $(CPPFLAGS) -Os -nostdinc 
-nostdlib -fno-builtin  -Wall
--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to