On 7/10/23 07:04, Mark Brown wrote:
The recent change fc96c7c19df ("selftests: error out if kernel header
files are not yet built") to generate an error message when building
kselftests without having installed the headers is generating spurious
failures during the install step which breaks the arm64 selftests (and
only the arm64 selftests):
Emit Tests for arm64
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
make[4]: *** [Makefile:26: all] Error 2
Presumably the arm64 tests are doing something unusual in their build
setup which could be adjusted but I didn't immediately see it and since
this is having a serious impact on test coverage in automation let's
just revert for now.
This is causing failures in KernelCI with the command:
make KBUILD_BUILD_USER=KernelCI FORMAT=.xz ARCH=arm64 HOSTCC=gcc CROSS_COMPILE=aarch64-linux-gnu- CROSS_COMPILE_COMPAT=arm-linux-gnueabihf- CC="ccache aarch64-linux-gnu-gcc" O=/tmp/kci/linux/build -C/tmp/kci/linux -j10 kselftest-gen_tar
and also when building using tuxmake.
Full log: https://storage.kernelci.org/mainline/master/v6.5-rc1/arm64/defconfig/gcc-10...
OK, I borrowed an arm64 system and was able to reproduce the problem.
There are 30 or 50 other pre-existing arm64 selftest build failures which were
quite misleading at first, until I got into the "right" selftests mindset of,
"massive swaths of selftests are broken, deal with it". :)
Anyway, I can now see new hard failure that you reported:
Emit Tests for arm64
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
make[5]: *** [../../lib.mk:81: kernel_header_files] Error 1
Let me see if there is a quick fix for this, especially given that
every other subsystem is somehow avoiding this--it's probably easy, just
a sec...
thanks,
--
John Hubbard
NVIDIA
>
> Fixes: 9fc96c7c19df ("selftests: error out if kernel header files are not yet built")
> Signed-off-by: Mark Brown
broonie@kernel.org
> ---
> tools/testing/selftests/Makefile | 21 +--------------------
> tools/testing/selftests/lib.mk | 40 +++-------------------------------------
> 2 files changed, 4 insertions(+), 57 deletions(-)
>
> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
> index 666b56f22a41..405683b8cb39 100644
> --- a/tools/testing/selftests/Makefile
> +++ b/tools/testing/selftests/Makefile
> @@ -146,12 +146,10 @@ ifneq ($(KBUILD_OUTPUT),)
> abs_objtree := $(realpath $(abs_objtree))
> BUILD := $(abs_objtree)/kselftest
> KHDR_INCLUDES := -isystem ${abs_objtree}/usr/include
> - KHDR_DIR := ${abs_objtree}/usr/include
> else
> BUILD := $(CURDIR)
> abs_srctree := $(shell cd $(top_srcdir) && pwd)
> KHDR_INCLUDES := -isystem ${abs_srctree}/usr/include
> - KHDR_DIR := ${abs_srctree}/usr/include
> DEFAULT_INSTALL_HDR_PATH := 1
> endif
>
> @@ -165,7 +163,7 @@ export KHDR_INCLUDES
> # all isn't the first target in the file.
> .DEFAULT_GOAL := all
>
> -all: kernel_header_files
> +all:
> @ret=1; \
> for TARGET in $(TARGETS); do \
> BUILD_TARGET=$$BUILD/$$TARGET; \
> @@ -176,23 +174,6 @@ all: kernel_header_files
> ret=$$((ret * $$?)); \
> done; exit $$ret;
>
> -kernel_header_files:
> - @ls $(KHDR_DIR)/linux/*.h >/dev/null 2>/dev/null; \
> - if [ $$? -ne 0 ]; then \
> - RED='\033[1;31m'; \
> - NOCOLOR='\033[0m'; \
> - echo; \
> - echo -e "$${RED}error$${NOCOLOR}: missing kernel header files."; \
> - echo "Please run this and try again:"; \
> - echo; \
> - echo " cd $(top_srcdir)"; \
> - echo " make headers"; \
> - echo; \
> - exit 1; \
> - fi
> -
> -.PHONY: kernel_header_files
> -
> run_tests: all
> @for TARGET in $(TARGETS); do \
> BUILD_TARGET=$$BUILD/$$TARGET; \
> diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
> index d17854285f2b..05400462c779 100644
> --- a/tools/testing/selftests/lib.mk
> +++ b/tools/testing/selftests/lib.mk
> @@ -44,26 +44,10 @@ endif
> selfdir = $(realpath $(dir $(filter %/lib.mk,$(MAKEFILE_LIST))))
> top_srcdir = $(selfdir)/../../..
>
> -ifeq ("$(origin O)", "command line")
> - KBUILD_OUTPUT := $(O)
> +ifeq ($(KHDR_INCLUDES),)
> +KHDR_INCLUDES := -isystem $(top_srcdir)/usr/include
> endif
>
> -ifneq ($(KBUILD_OUTPUT),)
> - # Make's built-in functions such as $(abspath ...), $(realpath ...) cannot
> - # expand a shell special character '~'. We use a somewhat tedious way here.
> - abs_objtree := $(shell cd $(top_srcdir) && mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd)
> - $(if $(abs_objtree),, \
> - $(error failed to create output directory "$(KBUILD_OUTPUT)"))
> - # $(realpath ...) resolves symlinks
> - abs_objtree := $(realpath $(abs_objtree))
> - KHDR_DIR := ${abs_objtree}/usr/include
> -else
> - abs_srctree := $(shell cd $(top_srcdir) && pwd)
> - KHDR_DIR := ${abs_srctree}/usr/include
> -endif
> -
> -KHDR_INCLUDES := -isystem $(KHDR_DIR)
> -
> # The following are built by lib.mk common compile rules.
> # TEST_CUSTOM_PROGS should be used by tests that require
> # custom build rule and prevent common build rule use.
> @@ -74,25 +58,7 @@ TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
> TEST_GEN_PROGS_EXTENDED := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS_EXTENDED))
> TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
>
> -all: kernel_header_files $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) \
> - $(TEST_GEN_FILES)
> -
> -kernel_header_files:
> - @ls $(KHDR_DIR)/linux/*.h >/dev/null 2>/dev/null; \
> - if [ $$? -ne 0 ]; then \
> - RED='\033[1;31m'; \
> - NOCOLOR='\033[0m'; \
> - echo; \
> - echo -e "$${RED}error$${NOCOLOR}: missing kernel header files."; \
> - echo "Please run this and try again:"; \
> - echo; \
> - echo " cd $(top_srcdir)"; \
> - echo " make headers"; \
> - echo; \
> - exit 1; \
> - fi
> -
> -.PHONY: kernel_header_files
> +all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)
>
> define RUN_TESTS
> BASE_DIR="$(selfdir)"; \
>
> ---
> base-commit: 06c2afb862f9da8dc5efa4b6076a0e48c3fbaaa5
> change-id: 20230710-kselftest-fix-arm64-c023160018d7
>
> Best regards,