path: root/scripts/
diff options
authorMasahiro Yamada <>2017-11-13 19:29:37 +0900
committerMasahiro Yamada <>2017-11-16 09:07:35 +0900
commit8a78756eb545a6fb8007fa154a626ca2bc208027 (patch)
treea5f6f791cf742128df2d9af0cfba1393cae0b0c4 /scripts/
parent591f66899784ae0afa13ff9a3eb5ce0a4358e48b (diff)
kbuild: create object directories simpler and faster
For the out-of-tree build, scripts/ creates output directories, but this operation is not efficient. scripts/Makefile.lib calculates obj-dirs as follows: obj-dirs := $(dir $(multi-objs) $(obj-y)) Please notice $(sort ...) is not used here. Usually the result is as many "./" as objects here. For a lot of duplicated paths, the following command is invoked. _dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d))) Then, the costly shell command is run over and over again. I see many points for optimization: [1] Use $(sort ...) to cut down duplicated paths before passing them to system call [2] Use single $(shell ...) instead of repeating it with $(foreach ...) This will reduce forking. [3] We can calculate obj-dirs more simply. Most of objects are already accumulated in $(targets). So, $(dir $(targets)) is fine and more comprehensive. I also removed ugly code in arch/x86/entry/vdso/Makefile. This is now really unnecessary. Signed-off-by: Masahiro Yamada <> Acked-by: Ingo Molnar <> Tested-by: Douglas Anderson <>
Diffstat (limited to 'scripts/')
1 files changed, 0 insertions, 12 deletions
diff --git a/scripts/ b/scripts/
index 9cfd5c84d76f..a5e03838eca8 100644
--- a/scripts/
+++ b/scripts/
@@ -48,15 +48,6 @@ host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
host-cshobjs := $(sort $(foreach m,$(host-cshlib),$($(
host-cxxshobjs := $(sort $(foreach m,$(host-cxxshlib),$($(
-# output directory for programs/.o files
-# hostprogs-y := tools/build may have been specified.
-# Retrieve also directory of .o files from prog-objs or prog-cxxobjs notation
-host-objdirs := $(dir $(__hostprogs) $(host-cobjs) $(host-cxxobjs))
-host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs))))
-__hostprogs := $(addprefix $(obj)/,$(__hostprogs))
host-csingle := $(addprefix $(obj)/,$(host-csingle))
host-cmulti := $(addprefix $(obj)/,$(host-cmulti))
host-cobjs := $(addprefix $(obj)/,$(host-cobjs))
@@ -66,9 +57,6 @@ host-cshlib := $(addprefix $(obj)/,$(host-cshlib))
host-cxxshlib := $(addprefix $(obj)/,$(host-cxxshlib))
host-cshobjs := $(addprefix $(obj)/,$(host-cshobjs))
host-cxxshobjs := $(addprefix $(obj)/,$(host-cxxshobjs))
-host-objdirs := $(addprefix $(obj)/,$(host-objdirs))
-obj-dirs += $(host-objdirs)
# Handle options to gcc. Support building with separate output directory