Am 25.03.2010 18:02, schrieb Patrick Georgi:
> Hi,
>
> most of the tree was already ccache aware, with one exception: romcc.
> This hurt, as on the non-CAR boards, this is a large non-parallelizable
> part of the total build time.
>
> This patch changes romcc to:
> - accept -c and -S (and ignores them as that's already the only mode it
> knows)
> - send -E output (preprocessor only) to stdout except if a filename is
> given (by testing if it's set to the current default of auto.inc)
>
> With these, ccache3.0pre0 (the version I tried) is capable of cache
> romcc output.
>
> The Makefile changes in this patch make use of that, if "ccache" is
> found in $PATH (necessary as we use various paths for our romcc), and
> runs ccache $(obj)/romcc, using the "content" compiler version
> verification (which hashes the compiler executable) for romcc.
>
> Thus when romcc is changed, ccache doesn't use cached files but requests
> new builds.
>
> On my test system, abuild of a romcc board (thomson/ip1000) goes down
> from 9 to 3 seconds when using 4 parallel build jobs.
>
>
> Signed-off-by: Patrick Georgi <[email protected]>
>
This time with patch
Index: src/arch/i386/Makefile.bootblock.inc
===================================================================
--- src/arch/i386/Makefile.bootblock.inc (Revision 5290)
+++ src/arch/i386/Makefile.bootblock.inc (Arbeitskopie)
@@ -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 (Arbeitskopie)
@@ -9,6 +9,12 @@
ifdef POST_EVALUATION
+ROMCC:=$(obj)/romcc
+CCACHE:=CCACHE_COMPILERCHECK=content $(wildcard $(addsuffix /ccache,$(subst :,
,$(PATH))))
+ifneq ($(CCACHE),)
+ROMCC:=$(CCACHE) $(ROMCC)
+endif
+
#######################################################################
# Build the final rom image
COREBOOT_ROM_DEPENDENCIES:=
@@ -195,7 +201,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/romcc/romcc.c
===================================================================
--- util/romcc/romcc.c (Revision 5290)
+++ util/romcc/romcc.c (Arbeitskopie)
@@ -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));
--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot