The .test.d dependency files are generated by the C preprocessor and list
the headers each test file actually #includes. Skeleton headers appear in
those generated lists, so the .test.o -> .skel.h dependency is already
tracked by the .d file content.

Make skeletons and BPFOBJ order-only prerequisites of .test.d so that a
missing or skipped skeleton does not prevent .test.d generation, and
regenerating a skeleton or rebuilding libbpf.a does not force .test.d to be
recreated. This avoids unnecessary recompilation and, more importantly,
avoids build errors when a skeleton was intentionally skipped due to a BPF
compilation failure.

Note that adding a new BPF skeleton via a modified existing local header
still works correctly: GNU make builds order-only prerequisites that do not
exist (the order-only qualifier only suppresses timestamp-driven rebuilds,
not existence-driven builds), so a brand-new .skel.h listed in
TRUNNER_BPF_SKELS is generated even when .test.d is otherwise up to date.
The modified local header invalidates .test.o through the previously
included .d content, forcing a recompile that regenerates .test.d with the
new .skel.h dependency captured by gcc -MMD.

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

diff --git a/tools/testing/selftests/bpf/Makefile 
b/tools/testing/selftests/bpf/Makefile
index 9a4d8bea0c18..608e6dff0392 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -726,11 +726,11 @@ $(TRUNNER_TEST_OBJS): $(TRUNNER_OUTPUT)/%.test.o:         
        \
 $(TRUNNER_TEST_OBJS:.o=.d): $(TRUNNER_OUTPUT)/%.test.d:                        
\
                            $(TRUNNER_TESTS_DIR)/%.c                    \
                            $(TRUNNER_EXTRA_HDRS)                       \
+                           $$(BPFOBJ) | $(TRUNNER_OUTPUT)              \
                            $(TRUNNER_BPF_SKELS)                        \
                            $(TRUNNER_BPF_LSKELS)                       \
                            $(TRUNNER_BPF_LSKELS_SIGNED)                \
-                           $(TRUNNER_BPF_SKELS_LINKED)                 \
-                           $$(BPFOBJ) | $(TRUNNER_OUTPUT)
+                           $(TRUNNER_BPF_SKELS_LINKED)
 
 ifeq ($(filter clean docs-clean emit_tests,$(MAKECMDGOALS)),)
 include $(wildcard $(TRUNNER_TEST_OBJS:.o=.d))

-- 
2.54.0


Reply via email to