Now that test_kmods/Makefile correctly handles O=, KBUILD_OUTPUT, and
missing kernel directories, wire it into lib.mk's module build
infrastructure via TEST_GEN_MODS_DIR.

Replace the bespoke pattern rule with a gen_mods_dir target that adds
VMLINUX_BTF and RESOLVE_BTFIDS as prerequisites, letting lib.mk drive
the actual build and clean lifecycle. Make TEST_KMOD_TARGETS order-only
dependents of gen_mods_dir and make the .ko copy step resilient so
that a missing module results in a SKIP rather than an error.

Signed-off-by: Ricardo B. Marlière <[email protected]>
---
 tools/testing/selftests/bpf/Makefile | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/tools/testing/selftests/bpf/Makefile 
b/tools/testing/selftests/bpf/Makefile
index f75c4f52c028..715f282193c8 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -123,6 +123,7 @@ TEST_PROGS_EXTENDED := \
 TEST_KMODS := bpf_testmod.ko bpf_test_no_cfi.ko bpf_test_modorder_x.ko \
        bpf_test_modorder_y.ko bpf_test_rqspinlock.ko
 TEST_KMOD_TARGETS = $(addprefix $(OUTPUT)/,$(TEST_KMODS))
+TEST_GEN_MODS_DIR := test_kmods
 
 # Compile but not part of 'make run_tests'
 TEST_GEN_PROGS_EXTENDED = \
@@ -152,7 +153,6 @@ override define CLEAN
        $(Q)$(RM) -r $(TEST_GEN_FILES)
        $(Q)$(RM) -r $(TEST_KMODS)
        $(Q)$(RM) -r $(EXTRA_CLEAN)
-       $(Q)$(MAKE) -C test_kmods clean
        $(Q)$(MAKE) docs-clean
 endef
 
@@ -277,19 +277,15 @@ $(OUTPUT)/sign-file: ../../../../scripts/sign-file.c
                  $< -o $@ \
                  $(shell $(PKG_CONFIG) --libs libcrypto 2> /dev/null || echo 
-lcrypto)
 
-# This should really be a grouped target, but make versions before 4.3 don't
-# support that for regular rules. However, pattern matching rules are 
implicitly
-# treated as grouped even with older versions of make, so as a workaround, the
-# subst() turns the rule into a pattern matching rule
-$(addprefix test_kmods/,$(subst .ko,%ko,$(TEST_KMODS))): $(VMLINUX_BTF) 
$(RESOLVE_BTFIDS) $(wildcard test_kmods/Makefile test_kmods/*.[ch])
-       $(Q)$(RM) test_kmods/*.ko test_kmods/*.mod.o # force re-compilation
-       $(Q)$(MAKE) $(submake_extras) -C test_kmods     \
-               RESOLVE_BTFIDS=$(RESOLVE_BTFIDS)        \
-               EXTRA_CFLAGS='' EXTRA_LDFLAGS=''
-
-$(TEST_KMOD_TARGETS): $(addprefix test_kmods/,$(TEST_KMODS))
+gen_mods_dir: $(VMLINUX_BTF) $(RESOLVE_BTFIDS)
+
+$(TEST_KMOD_TARGETS): | gen_mods_dir
        $(call msg,MOD,,$@)
-       $(Q)cp test_kmods/$(@F) $@
+       $(Q)if [ -f test_kmods/$(@F) ]; then \
+               cp test_kmods/$(@F) $@; \
+       else \
+               printf '  %-8s %s\n' SKIP $(@F) 1>&2; \
+       fi
 
 
 DEFAULT_BPFTOOL := $(HOST_SCRATCH_DIR)/sbin/bpftool

-- 
2.53.0


Reply via email to