On Tue, Oct 13, 2026 at 10:41:00PM +0200, Thomas Weißschuh wrote:
On 2026-10-11 19:36:43-0400, Sasha Levin wrote:
Add a "Kernel selftests" sub-menu with one entry per selftests directory
that builds with only a C library and does not write into the source
tree. Each is built as "make kselftest-all" builds it, with KHDR_INCLUDES
pointing at the UAPI headers installed in the object tree, but by its own
make, so the selected ones build in parallel. Selftests whose Makefile
does not use KHDR_INCLUDES still build against the C library's copy of
the UAPI headers.
The selftests do not track header dependencies, so a selftest is built
again from scratch when its own directory, a header or makefile any
selftest may share, or a kernel source it includes directly (the vDSO
test includes the architecture's vDSO code) is newer than its last
build.
Selftests that need libraries beyond the C library, a vmlinux with BTF,
or a sanitizer runtime are left out for now.
Assisted-by: LLM
Signed-off-by: Sasha Levin <[email protected]>
---
tools/Kconfig | 239 ++++++++++++++++++++++++++++++++++++++++++
tools/Makefile.kbuild | 100 ++++++++++++++++++
2 files changed, 339 insertions(+)
(...)
diff --git a/tools/Makefile.kbuild b/tools/Makefile.kbuild
index 62fd494253eca..c31347258d0a9 100644
--- a/tools/Makefile.kbuild
+++ b/tools/Makefile.kbuild
@@ -92,6 +92,106 @@ PHONY += perf
perf: FORCE
$(call build,$(outdir)/perf,-C $(toolsdir)/perf -f Makefile.perf
O=$(outdir)/perf $(perf-flags) $(perf-flags-y),,TOOLS_BUILD_PERF)
(...)
+# Unlike tools/build, the selftests do not track header dependencies. A
+# selftest is built again from scratch when its own directory, a header or
+# makefile any selftest may share, or a kernel source it includes directly
+# is newer than its last build.
+selftest-shared := $(outdir)/selftests/.shared
+selftest-extra-vDSO := $(abs_srctree)/arch/$(SRCARCH)
Can we not fix the selftests to properly track header dependencies?
That has been an annoyance of mine for quite some time.
It would also get rid of a whole bunch of hackery here.
Ugh... I suppose? The current check is also incomplete: it misses headers
outside the paths it watches, such as include/linux/annotate.h, which the vDSO
test pulls in, or tools/arch/x86/include/uapi, used by ir and proc.
I'll see if I can fix it up...
--
Thanks,
Sasha