1b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0 29cae4aceSIlya Leoshkevichinclude ../../../../scripts/Kbuild.include 3748e50c1SIlya Leoshkevichinclude ../../../scripts/Makefile.arch 4618e165bSHendrik Brueckner 5d498f871SMickaël SalaünLIBDIR := ../../../lib 6e8f1f34aSZi Shen LimBPFDIR := $(LIBDIR)/bpf 702ea80b1SDaniel BorkmannAPIDIR := ../../../include/uapi 802ea80b1SDaniel BorkmannGENDIR := ../../../../include/generated 902ea80b1SDaniel BorkmannGENHDR := $(GENDIR)/autoconf.h 10d498f871SMickaël Salaün 1102ea80b1SDaniel Borkmannifneq ($(wildcard $(GENHDR)),) 1202ea80b1SDaniel Borkmann GENFLAGS := -DHAVE_GENHDR 1302ea80b1SDaniel Borkmannendif 1402ea80b1SDaniel Borkmann 153ef84346SJiong WangCLANG ?= clang 163ef84346SJiong WangLLC ?= llc 173ef84346SJiong WangLLVM_OBJCOPY ?= llvm-objcopy 184ce150b6SIlya LeoshkevichBPF_GCC ?= $(shell command -v bpf-gcc;) 196bcc617fSAndrii NakryikoCFLAGS += -g -Wall -O2 -I$(APIDIR) -I$(LIBDIR) -I$(BPFDIR) -I$(GENDIR) $(GENFLAGS) -I../../../include \ 209d120b41SJiong Wang -Dbpf_prog_load=bpf_prog_test_load \ 219d120b41SJiong Wang -Dbpf_load_program=bpf_test_load_program 22af32efeeSYonghong SongLDLIBS += -lcap -lelf -lrt -lpthread 235aa5bd14SDaniel Borkmann 24f09b2e38SJesper Dangaard Brouer# Order correspond to 'make run_tests' order 2518b3ad90SDavid S. MillerTEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map test_progs \ 261d436885SAndrey Ignatov test_align test_verifier_log test_dev_cgroup test_tcpbpf_user \ 2725a7991cSHangbin Liu test_sock test_btf test_sockmap get_cgroup_id_user test_socket_cookie \ 2825a7991cSHangbin Liu test_cgroup_storage test_select_reuseport test_section_names \ 292d2a3ad8SAndrii Nakryiko test_netcnt test_tcpnotify_user test_sock_fields test_sysctl test_hashmap \ 306e05abc9SAndrii Nakryiko test_cgroup_attach xdping 316882804cSAlexei Starovoitov 32bd4aed0eSJiong WangBPF_OBJ_FILES = $(patsubst %.c,%.o, $(notdir $(wildcard progs/*.c))) 334836b463SJiong WangTEST_GEN_FILES = $(BPF_OBJ_FILES) 343ef84346SJiong Wang 35e91dcb53SIlya LeoshkevichBTF_C_FILES = $(wildcard progs/btf_dump_test_case_*.c) 36e91dcb53SIlya LeoshkevichTEST_FILES = $(BTF_C_FILES) 37e91dcb53SIlya Leoshkevich 3864e39ee2SJiong Wang# Also test sub-register code-gen if LLVM has eBPF v3 processor support which 3964e39ee2SJiong Wang# contains both ALU32 and JMP32 instructions. 403ef84346SJiong WangSUBREG_CODEGEN := $(shell echo "int cal(int a) { return a > 0; }" | \ 413ef84346SJiong Wang $(CLANG) -target bpf -O2 -emit-llvm -S -x c - -o - | \ 4264e39ee2SJiong Wang $(LLC) -mattr=+alu32 -mcpu=v3 2>&1 | \ 433ef84346SJiong Wang grep 'if w') 443ef84346SJiong Wangifneq ($(SUBREG_CODEGEN),) 454836b463SJiong WangTEST_GEN_FILES += $(patsubst %.o,alu32/%.o, $(BPF_OBJ_FILES)) 463ef84346SJiong Wangendif 473ef84346SJiong Wang 484ce150b6SIlya Leoshkevichifneq ($(BPF_GCC),) 494ce150b6SIlya LeoshkevichTEST_GEN_FILES += $(patsubst %.o,bpf_gcc/%.o, $(BPF_OBJ_FILES)) 504ce150b6SIlya Leoshkevichendif 514ce150b6SIlya Leoshkevich 52f09b2e38SJesper Dangaard Brouer# Order correspond to 'make run_tests' order 53f09b2e38SJesper Dangaard BrouerTEST_PROGS := test_kmod.sh \ 54f09b2e38SJesper Dangaard Brouer test_libbpf.sh \ 55f09b2e38SJesper Dangaard Brouer test_xdp_redirect.sh \ 56f09b2e38SJesper Dangaard Brouer test_xdp_meta.sh \ 5788091ff5SToshiaki Makita test_xdp_veth.sh \ 58622adafbSAndrey Ignatov test_offload.py \ 59933a741eSWilliam Tu test_sock_addr.sh \ 60c99a84eaSMathieu Xhonneux test_tunnel.sh \ 616bdd533cSSean Young test_lwt_seg6local.sh \ 625ecd8c22SAndrey Ignatov test_lirc_mode2.sh \ 6350b3ed57SPetar Penkov test_skb_cgroup_id.sh \ 6497396ff0SJesper Dangaard Brouer test_flow_dissector.sh \ 65d35661fcSJesper Dangaard Brouer test_xdp_vlan_mode_generic.sh \ 66d35661fcSJesper Dangaard Brouer test_xdp_vlan_mode_native.sh \ 67bafc0ba8SLorenz Bauer test_lwt_ip_encap.sh \ 6898cdabcdSWillem de Bruijn test_tcp_check_syncookie.sh \ 697df5e3dbSPeter Oskolkov test_tc_tunnel.sh \ 70cd538502SAlan Maguire test_tc_edt.sh \ 7145c5589dSQuentin Monnet test_xdping.sh \ 7245c5589dSQuentin Monnet test_bpftool_build.sh 735aa5bd14SDaniel Borkmann 74f98937c6SAnders RoxellTEST_PROGS_EXTENDED := with_addr.sh \ 751be72f29SStanislav Fomichev with_tunnels.sh \ 76f98937c6SAnders Roxell tcp_client.py \ 773035bb72SAnders Roxell tcp_server.py \ 783035bb72SAnders Roxell test_xdp_vlan.sh 79ef4ab844SAnders Roxell 80f09b2e38SJesper Dangaard Brouer# Compile but not part of 'make run_tests' 8150b3ed57SPetar PenkovTEST_GEN_PROGS_EXTENDED = test_libbpf_open test_sock_addr test_skb_cgroup_id_user \ 8225a7991cSHangbin Liu flow_dissector_load test_flow_dissector test_tcp_check_syncookie_user \ 8325a7991cSHangbin Liu test_lirc_mode2_user 84f09b2e38SJesper Dangaard Brouer 85e8f1f34aSZi Shen Liminclude ../lib.mk 861da8ac7cSAlexei Starovoitov 873ef84346SJiong Wang# NOTE: $(OUTPUT) won't get default value if used before lib.mk 883ef84346SJiong WangTEST_CUSTOM_PROGS = $(OUTPUT)/urandom_read 893ef84346SJiong Wangall: $(TEST_CUSTOM_PROGS) 903ef84346SJiong Wang 913ef84346SJiong Wang$(OUTPUT)/urandom_read: $(OUTPUT)/%: %.c 92f6827526SIvan Vecera $(CC) -o $@ $< -Wl,--build-id 933ef84346SJiong Wang 94f83a46d4SIlya Leoshkevich$(OUTPUT)/test_stub.o: test_stub.c 95f83a46d4SIlya Leoshkevich $(CC) $(TEST_PROGS_CFLAGS) $(CFLAGS) -c -o $@ $< 96f83a46d4SIlya Leoshkevich 9741757dcbSJesper Dangaard BrouerBPFOBJ := $(OUTPUT)/libbpf.a 98e8f1f34aSZi Shen Lim 99f83a46d4SIlya Leoshkevich$(TEST_GEN_PROGS): $(OUTPUT)/test_stub.o $(BPFOBJ) 100e8f1f34aSZi Shen Lim 101f83a46d4SIlya Leoshkevich$(TEST_GEN_PROGS_EXTENDED): $(OUTPUT)/test_stub.o $(OUTPUT)/libbpf.a 102f09b2e38SJesper Dangaard Brouer 10341757dcbSJesper Dangaard Brouer$(OUTPUT)/test_dev_cgroup: cgroup_helpers.c 1045ecd8c22SAndrey Ignatov$(OUTPUT)/test_skb_cgroup_id_user: cgroup_helpers.c 1051d436885SAndrey Ignatov$(OUTPUT)/test_sock: cgroup_helpers.c 106e50b0a6fSAndrey Ignatov$(OUTPUT)/test_sock_addr: cgroup_helpers.c 107194db0d9SAndrey Ignatov$(OUTPUT)/test_socket_cookie: cgroup_helpers.c 10816962b24SJohn Fastabend$(OUTPUT)/test_sockmap: cgroup_helpers.c 109c65267e5SAndrey Ignatov$(OUTPUT)/test_tcpbpf_user: cgroup_helpers.c 110435f90a3SSowmini Varadhan$(OUTPUT)/test_tcpnotify_user: cgroup_helpers.c trace_helpers.c 11188dadc63SStanislav Fomichev$(OUTPUT)/test_progs: cgroup_helpers.c trace_helpers.c 112f269099aSYonghong Song$(OUTPUT)/get_cgroup_id_user: cgroup_helpers.c 11368cfa3acSRoman Gushchin$(OUTPUT)/test_cgroup_storage: cgroup_helpers.c 114371e4fccSRoman Gushchin$(OUTPUT)/test_netcnt: cgroup_helpers.c 115e0b27b3fSMartin KaFai Lau$(OUTPUT)/test_sock_fields: cgroup_helpers.c 1161f5fa9abSAndrey Ignatov$(OUTPUT)/test_sysctl: cgroup_helpers.c 117ba0c0cc0SRoman Gushchin$(OUTPUT)/test_cgroup_attach: cgroup_helpers.c 11841757dcbSJesper Dangaard Brouer 119e8f1f34aSZi Shen Lim.PHONY: force 120d498f871SMickaël Salaün 121d498f871SMickaël Salaün# force a rebuild of BPFOBJ when its dependencies are updated 122d498f871SMickaël Salaünforce: 123d498f871SMickaël Salaün 124e01a75c1SAndrii Nakryiko$(BPFOBJ): force 125e8f1f34aSZi Shen Lim $(MAKE) -C $(BPFDIR) OUTPUT=$(OUTPUT)/ 1266882804cSAlexei Starovoitov 127167381f3SSirio Balmelli# Get Clang's default includes on this system, as opposed to those seen by 128167381f3SSirio Balmelli# '-target bpf'. This fixes "missing" files on some architectures/distros, 129167381f3SSirio Balmelli# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc. 130167381f3SSirio Balmelli# 131167381f3SSirio Balmelli# Use '-idirafter': Don't interfere with include mechanics except where the 132167381f3SSirio Balmelli# build would have failed anyways. 1334ce150b6SIlya Leoshkevichdefine get_sys_includes 1344ce150b6SIlya Leoshkevich$(shell $(1) -v -E - </dev/null 2>&1 \ 135167381f3SSirio Balmelli | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') 1364ce150b6SIlya Leoshkevichendef 1374ce150b6SIlya LeoshkevichCLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG)) 138*598dc04fSAndrii NakryikoBPF_CFLAGS = -g -D__TARGET_ARCH_$(SRCARCH) \ 139*598dc04fSAndrii Nakryiko -I. -I./include/uapi -I../../../include/uapi \ 140*598dc04fSAndrii Nakryiko -I$(BPFDIR) -I$(OUTPUT)/../usr/include 141167381f3SSirio Balmelli 1424ce150b6SIlya LeoshkevichCLANG_CFLAGS = $(CLANG_SYS_INCLUDES) \ 1434ce150b6SIlya Leoshkevich -Wno-compare-distinct-pointer-types 1443bc35c63SAlexei Starovoitov 1454ce150b6SIlya Leoshkevich$(OUTPUT)/test_l4lb_noinline.o: BPF_CFLAGS += -fno-inline 1464ce150b6SIlya Leoshkevich$(OUTPUT)/test_xdp_noinline.o: BPF_CFLAGS += -fno-inline 1473bc35c63SAlexei Starovoitov 14843b987d2SMauricio Vasquez B$(OUTPUT)/test_queue_map.o: test_queue_stack_map.h 14943b987d2SMauricio Vasquez B$(OUTPUT)/test_stack_map.o: test_queue_stack_map.h 15043b987d2SMauricio Vasquez B 151bf0f0fd9SStanislav Fomichev$(OUTPUT)/flow_dissector_load.o: flow_dissector_load.h 152dcb5f400SAndrii Nakryiko$(OUTPUT)/test_progs.o: flow_dissector_load.h 153bf0f0fd9SStanislav Fomichev 154e78e00bdSStanislav FomichevTEST_PROGS_CFLAGS := -I. -I$(OUTPUT) 1559d1f62a6SAndrii NakryikoTEST_MAPS_CFLAGS := -I. -I$(OUTPUT) 156e78e00bdSStanislav FomichevTEST_VERIFIER_CFLAGS := -I. -I$(OUTPUT) -Iverifier 157e78e00bdSStanislav Fomichev 1583ef84346SJiong Wangifneq ($(SUBREG_CODEGEN),) 1593ef84346SJiong WangALU32_BUILD_DIR = $(OUTPUT)/alu32 1603ef84346SJiong WangTEST_CUSTOM_PROGS += $(ALU32_BUILD_DIR)/test_progs_32 1613ef84346SJiong Wang$(ALU32_BUILD_DIR): 1623ef84346SJiong Wang mkdir -p $@ 1633ef84346SJiong Wang 164e46fc22eSIlya Leoshkevich$(ALU32_BUILD_DIR)/urandom_read: $(OUTPUT)/urandom_read | $(ALU32_BUILD_DIR) 1653ef84346SJiong Wang cp $< $@ 1663ef84346SJiong Wang 167e78e00bdSStanislav Fomichev$(ALU32_BUILD_DIR)/test_progs_32: test_progs.c $(OUTPUT)/libbpf.a\ 168e46fc22eSIlya Leoshkevich $(ALU32_BUILD_DIR)/urandom_read \ 169e46fc22eSIlya Leoshkevich | $(ALU32_BUILD_DIR) 170e78e00bdSStanislav Fomichev $(CC) $(TEST_PROGS_CFLAGS) $(CFLAGS) \ 171e78e00bdSStanislav Fomichev -o $(ALU32_BUILD_DIR)/test_progs_32 \ 17288dadc63SStanislav Fomichev test_progs.c test_stub.c cgroup_helpers.c trace_helpers.c prog_tests/*.c \ 173e78e00bdSStanislav Fomichev $(OUTPUT)/libbpf.a $(LDLIBS) 1743f306588SStanislav Fomichev 1753f306588SStanislav Fomichev$(ALU32_BUILD_DIR)/test_progs_32: $(PROG_TESTS_H) 1763f306588SStanislav Fomichev$(ALU32_BUILD_DIR)/test_progs_32: prog_tests/*.c 1773ef84346SJiong Wang 178e46fc22eSIlya Leoshkevich$(ALU32_BUILD_DIR)/%.o: progs/%.c $(ALU32_BUILD_DIR)/test_progs_32 \ 179e46fc22eSIlya Leoshkevich | $(ALU32_BUILD_DIR) 1804ce150b6SIlya Leoshkevich ($(CLANG) $(BPF_CFLAGS) $(CLANG_CFLAGS) -O2 -target bpf -emit-llvm \ 1814ce150b6SIlya Leoshkevich -c $< -o - || echo "clang failed") | \ 182*598dc04fSAndrii Nakryiko $(LLC) -march=bpf -mcpu=probe -mattr=+alu32 $(LLC_FLAGS) \ 1833ef84346SJiong Wang -filetype=obj -o $@ 1843ef84346SJiong Wangendif 1853ef84346SJiong Wang 1864ce150b6SIlya Leoshkevichifneq ($(BPF_GCC),) 1874ce150b6SIlya LeoshkevichGCC_SYS_INCLUDES = $(call get_sys_includes,gcc) 1884ce150b6SIlya LeoshkevichIS_LITTLE_ENDIAN = $(shell $(CC) -dM -E - </dev/null | \ 1894ce150b6SIlya Leoshkevich grep 'define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__') 1904ce150b6SIlya Leoshkevichifeq ($(IS_LITTLE_ENDIAN),) 1914ce150b6SIlya LeoshkevichMENDIAN=-mbig-endian 1924ce150b6SIlya Leoshkevichelse 1934ce150b6SIlya LeoshkevichMENDIAN=-mlittle-endian 1944ce150b6SIlya Leoshkevichendif 1954ce150b6SIlya LeoshkevichBPF_GCC_CFLAGS = $(GCC_SYS_INCLUDES) $(MENDIAN) 1964ce150b6SIlya LeoshkevichBPF_GCC_BUILD_DIR = $(OUTPUT)/bpf_gcc 1974ce150b6SIlya LeoshkevichTEST_CUSTOM_PROGS += $(BPF_GCC_BUILD_DIR)/test_progs_bpf_gcc 1984ce150b6SIlya Leoshkevich$(BPF_GCC_BUILD_DIR): 1994ce150b6SIlya Leoshkevich mkdir -p $@ 2004ce150b6SIlya Leoshkevich 2014ce150b6SIlya Leoshkevich$(BPF_GCC_BUILD_DIR)/urandom_read: $(OUTPUT)/urandom_read | $(BPF_GCC_BUILD_DIR) 2024ce150b6SIlya Leoshkevich cp $< $@ 2034ce150b6SIlya Leoshkevich 2044ce150b6SIlya Leoshkevich$(BPF_GCC_BUILD_DIR)/test_progs_bpf_gcc: $(OUTPUT)/test_progs \ 2054ce150b6SIlya Leoshkevich | $(BPF_GCC_BUILD_DIR) 2064ce150b6SIlya Leoshkevich cp $< $@ 2074ce150b6SIlya Leoshkevich 2084ce150b6SIlya Leoshkevich$(BPF_GCC_BUILD_DIR)/%.o: progs/%.c $(BPF_GCC_BUILD_DIR)/test_progs_bpf_gcc \ 2094ce150b6SIlya Leoshkevich | $(BPF_GCC_BUILD_DIR) 2104ce150b6SIlya Leoshkevich $(BPF_GCC) $(BPF_CFLAGS) $(BPF_GCC_CFLAGS) -O2 -c $< -o $@ 2114ce150b6SIlya Leoshkevichendif 2124ce150b6SIlya Leoshkevich 213f96afa76SQuentin Monnet# Have one program compiled without "-target bpf" to test whether libbpf loads 214f96afa76SQuentin Monnet# it successfully 215bd4aed0eSJiong Wang$(OUTPUT)/test_xdp.o: progs/test_xdp.c 2164ce150b6SIlya Leoshkevich ($(CLANG) $(BPF_CFLAGS) $(CLANG_CFLAGS) -O2 -emit-llvm -c $< -o - || \ 2179cae4aceSIlya Leoshkevich echo "clang failed") | \ 218*598dc04fSAndrii Nakryiko $(LLC) -march=bpf -mcpu=probe $(LLC_FLAGS) -filetype=obj -o $@ 219c0fa1b6cSMartin KaFai Lau 2203fbe31aeSAndrii Nakryiko# libbpf has to be built before BPF programs due to bpf_helper_defs.h 2213fbe31aeSAndrii Nakryiko$(OUTPUT)/%.o: progs/%.c | $(BPFOBJ) 2224ce150b6SIlya Leoshkevich ($(CLANG) $(BPF_CFLAGS) $(CLANG_CFLAGS) -O2 -target bpf -emit-llvm \ 2234ce150b6SIlya Leoshkevich -c $< -o - || echo "clang failed") | \ 224*598dc04fSAndrii Nakryiko $(LLC) -march=bpf -mcpu=probe $(LLC_FLAGS) -filetype=obj -o $@ 22581f77fd0SSong Liu 226e78e00bdSStanislav FomichevPROG_TESTS_DIR = $(OUTPUT)/prog_tests 227e78e00bdSStanislav Fomichev$(PROG_TESTS_DIR): 228e78e00bdSStanislav Fomichev mkdir -p $@ 2299d1f62a6SAndrii NakryikoPROG_TESTS_H := $(PROG_TESTS_DIR)/tests.h 2303f306588SStanislav FomichevPROG_TESTS_FILES := $(wildcard prog_tests/*.c) 2319d1f62a6SAndrii Nakryikotest_progs.c: $(PROG_TESTS_H) 2329d1f62a6SAndrii Nakryiko$(OUTPUT)/test_progs: CFLAGS += $(TEST_PROGS_CFLAGS) 233dcb5f400SAndrii Nakryiko$(OUTPUT)/test_progs: test_progs.c $(PROG_TESTS_FILES) | $(OUTPUT)/test_attach_probe.o $(PROG_TESTS_H) 234e46fc22eSIlya Leoshkevich$(PROG_TESTS_H): $(PROG_TESTS_FILES) | $(PROG_TESTS_DIR) 235e78e00bdSStanislav Fomichev $(shell ( cd prog_tests/; \ 2363f306588SStanislav Fomichev echo '/* Generated header, do not edit */'; \ 2373f306588SStanislav Fomichev ls *.c 2> /dev/null | \ 238766f2a59SAndrii Nakryiko sed -e 's@\([^\.]*\)\.c@DEFINE_TEST(\1)@'; \ 2393f306588SStanislav Fomichev ) > $(PROG_TESTS_H)) 2403f306588SStanislav Fomichev 24151a0e301SMartin KaFai LauMAP_TESTS_DIR = $(OUTPUT)/map_tests 24251a0e301SMartin KaFai Lau$(MAP_TESTS_DIR): 24351a0e301SMartin KaFai Lau mkdir -p $@ 24451a0e301SMartin KaFai LauMAP_TESTS_H := $(MAP_TESTS_DIR)/tests.h 24536646b22SAndrii NakryikoMAP_TESTS_FILES := $(wildcard map_tests/*.c) 24651a0e301SMartin KaFai Lautest_maps.c: $(MAP_TESTS_H) 24751a0e301SMartin KaFai Lau$(OUTPUT)/test_maps: CFLAGS += $(TEST_MAPS_CFLAGS) 24861098e89SAndrii Nakryiko$(OUTPUT)/test_maps: test_maps.c $(MAP_TESTS_FILES) | $(MAP_TESTS_H) 249e46fc22eSIlya Leoshkevich$(MAP_TESTS_H): $(MAP_TESTS_FILES) | $(MAP_TESTS_DIR) 25051a0e301SMartin KaFai Lau $(shell ( cd map_tests/; \ 25151a0e301SMartin KaFai Lau echo '/* Generated header, do not edit */'; \ 25251a0e301SMartin KaFai Lau echo '#ifdef DECLARE'; \ 25351a0e301SMartin KaFai Lau ls *.c 2> /dev/null | \ 25451a0e301SMartin KaFai Lau sed -e 's@\([^\.]*\)\.c@extern void test_\1(void);@'; \ 25551a0e301SMartin KaFai Lau echo '#endif'; \ 25651a0e301SMartin KaFai Lau echo '#ifdef CALL'; \ 25751a0e301SMartin KaFai Lau ls *.c 2> /dev/null | \ 25851a0e301SMartin KaFai Lau sed -e 's@\([^\.]*\)\.c@test_\1();@'; \ 25951a0e301SMartin KaFai Lau echo '#endif' \ 26051a0e301SMartin KaFai Lau ) > $(MAP_TESTS_H)) 26151a0e301SMartin KaFai Lau 262e78e00bdSStanislav FomichevVERIFIER_TESTS_DIR = $(OUTPUT)/verifier 263e78e00bdSStanislav Fomichev$(VERIFIER_TESTS_DIR): 264e78e00bdSStanislav Fomichev mkdir -p $@ 2659d1f62a6SAndrii NakryikoVERIFIER_TESTS_H := $(VERIFIER_TESTS_DIR)/tests.h 2662dfb4012SJakub KicinskiVERIFIER_TEST_FILES := $(wildcard verifier/*.c) 2679d1f62a6SAndrii Nakryikotest_verifier.c: $(VERIFIER_TESTS_H) 2689d1f62a6SAndrii Nakryiko$(OUTPUT)/test_verifier: CFLAGS += $(TEST_VERIFIER_CFLAGS) 26961098e89SAndrii Nakryiko$(OUTPUT)/test_verifier: test_verifier.c | $(VERIFIER_TEST_FILES) $(VERIFIER_TESTS_H) 2709d1f62a6SAndrii Nakryiko$(VERIFIER_TESTS_H): $(VERIFIER_TEST_FILES) | $(VERIFIER_TESTS_DIR) 271e78e00bdSStanislav Fomichev $(shell ( cd verifier/; \ 2722dfb4012SJakub Kicinski echo '/* Generated header, do not edit */'; \ 2732dfb4012SJakub Kicinski echo '#ifdef FILL_ARRAY'; \ 2742dfb4012SJakub Kicinski ls *.c 2> /dev/null | \ 2752dfb4012SJakub Kicinski sed -e 's@\(.*\)@#include \"\1\"@'; \ 2762dfb4012SJakub Kicinski echo '#endif' \ 2772a118154SStanislav Fomichev ) > $(VERIFIER_TESTS_H)) 2782dfb4012SJakub Kicinski 2794ce150b6SIlya LeoshkevichEXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(ALU32_BUILD_DIR) $(BPF_GCC_BUILD_DIR) \ 28089cceaa9SHechao Li $(VERIFIER_TESTS_H) $(PROG_TESTS_H) $(MAP_TESTS_H) \ 281e01a75c1SAndrii Nakryiko feature 282