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: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Douglas Anderson <dianders@chromium.org>
This commit is contained in:
Родитель
859fd5860c
Коммит
9a234a2e38
|
@ -99,18 +99,19 @@ cc-cross-prefix = \
|
|||
|
||||
# Include values from last time
|
||||
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): ;
|
||||
-include $(make-cache)
|
||||
|
||||
cached-data := $(filter __cached_%, $(.VARIABLES))
|
||||
|
||||
# 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; \
|
||||
mv $(make-cache).tmp $(make-cache))
|
||||
endif
|
||||
|
||||
create-cache-dir := $(if $(KBUILD_SRC),$(if $(cache-data),,1))
|
||||
|
||||
# Usage: $(call __sanitize-opt,Hello=Hola$(comma)Goodbye Adios)
|
||||
#
|
||||
# Convert all '$', ')', '(', '\', '=', ' ', ',', ':' to '_'
|
||||
|
@ -136,6 +137,10 @@ __sanitize-opt = $(subst $$,_,$(subst $(right_paren),_,$(subst $(left_paren),_,$
|
|||
define __run-and-store
|
||||
ifeq ($(origin $(1)),undefined)
|
||||
$$(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))
|
||||
endif
|
||||
endef
|
||||
|
|
Загрузка…
Ссылка в новой задаче