diff options
| author | Masahiro Yamada <yamada.masahiro@socionext.com> | 2017-11-13 05:29:34 -0500 |
|---|---|---|
| committer | Masahiro Yamada <yamada.masahiro@socionext.com> | 2017-11-15 19:07:32 -0500 |
| commit | 9a234a2e384349f21afac8d718aa294a668ad4fa (patch) | |
| tree | 43d0b8a9ca7c6aa953a0bf849e457813e3892108 /scripts/Kbuild.include | |
| parent | 859fd5860cd1bbbd0370ba4f20725999681b66c8 (diff) | |
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>
Diffstat (limited to 'scripts/Kbuild.include')
| -rw-r--r-- | scripts/Kbuild.include | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index be1c9d65eaf4..065324a8046f 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include | |||
| @@ -99,18 +99,19 @@ cc-cross-prefix = \ | |||
| 99 | 99 | ||
| 100 | # Include values from last time | 100 | # Include values from last time |
| 101 | make-cache := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/,$(if $(obj),$(obj)/)).cache.mk | 101 | make-cache := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/,$(if $(obj),$(obj)/)).cache.mk |
| 102 | ifeq ($(wildcard $(dir $(make-cache))),) | ||
| 103 | $(shell mkdir -p '$(dir $(make-cache))') | ||
| 104 | endif | ||
| 105 | $(make-cache): ; | 102 | $(make-cache): ; |
| 106 | -include $(make-cache) | 103 | -include $(make-cache) |
| 107 | 104 | ||
| 105 | cached-data := $(filter __cached_%, $(.VARIABLES)) | ||
| 106 | |||
| 108 | # If cache exceeds 1000 lines, shrink it down to 500. | 107 | # If cache exceeds 1000 lines, shrink it down to 500. |
| 109 | ifneq ($(word 1000,$(filter __cached_%, $(.VARIABLES))),) | 108 | ifneq ($(word 1000,$(cached-data)),) |
| 110 | $(shell tail -n 500 $(make-cache) > $(make-cache).tmp; \ | 109 | $(shell tail -n 500 $(make-cache) > $(make-cache).tmp; \ |
| 111 | mv $(make-cache).tmp $(make-cache)) | 110 | mv $(make-cache).tmp $(make-cache)) |
| 112 | endif | 111 | endif |
| 113 | 112 | ||
| 113 | create-cache-dir := $(if $(KBUILD_SRC),$(if $(cache-data),,1)) | ||
| 114 | |||
| 114 | # Usage: $(call __sanitize-opt,Hello=Hola$(comma)Goodbye Adios) | 115 | # Usage: $(call __sanitize-opt,Hello=Hola$(comma)Goodbye Adios) |
| 115 | # | 116 | # |
| 116 | # Convert all '$', ')', '(', '\', '=', ' ', ',', ':' to '_' | 117 | # Convert all '$', ')', '(', '\', '=', ' ', ',', ':' to '_' |
| @@ -136,6 +137,10 @@ __sanitize-opt = $(subst $$,_,$(subst $(right_paren),_,$(subst $(left_paren),_,$ | |||
| 136 | define __run-and-store | 137 | define __run-and-store |
| 137 | ifeq ($(origin $(1)),undefined) | 138 | ifeq ($(origin $(1)),undefined) |
| 138 | $$(eval $(1) := $$(shell $$(2))) | 139 | $$(eval $(1) := $$(shell $$(2))) |
| 140 | ifeq ($(create-cache-dir),1) | ||
| 141 | $$(shell mkdir -p $(dir $(make-cache))) | ||
| 142 | $$(eval create-cache-dir :=) | ||
| 143 | endif | ||
| 139 | $$(shell echo '$(1) := $$($(1))' >> $(make-cache)) | 144 | $$(shell echo '$(1) := $$($(1))' >> $(make-cache)) |
| 140 | endif | 145 | endif |
| 141 | endef | 146 | endef |
