Skip to content

Commit fbeed93

Browse files
committed
Merge branch 'selftests/bpf: Some build fixes'
Jean-Philippe Brucker says: ==================== A few fixes for cross-building the sefltests out of tree. This will enable wider automated testing on various Arm hardware. Changes since v1 [1]: * Use wildcard in patch 5 * Move the MAKE_DIRS declaration in patch 1 [1] https://lore.kernel.org/bpf/20210112135959.649075-1-jean-philippe@linaro.org/ ==================== Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
2 parents 7c7a80e + b8d1cbe commit fbeed93

File tree

1 file changed

+41
-17
lines changed

1 file changed

+41
-17
lines changed

tools/testing/selftests/bpf/Makefile

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
include ../../../../scripts/Kbuild.include
33
include ../../../scripts/Makefile.arch
4+
include ../../../scripts/Makefile.include
45

56
CXX ?= $(CROSS_COMPILE)g++
67

@@ -24,7 +25,7 @@ BPF_GCC ?= $(shell command -v bpf-gcc;)
2425
SAN_CFLAGS ?=
2526
CFLAGS += -g -rdynamic -Wall -O2 $(GENFLAGS) $(SAN_CFLAGS) \
2627
-I$(CURDIR) -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) \
27-
-I$(TOOLSINCDIR) -I$(APIDIR) \
28+
-I$(TOOLSINCDIR) -I$(APIDIR) -I$(OUTPUT) \
2829
-Dbpf_prog_load=bpf_prog_test_load \
2930
-Dbpf_load_program=bpf_test_load_program
3031
LDLIBS += -lcap -lelf -lz -lrt -lpthread
@@ -43,10 +44,10 @@ ifneq ($(BPF_GCC),)
4344
TEST_GEN_PROGS += test_progs-bpf_gcc
4445
endif
4546

46-
TEST_GEN_FILES =
47-
TEST_FILES = test_lwt_ip_encap.o \
48-
test_tc_edt.o \
49-
xsk_prereqs.sh
47+
TEST_GEN_FILES = test_lwt_ip_encap.o \
48+
test_tc_edt.o
49+
TEST_FILES = xsk_prereqs.sh \
50+
$(wildcard progs/btf_dump_test_case_*.c)
5051

5152
# Order correspond to 'make run_tests' order
5253
TEST_PROGS := test_kmod.sh \
@@ -82,7 +83,7 @@ TEST_GEN_PROGS_EXTENDED = test_sock_addr test_skb_cgroup_id_user \
8283
test_lirc_mode2_user xdping test_cpp runqslower bench bpf_testmod.ko \
8384
xdpxceiver
8485

85-
TEST_CUSTOM_PROGS = urandom_read
86+
TEST_CUSTOM_PROGS = $(OUTPUT)/urandom_read
8687

8788
# Emit succinct information message describing current building step
8889
# $1 - generic step name (e.g., CC, LINK, etc);
@@ -113,7 +114,15 @@ SCRATCH_DIR := $(OUTPUT)/tools
113114
BUILD_DIR := $(SCRATCH_DIR)/build
114115
INCLUDE_DIR := $(SCRATCH_DIR)/include
115116
BPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a
116-
RESOLVE_BTFIDS := $(BUILD_DIR)/resolve_btfids/resolve_btfids
117+
ifneq ($(CROSS_COMPILE),)
118+
HOST_BUILD_DIR := $(BUILD_DIR)/host
119+
HOST_SCRATCH_DIR := $(OUTPUT)/host-tools
120+
else
121+
HOST_BUILD_DIR := $(BUILD_DIR)
122+
HOST_SCRATCH_DIR := $(SCRATCH_DIR)
123+
endif
124+
HOST_BPFOBJ := $(HOST_BUILD_DIR)/libbpf/libbpf.a
125+
RESOLVE_BTFIDS := $(HOST_BUILD_DIR)/resolve_btfids/resolve_btfids
117126

