selftests: error out if kernel header files are not yet built
As per a discussion with Muhammad Usama Anjum [1], the following is how one is supposed to build selftests: make headers && make -C tools/testing/selftests/mm Change the selftest build system's lib.mk to fail out with a helpful message if that prerequisite "make headers" has not been done yet. [1] https://lore.kernel.org/all/bf910fa5-0c96-3707-cce4-5bcc656b6274@collabora.com/ [jhubbard@nvidia.com: abort the make process the first time headers aren't detected] Link: https://lkml.kernel.org/r/14573e7e-f2ad-ff34-dfbd-3efdebee51ed@nvidia.com [anders.roxell@linaro.org: fix out-of-tree builds] Link: https://lkml.kernel.org/r/20230613074931.666966-1-anders.roxell@linaro.org Link: https://lkml.kernel.org/r/20230606071637.267103-12-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Signed-off-by: Anders Roxell <anders.roxell@linaro.org> Reviewed-by: Muhammad Usama Anjum <usama.anjum@collabora.com> Tested-by: Muhammad Usama Anjum <usama.anjum@collabora.com> Cc: David Hildenbrand <david@redhat.com> Cc: Peter Xu <peterx@redhat.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Nathan Chancellor <nathan@kernel.org> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
01d6c48a82
commit
9fc96c7c19
@ -145,10 +145,12 @@ 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
|
||||
|
||||
@ -162,7 +164,7 @@ export KHDR_INCLUDES
|
||||
# all isn't the first target in the file.
|
||||
.DEFAULT_GOAL := all
|
||||
|
||||
all:
|
||||
all: kernel_header_files
|
||||
@ret=1; \
|
||||
for TARGET in $(TARGETS); do \
|
||||
BUILD_TARGET=$$BUILD/$$TARGET; \
|
||||
@ -173,6 +175,23 @@ all:
|
||||
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; \
|
||||
|
@ -44,10 +44,26 @@ endif
|
||||
selfdir = $(realpath $(dir $(filter %/lib.mk,$(MAKEFILE_LIST))))
|
||||
top_srcdir = $(selfdir)/../../..
|
||||
|
||||
ifeq ($(KHDR_INCLUDES),)
|
||||
KHDR_INCLUDES := -isystem $(top_srcdir)/usr/include
|
||||
ifeq ("$(origin O)", "command line")
|
||||
KBUILD_OUTPUT := $(O)
|
||||
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.
|
||||
@ -58,7 +74,25 @@ 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: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(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
|
||||
|
||||
define RUN_TESTS
|
||||
BASE_DIR="$(selfdir)"; \
|
||||
|
Loading…
x
Reference in New Issue
Block a user