>> Signed-off-by: Patrick Georgi <[email protected]>
>>
Updated patch: ccache defaults to "no" for CC, HOSTCC and ROMCC, and can
be configured by Kconfig.
abuild is extended to draw in ccache as well.
Complete abuild run on our build server:
without ccache: 17 minutes
first time with ccache: 16 minutes
second time with ccache (same revision): 9 minutes
Still
Signed-off-by: Patrick Georgi <[email protected]>
Index: src/Kconfig
===================================================================
--- src/Kconfig (revision 5290)
+++ src/Kconfig (working copy)
@@ -62,6 +62,7 @@
config SCANBUILD_ENABLE
bool "Build with scan-build for static analysis"
default n
+ depends on !CCACHE
help
Changes the build process to scan-build is used.
Requires scan-build in path.
@@ -73,6 +74,13 @@
help
Where the scan-build report should be stored
+config CCACHE
+ bool "ccache"
+ default n
+ help
+ Enables the use of ccache for faster builds.
+ Requires ccache in path.
+
endmenu
source src/mainboard/Kconfig
Index: src/arch/i386/Makefile.bootblock.inc
===================================================================
--- src/arch/i386/Makefile.bootblock.inc (revision 5290)
+++ src/arch/i386/Makefile.bootblock.inc (working copy)
@@ -71,7 +71,7 @@
@printf " ROMCC $(subst $(obj)/,,$(@))\n"
$(CC) -MM -MT$(obj)/mainboard/$(MAINBOARDDIR)/bootblock.inc \
$< > $(obj)/mainboard/$(MAINBOARDDIR)/bootblock.inc.d
- $(obj)/romcc $(bootblock_romccflags) $(ROMCCFLAGS) $(INCLUDES) $< -o $@
+ $(ROMCC) -c -S $(bootblock_romccflags) $(ROMCCFLAGS) -I. $(INCLUDES) $<
-o $@
$(obj)/bootblock.elf: $(obj)/mainboard/$(MAINBOARDDIR)/bootblock.o
$(obj)/bootblock/ldscript.ld
@printf " LINK $(subst $(obj)/,,$(@))\n"
Index: src/arch/i386/Makefile.inc
===================================================================
--- src/arch/i386/Makefile.inc (revision 5290)
+++ src/arch/i386/Makefile.inc (working copy)
@@ -195,7 +195,7 @@
$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc:
$(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/romcc $(OPTION_TABLE_H)
$(obj)/build.h
printf " ROMCC romstage.inc\n"
- $(obj)/romcc $(ROMCCFLAGS) -include $(obj)/build.h $(INCLUDES) $< -o $@
+ $(ROMCC) -c -S $(ROMCCFLAGS) -include $(obj)/build.h -I. $(INCLUDES) $<
-o $@
else
Index: util/abuild/abuild
===================================================================
--- util/abuild/abuild (revision 5290)
+++ util/abuild/abuild (working copy)
@@ -55,6 +55,9 @@
# clang mode enabled by -sb option.
scanbuild=false
+# use ccache
+ccache=false
+
# stackprotect mode enabled by -ns option.
stackprotect=false
@@ -174,6 +177,11 @@
echo "CONFIG_DEFAULT_CONSOLE_LOGLEVEL=$loglevel" >>
.config
fi
+ if [ "$ccache" = "true" ]; then
+ printf "(ccache enabled) "
+ echo "CONFIG_CCACHE=y" >> .config
+ fi
+
if [ "$scanbuild" = "true" ]; then
printf "(scan-build enabled) "
echo "CONFIG_SCANBUILD_ENABLE=y" >> .config
@@ -495,6 +503,7 @@
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 " [-y|--ccache] use ccache\n"
printf " [-C|--config] configure-only mode\n"
printf " [-l|--loglevel <num>] set loglevel\n"
printf " [lbroot] absolute path to coreboot
sources\n"
@@ -530,11 +539,11 @@
getoptbrand="`getopt -V`"
if [ "${getoptbrand:0:6}" == "getopt" ]; then
# Detected GNU getopt that supports long options.
- args=`getopt -l
version,verbose,help,all,target:,broken,payloads:,test,cpus:,silent,xml,config,loglevel:
Vvhat:bp:Tc:sxCl: -- "$@"`
+ args=`getopt -l
version,verbose,help,all,target:,broken,payloads:,test,cpus:,silent,xml,config,loglevel:,ccache
Vvhat:bp:Tc:sxCl:y -- "$@"`
eval set "$args"
else
# Detected non-GNU getopt
- args=`getopt Vvhat:bp:Tc:sxCl:o $*`
+ args=`getopt Vvhat:bp:Tc:sxCl:y $*`
set -- $args
fi
@@ -559,6 +568,7 @@
-s|--silent) shift; silent="-s";;
-ns|--nostackprotect) shift; stackprotect=true;;
-sb|--scan-build) shift; scanbuild=true;;
+ -y|--ccache) shift; ccache=true;;
-C|--config) shift; configureonly=1;;
-l|--loglevel) shift; loglevel="$1"; shift;;
--) shift; break;;
Index: util/romcc/romcc.c
===================================================================
--- util/romcc/romcc.c (revision 5290)
+++ util/romcc/romcc.c (working copy)
@@ -24968,10 +24968,14 @@
state.errout = stderr;
state.dbgout = stdout;
/* Remember the output filename */
- state.output = fopen(state.compiler->ofilename, "w");
- if (!state.output) {
- error(&state, 0, "Cannot open output file %s\n",
- state.compiler->ofilename);
+ if ((state.compiler->flags & COMPILER_PP_ONLY) &&
(strcmp("auto.inc",state.compiler->ofilename) == 0)) {
+ state.output = stdout;
+ } else {
+ state.output = fopen(state.compiler->ofilename, "w");
+ if (!state.output) {
+ error(&state, 0, "Cannot open output file %s\n",
+ state.compiler->ofilename);
+ }
}
/* Make certain a good cleanup happens */
exit_state = &state;
@@ -25146,6 +25150,12 @@
else if (strncmp(argv[1], "-m", 2) == 0) {
result = arch_encode_flag(&arch, argv[1]+2);
}
+ else if (strncmp(argv[1], "-c", 2) == 0) {
+ result = 0;
+ }
+ else if (strncmp(argv[1], "-S", 2) == 0) {
+ result = 0;
+ }
else if (strncmp(argv[1], "-include", 10) == 0) {
struct filelist *old_head = include_filelist;
include_filelist = malloc(sizeof(struct
filelist));
Index: Makefile
===================================================================
--- Makefile (revision 5290)
+++ Makefile (working copy)
@@ -61,6 +61,7 @@
endif
CPP:= $(CC) -x assembler-with-cpp -DASSEMBLY -E
+ROMCC:= $(obj)/romcc
HOSTCC = gcc
HOSTCXX = g++
HOSTCFLAGS := -I$(srck) -I$(objk) -g
@@ -85,6 +86,17 @@
endif
endif
+ifeq ($(CONFIG_CCACHE),y)
+CCACHE:=CCACHE_COMPILERCHECK=content $(wildcard $(addsuffix /ccache,$(subst :,
,$(PATH))))
+ifeq ($(CCACHE),)
+$(error ccache selected, but not found in PATH)
+endif
+CC := $(CCACHE) $(CC)
+HOSTCC := $(CCACHE) $(HOSTCC)
+HOSTCXX := $(CCACHE) $(HOSTCXX)
+ROMCC := $(CCACHE) $(ROMCC)
+endif
+
strip_quotes = $(subst ",,$(subst \",,$(1)))
ARCHDIR-$(CONFIG_ARCH_X86) := i386
--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot