summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: fec79ac)
raw | patch | inline | side by side (parent: fec79ac)
author | Daniel Schwierzeck <daniel.schwierzeck@googlemail.com> | |
Mon, 7 Nov 2011 05:26:43 +0000 (05:26 +0000) | ||
committer | Wolfgang Denk <wd@denx.de> | |
Mon, 7 Nov 2011 20:56:11 +0000 (21:56 +0100) |
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>
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>
config.mk | patch | blob | history |
diff --git a/config.mk b/config.mk
index 918cffe3eb70c677c997778932c07050109a677f..ddaa4775cd972a55623b6c783ce9b82f7b969d6e 100644 (file)
--- a/config.mk
+++ b/config.mk
# 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...)