1 # SPDX-License-Identifier: GPL-2.0 2 # List of programs to build 3 hostprogs-y := test_lru_dist 4 hostprogs-y += sock_example 5 hostprogs-y += fds_example 6 hostprogs-y += sockex1 7 hostprogs-y += sockex2 8 hostprogs-y += sockex3 9 hostprogs-y += tracex1 10 hostprogs-y += tracex2 11 hostprogs-y += tracex3 12 hostprogs-y += tracex4 13 hostprogs-y += tracex5 14 hostprogs-y += tracex6 15 hostprogs-y += tracex7 16 hostprogs-y += test_probe_write_user 17 hostprogs-y += trace_output 18 hostprogs-y += lathist 19 hostprogs-y += offwaketime 20 hostprogs-y += spintest 21 hostprogs-y += map_perf_test 22 hostprogs-y += test_overhead 23 hostprogs-y += test_cgrp2_array_pin 24 hostprogs-y += test_cgrp2_attach 25 hostprogs-y += test_cgrp2_attach2 26 hostprogs-y += test_cgrp2_sock 27 hostprogs-y += test_cgrp2_sock2 28 hostprogs-y += xdp1 29 hostprogs-y += xdp2 30 hostprogs-y += xdp_router_ipv4 31 hostprogs-y += test_current_task_under_cgroup 32 hostprogs-y += trace_event 33 hostprogs-y += sampleip 34 hostprogs-y += tc_l2_redirect 35 hostprogs-y += lwt_len_hist 36 hostprogs-y += xdp_tx_iptunnel 37 hostprogs-y += test_map_in_map 38 hostprogs-y += per_socket_stats_example 39 hostprogs-y += load_sock_ops 40 hostprogs-y += xdp_redirect 41 hostprogs-y += xdp_redirect_map 42 hostprogs-y += xdp_redirect_cpu 43 hostprogs-y += xdp_monitor 44 hostprogs-y += xdp_rxq_info 45 hostprogs-y += syscall_tp 46 hostprogs-y += cpustat 47 hostprogs-y += xdp_adjust_tail 48 hostprogs-y += xdpsock 49 hostprogs-y += xdp_fwd 50 51 # Libbpf dependencies 52 LIBBPF := ../../tools/lib/bpf/bpf.o ../../tools/lib/bpf/nlattr.o 53 CGROUP_HELPERS := ../../tools/testing/selftests/bpf/cgroup_helpers.o 54 TRACE_HELPERS := ../../tools/testing/selftests/bpf/trace_helpers.o 55 56 test_lru_dist-objs := test_lru_dist.o $(LIBBPF) 57 sock_example-objs := sock_example.o $(LIBBPF) 58 fds_example-objs := bpf_load.o $(LIBBPF) fds_example.o 59 sockex1-objs := bpf_load.o $(LIBBPF) sockex1_user.o 60 sockex2-objs := bpf_load.o $(LIBBPF) sockex2_user.o 61 sockex3-objs := bpf_load.o $(LIBBPF) sockex3_user.o 62 tracex1-objs := bpf_load.o $(LIBBPF) tracex1_user.o 63 tracex2-objs := bpf_load.o $(LIBBPF) tracex2_user.o 64 tracex3-objs := bpf_load.o $(LIBBPF) tracex3_user.o 65 tracex4-objs := bpf_load.o $(LIBBPF) tracex4_user.o 66 tracex5-objs := bpf_load.o $(LIBBPF) tracex5_user.o 67 tracex6-objs := bpf_load.o $(LIBBPF) tracex6_user.o 68 tracex7-objs := bpf_load.o $(LIBBPF) tracex7_user.o 69 load_sock_ops-objs := bpf_load.o $(LIBBPF) load_sock_ops.o 70 test_probe_write_user-objs := bpf_load.o $(LIBBPF) test_probe_write_user_user.o 71 trace_output-objs := bpf_load.o $(LIBBPF) trace_output_user.o $(TRACE_HELPERS) 72 lathist-objs := bpf_load.o $(LIBBPF) lathist_user.o 73 offwaketime-objs := bpf_load.o $(LIBBPF) offwaketime_user.o $(TRACE_HELPERS) 74 spintest-objs := bpf_load.o $(LIBBPF) spintest_user.o $(TRACE_HELPERS) 75 map_perf_test-objs := bpf_load.o $(LIBBPF) map_perf_test_user.o 76 test_overhead-objs := bpf_load.o $(LIBBPF) test_overhead_user.o 77 test_cgrp2_array_pin-objs := $(LIBBPF) test_cgrp2_array_pin.o 78 test_cgrp2_attach-objs := $(LIBBPF) test_cgrp2_attach.o 79 test_cgrp2_attach2-objs := $(LIBBPF) test_cgrp2_attach2.o $(CGROUP_HELPERS) 80 test_cgrp2_sock-objs := $(LIBBPF) test_cgrp2_sock.o 81 test_cgrp2_sock2-objs := bpf_load.o $(LIBBPF) test_cgrp2_sock2.o 82 xdp1-objs := bpf_load.o $(LIBBPF) xdp1_user.o 83 # reuse xdp1 source intentionally 84 xdp2-objs := bpf_load.o $(LIBBPF) xdp1_user.o 85 xdp_router_ipv4-objs := bpf_load.o $(LIBBPF) xdp_router_ipv4_user.o 86 test_current_task_under_cgroup-objs := bpf_load.o $(LIBBPF) $(CGROUP_HELPERS) \ 87 test_current_task_under_cgroup_user.o 88 trace_event-objs := bpf_load.o $(LIBBPF) trace_event_user.o $(TRACE_HELPERS) 89 sampleip-objs := bpf_load.o $(LIBBPF) sampleip_user.o $(TRACE_HELPERS) 90 tc_l2_redirect-objs := bpf_load.o $(LIBBPF) tc_l2_redirect_user.o 91 lwt_len_hist-objs := bpf_load.o $(LIBBPF) lwt_len_hist_user.o 92 xdp_tx_iptunnel-objs := bpf_load.o $(LIBBPF) xdp_tx_iptunnel_user.o 93 test_map_in_map-objs := bpf_load.o $(LIBBPF) test_map_in_map_user.o 94 per_socket_stats_example-objs := $(LIBBPF) cookie_uid_helper_example.o 95 xdp_redirect-objs := bpf_load.o $(LIBBPF) xdp_redirect_user.o 96 xdp_redirect_map-objs := bpf_load.o $(LIBBPF) xdp_redirect_map_user.o 97 xdp_redirect_cpu-objs := bpf_load.o $(LIBBPF) xdp_redirect_cpu_user.o 98 xdp_monitor-objs := bpf_load.o $(LIBBPF) xdp_monitor_user.o 99 xdp_rxq_info-objs := bpf_load.o $(LIBBPF) xdp_rxq_info_user.o 100 syscall_tp-objs := bpf_load.o $(LIBBPF) syscall_tp_user.o 101 cpustat-objs := bpf_load.o $(LIBBPF) cpustat_user.o 102 xdp_adjust_tail-objs := bpf_load.o $(LIBBPF) xdp_adjust_tail_user.o 103 xdpsock-objs := bpf_load.o $(LIBBPF) xdpsock_user.o 104 xdp_fwd-objs := bpf_load.o $(LIBBPF) xdp_fwd_user.o 105 106 # Tell kbuild to always build the programs 107 always := $(hostprogs-y) 108 always += sockex1_kern.o 109 always += sockex2_kern.o 110 always += sockex3_kern.o 111 always += tracex1_kern.o 112 always += tracex2_kern.o 113 always += tracex3_kern.o 114 always += tracex4_kern.o 115 always += tracex5_kern.o 116 always += tracex6_kern.o 117 always += tracex7_kern.o 118 always += sock_flags_kern.o 119 always += test_probe_write_user_kern.o 120 always += trace_output_kern.o 121 always += tcbpf1_kern.o 122 always += tc_l2_redirect_kern.o 123 always += lathist_kern.o 124 always += offwaketime_kern.o 125 always += spintest_kern.o 126 always += map_perf_test_kern.o 127 always += test_overhead_tp_kern.o 128 always += test_overhead_raw_tp_kern.o 129 always += test_overhead_kprobe_kern.o 130 always += parse_varlen.o parse_simple.o parse_ldabs.o 131 always += test_cgrp2_tc_kern.o 132 always += xdp1_kern.o 133 always += xdp2_kern.o 134 always += xdp_router_ipv4_kern.o 135 always += test_current_task_under_cgroup_kern.o 136 always += trace_event_kern.o 137 always += sampleip_kern.o 138 always += lwt_len_hist_kern.o 139 always += xdp_tx_iptunnel_kern.o 140 always += test_map_in_map_kern.o 141 always += cookie_uid_helper_example.o 142 always += tcp_synrto_kern.o 143 always += tcp_rwnd_kern.o 144 always += tcp_bufs_kern.o 145 always += tcp_cong_kern.o 146 always += tcp_iw_kern.o 147 always += tcp_clamp_kern.o 148 always += tcp_basertt_kern.o 149 always += xdp_redirect_kern.o 150 always += xdp_redirect_map_kern.o 151 always += xdp_redirect_cpu_kern.o 152 always += xdp_monitor_kern.o 153 always += xdp_rxq_info_kern.o 154 always += xdp2skb_meta_kern.o 155 always += syscall_tp_kern.o 156 always += cpustat_kern.o 157 always += xdp_adjust_tail_kern.o 158 always += xdpsock_kern.o 159 always += xdp_fwd_kern.o 160 161 HOSTCFLAGS += -I$(objtree)/usr/include 162 HOSTCFLAGS += -I$(srctree)/tools/lib/ 163 HOSTCFLAGS += -I$(srctree)/tools/testing/selftests/bpf/ 164 HOSTCFLAGS += -I$(srctree)/tools/lib/ -I$(srctree)/tools/include 165 HOSTCFLAGS += -I$(srctree)/tools/perf 166 167 HOSTCFLAGS_bpf_load.o += -I$(objtree)/usr/include -Wno-unused-variable 168 HOSTLOADLIBES_fds_example += -lelf 169 HOSTLOADLIBES_sockex1 += -lelf 170 HOSTLOADLIBES_sockex2 += -lelf 171 HOSTLOADLIBES_sockex3 += -lelf 172 HOSTLOADLIBES_tracex1 += -lelf 173 HOSTLOADLIBES_tracex2 += -lelf 174 HOSTLOADLIBES_tracex3 += -lelf 175 HOSTLOADLIBES_tracex4 += -lelf -lrt 176 HOSTLOADLIBES_tracex5 += -lelf 177 HOSTLOADLIBES_tracex6 += -lelf 178 HOSTLOADLIBES_tracex7 += -lelf 179 HOSTLOADLIBES_test_cgrp2_sock2 += -lelf 180 HOSTLOADLIBES_load_sock_ops += -lelf 181 HOSTLOADLIBES_test_probe_write_user += -lelf 182 HOSTLOADLIBES_trace_output += -lelf -lrt 183 HOSTLOADLIBES_lathist += -lelf 184 HOSTLOADLIBES_offwaketime += -lelf 185 HOSTLOADLIBES_spintest += -lelf 186 HOSTLOADLIBES_map_perf_test += -lelf -lrt 187 HOSTLOADLIBES_test_overhead += -lelf -lrt 188 HOSTLOADLIBES_xdp1 += -lelf 189 HOSTLOADLIBES_xdp2 += -lelf 190 HOSTLOADLIBES_xdp_router_ipv4 += -lelf 191 HOSTLOADLIBES_test_current_task_under_cgroup += -lelf 192 HOSTLOADLIBES_trace_event += -lelf 193 HOSTLOADLIBES_sampleip += -lelf 194 HOSTLOADLIBES_tc_l2_redirect += -l elf 195 HOSTLOADLIBES_lwt_len_hist += -l elf 196 HOSTLOADLIBES_xdp_tx_iptunnel += -lelf 197 HOSTLOADLIBES_test_map_in_map += -lelf 198 HOSTLOADLIBES_xdp_redirect += -lelf 199 HOSTLOADLIBES_xdp_redirect_map += -lelf 200 HOSTLOADLIBES_xdp_redirect_cpu += -lelf 201 HOSTLOADLIBES_xdp_monitor += -lelf 202 HOSTLOADLIBES_xdp_rxq_info += -lelf 203 HOSTLOADLIBES_syscall_tp += -lelf 204 HOSTLOADLIBES_cpustat += -lelf 205 HOSTLOADLIBES_xdp_adjust_tail += -lelf 206 HOSTLOADLIBES_xdpsock += -lelf -pthread 207 HOSTLOADLIBES_xdp_fwd += -lelf 208 209 # Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline: 210 # make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang 211 LLC ?= llc 212 CLANG ?= clang 213 214 # Detect that we're cross compiling and use the cross compiler 215 ifdef CROSS_COMPILE 216 HOSTCC = $(CROSS_COMPILE)gcc 217 CLANG_ARCH_ARGS = -target $(ARCH) 218 endif 219 220 # Trick to allow make to be run from this directory 221 all: $(LIBBPF) 222 $(MAKE) -C ../../ $(CURDIR)/ 223 224 clean: 225 $(MAKE) -C ../../ M=$(CURDIR) clean 226 @rm -f *~ 227 228 $(LIBBPF): FORCE 229 $(MAKE) -C $(dir $@) $(notdir $@) 230 231 $(obj)/syscall_nrs.s: $(src)/syscall_nrs.c 232 $(call if_changed_dep,cc_s_c) 233 234 $(obj)/syscall_nrs.h: $(obj)/syscall_nrs.s FORCE 235 $(call filechk,offsets,__SYSCALL_NRS_H__) 236 237 clean-files += syscall_nrs.h 238 239 FORCE: 240 241 242 # Verify LLVM compiler tools are available and bpf target is supported by llc 243 .PHONY: verify_cmds verify_target_bpf $(CLANG) $(LLC) 244 245 verify_cmds: $(CLANG) $(LLC) 246 @for TOOL in $^ ; do \ 247 if ! (which -- "$${TOOL}" > /dev/null 2>&1); then \ 248 echo "*** ERROR: Cannot find LLVM tool $${TOOL}" ;\ 249 exit 1; \ 250 else true; fi; \ 251 done 252 253 verify_target_bpf: verify_cmds 254 @if ! (${LLC} -march=bpf -mattr=help > /dev/null 2>&1); then \ 255 echo "*** ERROR: LLVM (${LLC}) does not support 'bpf' target" ;\ 256 echo " NOTICE: LLVM version >= 3.7.1 required" ;\ 257 exit 2; \ 258 else true; fi 259 260 $(src)/*.c: verify_target_bpf 261 262 $(obj)/tracex5_kern.o: $(obj)/syscall_nrs.h 263 264 # asm/sysreg.h - inline assembly used by it is incompatible with llvm. 265 # But, there is no easy way to fix it, so just exclude it since it is 266 # useless for BPF samples. 267 $(obj)/%.o: $(src)/%.c 268 $(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS) -I$(obj) \ 269 -I$(srctree)/tools/testing/selftests/bpf/ \ 270 -D__KERNEL__ -Wno-unused-value -Wno-pointer-sign \ 271 -D__TARGET_ARCH_$(ARCH) -Wno-compare-distinct-pointer-types \ 272 -Wno-gnu-variable-sized-type-not-at-end \ 273 -Wno-address-of-packed-member -Wno-tautological-compare \ 274 -Wno-unknown-warning-option $(CLANG_ARCH_ARGS) \ 275 -O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf -filetype=obj -o $@ 276