summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schwierzeck <daniel.schwierzeck@googlemail.com>2011-11-07 05:26:43 +0000
committerWolfgang Denk <wd@denx.de>2011-11-07 21:56:11 +0100
commitb6a467d73d8847e2307e7e95768e3287d51a9fe6 (patch)
tree9a1573e7c1232a113ba8de84a784510b075889b1
parentfec79acc864bed049b6beae719ccbf2bbec5403a (diff)
config.mk: use memoization in cc-option macro to speed up compilation
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. The old behaviour can be restored by defining the config option CONFIG_CC_OPT_CACHE_DISABLE=y. Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
-rw-r--r--config.mk20
1 files changed, 18 insertions, 2 deletions
diff --git a/config.mk b/config.mk
index 918cffe3eb..ddaa4775cd 100644
--- a/config.mk
+++ b/config.mk
@@ -107,8 +107,24 @@ 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))))
+
+-include $(CC_OPTIONS_CACHE_FILE)
+
+cc-option-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)"; fi)
+
+ifeq ($(CONFIG_CC_OPT_CACHE_DISABLE),y)
+cc-option = $(strip $(if $(call cc-option-sys,$1),$1,$2))
+else
+cc-option = $(strip $(if $(findstring $1,$(CC_OPTIONS)),$1,\
+ $(if $(call cc-option-sys,$1),$1,$2)))
+endif
#
# Include the make variables (CC, etc...)