* [PATCH 0/3] kbuild: reduce single-build dependencies
@ 2026-11-11 13:41 Vincent Mailhol
2026-11-11 13:41 ` [PATCH 1/3] kbuild: make rq-offsets-file an explicit preparation dependency Vincent Mailhol
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Vincent Mailhol @ 2026-11-11 13:41 UTC (permalink / raw)
To: Nathan Chancellor, Nicolas Schier
Cc: linux-kernel, linux-kbuild, Vincent Mailhol
Building a single .o file depends on the prepare target which contains a
lot of dependencies. Some of those preparation dependencies are not
needed for a single .o build.
This is a small annoyance because a modification of the compilation
flags causes several prepare dependencies to rebuild. Consequently,
single-build incurs an artificial penalty.
Move the generic preparation checks and scripts/mod out of the
single-build preparation path. The first patch is a preparation change
to make rq-offsets-file an explicit prepare dependency. The second
addresses missing-syscalls check and atomic-checks. The third and last
patch addresses scripts/mod.
== Illustration ==
These are the build steps triggered when changing the compilation
flags (here: adding W=1).
Before this series...
$ time make W=1 init/main.o
CC scripts/mod/empty.o
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/modpost.o
CC scripts/mod/devicetable-offsets.s
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/sumversion.o
HOSTCC scripts/mod/symsearch.o
HOSTLD scripts/mod/modpost
CC kernel/bounds.s
CC arch/x86/kernel/asm-offsets.s
CC kernel/sched/rq-offsets.s
CALL scripts/checksyscalls.sh
DESCEND objtool
CC init/main.o
real 0m3.603s
user 0m2.839s
sys 0m0.959s
... and after:
$ time make W=1 init/main.o
CC kernel/bounds.s
CC arch/x86/kernel/asm-offsets.s
CC kernel/sched/rq-offsets.s
DESCEND objtool
CC init/main.o
real 0m2.060s
user 0m1.505s
sys 0m0.732s
(done on an x86_64 cpu).
Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
Vincent Mailhol (3):
kbuild: make rq-offsets-file an explicit preparation dependency
kbuild: move preparation checks out of single-build
kbuild: move scripts/mod target out of single-build
Kbuild | 7 +++++--
Makefile | 11 +++++++----
2 files changed, 12 insertions(+), 6 deletions(-)
---
base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4
change-id: 20261111-reduce-single-build-dependencies-966646f25a0c
Best regards,
--
Vincent Mailhol <mailhol@kernel.org>
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 1/3] kbuild: make rq-offsets-file an explicit preparation dependency 2026-11-11 13:41 [PATCH 0/3] kbuild: reduce single-build dependencies Vincent Mailhol @ 2026-11-11 13:41 ` Vincent Mailhol 2026-11-11 13:41 ` [PATCH 2/3] kbuild: move preparation checks out of single-build Vincent Mailhol 2026-11-11 13:41 ` [PATCH 3/3] kbuild: move scripts/mod target " Vincent Mailhol 2 siblings, 0 replies; 4+ messages in thread From: Vincent Mailhol @ 2026-11-11 13:41 UTC (permalink / raw) To: Nathan Chancellor, Nicolas Schier Cc: linux-kernel, linux-kbuild, Vincent Mailhol The generated rq-offsets.h header is included by linux/sched.h and must exist before compiling ordinary objects. Currently that header is prepared indirectly through the missing-syscalls target. Make prepare depend directly on rq-offsets-file. Because rq-offsets-file depends on offsets-file, that other dependency can be removed. Keep the rq-offsets-file dependency in missing-syscalls so that the check can still run independently. Signed-off-by: Vincent Mailhol <mailhol@kernel.org> --- Kbuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Kbuild b/Kbuild index a6a0192dea08..5a65be2d51b0 100644 --- a/Kbuild +++ b/Kbuild @@ -87,7 +87,7 @@ $(atomic-checks): $(obj)/.checked-%: include/linux/atomic/% FORCE # A phony target that depends on all the preparation targets PHONY += prepare -prepare: $(offsets-file) missing-syscalls $(atomic-checks) +prepare: $(rq-offsets-file) missing-syscalls $(atomic-checks) @: # Ordinary directory descending -- 2.56.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 2/3] kbuild: move preparation checks out of single-build 2026-11-11 13:41 [PATCH 0/3] kbuild: reduce single-build dependencies Vincent Mailhol 2026-11-11 13:41 ` [PATCH 1/3] kbuild: make rq-offsets-file an explicit preparation dependency Vincent Mailhol @ 2026-11-11 13:41 ` Vincent Mailhol 2026-11-11 13:41 ` [PATCH 3/3] kbuild: move scripts/mod target " Vincent Mailhol 2 siblings, 0 replies; 4+ messages in thread From: Vincent Mailhol @ 2026-11-11 13:41 UTC (permalink / raw) To: Nathan Chancellor, Nicolas Schier Cc: linux-kernel, linux-kbuild, Vincent Mailhol The missing-syscalls check and the atomic-checks are currently set as preparation dependencies. However, these are not needed to compile, for example, a single object. Add a new prepare_checks target to group those checks and call it conditionally only if we are not doing a single-build so that the prepare target does not trigger that dependency anymore. Signed-off-by: Vincent Mailhol <mailhol@kernel.org> --- Kbuild | 7 +++++-- Makefile | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Kbuild b/Kbuild index 5a65be2d51b0..5151e32985c6 100644 --- a/Kbuild +++ b/Kbuild @@ -86,8 +86,11 @@ $(atomic-checks): $(obj)/.checked-%: include/linux/atomic/% FORCE # A phony target that depends on all the preparation targets -PHONY += prepare -prepare: $(rq-offsets-file) missing-syscalls $(atomic-checks) +PHONY += prepare prepare_checks +prepare: $(rq-offsets-file) + @: + +prepare_checks: missing-syscalls $(atomic-checks) @: # Ordinary directory descending diff --git a/Makefile b/Makefile index f895752d4b05..2c1289a44c56 100644 --- a/Makefile +++ b/Makefile @@ -1413,8 +1413,8 @@ archprepare: outputmakefile archheaders archscripts scripts include/config/kerne include/generated/rustc_cfg remove-stale-files prepare0: archprepare + $(Q)$(MAKE) $(build)=. prepare $(if $(single-build),,prepare_checks) $(Q)$(MAKE) $(build)=scripts/mod - $(Q)$(MAKE) $(build)=. prepare # All the preparing.. prepare: prepare0 -- 2.56.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 3/3] kbuild: move scripts/mod target out of single-build 2026-11-11 13:41 [PATCH 0/3] kbuild: reduce single-build dependencies Vincent Mailhol 2026-11-11 13:41 ` [PATCH 1/3] kbuild: make rq-offsets-file an explicit preparation dependency Vincent Mailhol 2026-11-11 13:41 ` [PATCH 2/3] kbuild: move preparation checks out of single-build Vincent Mailhol @ 2026-11-11 13:41 ` Vincent Mailhol 2 siblings, 0 replies; 4+ messages in thread From: Vincent Mailhol @ 2026-11-11 13:41 UTC (permalink / raw) To: Nathan Chancellor, Nicolas Schier Cc: linux-kernel, linux-kbuild, Vincent Mailhol The scripts/mod target is currently set as a preparation dependency. However, this is not needed to compile, for example, a single object. Add a new modpost_prepare target for scripts/mod and make in-tree modpost and modules_prepare depend on it so that the prepare target does not trigger that dependency anymore. Signed-off-by: Vincent Mailhol <mailhol@kernel.org> --- Makefile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 2c1289a44c56..93236f310f08 100644 --- a/Makefile +++ b/Makefile @@ -1405,7 +1405,7 @@ scripts: scripts_basic scripts_dtc # archprepare is used in arch Makefiles and when processed asm symlink, # version.h and scripts_basic is processed / created. -PHONY += prepare archprepare +PHONY += prepare archprepare modpost_prepare archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \ asm-generic $(version_h) include/generated/utsrelease.h \ @@ -1414,6 +1414,8 @@ archprepare: outputmakefile archheaders archscripts scripts include/config/kerne prepare0: archprepare $(Q)$(MAKE) $(build)=. prepare $(if $(single-build),,prepare_checks) + +modpost_prepare: archprepare $(Q)$(MAKE) $(build)=scripts/mod # All the preparing.. @@ -1765,7 +1767,7 @@ endif modules: modules_prepare # Target to prepare building external modules -modules_prepare: prepare +modules_prepare: prepare modpost_prepare $(Q)$(MAKE) $(build)=scripts scripts/module.lds endif # CONFIG_MODULES @@ -2189,7 +2191,8 @@ KBUILD_MODULES := endif # CONFIG_MODULES PHONY += modpost -modpost: $(if $(single-build),, $(if $(KBUILD_BUILTIN), vmlinux.o)) \ +modpost: $(if $(KBUILD_EXTMOD),,modpost_prepare) \ + $(if $(single-build),, $(if $(KBUILD_BUILTIN), vmlinux.o)) \ $(if $(KBUILD_MODULES), modules_check) $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost -- 2.56.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-11-11 13:41 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-11-11 13:41 [PATCH 0/3] kbuild: reduce single-build dependencies Vincent Mailhol 2026-11-11 13:41 ` [PATCH 1/3] kbuild: make rq-offsets-file an explicit preparation dependency Vincent Mailhol 2026-11-11 13:41 ` [PATCH 2/3] kbuild: move preparation checks out of single-build Vincent Mailhol 2026-11-11 13:41 ` [PATCH 3/3] kbuild: move scripts/mod target " Vincent Mailhol
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®