Message ID | 1510242077-8122-5-git-send-email-yamada.masahiro@socionext.com |
---|---|
State | Superseded |
Headers | show |
Series | kbuild: optimize output directory creation | expand |
Masahiro-san On 11/09/2017 11:41 PM, Masahiro Yamada wrote: > The previous commit largely optimized the object directory creation. > We can optimize it more for incremental build. > > There are already *.cmd files in the output directory. The existing > *.cmd files have been picked up by $(wildcard ...). Obviously, > directories containing them exist too, so we can skip "mkdir -p". > > With this, Kbuild runs almost zero "mkdir -p" in incremental building. > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > --- > > scripts/Makefile.build | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/scripts/Makefile.build b/scripts/Makefile.build > index 89ac180..90ea7a5 100644 > --- a/scripts/Makefile.build > +++ b/scripts/Makefile.build > @@ -583,8 +583,13 @@ endif > ifneq ($(KBUILD_SRC),) > # Create directories for object files if directory does not exist > obj-dirs := $(sort $(obj) $(patsubst %/,%, $(dir $(targets)))) > +# If cmd_files exist, their directories apparently exist. Skip mkdir. > +exist-dirs := $(sort $(patsubst %/,%, $(dir $(cmd_files)))) > +obj-dirs := $(strip $(filter-out . $(exist-dirs), $(obj-dirs))) First I am not sure if the dot "." here is necessary, because I guess kbuild always descend into subdir do recursive make, so, very $(cmd_files) should have at least 1 level dir. Second, Assuming that "." probably exists, would it be "./"? because it is what "dir" function returns. -- Sincerely, Cao jin > +ifneq ($(obj-dirs),) > $(shell mkdir -p $(obj-dirs)) > endif > +endif >
Hi Cao, 2017-11-10 19:58 GMT+09:00 Cao jin <caoj.fnst@cn.fujitsu.com>: > Masahiro-san > > On 11/09/2017 11:41 PM, Masahiro Yamada wrote: >> The previous commit largely optimized the object directory creation. >> We can optimize it more for incremental build. >> >> There are already *.cmd files in the output directory. The existing >> *.cmd files have been picked up by $(wildcard ...). Obviously, >> directories containing them exist too, so we can skip "mkdir -p". >> >> With this, Kbuild runs almost zero "mkdir -p" in incremental building. >> >> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> >> --- >> >> scripts/Makefile.build | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/scripts/Makefile.build b/scripts/Makefile.build >> index 89ac180..90ea7a5 100644 >> --- a/scripts/Makefile.build >> +++ b/scripts/Makefile.build >> @@ -583,8 +583,13 @@ endif >> ifneq ($(KBUILD_SRC),) >> # Create directories for object files if directory does not exist >> obj-dirs := $(sort $(obj) $(patsubst %/,%, $(dir $(targets)))) >> +# If cmd_files exist, their directories apparently exist. Skip mkdir. >> +exist-dirs := $(sort $(patsubst %/,%, $(dir $(cmd_files)))) >> +obj-dirs := $(strip $(filter-out . $(exist-dirs), $(obj-dirs))) > > First I am not sure if the dot "." here is necessary, because I guess > kbuild always descend into subdir do recursive make, so, very > $(cmd_files) should have at least 1 level dir. The top level Makefile descends into ./Kbuild prepare0: archprepare gcc-plugins $(Q)$(MAKE) $(build)=. So, it is possible to have 0 level dir. > Second, Assuming that "." probably exists, Right "." always exists. That's way I filtered it out. > would it be "./"? because it > is what "dir" function returns. No. You missed $(patsubst %/,%, ...) Having said that, "." generally comes from phony targets and I think I can fix it in a more correct way. I will remove "." from v2. > -- > Sincerely, > Cao jin > >> +ifneq ($(obj-dirs),) >> $(shell mkdir -p $(obj-dirs)) >> endif >> +endif >> > > > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Best Regards Masahiro Yamada
diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 89ac180..90ea7a5 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -583,8 +583,13 @@ endif ifneq ($(KBUILD_SRC),) # Create directories for object files if directory does not exist obj-dirs := $(sort $(obj) $(patsubst %/,%, $(dir $(targets)))) +# If cmd_files exist, their directories apparently exist. Skip mkdir. +exist-dirs := $(sort $(patsubst %/,%, $(dir $(cmd_files)))) +obj-dirs := $(strip $(filter-out . $(exist-dirs), $(obj-dirs))) +ifneq ($(obj-dirs),) $(shell mkdir -p $(obj-dirs)) endif +endif # Declare the contents of the .PHONY variable as phony. We keep that # information in a variable se we can use it in if_changed and friends.
The previous commit largely optimized the object directory creation. We can optimize it more for incremental build. There are already *.cmd files in the output directory. The existing *.cmd files have been picked up by $(wildcard ...). Obviously, directories containing them exist too, so we can skip "mkdir -p". With this, Kbuild runs almost zero "mkdir -p" in incremental building. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> --- scripts/Makefile.build | 5 +++++ 1 file changed, 5 insertions(+) -- 2.7.4