kbuild: uapi: drop dependency on CC_CAN_LINK

The header tests try to compile each header. Some UAPI headers depend on
libc headers so they need a full userspace toolchain to build. This
dependency is expressed in kconfig as a dependency on CC_CAN_LINK.
Many kernel builds do not satisfy CC_CAN_LINK as they only use a
minimal kernel (cross-) compiler. In those configurations the UAPI
headers are not tested at all.

However most UAPI headers do not even depend on any libc headers,
and such dependencies are undesired in any case. Also the static
analysis performed by headers_check.pl does not need CC_CAN_LINK.

Drop the hard dependency on CC_CAN_LINK and instead skip the affected
compilation step for exactly those headers which require libc.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Link: https://patch.msgid.link/20251223-uapi-nostdinc-v1-5-d91545d794f7@linutronix.de
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
This commit is contained in:
Thomas Weißschuh 2025-12-23 08:04:12 +01:00 committed by Nathan Chancellor
parent c25d01e1c4
commit 2a0a30805a
No known key found for this signature in database
GPG key ID: 1D6B269171C01A96
2 changed files with 3 additions and 2 deletions

View file

@ -247,7 +247,7 @@ config WERROR
config UAPI_HEADER_TEST config UAPI_HEADER_TEST
bool "Compile test UAPI headers" bool "Compile test UAPI headers"
depends on HEADERS_INSTALL && CC_CAN_LINK depends on HEADERS_INSTALL
help help
Compile test headers exported to user-space to ensure they are Compile test headers exported to user-space to ensure they are
self-contained, i.e. compilable as standalone units. self-contained, i.e. compilable as standalone units.

View file

@ -151,7 +151,8 @@ endif
always-y := $(patsubst $(obj)/%.h,%.hdrtest, $(shell find $(obj) -name '*.h' 2>/dev/null)) always-y := $(patsubst $(obj)/%.h,%.hdrtest, $(shell find $(obj) -name '*.h' 2>/dev/null))
target-no-libc = $(filter-out $(uses-libc), $*.h) target-no-libc = $(filter-out $(uses-libc), $*.h)
target-can-compile = $(filter-out $(no-header-test), $*.h) target-can-compile = $(and $(filter-out $(no-header-test), $*.h), \
$(or $(CONFIG_CC_CAN_LINK), $(target-no-libc)))
# Include the header twice to detect missing include guard. # Include the header twice to detect missing include guard.
quiet_cmd_hdrtest = HDRTEST $< quiet_cmd_hdrtest = HDRTEST $<