Hi SImon, On Fri, Nov 4, 2011 at 5:32 PM, Simon Glass <s...@chromium.org> wrote: > On Fri, Nov 4, 2011 at 5:53 AM, Daniel Schwierzeck > <daniel.schwierz...@googlemail.com> wrote: >> Apply memoization to cc-option macro by caching the results of the >> gcc calls. This macro is called very often so using cached results >> leads to faster compilation times. >> >> Signed-off-by: Daniel Schwierzeck <daniel.schwierz...@googlemail.com> > > Tested-by: Simon Glass <s...@chromium.org> > > I see a big speed-up with this: > > full build 7.05s -> 4.1s > incremental 2.25s -> 1.05s > >> --- >> Changes for v2: >> - move cache file to $(obj)/include/generated >> - reworked completely >> - cache also non-working gcc options >> - remove CACHE_CC_OPTIONS config switch and enable this optimization >> by default >> >> config.mk | 23 +++++++++++++++++++++-- >> 1 files changed, 21 insertions(+), 2 deletions(-) >> >> diff --git a/config.mk b/config.mk >> index 918cffe..0da961a 100644 >> --- a/config.mk >> +++ b/config.mk >> @@ -107,8 +107,27 @@ HOSTCFLAGS += -pedantic >> # Option checker (courtesy linux kernel) to ensure >> # only supported compiler options are used >> # >> -cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ >> - > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) >> +CC_OPTIONS_CACHE_FILE := $(OBJTREE)/include/generated/cc_options.mk >> + >> +$(if $(wildcard $(CC_OPTIONS_CACHE_FILE)),,\ >> + $(shell mkdir -p $(dir $(CC_OPTIONS_CACHE_FILE)))) >> + >> +sinclude $(CC_OPTIONS_CACHE_FILE) >> + >> +_ccopt_sys = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ >> + > /dev/null 2>&1; then \ >> + echo 'CC_OPTIONS += $(strip $1)' >> >> $(CC_OPTIONS_CACHE_FILE); \ >> + echo "$(1)"; else \ >> + [ "x$(strip $2)" != "x" ] && \ > > Do shell still need that x bit?
Probably not but it is safer and does not really harm ;) > >> + echo 'CC_OPTIONS_NOP += $(strip $2)' >> >> $(CC_OPTIONS_CACHE_FILE); \ >> + echo "$(2)"; fi) >> + >> +_ccopt_cached = $(if $(filter $1,$(CC_OPTIONS)),$1,) > > Do you need the $(if - doesn't filter give you what you want by itself? You are right, the if is redundant. I will optimize this. > >> +_ccopt_nop_cached = $(if $(filter $1,$(CC_OPTIONS_NOP)),$1,) >> + >> +cc-option = $(if $(call _ccopt_cached,$1),$1,\ >> + $(if $(call _ccopt_nop_cached,$2),$2,\ >> + $(call _ccopt_sys,$1,$2))) >> >> # >> # Include the make variables (CC, etc...) >> -- >> 1.7.7.1 >> >> > > Thanks for doing this! > > Regards, > Simon > Thanks, Daniel _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot