Thread (30 messages) 30 messages, 4 authors, 2020-01-17

Re: [PATCH bpf-next v3 09/11] selftests: Remove tools/lib/bpf from include path

From: Andrii Nakryiko <hidden>
Date: 2020-01-16 22:41:46
Also in: bpf, linux-kselftest, linux-rdma, lkml

On Thu, Jan 16, 2020 at 5:28 AM Toke Høiland-Jørgensen [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Toke Høiland-Jørgensen <redacted>

To make sure no new files are introduced that doesn't include the bpf/
prefix in its #include, remove tools/lib/bpf from the include path
entirely.

Instead, we introduce a new header files directory under the scratch tools/
dir, and add a rule to run the 'install_headers' rule from libbpf to have a
full set of consistent libbpf headers in $(OUTPUT)/tools/include/bpf, and
then use $(OUTPUT)/tools/include as the include path for selftests.

For consistency we also make sure we put all the scratch build files from
other bpftool and libbpf into tools/build/, so everything stays within
selftests/.

Signed-off-by: Toke Høiland-Jørgensen <redacted>
---
 tools/testing/selftests/bpf/.gitignore |    1 +
 tools/testing/selftests/bpf/Makefile   |   50 +++++++++++++++++++-------------
 2 files changed, 31 insertions(+), 20 deletions(-)
diff --git a/tools/testing/selftests/bpf/.gitignore b/tools/testing/selftests/bpf/.gitignore
index 1d14e3ab70be..849be9990ad2 100644
--- a/tools/testing/selftests/bpf/.gitignore
+++ b/tools/testing/selftests/bpf/.gitignore
@@ -40,3 +40,4 @@ test_cpp
 /bpf_gcc
 /tools
 bpf_helper_defs.h
+/include/bpf
Isn't the real path (within selftests/bpf) a tools/include/bpf, which
is already ignored through /tools rule?
quoted hunk ↗ jump to hunk
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index 1fd7da49bd56..c3fa695bb028 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -20,8 +20,8 @@ CLANG         ?= clang
 LLC            ?= llc
 LLVM_OBJCOPY   ?= llvm-objcopy
 BPF_GCC                ?= $(shell command -v bpf-gcc;)
-CFLAGS += -g -Wall -O2 $(GENFLAGS) -I$(CURDIR) -I$(APIDIR) -I$(LIBDIR)  \
-         -I$(BPFDIR) -I$(GENDIR) -I$(TOOLSINCDIR)                      \
+CFLAGS += -g -Wall -O2 $(GENFLAGS) -I$(CURDIR) -I$(APIDIR)              \
+         -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) -I$(TOOLSINCDIR)     \
          -Dbpf_prog_load=bpf_prog_test_load                            \
          -Dbpf_load_program=bpf_test_load_program
 LDLIBS += -lcap -lelf -lz -lrt -lpthread
@@ -97,11 +97,15 @@ OVERRIDE_TARGETS := 1
 override define CLEAN
        $(call msg,CLEAN)
        $(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN)
-       $(MAKE) -C $(BPFDIR) OUTPUT=$(OUTPUT)/ clean
 endef

 include ../lib.mk

+SCRATCH_DIR := $(OUTPUT)/tools
+BUILD_DIR := $(SCRATCH_DIR)/build
+INCLUDE_DIR := $(SCRATCH_DIR)/include
+INCLUDE_BPF := $(INCLUDE_DIR)/bpf/bpf.h
+
 # Define simple and short `make test_progs`, `make test_sysctl`, etc targets
 # to build individual tests.
 # NOTE: Semicolon at the end is critical to override lib.mk's default static
@@ -120,7 +124,7 @@ $(OUTPUT)/urandom_read: urandom_read.c
        $(call msg,BINARY,,$@)
        $(CC) -o $@ $< -Wl,--build-id

-$(OUTPUT)/test_stub.o: test_stub.c
+$(OUTPUT)/test_stub.o: test_stub.c $(INCLUDE_BPF)
        $(call msg,CC,,$@)
        $(CC) -c $(CFLAGS) -o $@ $<
@@ -129,7 +133,7 @@ $(OUTPUT)/runqslower: force
        $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/runqslower           \
                    OUTPUT=$(CURDIR)/tools/ VMLINUX_BTF=$(abspath ../../../../vmlinux)

-BPFOBJ := $(OUTPUT)/libbpf.a
+BPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a

 $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(OUTPUT)/test_stub.o $(BPFOBJ)
@@ -155,17 +159,23 @@ force:
 DEFAULT_BPFTOOL := $(OUTPUT)/tools/sbin/bpftool
 BPFTOOL ?= $(DEFAULT_BPFTOOL)

-$(DEFAULT_BPFTOOL): force
-       $(Q)$(MAKE) $(submake_extras)  -C $(BPFTOOLDIR)                       \
+$(BUILD_DIR)/libbpf $(BUILD_DIR)/bpftool $(INCLUDE_DIR):
+       $(call msg,MKDIR,,$@)
+       mkdir -p $@
+
+$(DEFAULT_BPFTOOL): force $(BUILD_DIR)/bpftool
directories should be included as order-only dependencies (after | )
+       $(Q)$(MAKE) $(submake_extras)  -C $(BPFTOOLDIR)         \
+                   OUTPUT=$(BUILD_DIR)/bpftool/                        \
                    prefix= DESTDIR=$(OUTPUT)/tools/ install

-$(BPFOBJ): force
-       $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(OUTPUT)/
+$(BPFOBJ): force $(BUILD_DIR)/libbpf
same
+       $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) \
+               OUTPUT=$(BUILD_DIR)/libbpf/

-BPF_HELPERS := $(OUTPUT)/bpf_helper_defs.h $(wildcard $(BPFDIR)/bpf_*.h)
-$(OUTPUT)/bpf_helper_defs.h: $(BPFOBJ)
-       $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR)                            \
-                   OUTPUT=$(OUTPUT)/ $(OUTPUT)/bpf_helper_defs.h
+BPF_HELPERS := $(wildcard $(BPFDIR)/bpf_*.h) $(INCLUDE_BPF)
Shouldn't all BPF_HELPERS come from $(INCLUDE_DIR)/bpf now?
+$(INCLUDE_BPF): force $(BPFOBJ)
And this can be more properly a $(BPF_HELPERS): force $(BPFOBJ)?
quoted hunk ↗ jump to hunk
+       $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) install_headers \
+               OUTPUT=$(BUILD_DIR)/libbpf/ DESTDIR=$(SCRATCH_DIR) prefix=

 # Get Clang's default includes on this system, as opposed to those seen by
 # '-target bpf'. This fixes "missing" files on some architectures/distros,
@@ -185,8 +195,8 @@ MENDIAN=$(if $(IS_LITTLE_ENDIAN),-mlittle-endian,-mbig-endian)

 CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG))
 BPF_CFLAGS = -g -D__TARGET_ARCH_$(SRCARCH) $(MENDIAN)                  \
-            -I$(OUTPUT) -I$(CURDIR) -I$(CURDIR)/include/uapi           \
-            -I$(APIDIR) -I$(LIBDIR) -I$(BPFDIR) -I$(abspath $(OUTPUT)/../usr/include)
+            -I$(INCLUDE_DIR) -I$(CURDIR) -I$(CURDIR)/include/uapi      \
+            -I$(APIDIR) -I$(abspath $(OUTPUT)/../usr/include)

 CLANG_CFLAGS = $(CLANG_SYS_INCLUDES) \
               -Wno-compare-distinct-pointer-types
@@ -306,7 +316,7 @@ $(TRUNNER_TEST_OBJS): $(TRUNNER_OUTPUT)/%.test.o:                   \
                      $(TRUNNER_EXTRA_HDRS)                             \
                      $(TRUNNER_BPF_OBJS)                               \
                      $(TRUNNER_BPF_SKELS)                              \
-                     $$(BPFOBJ) | $(TRUNNER_OUTPUT)
+                     $$(BPFOBJ) $$(INCLUDE_BPF) | $(TRUNNER_OUTPUT)
singling out $(INCLUDE_BPF) looks weird? But I think $(BPFOBJ)
achieves the same effect, so this change can be probably dropped? Same
below.
quoted hunk ↗ jump to hunk
        $$(call msg,TEST-OBJ,$(TRUNNER_BINARY),$$@)
        cd $$(@D) && $$(CC) $$(CFLAGS) -c $(CURDIR)/$$< $$(LDLIBS) -o $$(@F)
@@ -314,7 +324,7 @@ $(TRUNNER_EXTRA_OBJS): $(TRUNNER_OUTPUT)/%.o:                               \
                       %.c                                              \
                       $(TRUNNER_EXTRA_HDRS)                            \
                       $(TRUNNER_TESTS_HDR)                             \
-                      $$(BPFOBJ) | $(TRUNNER_OUTPUT)
+                      $$(BPFOBJ) $$(INCLUDE_BPF) | $(TRUNNER_OUTPUT)
        $$(call msg,EXT-OBJ,$(TRUNNER_BINARY),$$@)
        $$(CC) $$(CFLAGS) -c $$< $$(LDLIBS) -o $$@
@@ -326,7 +336,7 @@ ifneq ($2,)
 endif

 $(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS)                      \
-                            $(TRUNNER_EXTRA_OBJS) $$(BPFOBJ)           \
+                            $(TRUNNER_EXTRA_OBJS) $$(BPFOBJ) $$(INCLUDE_BPF)           \
                             | $(TRUNNER_BINARY)-extras
        $$(call msg,BINARY,,$$@)
        $$(CC) $$(CFLAGS) $$(filter %.a %.o,$$^) $$(LDLIBS) -o $$@
@@ -388,7 +398,7 @@ $(OUTPUT)/test_cpp: test_cpp.cpp $(OUTPUT)/test_core_extern.skel.h $(BPFOBJ)
        $(call msg,CXX,,$@)
        $(CXX) $(CFLAGS) $^ $(LDLIBS) -o $@

-EXTRA_CLEAN := $(TEST_CUSTOM_PROGS)                                    \
+EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR)                     \
        prog_tests/tests.h map_tests/tests.h verifier/tests.h           \
        feature                                                         \
-       $(addprefix $(OUTPUT)/,*.o *.skel.h no_alu32 bpf_gcc tools)
+       $(addprefix $(OUTPUT)/,*.o *.skel.h no_alu32 bpf_gcc)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help