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 --- init/Kconfig | 2 +- usr/include/Makefile | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/init/Kconfig b/init/Kconfig index fa79feb8fe57..4e7ae65683ee 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -247,7 +247,7 @@ config WERROR config UAPI_HEADER_TEST bool "Compile test UAPI headers" - depends on HEADERS_INSTALL && CC_CAN_LINK + depends on HEADERS_INSTALL help Compile test headers exported to user-space to ensure they are self-contained, i.e. compilable as standalone units. diff --git a/usr/include/Makefile b/usr/include/Makefile index fa01bcda21f5..6d86a53c6f0a 100644 --- a/usr/include/Makefile +++ b/usr/include/Makefile @@ -151,7 +151,8 @@ endif always-y := $(patsubst $(obj)/%.h,%.hdrtest, $(shell find $(obj) -name '*.h' 2>/dev/null)) 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. quiet_cmd_hdrtest = HDRTEST $< -- 2.52.0