On Fri, Jul 26, 2019 at 2:21 PM Stanislav Fomichev <s...@fomichev.me> wrote: > > On 07/26, Andrii Nakryiko wrote: > > Apprently listing header as a normal dependency for a binary output > > makes it go through compilation as if it was C code. This currently > > works without a problem, but in subsequent commits causes problems for > > differently generated test.h for test_progs. Marking those headers as > > order-only dependency solves the issue. > Are you sure it will not result in a situation where > test_progs/test_maps is not regenerated if tests.h is updated. > > If I read the following doc correctly, order deps make sense for > directories only: > https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html > > Can you maybe double check it with: > * make > * add new prog_tests/test_something.c > * make > to see if the binary is regenerated with test_something.c?
Yeah, tested that, it triggers test_progs rebuild. Ordering is still preserved, because test.h is dependency of test_progs.c, which is dependency of test_progs binary, so that's why it works. As to why .h file is compiled as C file, I have no idea and ideally that should be fixed somehow. I also started with just removing header as dependency completely (because it's indirect dependency of test_progs.c), but that broke the build logic. Dunno, too much magic... This works, tested many-many times, so I was satisfied enough :) > > Maybe fix the problem of header compilation by having '#ifndef > DECLARE_TEST #define DECLARE_TEST() #endif' in tests.h instead? That's ugly, I'd like to avoid doing that. > > > Signed-off-by: Andrii Nakryiko <andr...@fb.com> > > --- > > tools/testing/selftests/bpf/Makefile | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/tools/testing/selftests/bpf/Makefile > > b/tools/testing/selftests/bpf/Makefile > > index 11c9c62c3362..bb66cc4a7f34 100644 > > --- a/tools/testing/selftests/bpf/Makefile > > +++ b/tools/testing/selftests/bpf/Makefile > > @@ -235,7 +235,7 @@ PROG_TESTS_H := $(PROG_TESTS_DIR)/tests.h > > PROG_TESTS_FILES := $(wildcard prog_tests/*.c) > > test_progs.c: $(PROG_TESTS_H) > > $(OUTPUT)/test_progs: CFLAGS += $(TEST_PROGS_CFLAGS) > > -$(OUTPUT)/test_progs: test_progs.c $(PROG_TESTS_H) $(PROG_TESTS_FILES) > > +$(OUTPUT)/test_progs: test_progs.c $(PROG_TESTS_FILES) | $(PROG_TESTS_H) > > $(PROG_TESTS_H): $(PROG_TESTS_FILES) | $(PROG_TESTS_DIR) > > $(shell ( cd prog_tests/; \ > > echo '/* Generated header, do not edit */'; \ > > @@ -256,7 +256,7 @@ MAP_TESTS_H := $(MAP_TESTS_DIR)/tests.h > > MAP_TESTS_FILES := $(wildcard map_tests/*.c) > > test_maps.c: $(MAP_TESTS_H) > > $(OUTPUT)/test_maps: CFLAGS += $(TEST_MAPS_CFLAGS) > > -$(OUTPUT)/test_maps: test_maps.c $(MAP_TESTS_H) $(MAP_TESTS_FILES) > > +$(OUTPUT)/test_maps: test_maps.c $(MAP_TESTS_FILES) | $(MAP_TESTS_H) > > $(MAP_TESTS_H): $(MAP_TESTS_FILES) | $(MAP_TESTS_DIR) > > $(shell ( cd map_tests/; \ > > echo '/* Generated header, do not edit */'; \ > > @@ -277,7 +277,7 @@ VERIFIER_TESTS_H := $(VERIFIER_TESTS_DIR)/tests.h > > VERIFIER_TEST_FILES := $(wildcard verifier/*.c) > > test_verifier.c: $(VERIFIER_TESTS_H) > > $(OUTPUT)/test_verifier: CFLAGS += $(TEST_VERIFIER_CFLAGS) > > -$(OUTPUT)/test_verifier: test_verifier.c $(VERIFIER_TESTS_H) > > +$(OUTPUT)/test_verifier: test_verifier.c | $(VERIFIER_TEST_FILES) > > $(VERIFIER_TESTS_H) > > $(VERIFIER_TESTS_H): $(VERIFIER_TEST_FILES) | $(VERIFIER_TESTS_DIR) > > $(shell ( cd verifier/; \ > > echo '/* Generated header, do not edit */'; \ > > -- > > 2.17.1 > >