1*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 2*053f45beSAndroid Build Coastguard Workerinclude ../../../build/Build.include 3*053f45beSAndroid Build Coastguard Workerinclude ../../../scripts/Makefile.arch 4*053f45beSAndroid Build Coastguard Workerinclude ../../../scripts/Makefile.include 5*053f45beSAndroid Build Coastguard Worker 6*053f45beSAndroid Build Coastguard WorkerCXX ?= $(CROSS_COMPILE)g++ 7*053f45beSAndroid Build Coastguard Worker 8*053f45beSAndroid Build Coastguard WorkerCURDIR := $(abspath .) 9*053f45beSAndroid Build Coastguard WorkerTOOLSDIR := $(abspath ../../..) 10*053f45beSAndroid Build Coastguard WorkerLIBDIR := $(TOOLSDIR)/lib 11*053f45beSAndroid Build Coastguard WorkerBPFDIR := $(LIBDIR)/bpf 12*053f45beSAndroid Build Coastguard WorkerTOOLSINCDIR := $(TOOLSDIR)/include 13*053f45beSAndroid Build Coastguard WorkerBPFTOOLDIR := $(TOOLSDIR)/bpf/bpftool 14*053f45beSAndroid Build Coastguard WorkerAPIDIR := $(TOOLSINCDIR)/uapi 15*053f45beSAndroid Build Coastguard WorkerGENDIR := $(abspath ../../../../include/generated) 16*053f45beSAndroid Build Coastguard WorkerGENHDR := $(GENDIR)/autoconf.h 17*053f45beSAndroid Build Coastguard WorkerHOSTPKG_CONFIG := pkg-config 18*053f45beSAndroid Build Coastguard Worker 19*053f45beSAndroid Build Coastguard Workerifneq ($(wildcard $(GENHDR)),) 20*053f45beSAndroid Build Coastguard Worker GENFLAGS := -DHAVE_GENHDR 21*053f45beSAndroid Build Coastguard Workerendif 22*053f45beSAndroid Build Coastguard Worker 23*053f45beSAndroid Build Coastguard WorkerBPF_GCC ?= $(shell command -v bpf-gcc;) 24*053f45beSAndroid Build Coastguard WorkerSAN_CFLAGS ?= 25*053f45beSAndroid Build Coastguard WorkerCFLAGS += -g -O0 -rdynamic -Wall -Werror $(GENFLAGS) $(SAN_CFLAGS) \ 26*053f45beSAndroid Build Coastguard Worker -I$(CURDIR) -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) \ 27*053f45beSAndroid Build Coastguard Worker -I$(TOOLSINCDIR) -I$(APIDIR) -I$(OUTPUT) 28*053f45beSAndroid Build Coastguard WorkerLDFLAGS += $(SAN_CFLAGS) 29*053f45beSAndroid Build Coastguard WorkerLDLIBS += -lelf -lz -lrt -lpthread 30*053f45beSAndroid Build Coastguard Worker 31*053f45beSAndroid Build Coastguard Worker# Silence some warnings when compiled with clang 32*053f45beSAndroid Build Coastguard Workerifneq ($(LLVM),) 33*053f45beSAndroid Build Coastguard WorkerCFLAGS += -Wno-unused-command-line-argument 34*053f45beSAndroid Build Coastguard Workerendif 35*053f45beSAndroid Build Coastguard Worker 36*053f45beSAndroid Build Coastguard Worker# Order correspond to 'make run_tests' order 37*053f45beSAndroid Build Coastguard WorkerTEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map test_progs \ 38*053f45beSAndroid Build Coastguard Worker test_verifier_log test_dev_cgroup \ 39*053f45beSAndroid Build Coastguard Worker test_sock test_sockmap get_cgroup_id_user \ 40*053f45beSAndroid Build Coastguard Worker test_cgroup_storage \ 41*053f45beSAndroid Build Coastguard Worker test_tcpnotify_user test_sysctl \ 42*053f45beSAndroid Build Coastguard Worker test_progs-no_alu32 43*053f45beSAndroid Build Coastguard Worker 44*053f45beSAndroid Build Coastguard Worker# Also test bpf-gcc, if present 45*053f45beSAndroid Build Coastguard Workerifneq ($(BPF_GCC),) 46*053f45beSAndroid Build Coastguard WorkerTEST_GEN_PROGS += test_progs-bpf_gcc 47*053f45beSAndroid Build Coastguard Workerendif 48*053f45beSAndroid Build Coastguard Worker 49*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES = test_lwt_ip_encap.bpf.o test_tc_edt.bpf.o 50*053f45beSAndroid Build Coastguard WorkerTEST_FILES = xsk_prereqs.sh $(wildcard progs/btf_dump_test_case_*.c) 51*053f45beSAndroid Build Coastguard Worker 52*053f45beSAndroid Build Coastguard Worker# Order correspond to 'make run_tests' order 53*053f45beSAndroid Build Coastguard WorkerTEST_PROGS := test_kmod.sh \ 54*053f45beSAndroid Build Coastguard Worker test_xdp_redirect.sh \ 55*053f45beSAndroid Build Coastguard Worker test_xdp_redirect_multi.sh \ 56*053f45beSAndroid Build Coastguard Worker test_xdp_meta.sh \ 57*053f45beSAndroid Build Coastguard Worker test_xdp_veth.sh \ 58*053f45beSAndroid Build Coastguard Worker test_offload.py \ 59*053f45beSAndroid Build Coastguard Worker test_sock_addr.sh \ 60*053f45beSAndroid Build Coastguard Worker test_tunnel.sh \ 61*053f45beSAndroid Build Coastguard Worker test_lwt_seg6local.sh \ 62*053f45beSAndroid Build Coastguard Worker test_lirc_mode2.sh \ 63*053f45beSAndroid Build Coastguard Worker test_skb_cgroup_id.sh \ 64*053f45beSAndroid Build Coastguard Worker test_flow_dissector.sh \ 65*053f45beSAndroid Build Coastguard Worker test_xdp_vlan_mode_generic.sh \ 66*053f45beSAndroid Build Coastguard Worker test_xdp_vlan_mode_native.sh \ 67*053f45beSAndroid Build Coastguard Worker test_lwt_ip_encap.sh \ 68*053f45beSAndroid Build Coastguard Worker test_tcp_check_syncookie.sh \ 69*053f45beSAndroid Build Coastguard Worker test_tc_tunnel.sh \ 70*053f45beSAndroid Build Coastguard Worker test_tc_edt.sh \ 71*053f45beSAndroid Build Coastguard Worker test_xdping.sh \ 72*053f45beSAndroid Build Coastguard Worker test_bpftool_build.sh \ 73*053f45beSAndroid Build Coastguard Worker test_bpftool.sh \ 74*053f45beSAndroid Build Coastguard Worker test_bpftool_metadata.sh \ 75*053f45beSAndroid Build Coastguard Worker test_doc_build.sh \ 76*053f45beSAndroid Build Coastguard Worker test_xsk.sh 77*053f45beSAndroid Build Coastguard Worker 78*053f45beSAndroid Build Coastguard WorkerTEST_PROGS_EXTENDED := with_addr.sh \ 79*053f45beSAndroid Build Coastguard Worker with_tunnels.sh ima_setup.sh verify_sig_setup.sh \ 80*053f45beSAndroid Build Coastguard Worker test_xdp_vlan.sh test_bpftool.py 81*053f45beSAndroid Build Coastguard Worker 82*053f45beSAndroid Build Coastguard Worker# Compile but not part of 'make run_tests' 83*053f45beSAndroid Build Coastguard WorkerTEST_GEN_PROGS_EXTENDED = test_sock_addr test_skb_cgroup_id_user \ 84*053f45beSAndroid Build Coastguard Worker flow_dissector_load test_flow_dissector test_tcp_check_syncookie_user \ 85*053f45beSAndroid Build Coastguard Worker test_lirc_mode2_user xdping test_cpp runqslower bench bpf_testmod.ko \ 86*053f45beSAndroid Build Coastguard Worker xskxceiver xdp_redirect_multi xdp_synproxy veristat 87*053f45beSAndroid Build Coastguard Worker 88*053f45beSAndroid Build Coastguard WorkerTEST_CUSTOM_PROGS = $(OUTPUT)/urandom_read $(OUTPUT)/sign-file 89*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += liburandom_read.so 90*053f45beSAndroid Build Coastguard Worker 91*053f45beSAndroid Build Coastguard Worker# Emit succinct information message describing current building step 92*053f45beSAndroid Build Coastguard Worker# $1 - generic step name (e.g., CC, LINK, etc); 93*053f45beSAndroid Build Coastguard Worker# $2 - optional "flavor" specifier; if provided, will be emitted as [flavor]; 94*053f45beSAndroid Build Coastguard Worker# $3 - target (assumed to be file); only file name will be emitted; 95*053f45beSAndroid Build Coastguard Worker# $4 - optional extra arg, emitted as-is, if provided. 96*053f45beSAndroid Build Coastguard Workerifeq ($(V),1) 97*053f45beSAndroid Build Coastguard WorkerQ = 98*053f45beSAndroid Build Coastguard Workermsg = 99*053f45beSAndroid Build Coastguard Workerelse 100*053f45beSAndroid Build Coastguard WorkerQ = @ 101*053f45beSAndroid Build Coastguard Workermsg = @printf ' %-8s%s %s%s\n' "$(1)" "$(if $(2), [$(2)])" "$(notdir $(3))" "$(if $(4), $(4))"; 102*053f45beSAndroid Build Coastguard WorkerMAKEFLAGS += --no-print-directory 103*053f45beSAndroid Build Coastguard Workersubmake_extras := feature_display=0 104*053f45beSAndroid Build Coastguard Workerendif 105*053f45beSAndroid Build Coastguard Worker 106*053f45beSAndroid Build Coastguard Worker# override lib.mk's default rules 107*053f45beSAndroid Build Coastguard WorkerOVERRIDE_TARGETS := 1 108*053f45beSAndroid Build Coastguard Workeroverride define CLEAN 109*053f45beSAndroid Build Coastguard Worker $(call msg,CLEAN) 110*053f45beSAndroid Build Coastguard Worker $(Q)$(RM) -r $(TEST_GEN_PROGS) 111*053f45beSAndroid Build Coastguard Worker $(Q)$(RM) -r $(TEST_GEN_PROGS_EXTENDED) 112*053f45beSAndroid Build Coastguard Worker $(Q)$(RM) -r $(TEST_GEN_FILES) 113*053f45beSAndroid Build Coastguard Worker $(Q)$(RM) -r $(EXTRA_CLEAN) 114*053f45beSAndroid Build Coastguard Worker $(Q)$(MAKE) -C bpf_testmod clean 115*053f45beSAndroid Build Coastguard Worker $(Q)$(MAKE) docs-clean 116*053f45beSAndroid Build Coastguard Workerendef 117*053f45beSAndroid Build Coastguard Worker 118*053f45beSAndroid Build Coastguard Workerinclude ../lib.mk 119*053f45beSAndroid Build Coastguard Worker 120*053f45beSAndroid Build Coastguard WorkerSCRATCH_DIR := $(OUTPUT)/tools 121*053f45beSAndroid Build Coastguard WorkerBUILD_DIR := $(SCRATCH_DIR)/build 122*053f45beSAndroid Build Coastguard WorkerINCLUDE_DIR := $(SCRATCH_DIR)/include 123*053f45beSAndroid Build Coastguard WorkerBPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a 124*053f45beSAndroid Build Coastguard Workerifneq ($(CROSS_COMPILE),) 125*053f45beSAndroid Build Coastguard WorkerHOST_BUILD_DIR := $(BUILD_DIR)/host 126*053f45beSAndroid Build Coastguard WorkerHOST_SCRATCH_DIR := $(OUTPUT)/host-tools 127*053f45beSAndroid Build Coastguard WorkerHOST_INCLUDE_DIR := $(HOST_SCRATCH_DIR)/include 128*053f45beSAndroid Build Coastguard Workerelse 129*053f45beSAndroid Build Coastguard WorkerHOST_BUILD_DIR := $(BUILD_DIR) 130*053f45beSAndroid Build Coastguard WorkerHOST_SCRATCH_DIR := $(SCRATCH_DIR) 131*053f45beSAndroid Build Coastguard WorkerHOST_INCLUDE_DIR := $(INCLUDE_DIR) 132*053f45beSAndroid Build Coastguard Workerendif 133*053f45beSAndroid Build Coastguard WorkerHOST_BPFOBJ := $(HOST_BUILD_DIR)/libbpf/libbpf.a 134*053f45beSAndroid Build Coastguard WorkerRESOLVE_BTFIDS := $(HOST_BUILD_DIR)/resolve_btfids/resolve_btfids 135*053f45beSAndroid Build Coastguard WorkerRUNQSLOWER_OUTPUT := $(BUILD_DIR)/runqslower/ 136*053f45beSAndroid Build Coastguard Worker 137*053f45beSAndroid Build Coastguard WorkerVMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \ 138*053f45beSAndroid Build Coastguard Worker $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \ 139*053f45beSAndroid Build Coastguard Worker ../../../../vmlinux \ 140*053f45beSAndroid Build Coastguard Worker /sys/kernel/btf/vmlinux \ 141*053f45beSAndroid Build Coastguard Worker /boot/vmlinux-$(shell uname -r) 142*053f45beSAndroid Build Coastguard WorkerVMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS)))) 143*053f45beSAndroid Build Coastguard Workerifeq ($(VMLINUX_BTF),) 144*053f45beSAndroid Build Coastguard Worker$(error Cannot find a vmlinux for VMLINUX_BTF at any of "$(VMLINUX_BTF_PATHS)") 145*053f45beSAndroid Build Coastguard Workerendif 146*053f45beSAndroid Build Coastguard Worker 147*053f45beSAndroid Build Coastguard Worker# Define simple and short `make test_progs`, `make test_sysctl`, etc targets 148*053f45beSAndroid Build Coastguard Worker# to build individual tests. 149*053f45beSAndroid Build Coastguard Worker# NOTE: Semicolon at the end is critical to override lib.mk's default static 150*053f45beSAndroid Build Coastguard Worker# rule for binaries. 151*053f45beSAndroid Build Coastguard Worker$(notdir $(TEST_GEN_PROGS) \ 152*053f45beSAndroid Build Coastguard Worker $(TEST_PROGS) \ 153*053f45beSAndroid Build Coastguard Worker $(TEST_PROGS_EXTENDED) \ 154*053f45beSAndroid Build Coastguard Worker $(TEST_GEN_PROGS_EXTENDED) \ 155*053f45beSAndroid Build Coastguard Worker $(TEST_CUSTOM_PROGS)): %: $(OUTPUT)/% ; 156*053f45beSAndroid Build Coastguard Worker 157*053f45beSAndroid Build Coastguard Worker# sort removes libbpf duplicates when not cross-building 158*053f45beSAndroid Build Coastguard WorkerMAKE_DIRS := $(sort $(BUILD_DIR)/libbpf $(HOST_BUILD_DIR)/libbpf \ 159*053f45beSAndroid Build Coastguard Worker $(HOST_BUILD_DIR)/bpftool $(HOST_BUILD_DIR)/resolve_btfids \ 160*053f45beSAndroid Build Coastguard Worker $(RUNQSLOWER_OUTPUT) $(INCLUDE_DIR)) 161*053f45beSAndroid Build Coastguard Worker$(MAKE_DIRS): 162*053f45beSAndroid Build Coastguard Worker $(call msg,MKDIR,,$@) 163*053f45beSAndroid Build Coastguard Worker $(Q)mkdir -p $@ 164*053f45beSAndroid Build Coastguard Worker 165*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/%.o: %.c 166*053f45beSAndroid Build Coastguard Worker $(call msg,CC,,$@) 167*053f45beSAndroid Build Coastguard Worker $(Q)$(CC) $(CFLAGS) -c $(filter %.c,$^) $(LDLIBS) -o $@ 168*053f45beSAndroid Build Coastguard Worker 169*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/%:%.c 170*053f45beSAndroid Build Coastguard Worker $(call msg,BINARY,,$@) 171*053f45beSAndroid Build Coastguard Worker $(Q)$(LINK.c) $^ $(LDLIBS) -o $@ 172*053f45beSAndroid Build Coastguard Worker 173*053f45beSAndroid Build Coastguard Worker# LLVM's ld.lld doesn't support all the architectures, so use it only on x86 174*053f45beSAndroid Build Coastguard Workerifeq ($(SRCARCH),x86) 175*053f45beSAndroid Build Coastguard WorkerLLD := lld 176*053f45beSAndroid Build Coastguard Workerelse 177*053f45beSAndroid Build Coastguard WorkerLLD := ld 178*053f45beSAndroid Build Coastguard Workerendif 179*053f45beSAndroid Build Coastguard Worker 180*053f45beSAndroid Build Coastguard Worker# Filter out -static for liburandom_read.so and its dependent targets so that static builds 181*053f45beSAndroid Build Coastguard Worker# do not fail. Static builds leave urandom_read relying on system-wide shared libraries. 182*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/liburandom_read.so: urandom_read_lib1.c urandom_read_lib2.c 183*053f45beSAndroid Build Coastguard Worker $(call msg,LIB,,$@) 184*053f45beSAndroid Build Coastguard Worker $(Q)$(CLANG) $(filter-out -static,$(CFLAGS) $(LDFLAGS)) $^ $(LDLIBS) \ 185*053f45beSAndroid Build Coastguard Worker -fuse-ld=$(LLD) -Wl,-znoseparate-code -fPIC -shared -o $@ 186*053f45beSAndroid Build Coastguard Worker 187*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/urandom_read: urandom_read.c urandom_read_aux.c $(OUTPUT)/liburandom_read.so 188*053f45beSAndroid Build Coastguard Worker $(call msg,BINARY,,$@) 189*053f45beSAndroid Build Coastguard Worker $(Q)$(CLANG) $(filter-out -static,$(CFLAGS) $(LDFLAGS)) $(filter %.c,$^) \ 190*053f45beSAndroid Build Coastguard Worker liburandom_read.so $(LDLIBS) \ 191*053f45beSAndroid Build Coastguard Worker -fuse-ld=$(LLD) -Wl,-znoseparate-code \ 192*053f45beSAndroid Build Coastguard Worker -Wl,-rpath=. -Wl,--build-id=sha1 -o $@ 193*053f45beSAndroid Build Coastguard Worker 194*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/sign-file: ../../../../scripts/sign-file.c 195*053f45beSAndroid Build Coastguard Worker $(call msg,SIGN-FILE,,$@) 196*053f45beSAndroid Build Coastguard Worker $(Q)$(CC) $(shell $(HOSTPKG_CONFIG)--cflags libcrypto 2> /dev/null) \ 197*053f45beSAndroid Build Coastguard Worker $< -o $@ \ 198*053f45beSAndroid Build Coastguard Worker $(shell $(HOSTPKG_CONFIG) --libs libcrypto 2> /dev/null || echo -lcrypto) 199*053f45beSAndroid Build Coastguard Worker 200*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bpf_testmod.ko: $(VMLINUX_BTF) $(wildcard bpf_testmod/Makefile bpf_testmod/*.[ch]) 201*053f45beSAndroid Build Coastguard Worker $(call msg,MOD,,$@) 202*053f45beSAndroid Build Coastguard Worker $(Q)$(RM) bpf_testmod/bpf_testmod.ko # force re-compilation 203*053f45beSAndroid Build Coastguard Worker $(Q)$(MAKE) $(submake_extras) -C bpf_testmod 204*053f45beSAndroid Build Coastguard Worker $(Q)cp bpf_testmod/bpf_testmod.ko $@ 205*053f45beSAndroid Build Coastguard Worker 206*053f45beSAndroid Build Coastguard WorkerDEFAULT_BPFTOOL := $(HOST_SCRATCH_DIR)/sbin/bpftool 207*053f45beSAndroid Build Coastguard Worker 208*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/runqslower: $(BPFOBJ) | $(DEFAULT_BPFTOOL) $(RUNQSLOWER_OUTPUT) 209*053f45beSAndroid Build Coastguard Worker $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/runqslower \ 210*053f45beSAndroid Build Coastguard Worker OUTPUT=$(RUNQSLOWER_OUTPUT) VMLINUX_BTF=$(VMLINUX_BTF) \ 211*053f45beSAndroid Build Coastguard Worker BPFTOOL_OUTPUT=$(HOST_BUILD_DIR)/bpftool/ \ 212*053f45beSAndroid Build Coastguard Worker BPFOBJ_OUTPUT=$(BUILD_DIR)/libbpf \ 213*053f45beSAndroid Build Coastguard Worker BPFOBJ=$(BPFOBJ) BPF_INCLUDE=$(INCLUDE_DIR) && \ 214*053f45beSAndroid Build Coastguard Worker cp $(RUNQSLOWER_OUTPUT)runqslower $@ 215*053f45beSAndroid Build Coastguard Worker 216*053f45beSAndroid Build Coastguard WorkerTEST_GEN_PROGS_EXTENDED += $(DEFAULT_BPFTOOL) 217*053f45beSAndroid Build Coastguard Worker 218*053f45beSAndroid Build Coastguard Worker$(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(BPFOBJ) 219*053f45beSAndroid Build Coastguard Worker 220*053f45beSAndroid Build Coastguard WorkerCGROUP_HELPERS := $(OUTPUT)/cgroup_helpers.o 221*053f45beSAndroid Build Coastguard WorkerTESTING_HELPERS := $(OUTPUT)/testing_helpers.o 222*053f45beSAndroid Build Coastguard WorkerTRACE_HELPERS := $(OUTPUT)/trace_helpers.o 223*053f45beSAndroid Build Coastguard WorkerCAP_HELPERS := $(OUTPUT)/cap_helpers.o 224*053f45beSAndroid Build Coastguard Worker 225*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_dev_cgroup: $(CGROUP_HELPERS) $(TESTING_HELPERS) 226*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_skb_cgroup_id_user: $(CGROUP_HELPERS) $(TESTING_HELPERS) 227*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_sock: $(CGROUP_HELPERS) $(TESTING_HELPERS) 228*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_sock_addr: $(CGROUP_HELPERS) $(TESTING_HELPERS) 229*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_sockmap: $(CGROUP_HELPERS) $(TESTING_HELPERS) 230*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_tcpnotify_user: $(CGROUP_HELPERS) $(TESTING_HELPERS) $(TRACE_HELPERS) 231*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/get_cgroup_id_user: $(CGROUP_HELPERS) $(TESTING_HELPERS) 232*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_cgroup_storage: $(CGROUP_HELPERS) $(TESTING_HELPERS) 233*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_sock_fields: $(CGROUP_HELPERS) $(TESTING_HELPERS) 234*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_sysctl: $(CGROUP_HELPERS) $(TESTING_HELPERS) 235*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_tag: $(TESTING_HELPERS) 236*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_lirc_mode2_user: $(TESTING_HELPERS) 237*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/xdping: $(TESTING_HELPERS) 238*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/flow_dissector_load: $(TESTING_HELPERS) 239*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_maps: $(TESTING_HELPERS) 240*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_verifier: $(TESTING_HELPERS) $(CAP_HELPERS) 241*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/xsk.o: $(BPFOBJ) 242*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/xskxceiver: $(OUTPUT)/xsk.o 243*053f45beSAndroid Build Coastguard Worker 244*053f45beSAndroid Build Coastguard WorkerBPFTOOL ?= $(DEFAULT_BPFTOOL) 245*053f45beSAndroid Build Coastguard Worker$(DEFAULT_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(BPFTOOLDIR)/Makefile) \ 246*053f45beSAndroid Build Coastguard Worker $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/bpftool 247*053f45beSAndroid Build Coastguard Worker $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \ 248*053f45beSAndroid Build Coastguard Worker ARCH= CROSS_COMPILE= CC=$(HOSTCC) LD=$(HOSTLD) \ 249*053f45beSAndroid Build Coastguard Worker EXTRA_CFLAGS='-g -O0' \ 250*053f45beSAndroid Build Coastguard Worker OUTPUT=$(HOST_BUILD_DIR)/bpftool/ \ 251*053f45beSAndroid Build Coastguard Worker LIBBPF_OUTPUT=$(HOST_BUILD_DIR)/libbpf/ \ 252*053f45beSAndroid Build Coastguard Worker LIBBPF_DESTDIR=$(HOST_SCRATCH_DIR)/ \ 253*053f45beSAndroid Build Coastguard Worker prefix= DESTDIR=$(HOST_SCRATCH_DIR)/ install-bin 254*053f45beSAndroid Build Coastguard Worker 255*053f45beSAndroid Build Coastguard Workerall: docs 256*053f45beSAndroid Build Coastguard Worker 257*053f45beSAndroid Build Coastguard Workerdocs: 258*053f45beSAndroid Build Coastguard Worker $(Q)RST2MAN_OPTS="--exit-status=1" $(MAKE) $(submake_extras) \ 259*053f45beSAndroid Build Coastguard Worker -f Makefile.docs \ 260*053f45beSAndroid Build Coastguard Worker prefix= OUTPUT=$(OUTPUT)/ DESTDIR=$(OUTPUT)/ $@ 261*053f45beSAndroid Build Coastguard Worker 262*053f45beSAndroid Build Coastguard Workerdocs-clean: 263*053f45beSAndroid Build Coastguard Worker $(Q)$(MAKE) $(submake_extras) \ 264*053f45beSAndroid Build Coastguard Worker -f Makefile.docs \ 265*053f45beSAndroid Build Coastguard Worker prefix= OUTPUT=$(OUTPUT)/ DESTDIR=$(OUTPUT)/ $@ 266*053f45beSAndroid Build Coastguard Worker 267*053f45beSAndroid Build Coastguard Worker$(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \ 268*053f45beSAndroid Build Coastguard Worker $(APIDIR)/linux/bpf.h \ 269*053f45beSAndroid Build Coastguard Worker | $(BUILD_DIR)/libbpf 270*053f45beSAndroid Build Coastguard Worker $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \ 271*053f45beSAndroid Build Coastguard Worker EXTRA_CFLAGS='-g -O0' \ 272*053f45beSAndroid Build Coastguard Worker DESTDIR=$(SCRATCH_DIR) prefix= all install_headers 273*053f45beSAndroid Build Coastguard Worker 274*053f45beSAndroid Build Coastguard Workerifneq ($(BPFOBJ),$(HOST_BPFOBJ)) 275*053f45beSAndroid Build Coastguard Worker$(HOST_BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \ 276*053f45beSAndroid Build Coastguard Worker $(APIDIR)/linux/bpf.h \ 277*053f45beSAndroid Build Coastguard Worker | $(HOST_BUILD_DIR)/libbpf 278*053f45beSAndroid Build Coastguard Worker $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) \ 279*053f45beSAndroid Build Coastguard Worker EXTRA_CFLAGS='-g -O0' ARCH= CROSS_COMPILE= \ 280*053f45beSAndroid Build Coastguard Worker OUTPUT=$(HOST_BUILD_DIR)/libbpf/ CC=$(HOSTCC) LD=$(HOSTLD) \ 281*053f45beSAndroid Build Coastguard Worker DESTDIR=$(HOST_SCRATCH_DIR)/ prefix= all install_headers 282*053f45beSAndroid Build Coastguard Workerendif 283*053f45beSAndroid Build Coastguard Worker 284*053f45beSAndroid Build Coastguard Worker$(INCLUDE_DIR)/vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL) | $(INCLUDE_DIR) 285*053f45beSAndroid Build Coastguard Workerifeq ($(VMLINUX_H),) 286*053f45beSAndroid Build Coastguard Worker $(call msg,GEN,,$@) 287*053f45beSAndroid Build Coastguard Worker $(Q)$(BPFTOOL) btf dump file $(VMLINUX_BTF) format c > $@ 288*053f45beSAndroid Build Coastguard Workerelse 289*053f45beSAndroid Build Coastguard Worker $(call msg,CP,,$@) 290*053f45beSAndroid Build Coastguard Worker $(Q)cp "$(VMLINUX_H)" $@ 291*053f45beSAndroid Build Coastguard Workerendif 292*053f45beSAndroid Build Coastguard Worker 293*053f45beSAndroid Build Coastguard Worker$(RESOLVE_BTFIDS): $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/resolve_btfids \ 294*053f45beSAndroid Build Coastguard Worker $(TOOLSDIR)/bpf/resolve_btfids/main.c \ 295*053f45beSAndroid Build Coastguard Worker $(TOOLSDIR)/lib/rbtree.c \ 296*053f45beSAndroid Build Coastguard Worker $(TOOLSDIR)/lib/zalloc.c \ 297*053f45beSAndroid Build Coastguard Worker $(TOOLSDIR)/lib/string.c \ 298*053f45beSAndroid Build Coastguard Worker $(TOOLSDIR)/lib/ctype.c \ 299*053f45beSAndroid Build Coastguard Worker $(TOOLSDIR)/lib/str_error_r.c 300*053f45beSAndroid Build Coastguard Worker $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/resolve_btfids \ 301*053f45beSAndroid Build Coastguard Worker CC=$(HOSTCC) LD=$(HOSTLD) AR=$(HOSTAR) \ 302*053f45beSAndroid Build Coastguard Worker LIBBPF_INCLUDE=$(HOST_INCLUDE_DIR) \ 303*053f45beSAndroid Build Coastguard Worker OUTPUT=$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=$(HOST_BPFOBJ) 304*053f45beSAndroid Build Coastguard Worker 305*053f45beSAndroid Build Coastguard Worker# Get Clang's default includes on this system, as opposed to those seen by 306*053f45beSAndroid Build Coastguard Worker# '-target bpf'. This fixes "missing" files on some architectures/distros, 307*053f45beSAndroid Build Coastguard Worker# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc. 308*053f45beSAndroid Build Coastguard Worker# 309*053f45beSAndroid Build Coastguard Worker# Use '-idirafter': Don't interfere with include mechanics except where the 310*053f45beSAndroid Build Coastguard Worker# build would have failed anyways. 311*053f45beSAndroid Build Coastguard Workerdefine get_sys_includes 312*053f45beSAndroid Build Coastguard Worker$(shell $(1) -v -E - </dev/null 2>&1 \ 313*053f45beSAndroid Build Coastguard Worker | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \ 314*053f45beSAndroid Build Coastguard Worker$(shell $(1) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=%d -D__BITS_PER_LONG=%d", $$3, $$3)}') 315*053f45beSAndroid Build Coastguard Workerendef 316*053f45beSAndroid Build Coastguard Worker 317*053f45beSAndroid Build Coastguard Worker# Determine target endianness. 318*053f45beSAndroid Build Coastguard WorkerIS_LITTLE_ENDIAN = $(shell $(CC) -dM -E - </dev/null | \ 319*053f45beSAndroid Build Coastguard Worker grep 'define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__') 320*053f45beSAndroid Build Coastguard WorkerMENDIAN=$(if $(IS_LITTLE_ENDIAN),-mlittle-endian,-mbig-endian) 321*053f45beSAndroid Build Coastguard Worker 322*053f45beSAndroid Build Coastguard WorkerCLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG)) 323*053f45beSAndroid Build Coastguard WorkerBPF_CFLAGS = -g -Werror -D__TARGET_ARCH_$(SRCARCH) $(MENDIAN) \ 324*053f45beSAndroid Build Coastguard Worker -I$(INCLUDE_DIR) -I$(CURDIR) -I$(APIDIR) \ 325*053f45beSAndroid Build Coastguard Worker -I$(abspath $(OUTPUT)/../usr/include) 326*053f45beSAndroid Build Coastguard Worker 327*053f45beSAndroid Build Coastguard WorkerCLANG_CFLAGS = $(CLANG_SYS_INCLUDES) \ 328*053f45beSAndroid Build Coastguard Worker -Wno-compare-distinct-pointer-types 329*053f45beSAndroid Build Coastguard Worker 330*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_l4lb_noinline.o: BPF_CFLAGS += -fno-inline 331*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_xdp_noinline.o: BPF_CFLAGS += -fno-inline 332*053f45beSAndroid Build Coastguard Worker 333*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/flow_dissector_load.o: flow_dissector_load.h 334*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/cgroup_getset_retval_hooks.o: cgroup_getset_retval_hooks.h 335*053f45beSAndroid Build Coastguard Worker 336*053f45beSAndroid Build Coastguard Worker# Build BPF object using Clang 337*053f45beSAndroid Build Coastguard Worker# $1 - input .c file 338*053f45beSAndroid Build Coastguard Worker# $2 - output .o file 339*053f45beSAndroid Build Coastguard Worker# $3 - CFLAGS 340*053f45beSAndroid Build Coastguard Workerdefine CLANG_BPF_BUILD_RULE 341*053f45beSAndroid Build Coastguard Worker $(call msg,CLNG-BPF,$(TRUNNER_BINARY),$2) 342*053f45beSAndroid Build Coastguard Worker $(Q)$(CLANG) $3 -O2 -target bpf -c $1 -mcpu=v3 -o $2 343*053f45beSAndroid Build Coastguard Workerendef 344*053f45beSAndroid Build Coastguard Worker# Similar to CLANG_BPF_BUILD_RULE, but with disabled alu32 345*053f45beSAndroid Build Coastguard Workerdefine CLANG_NOALU32_BPF_BUILD_RULE 346*053f45beSAndroid Build Coastguard Worker $(call msg,CLNG-BPF,$(TRUNNER_BINARY),$2) 347*053f45beSAndroid Build Coastguard Worker $(Q)$(CLANG) $3 -O2 -target bpf -c $1 -mcpu=v2 -o $2 348*053f45beSAndroid Build Coastguard Workerendef 349*053f45beSAndroid Build Coastguard Worker# Build BPF object using GCC 350*053f45beSAndroid Build Coastguard Workerdefine GCC_BPF_BUILD_RULE 351*053f45beSAndroid Build Coastguard Worker $(call msg,GCC-BPF,$(TRUNNER_BINARY),$2) 352*053f45beSAndroid Build Coastguard Worker $(Q)$(BPF_GCC) $3 -O2 -c $1 -o $2 353*053f45beSAndroid Build Coastguard Workerendef 354*053f45beSAndroid Build Coastguard Worker 355*053f45beSAndroid Build Coastguard WorkerSKEL_BLACKLIST := btf__% test_pinning_invalid.c test_sk_assign.c 356*053f45beSAndroid Build Coastguard Worker 357*053f45beSAndroid Build Coastguard WorkerLINKED_SKELS := test_static_linked.skel.h linked_funcs.skel.h \ 358*053f45beSAndroid Build Coastguard Worker linked_vars.skel.h linked_maps.skel.h \ 359*053f45beSAndroid Build Coastguard Worker test_subskeleton.skel.h test_subskeleton_lib.skel.h \ 360*053f45beSAndroid Build Coastguard Worker test_usdt.skel.h 361*053f45beSAndroid Build Coastguard Worker 362*053f45beSAndroid Build Coastguard WorkerLSKELS := fentry_test.c fexit_test.c fexit_sleep.c \ 363*053f45beSAndroid Build Coastguard Worker test_ringbuf.c atomics.c trace_printk.c trace_vprintk.c \ 364*053f45beSAndroid Build Coastguard Worker map_ptr_kern.c core_kern.c core_kern_overflow.c 365*053f45beSAndroid Build Coastguard Worker# Generate both light skeleton and libbpf skeleton for these 366*053f45beSAndroid Build Coastguard WorkerLSKELS_EXTRA := test_ksyms_module.c test_ksyms_weak.c kfunc_call_test.c \ 367*053f45beSAndroid Build Coastguard Worker kfunc_call_test_subprog.c 368*053f45beSAndroid Build Coastguard WorkerSKEL_BLACKLIST += $$(LSKELS) 369*053f45beSAndroid Build Coastguard Worker 370*053f45beSAndroid Build Coastguard Workertest_static_linked.skel.h-deps := test_static_linked1.bpf.o test_static_linked2.bpf.o 371*053f45beSAndroid Build Coastguard Workerlinked_funcs.skel.h-deps := linked_funcs1.bpf.o linked_funcs2.bpf.o 372*053f45beSAndroid Build Coastguard Workerlinked_vars.skel.h-deps := linked_vars1.bpf.o linked_vars2.bpf.o 373*053f45beSAndroid Build Coastguard Workerlinked_maps.skel.h-deps := linked_maps1.bpf.o linked_maps2.bpf.o 374*053f45beSAndroid Build Coastguard Worker# In the subskeleton case, we want the test_subskeleton_lib.subskel.h file 375*053f45beSAndroid Build Coastguard Worker# but that's created as a side-effect of the skel.h generation. 376*053f45beSAndroid Build Coastguard Workertest_subskeleton.skel.h-deps := test_subskeleton_lib2.bpf.o test_subskeleton_lib.bpf.o test_subskeleton.bpf.o 377*053f45beSAndroid Build Coastguard Workertest_subskeleton_lib.skel.h-deps := test_subskeleton_lib2.bpf.o test_subskeleton_lib.bpf.o 378*053f45beSAndroid Build Coastguard Workertest_usdt.skel.h-deps := test_usdt.bpf.o test_usdt_multispec.bpf.o 379*053f45beSAndroid Build Coastguard Worker 380*053f45beSAndroid Build Coastguard WorkerLINKED_BPF_SRCS := $(patsubst %.bpf.o,%.c,$(foreach skel,$(LINKED_SKELS),$($(skel)-deps))) 381*053f45beSAndroid Build Coastguard Worker 382*053f45beSAndroid Build Coastguard Worker# Set up extra TRUNNER_XXX "temporary" variables in the environment (relies on 383*053f45beSAndroid Build Coastguard Worker# $eval()) and pass control to DEFINE_TEST_RUNNER_RULES. 384*053f45beSAndroid Build Coastguard Worker# Parameters: 385*053f45beSAndroid Build Coastguard Worker# $1 - test runner base binary name (e.g., test_progs) 386*053f45beSAndroid Build Coastguard Worker# $2 - test runner extra "flavor" (e.g., no_alu32, gcc-bpf, etc) 387*053f45beSAndroid Build Coastguard Workerdefine DEFINE_TEST_RUNNER 388*053f45beSAndroid Build Coastguard Worker 389*053f45beSAndroid Build Coastguard WorkerTRUNNER_OUTPUT := $(OUTPUT)$(if $2,/)$2 390*053f45beSAndroid Build Coastguard WorkerTRUNNER_BINARY := $1$(if $2,-)$2 391*053f45beSAndroid Build Coastguard WorkerTRUNNER_TEST_OBJS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.test.o, \ 392*053f45beSAndroid Build Coastguard Worker $$(notdir $$(wildcard $(TRUNNER_TESTS_DIR)/*.c))) 393*053f45beSAndroid Build Coastguard WorkerTRUNNER_EXTRA_OBJS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.o, \ 394*053f45beSAndroid Build Coastguard Worker $$(filter %.c,$(TRUNNER_EXTRA_SOURCES))) 395*053f45beSAndroid Build Coastguard WorkerTRUNNER_EXTRA_HDRS := $$(filter %.h,$(TRUNNER_EXTRA_SOURCES)) 396*053f45beSAndroid Build Coastguard WorkerTRUNNER_TESTS_HDR := $(TRUNNER_TESTS_DIR)/tests.h 397*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_SRCS := $$(notdir $$(wildcard $(TRUNNER_BPF_PROGS_DIR)/*.c)) 398*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_OBJS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.bpf.o, $$(TRUNNER_BPF_SRCS)) 399*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_SKELS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.skel.h, \ 400*053f45beSAndroid Build Coastguard Worker $$(filter-out $(SKEL_BLACKLIST) $(LINKED_BPF_SRCS),\ 401*053f45beSAndroid Build Coastguard Worker $$(TRUNNER_BPF_SRCS))) 402*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_LSKELS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.lskel.h, $$(LSKELS) $$(LSKELS_EXTRA)) 403*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_SKELS_LINKED := $$(addprefix $$(TRUNNER_OUTPUT)/,$(LINKED_SKELS)) 404*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES += $$(TRUNNER_BPF_OBJS) 405*053f45beSAndroid Build Coastguard Worker 406*053f45beSAndroid Build Coastguard Worker# Evaluate rules now with extra TRUNNER_XXX variables above already defined 407*053f45beSAndroid Build Coastguard Worker$$(eval $$(call DEFINE_TEST_RUNNER_RULES,$1,$2)) 408*053f45beSAndroid Build Coastguard Worker 409*053f45beSAndroid Build Coastguard Workerendef 410*053f45beSAndroid Build Coastguard Worker 411*053f45beSAndroid Build Coastguard Worker# Using TRUNNER_XXX variables, provided by callers of DEFINE_TEST_RUNNER and 412*053f45beSAndroid Build Coastguard Worker# set up by DEFINE_TEST_RUNNER itself, create test runner build rules with: 413*053f45beSAndroid Build Coastguard Worker# $1 - test runner base binary name (e.g., test_progs) 414*053f45beSAndroid Build Coastguard Worker# $2 - test runner extra "flavor" (e.g., no_alu32, gcc-bpf, etc) 415*053f45beSAndroid Build Coastguard Workerdefine DEFINE_TEST_RUNNER_RULES 416*053f45beSAndroid Build Coastguard Worker 417*053f45beSAndroid Build Coastguard Workerifeq ($($(TRUNNER_OUTPUT)-dir),) 418*053f45beSAndroid Build Coastguard Worker$(TRUNNER_OUTPUT)-dir := y 419*053f45beSAndroid Build Coastguard Worker$(TRUNNER_OUTPUT): 420*053f45beSAndroid Build Coastguard Worker $$(call msg,MKDIR,,$$@) 421*053f45beSAndroid Build Coastguard Worker $(Q)mkdir -p $$@ 422*053f45beSAndroid Build Coastguard Workerendif 423*053f45beSAndroid Build Coastguard Worker 424*053f45beSAndroid Build Coastguard Worker# ensure we set up BPF objects generation rule just once for a given 425*053f45beSAndroid Build Coastguard Worker# input/output directory combination 426*053f45beSAndroid Build Coastguard Workerifeq ($($(TRUNNER_BPF_PROGS_DIR)$(if $2,-)$2-bpfobjs),) 427*053f45beSAndroid Build Coastguard Worker$(TRUNNER_BPF_PROGS_DIR)$(if $2,-)$2-bpfobjs := y 428*053f45beSAndroid Build Coastguard Worker$(TRUNNER_BPF_OBJS): $(TRUNNER_OUTPUT)/%.bpf.o: \ 429*053f45beSAndroid Build Coastguard Worker $(TRUNNER_BPF_PROGS_DIR)/%.c \ 430*053f45beSAndroid Build Coastguard Worker $(TRUNNER_BPF_PROGS_DIR)/*.h \ 431*053f45beSAndroid Build Coastguard Worker $$(INCLUDE_DIR)/vmlinux.h \ 432*053f45beSAndroid Build Coastguard Worker $(wildcard $(BPFDIR)/bpf_*.h) \ 433*053f45beSAndroid Build Coastguard Worker $(wildcard $(BPFDIR)/*.bpf.h) \ 434*053f45beSAndroid Build Coastguard Worker | $(TRUNNER_OUTPUT) $$(BPFOBJ) 435*053f45beSAndroid Build Coastguard Worker $$(call $(TRUNNER_BPF_BUILD_RULE),$$<,$$@, \ 436*053f45beSAndroid Build Coastguard Worker $(TRUNNER_BPF_CFLAGS)) 437*053f45beSAndroid Build Coastguard Worker 438*053f45beSAndroid Build Coastguard Worker$(TRUNNER_BPF_SKELS): %.skel.h: %.bpf.o $(BPFTOOL) | $(TRUNNER_OUTPUT) 439*053f45beSAndroid Build Coastguard Worker $$(call msg,GEN-SKEL,$(TRUNNER_BINARY),$$@) 440*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen object $$(<:.o=.linked1.o) $$< 441*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen object $$(<:.o=.linked2.o) $$(<:.o=.linked1.o) 442*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen object $$(<:.o=.linked3.o) $$(<:.o=.linked2.o) 443*053f45beSAndroid Build Coastguard Worker $(Q)diff $$(<:.o=.linked2.o) $$(<:.o=.linked3.o) 444*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen skeleton $$(<:.o=.linked3.o) name $$(notdir $$(<:.bpf.o=)) > $$@ 445*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen subskeleton $$(<:.o=.linked3.o) name $$(notdir $$(<:.bpf.o=)) > $$(@:.skel.h=.subskel.h) 446*053f45beSAndroid Build Coastguard Worker 447*053f45beSAndroid Build Coastguard Worker$(TRUNNER_BPF_LSKELS): %.lskel.h: %.bpf.o $(BPFTOOL) | $(TRUNNER_OUTPUT) 448*053f45beSAndroid Build Coastguard Worker $$(call msg,GEN-SKEL,$(TRUNNER_BINARY),$$@) 449*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen object $$(<:.o=.llinked1.o) $$< 450*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen object $$(<:.o=.llinked2.o) $$(<:.o=.llinked1.o) 451*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen object $$(<:.o=.llinked3.o) $$(<:.o=.llinked2.o) 452*053f45beSAndroid Build Coastguard Worker $(Q)diff $$(<:.o=.llinked2.o) $$(<:.o=.llinked3.o) 453*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen skeleton -L $$(<:.o=.llinked3.o) name $$(notdir $$(<:.bpf.o=_lskel)) > $$@ 454*053f45beSAndroid Build Coastguard Worker 455*053f45beSAndroid Build Coastguard Worker$(TRUNNER_BPF_SKELS_LINKED): $(TRUNNER_BPF_OBJS) $(BPFTOOL) | $(TRUNNER_OUTPUT) 456*053f45beSAndroid Build Coastguard Worker $$(call msg,LINK-BPF,$(TRUNNER_BINARY),$$(@:.skel.h=.bpf.o)) 457*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen object $$(@:.skel.h=.linked1.o) $$(addprefix $(TRUNNER_OUTPUT)/,$$($$(@F)-deps)) 458*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen object $$(@:.skel.h=.linked2.o) $$(@:.skel.h=.linked1.o) 459*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen object $$(@:.skel.h=.linked3.o) $$(@:.skel.h=.linked2.o) 460*053f45beSAndroid Build Coastguard Worker $(Q)diff $$(@:.skel.h=.linked2.o) $$(@:.skel.h=.linked3.o) 461*053f45beSAndroid Build Coastguard Worker $$(call msg,GEN-SKEL,$(TRUNNER_BINARY),$$@) 462*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen skeleton $$(@:.skel.h=.linked3.o) name $$(notdir $$(@:.skel.h=)) > $$@ 463*053f45beSAndroid Build Coastguard Worker $(Q)$$(BPFTOOL) gen subskeleton $$(@:.skel.h=.linked3.o) name $$(notdir $$(@:.skel.h=)) > $$(@:.skel.h=.subskel.h) 464*053f45beSAndroid Build Coastguard Workerendif 465*053f45beSAndroid Build Coastguard Worker 466*053f45beSAndroid Build Coastguard Worker# ensure we set up tests.h header generation rule just once 467*053f45beSAndroid Build Coastguard Workerifeq ($($(TRUNNER_TESTS_DIR)-tests-hdr),) 468*053f45beSAndroid Build Coastguard Worker$(TRUNNER_TESTS_DIR)-tests-hdr := y 469*053f45beSAndroid Build Coastguard Worker$(TRUNNER_TESTS_HDR): $(TRUNNER_TESTS_DIR)/*.c 470*053f45beSAndroid Build Coastguard Worker $$(call msg,TEST-HDR,$(TRUNNER_BINARY),$$@) 471*053f45beSAndroid Build Coastguard Worker $$(shell (echo '/* Generated header, do not edit */'; \ 472*053f45beSAndroid Build Coastguard Worker sed -n -E 's/^void (serial_)?test_([a-zA-Z0-9_]+)\((void)?\).*/DEFINE_TEST(\2)/p' \ 473*053f45beSAndroid Build Coastguard Worker $(TRUNNER_TESTS_DIR)/*.c | sort ; \ 474*053f45beSAndroid Build Coastguard Worker ) > $$@) 475*053f45beSAndroid Build Coastguard Workerendif 476*053f45beSAndroid Build Coastguard Worker 477*053f45beSAndroid Build Coastguard Worker# compile individual test files 478*053f45beSAndroid Build Coastguard Worker# Note: we cd into output directory to ensure embedded BPF object is found 479*053f45beSAndroid Build Coastguard Worker$(TRUNNER_TEST_OBJS): $(TRUNNER_OUTPUT)/%.test.o: \ 480*053f45beSAndroid Build Coastguard Worker $(TRUNNER_TESTS_DIR)/%.c \ 481*053f45beSAndroid Build Coastguard Worker $(TRUNNER_EXTRA_HDRS) \ 482*053f45beSAndroid Build Coastguard Worker $(TRUNNER_BPF_OBJS) \ 483*053f45beSAndroid Build Coastguard Worker $(TRUNNER_BPF_SKELS) \ 484*053f45beSAndroid Build Coastguard Worker $(TRUNNER_BPF_LSKELS) \ 485*053f45beSAndroid Build Coastguard Worker $(TRUNNER_BPF_SKELS_LINKED) \ 486*053f45beSAndroid Build Coastguard Worker $$(BPFOBJ) | $(TRUNNER_OUTPUT) 487*053f45beSAndroid Build Coastguard Worker $$(call msg,TEST-OBJ,$(TRUNNER_BINARY),$$@) 488*053f45beSAndroid Build Coastguard Worker $(Q)cd $$(@D) && $$(CC) -I. $$(CFLAGS) -c $(CURDIR)/$$< $$(LDLIBS) -o $$(@F) 489*053f45beSAndroid Build Coastguard Worker 490*053f45beSAndroid Build Coastguard Worker$(TRUNNER_EXTRA_OBJS): $(TRUNNER_OUTPUT)/%.o: \ 491*053f45beSAndroid Build Coastguard Worker %.c \ 492*053f45beSAndroid Build Coastguard Worker $(TRUNNER_EXTRA_HDRS) \ 493*053f45beSAndroid Build Coastguard Worker $(TRUNNER_TESTS_HDR) \ 494*053f45beSAndroid Build Coastguard Worker $$(BPFOBJ) | $(TRUNNER_OUTPUT) 495*053f45beSAndroid Build Coastguard Worker $$(call msg,EXT-OBJ,$(TRUNNER_BINARY),$$@) 496*053f45beSAndroid Build Coastguard Worker $(Q)$$(CC) $$(CFLAGS) -c $$< $$(LDLIBS) -o $$@ 497*053f45beSAndroid Build Coastguard Worker 498*053f45beSAndroid Build Coastguard Worker# non-flavored in-srctree builds receive special treatment, in particular, we 499*053f45beSAndroid Build Coastguard Worker# do not need to copy extra resources (see e.g. test_btf_dump_case()) 500*053f45beSAndroid Build Coastguard Worker$(TRUNNER_BINARY)-extras: $(TRUNNER_EXTRA_FILES) | $(TRUNNER_OUTPUT) 501*053f45beSAndroid Build Coastguard Workerifneq ($2:$(OUTPUT),:$(shell pwd)) 502*053f45beSAndroid Build Coastguard Worker $$(call msg,EXT-COPY,$(TRUNNER_BINARY),$(TRUNNER_EXTRA_FILES)) 503*053f45beSAndroid Build Coastguard Worker $(Q)rsync -aq $$^ $(TRUNNER_OUTPUT)/ 504*053f45beSAndroid Build Coastguard Workerendif 505*053f45beSAndroid Build Coastguard Worker 506*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS) \ 507*053f45beSAndroid Build Coastguard Worker $(TRUNNER_EXTRA_OBJS) $$(BPFOBJ) \ 508*053f45beSAndroid Build Coastguard Worker $(RESOLVE_BTFIDS) \ 509*053f45beSAndroid Build Coastguard Worker | $(TRUNNER_BINARY)-extras 510*053f45beSAndroid Build Coastguard Worker $$(call msg,BINARY,,$$@) 511*053f45beSAndroid Build Coastguard Worker $(Q)$$(CC) $$(CFLAGS) $$(filter %.a %.o,$$^) $$(LDLIBS) -o $$@ 512*053f45beSAndroid Build Coastguard Worker $(Q)$(RESOLVE_BTFIDS) --btf $(TRUNNER_OUTPUT)/btf_data.bpf.o $$@ 513*053f45beSAndroid Build Coastguard Worker $(Q)ln -sf $(if $2,..,.)/tools/build/bpftool/bootstrap/bpftool $(if $2,$2/)bpftool 514*053f45beSAndroid Build Coastguard Worker 515*053f45beSAndroid Build Coastguard Workerendef 516*053f45beSAndroid Build Coastguard Worker 517*053f45beSAndroid Build Coastguard Worker# Define test_progs test runner. 518*053f45beSAndroid Build Coastguard WorkerTRUNNER_TESTS_DIR := prog_tests 519*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_PROGS_DIR := progs 520*053f45beSAndroid Build Coastguard WorkerTRUNNER_EXTRA_SOURCES := test_progs.c cgroup_helpers.c trace_helpers.c \ 521*053f45beSAndroid Build Coastguard Worker network_helpers.c testing_helpers.c \ 522*053f45beSAndroid Build Coastguard Worker btf_helpers.c flow_dissector_load.h \ 523*053f45beSAndroid Build Coastguard Worker cap_helpers.c 524*053f45beSAndroid Build Coastguard WorkerTRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ 525*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/liburandom_read.so \ 526*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/xdp_synproxy \ 527*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/sign-file \ 528*053f45beSAndroid Build Coastguard Worker ima_setup.sh verify_sig_setup.sh \ 529*053f45beSAndroid Build Coastguard Worker $(wildcard progs/btf_dump_test_case_*.c) 530*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_BUILD_RULE := CLANG_BPF_BUILD_RULE 531*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(CLANG_CFLAGS) -DENABLE_ATOMICS_TESTS 532*053f45beSAndroid Build Coastguard Worker$(eval $(call DEFINE_TEST_RUNNER,test_progs)) 533*053f45beSAndroid Build Coastguard Worker 534*053f45beSAndroid Build Coastguard Worker# Define test_progs-no_alu32 test runner. 535*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_BUILD_RULE := CLANG_NOALU32_BPF_BUILD_RULE 536*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(CLANG_CFLAGS) 537*053f45beSAndroid Build Coastguard Worker$(eval $(call DEFINE_TEST_RUNNER,test_progs,no_alu32)) 538*053f45beSAndroid Build Coastguard Worker 539*053f45beSAndroid Build Coastguard Worker# Define test_progs BPF-GCC-flavored test runner. 540*053f45beSAndroid Build Coastguard Workerifneq ($(BPF_GCC),) 541*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_BUILD_RULE := GCC_BPF_BUILD_RULE 542*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(call get_sys_includes,gcc) 543*053f45beSAndroid Build Coastguard Worker$(eval $(call DEFINE_TEST_RUNNER,test_progs,bpf_gcc)) 544*053f45beSAndroid Build Coastguard Workerendif 545*053f45beSAndroid Build Coastguard Worker 546*053f45beSAndroid Build Coastguard Worker# Define test_maps test runner. 547*053f45beSAndroid Build Coastguard WorkerTRUNNER_TESTS_DIR := map_tests 548*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_PROGS_DIR := progs 549*053f45beSAndroid Build Coastguard WorkerTRUNNER_EXTRA_SOURCES := test_maps.c 550*053f45beSAndroid Build Coastguard WorkerTRUNNER_EXTRA_FILES := 551*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_BUILD_RULE := $$(error no BPF objects should be built) 552*053f45beSAndroid Build Coastguard WorkerTRUNNER_BPF_CFLAGS := 553*053f45beSAndroid Build Coastguard Worker$(eval $(call DEFINE_TEST_RUNNER,test_maps)) 554*053f45beSAndroid Build Coastguard Worker 555*053f45beSAndroid Build Coastguard Worker# Define test_verifier test runner. 556*053f45beSAndroid Build Coastguard Worker# It is much simpler than test_maps/test_progs and sufficiently different from 557*053f45beSAndroid Build Coastguard Worker# them (e.g., test.h is using completely pattern), that it's worth just 558*053f45beSAndroid Build Coastguard Worker# explicitly defining all the rules explicitly. 559*053f45beSAndroid Build Coastguard Workerverifier/tests.h: verifier/*.c 560*053f45beSAndroid Build Coastguard Worker $(shell ( cd verifier/; \ 561*053f45beSAndroid Build Coastguard Worker echo '/* Generated header, do not edit */'; \ 562*053f45beSAndroid Build Coastguard Worker echo '#ifdef FILL_ARRAY'; \ 563*053f45beSAndroid Build Coastguard Worker ls *.c 2> /dev/null | sed -e 's@\(.*\)@#include \"\1\"@'; \ 564*053f45beSAndroid Build Coastguard Worker echo '#endif' \ 565*053f45beSAndroid Build Coastguard Worker ) > verifier/tests.h) 566*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_verifier: test_verifier.c verifier/tests.h $(BPFOBJ) | $(OUTPUT) 567*053f45beSAndroid Build Coastguard Worker $(call msg,BINARY,,$@) 568*053f45beSAndroid Build Coastguard Worker $(Q)$(CC) $(CFLAGS) $(filter %.a %.o %.c,$^) $(LDLIBS) -o $@ 569*053f45beSAndroid Build Coastguard Worker 570*053f45beSAndroid Build Coastguard Worker# Make sure we are able to include and link libbpf against c++. 571*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/test_cpp: test_cpp.cpp $(OUTPUT)/test_core_extern.skel.h $(BPFOBJ) 572*053f45beSAndroid Build Coastguard Worker $(call msg,CXX,,$@) 573*053f45beSAndroid Build Coastguard Worker $(Q)$(CXX) $(CFLAGS) $(filter %.a %.o %.cpp,$^) $(LDLIBS) -o $@ 574*053f45beSAndroid Build Coastguard Worker 575*053f45beSAndroid Build Coastguard Worker# Benchmark runner 576*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench_%.o: benchs/bench_%.c bench.h $(BPFOBJ) 577*053f45beSAndroid Build Coastguard Worker $(call msg,CC,,$@) 578*053f45beSAndroid Build Coastguard Worker $(Q)$(CC) $(CFLAGS) -O2 -c $(filter %.c,$^) $(LDLIBS) -o $@ 579*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench_rename.o: $(OUTPUT)/test_overhead.skel.h 580*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench_trigger.o: $(OUTPUT)/trigger_bench.skel.h 581*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench_ringbufs.o: $(OUTPUT)/ringbuf_bench.skel.h \ 582*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/perfbuf_bench.skel.h 583*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench_bloom_filter_map.o: $(OUTPUT)/bloom_filter_bench.skel.h 584*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench_bpf_loop.o: $(OUTPUT)/bpf_loop_bench.skel.h 585*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench_strncmp.o: $(OUTPUT)/strncmp_bench.skel.h 586*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench_bpf_hashmap_full_update.o: $(OUTPUT)/bpf_hashmap_full_update_bench.skel.h 587*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench_local_storage.o: $(OUTPUT)/local_storage_bench.skel.h 588*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench_local_storage_rcu_tasks_trace.o: $(OUTPUT)/local_storage_rcu_tasks_trace_bench.skel.h 589*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench.o: bench.h testing_helpers.h $(BPFOBJ) 590*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench: LDLIBS += -lm 591*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/bench: $(OUTPUT)/bench.o \ 592*053f45beSAndroid Build Coastguard Worker $(TESTING_HELPERS) \ 593*053f45beSAndroid Build Coastguard Worker $(TRACE_HELPERS) \ 594*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/bench_count.o \ 595*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/bench_rename.o \ 596*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/bench_trigger.o \ 597*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/bench_ringbufs.o \ 598*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/bench_bloom_filter_map.o \ 599*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/bench_bpf_loop.o \ 600*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/bench_strncmp.o \ 601*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/bench_bpf_hashmap_full_update.o \ 602*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/bench_local_storage.o \ 603*053f45beSAndroid Build Coastguard Worker $(OUTPUT)/bench_local_storage_rcu_tasks_trace.o 604*053f45beSAndroid Build Coastguard Worker $(call msg,BINARY,,$@) 605*053f45beSAndroid Build Coastguard Worker $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@ 606*053f45beSAndroid Build Coastguard Worker 607*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/veristat.o: $(BPFOBJ) 608*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/veristat: $(OUTPUT)/veristat.o 609*053f45beSAndroid Build Coastguard Worker $(call msg,BINARY,,$@) 610*053f45beSAndroid Build Coastguard Worker $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@ 611*053f45beSAndroid Build Coastguard Worker 612*053f45beSAndroid Build Coastguard WorkerEXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \ 613*053f45beSAndroid Build Coastguard Worker prog_tests/tests.h map_tests/tests.h verifier/tests.h \ 614*053f45beSAndroid Build Coastguard Worker feature bpftool \ 615*053f45beSAndroid Build Coastguard Worker $(addprefix $(OUTPUT)/,*.o *.skel.h *.lskel.h *.subskel.h \ 616*053f45beSAndroid Build Coastguard Worker no_alu32 bpf_gcc bpf_testmod.ko \ 617*053f45beSAndroid Build Coastguard Worker liburandom_read.so) 618*053f45beSAndroid Build Coastguard Worker 619*053f45beSAndroid Build Coastguard Worker.PHONY: docs docs-clean 620