Commit 9a234a2e authored by Masahiro Yamada's avatar Masahiro Yamada

kbuild: create directory for make cache only when necessary

Currently, the existence of $(dir $(make-cache)) is always checked,
and created if it is missing.

We can avoid unnecessary system calls by some tricks.

[1] If KBUILD_SRC is unset, we are building in the source tree.
    The output directory checks can be entirely skipped.
[2] If at least one cache data is found, it means the cache file
    was included.  Obviously its directory exists.  Skip "mkdir -p".
[3] If Makefile does not contain any call of __run-and-store, it will
    not create a cache file.  No need to create its directory.
[4] The "mkdir -p" should be only invoked by the first call of
    __run-and-store
Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
parent 859fd586
...@@ -99,18 +99,19 @@ cc-cross-prefix = \ ...@@ -99,18 +99,19 @@ cc-cross-prefix = \
# Include values from last time # Include values from last time
make-cache := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/,$(if $(obj),$(obj)/)).cache.mk make-cache := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/,$(if $(obj),$(obj)/)).cache.mk
ifeq ($(wildcard $(dir $(make-cache))),)
$(shell mkdir -p '$(dir $(make-cache))')
endif
$(make-cache): ; $(make-cache): ;
-include $(make-cache) -include $(make-cache)
cached-data := $(filter __cached_%, $(.VARIABLES))
# If cache exceeds 1000 lines, shrink it down to 500. # If cache exceeds 1000 lines, shrink it down to 500.
ifneq ($(word 1000,$(filter __cached_%, $(.VARIABLES))),) ifneq ($(word 1000,$(cached-data)),)
$(shell tail -n 500 $(make-cache) > $(make-cache).tmp; \ $(shell tail -n 500 $(make-cache) > $(make-cache).tmp; \
mv $(make-cache).tmp $(make-cache)) mv $(make-cache).tmp $(make-cache))
endif endif
create-cache-dir := $(if $(KBUILD_SRC),$(if $(cache-data),,1))
# Usage: $(call __sanitize-opt,Hello=Hola$(comma)Goodbye Adios) # Usage: $(call __sanitize-opt,Hello=Hola$(comma)Goodbye Adios)
# #
# Convert all '$', ')', '(', '\', '=', ' ', ',', ':' to '_' # Convert all '$', ')', '(', '\', '=', ' ', ',', ':' to '_'
...@@ -136,6 +137,10 @@ __sanitize-opt = $(subst $$,_,$(subst $(right_paren),_,$(subst $(left_paren),_,$ ...@@ -136,6 +137,10 @@ __sanitize-opt = $(subst $$,_,$(subst $(right_paren),_,$(subst $(left_paren),_,$
define __run-and-store define __run-and-store
ifeq ($(origin $(1)),undefined) ifeq ($(origin $(1)),undefined)
$$(eval $(1) := $$(shell $$(2))) $$(eval $(1) := $$(shell $$(2)))
ifeq ($(create-cache-dir),1)
$$(shell mkdir -p $(dir $(make-cache)))
$$(eval create-cache-dir :=)
endif
$$(shell echo '$(1) := $$($(1))' >> $(make-cache)) $$(shell echo '$(1) := $$($(1))' >> $(make-cache))
endif endif
endef endef
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment