selftests: Refactor build to remove tools/lib/bpf from include path
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 <toke@redhat.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/157952561246.1683545.2762245552022369203.stgit@toke.dk
This commit is contained in:
parent
b6580cd899
commit
a2c9652f75
4
tools/testing/selftests/bpf/.gitignore
vendored
4
tools/testing/selftests/bpf/.gitignore
vendored
@ -29,8 +29,6 @@ test_tcpnotify_user
|
|||||||
test_libbpf
|
test_libbpf
|
||||||
test_tcp_check_syncookie_user
|
test_tcp_check_syncookie_user
|
||||||
test_sysctl
|
test_sysctl
|
||||||
libbpf.pc
|
|
||||||
libbpf.so.*
|
|
||||||
test_hashmap
|
test_hashmap
|
||||||
test_btf_dump
|
test_btf_dump
|
||||||
xdping
|
xdping
|
||||||
@ -39,4 +37,4 @@ test_cpp
|
|||||||
/no_alu32
|
/no_alu32
|
||||||
/bpf_gcc
|
/bpf_gcc
|
||||||
/tools
|
/tools
|
||||||
bpf_helper_defs.h
|
|
||||||
|
@ -20,8 +20,8 @@ CLANG ?= clang
|
|||||||
LLC ?= llc
|
LLC ?= llc
|
||||||
LLVM_OBJCOPY ?= llvm-objcopy
|
LLVM_OBJCOPY ?= llvm-objcopy
|
||||||
BPF_GCC ?= $(shell command -v bpf-gcc;)
|
BPF_GCC ?= $(shell command -v bpf-gcc;)
|
||||||
CFLAGS += -g -Wall -O2 $(GENFLAGS) -I$(CURDIR) -I$(APIDIR) -I$(LIBDIR) \
|
CFLAGS += -g -Wall -O2 $(GENFLAGS) -I$(CURDIR) -I$(APIDIR) \
|
||||||
-I$(BPFDIR) -I$(GENDIR) -I$(TOOLSINCDIR) \
|
-I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) -I$(TOOLSINCDIR) \
|
||||||
-Dbpf_prog_load=bpf_prog_test_load \
|
-Dbpf_prog_load=bpf_prog_test_load \
|
||||||
-Dbpf_load_program=bpf_test_load_program
|
-Dbpf_load_program=bpf_test_load_program
|
||||||
LDLIBS += -lcap -lelf -lz -lrt -lpthread
|
LDLIBS += -lcap -lelf -lz -lrt -lpthread
|
||||||
@ -97,11 +97,15 @@ OVERRIDE_TARGETS := 1
|
|||||||
override define CLEAN
|
override define CLEAN
|
||||||
$(call msg,CLEAN)
|
$(call msg,CLEAN)
|
||||||
$(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN)
|
$(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN)
|
||||||
$(MAKE) -C $(BPFDIR) OUTPUT=$(OUTPUT)/ clean
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
include ../lib.mk
|
include ../lib.mk
|
||||||
|
|
||||||
|
SCRATCH_DIR := $(OUTPUT)/tools
|
||||||
|
BUILD_DIR := $(SCRATCH_DIR)/build
|
||||||
|
INCLUDE_DIR := $(SCRATCH_DIR)/include
|
||||||
|
BPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a
|
||||||
|
|
||||||
# Define simple and short `make test_progs`, `make test_sysctl`, etc targets
|
# Define simple and short `make test_progs`, `make test_sysctl`, etc targets
|
||||||
# to build individual tests.
|
# to build individual tests.
|
||||||
# NOTE: Semicolon at the end is critical to override lib.mk's default static
|
# 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,,$@)
|
$(call msg,BINARY,,$@)
|
||||||
$(CC) -o $@ $< -Wl,--build-id
|
$(CC) -o $@ $< -Wl,--build-id
|
||||||
|
|
||||||
$(OUTPUT)/test_stub.o: test_stub.c
|
$(OUTPUT)/test_stub.o: test_stub.c $(BPFOBJ)
|
||||||
$(call msg,CC,,$@)
|
$(call msg,CC,,$@)
|
||||||
$(CC) -c $(CFLAGS) -o $@ $<
|
$(CC) -c $(CFLAGS) -o $@ $<
|
||||||
|
|
||||||
@ -128,12 +132,10 @@ VMLINUX_BTF_PATHS := $(abspath ../../../../vmlinux) \
|
|||||||
/sys/kernel/btf/vmlinux \
|
/sys/kernel/btf/vmlinux \
|
||||||
/boot/vmlinux-$(shell uname -r)
|
/boot/vmlinux-$(shell uname -r)
|
||||||
VMLINUX_BTF:= $(firstword $(wildcard $(VMLINUX_BTF_PATHS)))
|
VMLINUX_BTF:= $(firstword $(wildcard $(VMLINUX_BTF_PATHS)))
|
||||||
.PHONY: $(OUTPUT)/runqslower
|
$(OUTPUT)/runqslower: $(BPFOBJ)
|
||||||
$(OUTPUT)/runqslower: force
|
|
||||||
$(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/runqslower \
|
$(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/runqslower \
|
||||||
OUTPUT=$(OUTPUT)/tools/ VMLINUX_BTF=$(VMLINUX_BTF)
|
OUTPUT=$(SCRATCH_DIR)/ VMLINUX_BTF=$(VMLINUX_BTF) \
|
||||||
|
BPFOBJ=$(BPFOBJ) BPF_INCLUDE=$(INCLUDE_DIR)
|
||||||
BPFOBJ := $(OUTPUT)/libbpf.a
|
|
||||||
|
|
||||||
$(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(OUTPUT)/test_stub.o $(BPFOBJ)
|
$(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(OUTPUT)/test_stub.o $(BPFOBJ)
|
||||||
|
|
||||||
@ -151,25 +153,22 @@ $(OUTPUT)/test_netcnt: cgroup_helpers.c
|
|||||||
$(OUTPUT)/test_sock_fields: cgroup_helpers.c
|
$(OUTPUT)/test_sock_fields: cgroup_helpers.c
|
||||||
$(OUTPUT)/test_sysctl: cgroup_helpers.c
|
$(OUTPUT)/test_sysctl: cgroup_helpers.c
|
||||||
|
|
||||||
.PHONY: force
|
DEFAULT_BPFTOOL := $(SCRATCH_DIR)/sbin/bpftool
|
||||||
|
|
||||||
# force a rebuild of BPFOBJ when its dependencies are updated
|
|
||||||
force:
|
|
||||||
|
|
||||||
DEFAULT_BPFTOOL := $(OUTPUT)/tools/sbin/bpftool
|
|
||||||
BPFTOOL ?= $(DEFAULT_BPFTOOL)
|
BPFTOOL ?= $(DEFAULT_BPFTOOL)
|
||||||
|
$(DEFAULT_BPFTOOL): $(BPFOBJ) | $(BUILD_DIR)/bpftool
|
||||||
|
$(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \
|
||||||
|
OUTPUT=$(BUILD_DIR)/bpftool/ \
|
||||||
|
prefix= DESTDIR=$(SCRATCH_DIR)/ install
|
||||||
|
|
||||||
$(DEFAULT_BPFTOOL): force
|
$(BPFOBJ): $(wildcard $(BPFDIR)/*.c $(BPFDIR)/*.h $(BPFDIR)/Makefile) \
|
||||||
$(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \
|
../../../include/uapi/linux/bpf.h \
|
||||||
prefix= DESTDIR=$(OUTPUT)/tools/ install
|
| $(INCLUDE_DIR) $(BUILD_DIR)/libbpf
|
||||||
|
$(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
|
||||||
|
DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
|
||||||
|
|
||||||
$(BPFOBJ): force
|
$(BUILD_DIR)/libbpf $(BUILD_DIR)/bpftool $(INCLUDE_DIR):
|
||||||
$(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(OUTPUT)/
|
$(call msg,MKDIR,,$@)
|
||||||
|
mkdir -p $@
|
||||||
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
|
|
||||||
|
|
||||||
# Get Clang's default includes on this system, as opposed to those seen by
|
# Get Clang's default includes on this system, as opposed to those seen by
|
||||||
# '-target bpf'. This fixes "missing" files on some architectures/distros,
|
# '-target bpf'. This fixes "missing" files on some architectures/distros,
|
||||||
@ -189,8 +188,8 @@ MENDIAN=$(if $(IS_LITTLE_ENDIAN),-mlittle-endian,-mbig-endian)
|
|||||||
|
|
||||||
CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG))
|
CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG))
|
||||||
BPF_CFLAGS = -g -D__TARGET_ARCH_$(SRCARCH) $(MENDIAN) \
|
BPF_CFLAGS = -g -D__TARGET_ARCH_$(SRCARCH) $(MENDIAN) \
|
||||||
-I$(OUTPUT) -I$(CURDIR) -I$(CURDIR)/include/uapi \
|
-I$(INCLUDE_DIR) -I$(CURDIR) -I$(CURDIR)/include/uapi \
|
||||||
-I$(APIDIR) -I$(LIBDIR) -I$(BPFDIR) -I$(abspath $(OUTPUT)/../usr/include)
|
-I$(APIDIR) -I$(abspath $(OUTPUT)/../usr/include)
|
||||||
|
|
||||||
CLANG_CFLAGS = $(CLANG_SYS_INCLUDES) \
|
CLANG_CFLAGS = $(CLANG_SYS_INCLUDES) \
|
||||||
-Wno-compare-distinct-pointer-types
|
-Wno-compare-distinct-pointer-types
|
||||||
@ -279,7 +278,7 @@ $(TRUNNER_BPF_PROGS_DIR)$(if $2,-)$2-bpfobjs := y
|
|||||||
$(TRUNNER_BPF_OBJS): $(TRUNNER_OUTPUT)/%.o: \
|
$(TRUNNER_BPF_OBJS): $(TRUNNER_OUTPUT)/%.o: \
|
||||||
$(TRUNNER_BPF_PROGS_DIR)/%.c \
|
$(TRUNNER_BPF_PROGS_DIR)/%.c \
|
||||||
$(TRUNNER_BPF_PROGS_DIR)/*.h \
|
$(TRUNNER_BPF_PROGS_DIR)/*.h \
|
||||||
$$(BPF_HELPERS) | $(TRUNNER_OUTPUT)
|
$$(BPFOBJ) | $(TRUNNER_OUTPUT)
|
||||||
$$(call $(TRUNNER_BPF_BUILD_RULE),$$<,$$@, \
|
$$(call $(TRUNNER_BPF_BUILD_RULE),$$<,$$@, \
|
||||||
$(TRUNNER_BPF_CFLAGS), \
|
$(TRUNNER_BPF_CFLAGS), \
|
||||||
$(TRUNNER_BPF_LDFLAGS))
|
$(TRUNNER_BPF_LDFLAGS))
|
||||||
@ -392,7 +391,7 @@ $(OUTPUT)/test_cpp: test_cpp.cpp $(OUTPUT)/test_core_extern.skel.h $(BPFOBJ)
|
|||||||
$(call msg,CXX,,$@)
|
$(call msg,CXX,,$@)
|
||||||
$(CXX) $(CFLAGS) $^ $(LDLIBS) -o $@
|
$(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 \
|
prog_tests/tests.h map_tests/tests.h verifier/tests.h \
|
||||||
feature \
|
feature \
|
||||||
$(addprefix $(OUTPUT)/,*.o *.skel.h no_alu32 bpf_gcc tools)
|
$(addprefix $(OUTPUT)/,*.o *.skel.h no_alu32 bpf_gcc)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user