kbuild: make single target builds even faster
commit b1fbfcb4a20949df08dd995927cdc5ad220c128d upstream. Commit 2dffd23f81a3 ("kbuild: make single target builds much faster") made the situation much better. To improve it even more, apply the similar idea to the top Makefile. Trim unrelated directories from build-dirs. The single build code must be moved above the 'descend' target. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Tested-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2e54f93a3b
commit
c15a3d8f5e
90
Makefile
90
Makefile
@ -1635,6 +1635,50 @@ help:
|
|||||||
PHONY += prepare
|
PHONY += prepare
|
||||||
endif # KBUILD_EXTMOD
|
endif # KBUILD_EXTMOD
|
||||||
|
|
||||||
|
# Single targets
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# To build individual files in subdirectories, you can do like this:
|
||||||
|
#
|
||||||
|
# make foo/bar/baz.s
|
||||||
|
#
|
||||||
|
# The supported suffixes for single-target are listed in 'single-targets'
|
||||||
|
#
|
||||||
|
# To build only under specific subdirectories, you can do like this:
|
||||||
|
#
|
||||||
|
# make foo/bar/baz/
|
||||||
|
|
||||||
|
ifdef single-build
|
||||||
|
|
||||||
|
# .ko is special because modpost is needed
|
||||||
|
single-ko := $(sort $(filter %.ko, $(MAKECMDGOALS)))
|
||||||
|
single-no-ko := $(sort $(patsubst %.ko,%.mod, $(MAKECMDGOALS)))
|
||||||
|
|
||||||
|
$(single-ko): single_modpost
|
||||||
|
@:
|
||||||
|
$(single-no-ko): descend
|
||||||
|
@:
|
||||||
|
|
||||||
|
ifeq ($(KBUILD_EXTMOD),)
|
||||||
|
# For the single build of in-tree modules, use a temporary file to avoid
|
||||||
|
# the situation of modules_install installing an invalid modules.order.
|
||||||
|
MODORDER := .modules.tmp
|
||||||
|
endif
|
||||||
|
|
||||||
|
PHONY += single_modpost
|
||||||
|
single_modpost: $(single-no-ko)
|
||||||
|
$(Q){ $(foreach m, $(single-ko), echo $(extmod-prefix)$m;) } > $(MODORDER)
|
||||||
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
||||||
|
|
||||||
|
KBUILD_MODULES := 1
|
||||||
|
|
||||||
|
export KBUILD_SINGLE_TARGETS := $(addprefix $(extmod-prefix), $(single-no-ko))
|
||||||
|
|
||||||
|
# trim unrelated directories
|
||||||
|
build-dirs := $(foreach d, $(build-dirs), \
|
||||||
|
$(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d)))
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
# Handle descending into subdirectories listed in $(build-dirs)
|
# Handle descending into subdirectories listed in $(build-dirs)
|
||||||
# Preset locale variables to speed up the build process. Limit locale
|
# Preset locale variables to speed up the build process. Limit locale
|
||||||
# tweaks to this spot to avoid wrong language settings when running
|
# tweaks to this spot to avoid wrong language settings when running
|
||||||
@ -1643,7 +1687,9 @@ endif # KBUILD_EXTMOD
|
|||||||
PHONY += descend $(build-dirs)
|
PHONY += descend $(build-dirs)
|
||||||
descend: $(build-dirs)
|
descend: $(build-dirs)
|
||||||
$(build-dirs): prepare
|
$(build-dirs): prepare
|
||||||
$(Q)$(MAKE) $(build)=$@ single-build=$(single-build) need-builtin=1 need-modorder=1
|
$(Q)$(MAKE) $(build)=$@ \
|
||||||
|
single-build=$(if $(filter-out $@/, $(single-no-ko)),1) \
|
||||||
|
need-builtin=1 need-modorder=1
|
||||||
|
|
||||||
clean-dirs := $(addprefix _clean_, $(clean-dirs))
|
clean-dirs := $(addprefix _clean_, $(clean-dirs))
|
||||||
PHONY += $(clean-dirs) clean
|
PHONY += $(clean-dirs) clean
|
||||||
@ -1747,48 +1793,6 @@ tools/%: FORCE
|
|||||||
$(Q)mkdir -p $(objtree)/tools
|
$(Q)mkdir -p $(objtree)/tools
|
||||||
$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $*
|
$(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $*
|
||||||
|
|
||||||
# Single targets
|
|
||||||
# ---------------------------------------------------------------------------
|
|
||||||
# To build individual files in subdirectories, you can do like this:
|
|
||||||
#
|
|
||||||
# make foo/bar/baz.s
|
|
||||||
#
|
|
||||||
# The supported suffixes for single-target are listed in 'single-targets'
|
|
||||||
#
|
|
||||||
# To build only under specific subdirectories, you can do like this:
|
|
||||||
#
|
|
||||||
# make foo/bar/baz/
|
|
||||||
|
|
||||||
ifdef single-build
|
|
||||||
|
|
||||||
# .ko is special because modpost is needed
|
|
||||||
single-ko := $(sort $(filter %.ko, $(MAKECMDGOALS)))
|
|
||||||
single-no-ko := $(sort $(patsubst %.ko,%.mod, $(MAKECMDGOALS)))
|
|
||||||
|
|
||||||
$(single-ko): single_modpost
|
|
||||||
@:
|
|
||||||
$(single-no-ko): descend
|
|
||||||
@:
|
|
||||||
|
|
||||||
ifeq ($(KBUILD_EXTMOD),)
|
|
||||||
# For the single build of in-tree modules, use a temporary file to avoid
|
|
||||||
# the situation of modules_install installing an invalid modules.order.
|
|
||||||
MODORDER := .modules.tmp
|
|
||||||
endif
|
|
||||||
|
|
||||||
PHONY += single_modpost
|
|
||||||
single_modpost: $(single-no-ko)
|
|
||||||
$(Q){ $(foreach m, $(single-ko), echo $(extmod-prefix)$m;) } > $(MODORDER)
|
|
||||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
|
||||||
|
|
||||||
KBUILD_MODULES := 1
|
|
||||||
|
|
||||||
export KBUILD_SINGLE_TARGETS := $(addprefix $(extmod-prefix), $(single-no-ko))
|
|
||||||
|
|
||||||
single-build = $(if $(filter-out $@/, $(single-no-ko)),1)
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
# FIXME Should go into a make.lib or something
|
# FIXME Should go into a make.lib or something
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user