11# SPDX-License-Identifier: GPL-2.0
22include ../../../../scripts/Kbuild.include
33include ../../../scripts/Makefile.arch
4+ include ../../../scripts/Makefile.include
45
56CXX ?= $(CROSS_COMPILE ) g++
67
@@ -24,7 +25,7 @@ BPF_GCC ?= $(shell command -v bpf-gcc;)
2425SAN_CFLAGS ?=
2526CFLAGS += -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
3031LDLIBS += -lcap -lelf -lz -lrt -lpthread
@@ -43,10 +44,10 @@ ifneq ($(BPF_GCC),)
4344TEST_GEN_PROGS += test_progs-bpf_gcc
4445endif
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
5253TEST_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
113114BUILD_DIR := $(SCRATCH_DIR ) /build
114115INCLUDE_DIR := $(SCRATCH_DIR ) /include
115116BPFOBJ := $(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
118127VMLINUX_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
183200BPFTOOL ?= $(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 )
206229ifeq ($(VMLINUX_H ) ,)
@@ -211,15 +234,16 @@ else
211234 $(Q)cp "$(VMLINUX_H)" $@
212235endif
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