1 # SPDX-License-Identifier: GPL-2.0
4 BPFDIR
:= $(LIBDIR
)/bpf
5 APIDIR
:= ..
/..
/..
/include/uapi
6 GENDIR
:= ..
/..
/..
/..
/include/generated
7 GENHDR
:= $(GENDIR
)/autoconf.h
9 ifneq ($(wildcard $(GENHDR
)),)
10 GENFLAGS
:= -DHAVE_GENHDR
13 CFLAGS
+= -Wall
-O2
-I
$(APIDIR
) -I
$(LIBDIR
) -I
$(BPFDIR
) -I
$(GENDIR
) $(GENFLAGS
) -I..
/..
/..
/include
14 LDLIBS
+= -lcap
-lelf
-lrt
-lpthread
16 TEST_CUSTOM_PROGS
= $(OUTPUT
)/urandom_read
17 all: $(TEST_CUSTOM_PROGS
)
19 $(TEST_CUSTOM_PROGS
): $(OUTPUT
)/%: %.c
20 $(CC
) -o
$(TEST_CUSTOM_PROGS
) -static
$< -Wl
,--build-id
22 # Order correspond to 'make run_tests' order
23 TEST_GEN_PROGS
= test_verifier test_tag test_maps test_lru_map test_lpm_map test_progs \
24 test_align test_verifier_log test_dev_cgroup test_tcpbpf_user \
25 test_sock test_btf test_sockmap test_lirc_mode2_user get_cgroup_id_user \
26 test_socket_cookie test_cgroup_storage test_select_reuseport
28 TEST_GEN_FILES
= test_pkt_access.o test_xdp.o test_l4lb.o test_tcp_estats.o test_obj_id.o \
29 test_pkt_md_access.o test_xdp_redirect.o test_xdp_meta.o sockmap_parse_prog.o \
30 sockmap_verdict_prog.o dev_cgroup.o sample_ret0.o test_tracepoint.o \
31 test_l4lb_noinline.o test_xdp_noinline.o test_stacktrace_map.o \
32 sample_map_ret0.o test_tcpbpf_kern.o test_stacktrace_build_id.o \
33 sockmap_tcp_msg_prog.o connect4_prog.o connect6_prog.o test_adjust_tail.o \
34 test_btf_haskv.o test_btf_nokv.o test_sockmap_kern.o test_tunnel_kern.o \
35 test_get_stack_rawtp.o test_sockmap_kern.o test_sockhash_kern.o \
36 test_lwt_seg6local.o sendmsg4_prog.o sendmsg6_prog.o test_lirc_mode2_kern.o \
37 get_cgroup_id_kern.o socket_cookie_prog.o test_select_reuseport_kern.o \
38 test_skb_cgroup_id_kern.o
40 # Order correspond to 'make run_tests' order
41 TEST_PROGS
:= test_kmod.sh \
43 test_xdp_redirect.sh \
48 test_lwt_seg6local.sh \
52 # Compile but not part of 'make run_tests'
53 TEST_GEN_PROGS_EXTENDED
= test_libbpf_open test_sock_addr test_skb_cgroup_id_user
57 BPFOBJ
:= $(OUTPUT
)/libbpf.a
59 $(TEST_GEN_PROGS
): $(BPFOBJ
)
61 $(TEST_GEN_PROGS_EXTENDED
): $(OUTPUT
)/libbpf.a
63 $(OUTPUT
)/test_dev_cgroup
: cgroup_helpers.c
64 $(OUTPUT
)/test_skb_cgroup_id_user
: cgroup_helpers.c
65 $(OUTPUT
)/test_sock
: cgroup_helpers.c
66 $(OUTPUT
)/test_sock_addr
: cgroup_helpers.c
67 $(OUTPUT
)/test_socket_cookie
: cgroup_helpers.c
68 $(OUTPUT
)/test_sockmap
: cgroup_helpers.c
69 $(OUTPUT
)/test_tcpbpf_user
: cgroup_helpers.c
70 $(OUTPUT
)/test_progs
: trace_helpers.c
71 $(OUTPUT
)/get_cgroup_id_user
: cgroup_helpers.c
72 $(OUTPUT
)/test_cgroup_storage
: cgroup_helpers.c
76 # force a rebuild of BPFOBJ when its dependencies are updated
80 $(MAKE
) -C
$(BPFDIR
) OUTPUT
=$(OUTPUT
)/
84 LLVM_OBJCOPY ?
= llvm-objcopy
87 PROBE
:= $(shell $(LLC
) -march
=bpf
-mcpu
=probe
-filetype
=null
/dev
/null
2>&1)
89 # Let newer LLVM versions transparently probe the kernel for availability
90 # of full BPF instruction set.
97 # Get Clang's default includes on this system, as opposed to those seen by
98 # '-target bpf'. This fixes "missing" files on some architectures/distros,
99 # such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc.
101 # Use '-idirafter': Don't interfere with include mechanics except where the
102 # build would have failed anyways.
103 CLANG_SYS_INCLUDES
:= $(shell $(CLANG
) -v
-E
- </dev
/null
2>&1 \
104 | sed
-n
'/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }')
106 CLANG_FLAGS
= -I.
-I.
/include/uapi
-I..
/..
/..
/include/uapi \
107 $(CLANG_SYS_INCLUDES
) \
108 -Wno-compare-distinct-pointer-types
110 $(OUTPUT
)/test_l4lb_noinline.o
: CLANG_FLAGS
+= -fno-inline
111 $(OUTPUT
)/test_xdp_noinline.o
: CLANG_FLAGS
+= -fno-inline
113 BTF_LLC_PROBE
:= $(shell $(LLC
) -march
=bpf
-mattr
=help
2>&1 | grep dwarfris
)
114 BTF_PAHOLE_PROBE
:= $(shell $(BTF_PAHOLE
) --help
2>&1 | grep BTF
)
115 BTF_OBJCOPY_PROBE
:= $(shell $(LLVM_OBJCOPY
) --help
2>&1 | grep
-i
'usage.*llvm')
117 ifneq ($(BTF_LLC_PROBE
),)
118 ifneq ($(BTF_PAHOLE_PROBE
),)
119 ifneq ($(BTF_OBJCOPY_PROBE
),)
121 LLC_FLAGS
+= -mattr
=dwarfris
127 # Have one program compiled without "-target bpf" to test whether libbpf loads
129 $(OUTPUT
)/test_xdp.o
: test_xdp.c
130 $(CLANG
) $(CLANG_FLAGS
) \
131 -O2
-emit-llvm
-c
$< -o
- | \
132 $(LLC
) -march
=bpf
-mcpu
=$(CPU
) $(LLC_FLAGS
) -filetype
=obj
-o
$@
133 ifeq ($(DWARF2BTF
),y
)
138 $(CLANG
) $(CLANG_FLAGS
) \
139 -O2
-target bpf
-emit-llvm
-c
$< -o
- | \
140 $(LLC
) -march
=bpf
-mcpu
=$(CPU
) $(LLC_FLAGS
) -filetype
=obj
-o
$@
141 ifeq ($(DWARF2BTF
),y
)
145 EXTRA_CLEAN
:= $(TEST_CUSTOM_PROGS
)