* [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; 5+ 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 related [flat|nested] 5+ 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; 5+ 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 related [flat|nested] 5+ 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
2026-11-12 13:45 ` sashiko-bot
2 siblings, 1 reply; 5+ 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 related [flat|nested] 5+ messages in thread
* Re: [PATCH 3/3] kbuild: move scripts/mod target out of single-build
2026-11-11 13:41 ` [PATCH 3/3] kbuild: move scripts/mod target " Vincent Mailhol
@ 2026-11-12 13:45 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-11-12 13:45 UTC (permalink / raw)
To: Vincent Mailhol, Nathan Chancellor, Nicolas Schier; +Cc: linux-kbuild
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Low] kbuild: unordered modpost_prepare and stack_protector_prepare
mutates CFLAGS
--
commit 08ffc13380249741520c2ea434688d701b5d0e9b
Author: Vincent Mailhol <mailhol@kernel.org>
kbuild: move scripts/mod target out of single-build
This commit moves the scripts/mod build out of prepare0 into a new
modpost_prepare target depended on by modules_prepare and modpost.
> diff --git a/Makefile b/Makefile
> index 2c1289a44c560..93236f310f080 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
[Severity: Low]
Should modpost_prepare be ordered relative to stack_protector_prepare (or
depend on prepare)?
On arm, arm64, powerpc, and riscv, prepare depends on
stack_protector_prepare, which depends on prepare0 and mutates the
exported KBUILD_CFLAGS variable at recipe execution time:
arch/arm64/Makefile:
prepare: stack_protector_prepare
stack_protector_prepare: prepare0
$(eval KBUILD_CFLAGS += -mstack-protector-guard=sysreg \
-mstack-protector-guard-reg=sp_el0 \
-mstack-protector-guard-offset=$(shell \
awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}' \
$(objtree)/include/generated/asm-offsets.h))
Previously, scripts/mod was built inside prepare0, so it always ran before
stack_protector_prepare modified KBUILD_CFLAGS. With modpost_prepare
only depending on archprepare, a parallel build runs modpost_prepare
concurrently with prepare0 before stack_protector_prepare updates
KBUILD_CFLAGS, whereas a serial build or make modules_prepare runs
prepare first and passes the updated KBUILD_CFLAGS to scripts/mod.
Because scripts/mod/empty.o is compiled with KBUILD_CFLAGS, switching
between parallel and serial or single-module builds changes its recorded
command line, rebuilding empty.o, regenerating elfconfig.h (which uses
if_changed), and forcing a full rebuild of modpost.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261111-reduce-single-build-dependencies-v1-0-7196ca986a85@kernel.org?part=3
^ permalink raw reply [flat|nested] 5+ messages in thread