1b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0 2618e165bSHendrik Brueckner 3d498f871SMickaël SalaünLIBDIR := ../../../lib 4e8f1f34aSZi Shen LimBPFDIR := $(LIBDIR)/bpf 502ea80b1SDaniel BorkmannAPIDIR := ../../../include/uapi 602ea80b1SDaniel BorkmannGENDIR := ../../../../include/generated 702ea80b1SDaniel BorkmannGENHDR := $(GENDIR)/autoconf.h 8d498f871SMickaël Salaün 902ea80b1SDaniel Borkmannifneq ($(wildcard $(GENHDR)),) 1002ea80b1SDaniel Borkmann GENFLAGS := -DHAVE_GENHDR 1102ea80b1SDaniel Borkmannendif 1202ea80b1SDaniel Borkmann 13720f228eSDaniel BorkmannCFLAGS += -Wall -O2 -I$(APIDIR) -I$(LIBDIR) -I$(GENDIR) $(GENFLAGS) -I../../../include 14af32efeeSYonghong SongLDLIBS += -lcap -lelf -lrt -lpthread 155aa5bd14SDaniel Borkmann 16*f09b2e38SJesper Dangaard Brouer# Order correspond to 'make run_tests' order 1718b3ad90SDavid S. MillerTEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map test_progs \ 18d6d4f60cSLawrence Brakmo test_align test_verifier_log test_dev_cgroup test_tcpbpf_user 196882804cSAlexei Starovoitov 2018f3d6beSYonghong SongTEST_GEN_FILES = test_pkt_access.o test_xdp.o test_l4lb.o test_tcp_estats.o test_obj_id.o \ 2122c88526SDaniel Borkmann test_pkt_md_access.o test_xdp_redirect.o test_xdp_meta.o sockmap_parse_prog.o \ 223bc35c63SAlexei Starovoitov sockmap_verdict_prog.o dev_cgroup.o sample_ret0.o test_tracepoint.o \ 237fedbb7cSJakub Kicinski test_l4lb_noinline.o test_xdp_noinline.o test_stacktrace_map.o \ 24*f09b2e38SJesper Dangaard Brouer sample_map_ret0.o test_tcpbpf_kern.o 255aa5bd14SDaniel Borkmann 26*f09b2e38SJesper Dangaard Brouer# Order correspond to 'make run_tests' order 27*f09b2e38SJesper Dangaard BrouerTEST_PROGS := test_kmod.sh \ 28*f09b2e38SJesper Dangaard Brouer test_libbpf.sh \ 29*f09b2e38SJesper Dangaard Brouer test_xdp_redirect.sh \ 30*f09b2e38SJesper Dangaard Brouer test_xdp_meta.sh \ 31417ec264SJakub Kicinski test_offload.py 325aa5bd14SDaniel Borkmann 33*f09b2e38SJesper Dangaard Brouer# Compile but not part of 'make run_tests' 34*f09b2e38SJesper Dangaard BrouerTEST_GEN_PROGS_EXTENDED = test_libbpf_open 35*f09b2e38SJesper Dangaard Brouer 36e8f1f34aSZi Shen Liminclude ../lib.mk 371da8ac7cSAlexei Starovoitov 3862a06994SYonghong SongBPFOBJ := $(OUTPUT)/libbpf.a cgroup_helpers.c 39e8f1f34aSZi Shen Lim 40e8f1f34aSZi Shen Lim$(TEST_GEN_PROGS): $(BPFOBJ) 41e8f1f34aSZi Shen Lim 42*f09b2e38SJesper Dangaard Brouer$(TEST_GEN_PROGS_EXTENDED): $(OUTPUT)/libbpf.a 43*f09b2e38SJesper Dangaard Brouer 44e8f1f34aSZi Shen Lim.PHONY: force 45d498f871SMickaël Salaün 46d498f871SMickaël Salaün# force a rebuild of BPFOBJ when its dependencies are updated 47d498f871SMickaël Salaünforce: 48d498f871SMickaël Salaün 49d498f871SMickaël Salaün$(BPFOBJ): force 50e8f1f34aSZi Shen Lim $(MAKE) -C $(BPFDIR) OUTPUT=$(OUTPUT)/ 516882804cSAlexei Starovoitov 526882804cSAlexei StarovoitovCLANG ?= clang 5322c88526SDaniel BorkmannLLC ?= llc 5422c88526SDaniel Borkmann 55cd95a892SQuentin MonnetPROBE := $(shell $(LLC) -march=bpf -mcpu=probe -filetype=null /dev/null 2>&1) 5622c88526SDaniel Borkmann 5722c88526SDaniel Borkmann# Let newer LLVM versions transparently probe the kernel for availability 5822c88526SDaniel Borkmann# of full BPF instruction set. 5922c88526SDaniel Borkmannifeq ($(PROBE),) 6022c88526SDaniel Borkmann CPU ?= probe 6122c88526SDaniel Borkmannelse 6222c88526SDaniel Borkmann CPU ?= generic 6322c88526SDaniel Borkmannendif 646882804cSAlexei Starovoitov 653bc35c63SAlexei StarovoitovCLANG_FLAGS = -I. -I./include/uapi -I../../../include/uapi \ 663bc35c63SAlexei Starovoitov -Wno-compare-distinct-pointer-types 673bc35c63SAlexei Starovoitov 683bc35c63SAlexei Starovoitov$(OUTPUT)/test_l4lb_noinline.o: CLANG_FLAGS += -fno-inline 69b0b04fc4SAlexei Starovoitov$(OUTPUT)/test_xdp_noinline.o: CLANG_FLAGS += -fno-inline 703bc35c63SAlexei Starovoitov 7162a06994SYonghong Song$(OUTPUT)/%.o: %.c 723bc35c63SAlexei Starovoitov $(CLANG) $(CLANG_FLAGS) \ 7322c88526SDaniel Borkmann -O2 -target bpf -emit-llvm -c $< -o - | \ 7422c88526SDaniel Borkmann $(LLC) -march=bpf -mcpu=$(CPU) -filetype=obj -o $@ 75