118127
VMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \
119128
$(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \
@@ -135,6 +144,14 @@ $(notdir $(TEST_GEN_PROGS) \
135144
$(TEST_GEN_PROGS_EXTENDED) \
136145
$(TEST_CUSTOM_PROGS)): %: $(OUTPUT)/% ;
137146

147+
# sort removes libbpf duplicates when not cross-building
148+
MAKE_DIRS := $(sort $(BUILD_DIR)/libbpf $(HOST_BUILD_DIR)/libbpf \
149+
$(HOST_BUILD_DIR)/bpftool $(HOST_BUILD_DIR)/resolve_btfids \
150+
$(INCLUDE_DIR))
151+
$(MAKE_DIRS):
152+
$(call msg,MKDIR,,$@)
153+
$(Q)mkdir -p $@
154+
138155
$(OUTPUT)/%.o: %.c
139156
$(call msg,CC,,$@)
140157
$(Q)$(CC) $(CFLAGS) -c $(filter %.c,$^) $(LDLIBS) -o $@
@@ -157,7 +174,7 @@ $(OUTPUT)/test_stub.o: test_stub.c $(BPFOBJ)
157174
$(call msg,CC,,$@)
158175
$(Q)$(CC) -c $(CFLAGS) -o $@ $<
159176

160-
DEFAULT_BPFTOOL := $(SCRATCH_DIR)/sbin/bpftool
177+
DEFAULT_BPFTOOL := $(HOST_SCRATCH_DIR)/sbin/bpftool
161178

162179
$(OUTPUT)/runqslower: $(BPFOBJ) | $(DEFAULT_BPFTOOL)
163180
$(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/runqslower \
@@ -182,10 +199,11 @@ $(OUTPUT)/test_sysctl: cgroup_helpers.c
182199

183200
BPFTOOL ?= $(DEFAULT_BPFTOOL)
184201
$(DEFAULT_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(BPFTOOLDIR)/Makefile) \
185-
$(BPFOBJ) | $(BUILD_DIR)/bpftool
202+
$(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/bpftool
186203
$(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \
187-
OUTPUT=$(BUILD_DIR)/bpftool/ \
188-
prefix= DESTDIR=$(SCRATCH_DIR)/ install
204+
CC=$(HOSTCC) LD=$(HOSTLD) \
205+
OUTPUT=$(HOST_BUILD_DIR)/bpftool/ \
206+
prefix= DESTDIR=$(HOST_SCRATCH_DIR)/ install
189207
$(Q)mkdir -p $(BUILD_DIR)/bpftool/Documentation
190208
$(Q)RST2MAN_OPTS="--exit-status=1" $(MAKE) $(submake_extras) \
191209
-C $(BPFTOOLDIR)/Documentation \
@@ -198,9 +216,14 @@ $(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
198216
$(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
199217
DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
200218

201-
$(BUILD_DIR)/libbpf $(BUILD_DIR)/bpftool $(BUILD_DIR)/resolve_btfids $(INCLUDE_DIR):
202-
$(call msg,MKDIR,,$@)
203-
$(Q)mkdir -p $@
219+
ifneq ($(BPFOBJ),$(HOST_BPFOBJ))
220+
$(HOST_BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
221+
../../../include/uapi/linux/bpf.h \
222+
| $(INCLUDE_DIR) $(HOST_BUILD_DIR)/libbpf
223+
$(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) \
224+
OUTPUT=$(HOST_BUILD_DIR)/libbpf/ CC=$(HOSTCC) LD=$(HOSTLD) \
225+
DESTDIR=$(HOST_SCRATCH_DIR)/ prefix= all install_headers
226+
endif
204227

205228
$(INCLUDE_DIR)/vmlinux.h: $(VMLINUX_BTF) | $(BPFTOOL) $(INCLUDE_DIR)
206229
ifeq ($(VMLINUX_H),)
@@ -211,15 +234,16 @@ else
211234
$(Q)cp "$(VMLINUX_H)" $@
212235
endif
213236

214-
$(RESOLVE_BTFIDS): $(BPFOBJ) | $(BUILD_DIR)/resolve_btfids \
237+
$(RESOLVE_BTFIDS): $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/resolve_btfids \
215238
$(TOOLSDIR)/bpf/resolve_btfids/main.c \
216239
$(TOOLSDIR)/lib/rbtree.c \
217240
$(TOOLSDIR)/lib/zalloc.c \
218241
$(TOOLSDIR)/lib/string.c \
219242
$(TOOLSDIR)/lib/ctype.c \
220243
$(TOOLSDIR)/lib/str_error_r.c
221244
$(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/resolve_btfids \
222-
OUTPUT=$(BUILD_DIR)/resolve_btfids/ BPFOBJ=$(BPFOBJ)
245+
CC=$(HOSTCC) LD=$(HOSTLD) AR=$(HOSTAR) \
246+
OUTPUT=$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=$(HOST_BPFOBJ)
223247

224248
# Get Clang's default includes on this system, as opposed to those seen by
225249
# '-target bpf'. This fixes "missing" files on some architectures/distros,
@@ -450,7 +474,7 @@ $(OUTPUT)/bench: $(OUTPUT)/bench.o $(OUTPUT)/testing_helpers.o \
450474
$(call msg,BINARY,,$@)
451475
$(Q)$(CC) $(LDFLAGS) -o $@ $(filter %.a %.o,$^) $(LDLIBS)
452476

453-
EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) \
477+
EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \
454478
prog_tests/tests.h map_tests/tests.h verifier/tests.h \
455479
feature \
456480
$(addprefix $(OUTPUT)/,*.o *.skel.h no_alu32 bpf_gcc bpf_testmod.ko)

0 commit comments

Comments
 (0)