.. | .. |
---|
4 | 4 | TOOLS_PATH := $(BPF_SAMPLES_PATH)/../../tools |
---|
5 | 5 | |
---|
6 | 6 | # List of programs to build |
---|
7 | | -hostprogs-y := test_lru_dist |
---|
8 | | -hostprogs-y += sock_example |
---|
9 | | -hostprogs-y += fds_example |
---|
10 | | -hostprogs-y += sockex1 |
---|
11 | | -hostprogs-y += sockex2 |
---|
12 | | -hostprogs-y += sockex3 |
---|
13 | | -hostprogs-y += tracex1 |
---|
14 | | -hostprogs-y += tracex2 |
---|
15 | | -hostprogs-y += tracex3 |
---|
16 | | -hostprogs-y += tracex4 |
---|
17 | | -hostprogs-y += tracex5 |
---|
18 | | -hostprogs-y += tracex6 |
---|
19 | | -hostprogs-y += tracex7 |
---|
20 | | -hostprogs-y += test_probe_write_user |
---|
21 | | -hostprogs-y += trace_output |
---|
22 | | -hostprogs-y += lathist |
---|
23 | | -hostprogs-y += offwaketime |
---|
24 | | -hostprogs-y += spintest |
---|
25 | | -hostprogs-y += map_perf_test |
---|
26 | | -hostprogs-y += test_overhead |
---|
27 | | -hostprogs-y += test_cgrp2_array_pin |
---|
28 | | -hostprogs-y += test_cgrp2_attach |
---|
29 | | -hostprogs-y += test_cgrp2_attach2 |
---|
30 | | -hostprogs-y += test_cgrp2_sock |
---|
31 | | -hostprogs-y += test_cgrp2_sock2 |
---|
32 | | -hostprogs-y += xdp1 |
---|
33 | | -hostprogs-y += xdp2 |
---|
34 | | -hostprogs-y += xdp_router_ipv4 |
---|
35 | | -hostprogs-y += test_current_task_under_cgroup |
---|
36 | | -hostprogs-y += trace_event |
---|
37 | | -hostprogs-y += sampleip |
---|
38 | | -hostprogs-y += tc_l2_redirect |
---|
39 | | -hostprogs-y += lwt_len_hist |
---|
40 | | -hostprogs-y += xdp_tx_iptunnel |
---|
41 | | -hostprogs-y += test_map_in_map |
---|
42 | | -hostprogs-y += per_socket_stats_example |
---|
43 | | -hostprogs-y += load_sock_ops |
---|
44 | | -hostprogs-y += xdp_redirect |
---|
45 | | -hostprogs-y += xdp_redirect_map |
---|
46 | | -hostprogs-y += xdp_redirect_cpu |
---|
47 | | -hostprogs-y += xdp_monitor |
---|
48 | | -hostprogs-y += xdp_rxq_info |
---|
49 | | -hostprogs-y += syscall_tp |
---|
50 | | -hostprogs-y += cpustat |
---|
51 | | -hostprogs-y += xdp_adjust_tail |
---|
52 | | -hostprogs-y += xdpsock |
---|
53 | | -hostprogs-y += xdp_fwd |
---|
54 | | -hostprogs-y += task_fd_query |
---|
55 | | -hostprogs-y += xdp_sample_pkts |
---|
| 7 | +tprogs-y := test_lru_dist |
---|
| 8 | +tprogs-y += sock_example |
---|
| 9 | +tprogs-y += fds_example |
---|
| 10 | +tprogs-y += sockex1 |
---|
| 11 | +tprogs-y += sockex2 |
---|
| 12 | +tprogs-y += sockex3 |
---|
| 13 | +tprogs-y += tracex1 |
---|
| 14 | +tprogs-y += tracex2 |
---|
| 15 | +tprogs-y += tracex3 |
---|
| 16 | +tprogs-y += tracex4 |
---|
| 17 | +tprogs-y += tracex5 |
---|
| 18 | +tprogs-y += tracex6 |
---|
| 19 | +tprogs-y += tracex7 |
---|
| 20 | +tprogs-y += test_probe_write_user |
---|
| 21 | +tprogs-y += trace_output |
---|
| 22 | +tprogs-y += lathist |
---|
| 23 | +tprogs-y += offwaketime |
---|
| 24 | +tprogs-y += spintest |
---|
| 25 | +tprogs-y += map_perf_test |
---|
| 26 | +tprogs-y += test_overhead |
---|
| 27 | +tprogs-y += test_cgrp2_array_pin |
---|
| 28 | +tprogs-y += test_cgrp2_attach |
---|
| 29 | +tprogs-y += test_cgrp2_sock |
---|
| 30 | +tprogs-y += test_cgrp2_sock2 |
---|
| 31 | +tprogs-y += xdp1 |
---|
| 32 | +tprogs-y += xdp2 |
---|
| 33 | +tprogs-y += xdp_router_ipv4 |
---|
| 34 | +tprogs-y += test_current_task_under_cgroup |
---|
| 35 | +tprogs-y += trace_event |
---|
| 36 | +tprogs-y += sampleip |
---|
| 37 | +tprogs-y += tc_l2_redirect |
---|
| 38 | +tprogs-y += lwt_len_hist |
---|
| 39 | +tprogs-y += xdp_tx_iptunnel |
---|
| 40 | +tprogs-y += test_map_in_map |
---|
| 41 | +tprogs-y += per_socket_stats_example |
---|
| 42 | +tprogs-y += xdp_redirect |
---|
| 43 | +tprogs-y += xdp_redirect_map |
---|
| 44 | +tprogs-y += xdp_redirect_cpu |
---|
| 45 | +tprogs-y += xdp_monitor |
---|
| 46 | +tprogs-y += xdp_rxq_info |
---|
| 47 | +tprogs-y += syscall_tp |
---|
| 48 | +tprogs-y += cpustat |
---|
| 49 | +tprogs-y += xdp_adjust_tail |
---|
| 50 | +tprogs-y += xdpsock |
---|
| 51 | +tprogs-y += xsk_fwd |
---|
| 52 | +tprogs-y += xdp_fwd |
---|
| 53 | +tprogs-y += task_fd_query |
---|
| 54 | +tprogs-y += xdp_sample_pkts |
---|
| 55 | +tprogs-y += ibumad |
---|
| 56 | +tprogs-y += hbm |
---|
56 | 57 | |
---|
57 | 58 | # Libbpf dependencies |
---|
58 | 59 | LIBBPF = $(TOOLS_PATH)/lib/bpf/libbpf.a |
---|
.. | .. |
---|
60 | 61 | CGROUP_HELPERS := ../../tools/testing/selftests/bpf/cgroup_helpers.o |
---|
61 | 62 | TRACE_HELPERS := ../../tools/testing/selftests/bpf/trace_helpers.o |
---|
62 | 63 | |
---|
63 | | -fds_example-objs := bpf_load.o fds_example.o |
---|
64 | | -sockex1-objs := bpf_load.o sockex1_user.o |
---|
65 | | -sockex2-objs := bpf_load.o sockex2_user.o |
---|
66 | | -sockex3-objs := bpf_load.o sockex3_user.o |
---|
67 | | -tracex1-objs := bpf_load.o tracex1_user.o |
---|
68 | | -tracex2-objs := bpf_load.o tracex2_user.o |
---|
69 | | -tracex3-objs := bpf_load.o tracex3_user.o |
---|
70 | | -tracex4-objs := bpf_load.o tracex4_user.o |
---|
71 | | -tracex5-objs := bpf_load.o tracex5_user.o |
---|
72 | | -tracex6-objs := bpf_load.o tracex6_user.o |
---|
73 | | -tracex7-objs := bpf_load.o tracex7_user.o |
---|
74 | | -load_sock_ops-objs := bpf_load.o load_sock_ops.o |
---|
75 | | -test_probe_write_user-objs := bpf_load.o test_probe_write_user_user.o |
---|
76 | | -trace_output-objs := bpf_load.o trace_output_user.o $(TRACE_HELPERS) |
---|
77 | | -lathist-objs := bpf_load.o lathist_user.o |
---|
78 | | -offwaketime-objs := bpf_load.o offwaketime_user.o $(TRACE_HELPERS) |
---|
79 | | -spintest-objs := bpf_load.o spintest_user.o $(TRACE_HELPERS) |
---|
80 | | -map_perf_test-objs := bpf_load.o map_perf_test_user.o |
---|
| 64 | +fds_example-objs := fds_example.o |
---|
| 65 | +sockex1-objs := sockex1_user.o |
---|
| 66 | +sockex2-objs := sockex2_user.o |
---|
| 67 | +sockex3-objs := sockex3_user.o |
---|
| 68 | +tracex1-objs := tracex1_user.o $(TRACE_HELPERS) |
---|
| 69 | +tracex2-objs := tracex2_user.o |
---|
| 70 | +tracex3-objs := tracex3_user.o |
---|
| 71 | +tracex4-objs := tracex4_user.o |
---|
| 72 | +tracex5-objs := tracex5_user.o $(TRACE_HELPERS) |
---|
| 73 | +tracex6-objs := tracex6_user.o |
---|
| 74 | +tracex7-objs := tracex7_user.o |
---|
| 75 | +test_probe_write_user-objs := test_probe_write_user_user.o |
---|
| 76 | +trace_output-objs := trace_output_user.o $(TRACE_HELPERS) |
---|
| 77 | +lathist-objs := lathist_user.o |
---|
| 78 | +offwaketime-objs := offwaketime_user.o $(TRACE_HELPERS) |
---|
| 79 | +spintest-objs := spintest_user.o $(TRACE_HELPERS) |
---|
| 80 | +map_perf_test-objs := map_perf_test_user.o |
---|
81 | 81 | test_overhead-objs := bpf_load.o test_overhead_user.o |
---|
82 | 82 | test_cgrp2_array_pin-objs := test_cgrp2_array_pin.o |
---|
83 | 83 | test_cgrp2_attach-objs := test_cgrp2_attach.o |
---|
84 | | -test_cgrp2_attach2-objs := test_cgrp2_attach2.o $(CGROUP_HELPERS) |
---|
85 | 84 | test_cgrp2_sock-objs := test_cgrp2_sock.o |
---|
86 | 85 | test_cgrp2_sock2-objs := bpf_load.o test_cgrp2_sock2.o |
---|
87 | 86 | xdp1-objs := xdp1_user.o |
---|
88 | 87 | # reuse xdp1 source intentionally |
---|
89 | 88 | xdp2-objs := xdp1_user.o |
---|
90 | | -xdp_router_ipv4-objs := bpf_load.o xdp_router_ipv4_user.o |
---|
91 | | -test_current_task_under_cgroup-objs := bpf_load.o $(CGROUP_HELPERS) \ |
---|
| 89 | +xdp_router_ipv4-objs := xdp_router_ipv4_user.o |
---|
| 90 | +test_current_task_under_cgroup-objs := $(CGROUP_HELPERS) \ |
---|
92 | 91 | test_current_task_under_cgroup_user.o |
---|
93 | | -trace_event-objs := bpf_load.o trace_event_user.o $(TRACE_HELPERS) |
---|
94 | | -sampleip-objs := bpf_load.o sampleip_user.o $(TRACE_HELPERS) |
---|
| 92 | +trace_event-objs := trace_event_user.o $(TRACE_HELPERS) |
---|
| 93 | +sampleip-objs := sampleip_user.o $(TRACE_HELPERS) |
---|
95 | 94 | tc_l2_redirect-objs := bpf_load.o tc_l2_redirect_user.o |
---|
96 | 95 | lwt_len_hist-objs := bpf_load.o lwt_len_hist_user.o |
---|
97 | | -xdp_tx_iptunnel-objs := bpf_load.o xdp_tx_iptunnel_user.o |
---|
98 | | -test_map_in_map-objs := bpf_load.o test_map_in_map_user.o |
---|
| 96 | +xdp_tx_iptunnel-objs := xdp_tx_iptunnel_user.o |
---|
| 97 | +test_map_in_map-objs := test_map_in_map_user.o |
---|
99 | 98 | per_socket_stats_example-objs := cookie_uid_helper_example.o |
---|
100 | | -xdp_redirect-objs := bpf_load.o xdp_redirect_user.o |
---|
101 | | -xdp_redirect_map-objs := bpf_load.o xdp_redirect_map_user.o |
---|
102 | | -xdp_redirect_cpu-objs := bpf_load.o xdp_redirect_cpu_user.o |
---|
103 | | -xdp_monitor-objs := bpf_load.o xdp_monitor_user.o |
---|
| 99 | +xdp_redirect-objs := xdp_redirect_user.o |
---|
| 100 | +xdp_redirect_map-objs := xdp_redirect_map_user.o |
---|
| 101 | +xdp_redirect_cpu-objs := xdp_redirect_cpu_user.o |
---|
| 102 | +xdp_monitor-objs := xdp_monitor_user.o |
---|
104 | 103 | xdp_rxq_info-objs := xdp_rxq_info_user.o |
---|
105 | | -syscall_tp-objs := bpf_load.o syscall_tp_user.o |
---|
106 | | -cpustat-objs := bpf_load.o cpustat_user.o |
---|
| 104 | +syscall_tp-objs := syscall_tp_user.o |
---|
| 105 | +cpustat-objs := cpustat_user.o |
---|
107 | 106 | xdp_adjust_tail-objs := xdp_adjust_tail_user.o |
---|
108 | 107 | xdpsock-objs := xdpsock_user.o |
---|
| 108 | +xsk_fwd-objs := xsk_fwd.o |
---|
109 | 109 | xdp_fwd-objs := xdp_fwd_user.o |
---|
110 | 110 | task_fd_query-objs := bpf_load.o task_fd_query_user.o $(TRACE_HELPERS) |
---|
111 | 111 | xdp_sample_pkts-objs := xdp_sample_pkts_user.o $(TRACE_HELPERS) |
---|
| 112 | +ibumad-objs := bpf_load.o ibumad_user.o $(TRACE_HELPERS) |
---|
| 113 | +hbm-objs := bpf_load.o hbm.o $(CGROUP_HELPERS) |
---|
112 | 114 | |
---|
113 | 115 | # Tell kbuild to always build the programs |
---|
114 | | -always := $(hostprogs-y) |
---|
115 | | -always += sockex1_kern.o |
---|
116 | | -always += sockex2_kern.o |
---|
117 | | -always += sockex3_kern.o |
---|
118 | | -always += tracex1_kern.o |
---|
119 | | -always += tracex2_kern.o |
---|
120 | | -always += tracex3_kern.o |
---|
121 | | -always += tracex4_kern.o |
---|
122 | | -always += tracex5_kern.o |
---|
123 | | -always += tracex6_kern.o |
---|
124 | | -always += tracex7_kern.o |
---|
125 | | -always += sock_flags_kern.o |
---|
126 | | -always += test_probe_write_user_kern.o |
---|
127 | | -always += trace_output_kern.o |
---|
128 | | -always += tcbpf1_kern.o |
---|
129 | | -always += tc_l2_redirect_kern.o |
---|
130 | | -always += lathist_kern.o |
---|
131 | | -always += offwaketime_kern.o |
---|
132 | | -always += spintest_kern.o |
---|
133 | | -always += map_perf_test_kern.o |
---|
134 | | -always += test_overhead_tp_kern.o |
---|
135 | | -always += test_overhead_raw_tp_kern.o |
---|
136 | | -always += test_overhead_kprobe_kern.o |
---|
137 | | -always += parse_varlen.o parse_simple.o parse_ldabs.o |
---|
138 | | -always += test_cgrp2_tc_kern.o |
---|
139 | | -always += xdp1_kern.o |
---|
140 | | -always += xdp2_kern.o |
---|
141 | | -always += xdp_router_ipv4_kern.o |
---|
142 | | -always += test_current_task_under_cgroup_kern.o |
---|
143 | | -always += trace_event_kern.o |
---|
144 | | -always += sampleip_kern.o |
---|
145 | | -always += lwt_len_hist_kern.o |
---|
146 | | -always += xdp_tx_iptunnel_kern.o |
---|
147 | | -always += test_map_in_map_kern.o |
---|
148 | | -always += cookie_uid_helper_example.o |
---|
149 | | -always += tcp_synrto_kern.o |
---|
150 | | -always += tcp_rwnd_kern.o |
---|
151 | | -always += tcp_bufs_kern.o |
---|
152 | | -always += tcp_cong_kern.o |
---|
153 | | -always += tcp_iw_kern.o |
---|
154 | | -always += tcp_clamp_kern.o |
---|
155 | | -always += tcp_basertt_kern.o |
---|
156 | | -always += xdp_redirect_kern.o |
---|
157 | | -always += xdp_redirect_map_kern.o |
---|
158 | | -always += xdp_redirect_cpu_kern.o |
---|
159 | | -always += xdp_monitor_kern.o |
---|
160 | | -always += xdp_rxq_info_kern.o |
---|
161 | | -always += xdp2skb_meta_kern.o |
---|
162 | | -always += syscall_tp_kern.o |
---|
163 | | -always += cpustat_kern.o |
---|
164 | | -always += xdp_adjust_tail_kern.o |
---|
165 | | -always += xdpsock_kern.o |
---|
166 | | -always += xdp_fwd_kern.o |
---|
167 | | -always += task_fd_query_kern.o |
---|
168 | | -always += xdp_sample_pkts_kern.o |
---|
| 116 | +always-y := $(tprogs-y) |
---|
| 117 | +always-y += sockex1_kern.o |
---|
| 118 | +always-y += sockex2_kern.o |
---|
| 119 | +always-y += sockex3_kern.o |
---|
| 120 | +always-y += tracex1_kern.o |
---|
| 121 | +always-y += tracex2_kern.o |
---|
| 122 | +always-y += tracex3_kern.o |
---|
| 123 | +always-y += tracex4_kern.o |
---|
| 124 | +always-y += tracex5_kern.o |
---|
| 125 | +always-y += tracex6_kern.o |
---|
| 126 | +always-y += tracex7_kern.o |
---|
| 127 | +always-y += sock_flags_kern.o |
---|
| 128 | +always-y += test_probe_write_user_kern.o |
---|
| 129 | +always-y += trace_output_kern.o |
---|
| 130 | +always-y += tcbpf1_kern.o |
---|
| 131 | +always-y += tc_l2_redirect_kern.o |
---|
| 132 | +always-y += lathist_kern.o |
---|
| 133 | +always-y += offwaketime_kern.o |
---|
| 134 | +always-y += spintest_kern.o |
---|
| 135 | +always-y += map_perf_test_kern.o |
---|
| 136 | +always-y += test_overhead_tp_kern.o |
---|
| 137 | +always-y += test_overhead_raw_tp_kern.o |
---|
| 138 | +always-y += test_overhead_kprobe_kern.o |
---|
| 139 | +always-y += parse_varlen.o parse_simple.o parse_ldabs.o |
---|
| 140 | +always-y += test_cgrp2_tc_kern.o |
---|
| 141 | +always-y += xdp1_kern.o |
---|
| 142 | +always-y += xdp2_kern.o |
---|
| 143 | +always-y += xdp_router_ipv4_kern.o |
---|
| 144 | +always-y += test_current_task_under_cgroup_kern.o |
---|
| 145 | +always-y += trace_event_kern.o |
---|
| 146 | +always-y += sampleip_kern.o |
---|
| 147 | +always-y += lwt_len_hist_kern.o |
---|
| 148 | +always-y += xdp_tx_iptunnel_kern.o |
---|
| 149 | +always-y += test_map_in_map_kern.o |
---|
| 150 | +always-y += tcp_synrto_kern.o |
---|
| 151 | +always-y += tcp_rwnd_kern.o |
---|
| 152 | +always-y += tcp_bufs_kern.o |
---|
| 153 | +always-y += tcp_cong_kern.o |
---|
| 154 | +always-y += tcp_iw_kern.o |
---|
| 155 | +always-y += tcp_clamp_kern.o |
---|
| 156 | +always-y += tcp_basertt_kern.o |
---|
| 157 | +always-y += tcp_tos_reflect_kern.o |
---|
| 158 | +always-y += tcp_dumpstats_kern.o |
---|
| 159 | +always-y += xdp_redirect_kern.o |
---|
| 160 | +always-y += xdp_redirect_map_kern.o |
---|
| 161 | +always-y += xdp_redirect_cpu_kern.o |
---|
| 162 | +always-y += xdp_monitor_kern.o |
---|
| 163 | +always-y += xdp_rxq_info_kern.o |
---|
| 164 | +always-y += xdp2skb_meta_kern.o |
---|
| 165 | +always-y += syscall_tp_kern.o |
---|
| 166 | +always-y += cpustat_kern.o |
---|
| 167 | +always-y += xdp_adjust_tail_kern.o |
---|
| 168 | +always-y += xdp_fwd_kern.o |
---|
| 169 | +always-y += task_fd_query_kern.o |
---|
| 170 | +always-y += xdp_sample_pkts_kern.o |
---|
| 171 | +always-y += ibumad_kern.o |
---|
| 172 | +always-y += hbm_out_kern.o |
---|
| 173 | +always-y += hbm_edt_kern.o |
---|
| 174 | +always-y += xdpsock_kern.o |
---|
169 | 175 | |
---|
170 | | -KBUILD_HOSTCFLAGS += -I$(objtree)/usr/include |
---|
171 | | -KBUILD_HOSTCFLAGS += -I$(srctree)/tools/lib/ |
---|
172 | | -KBUILD_HOSTCFLAGS += -I$(srctree)/tools/testing/selftests/bpf/ |
---|
173 | | -KBUILD_HOSTCFLAGS += -I$(srctree)/tools/lib/ -I$(srctree)/tools/include |
---|
174 | | -KBUILD_HOSTCFLAGS += -I$(srctree)/tools/perf |
---|
175 | | -KBUILD_HOSTCFLAGS += -DHAVE_ATTR_TEST=0 |
---|
| 176 | +ifeq ($(ARCH), arm) |
---|
| 177 | +# Strip all except -D__LINUX_ARM_ARCH__ option needed to handle linux |
---|
| 178 | +# headers when arm instruction set identification is requested. |
---|
| 179 | +ARM_ARCH_SELECTOR := $(filter -D__LINUX_ARM_ARCH__%, $(KBUILD_CFLAGS)) |
---|
| 180 | +BPF_EXTRA_CFLAGS := $(ARM_ARCH_SELECTOR) |
---|
| 181 | +TPROGS_CFLAGS += $(ARM_ARCH_SELECTOR) |
---|
| 182 | +endif |
---|
176 | 183 | |
---|
177 | | -HOSTCFLAGS_bpf_load.o += -I$(objtree)/usr/include -Wno-unused-variable |
---|
178 | | -HOSTCFLAGS_trace_helpers.o += -I$(srctree)/tools/lib/bpf/ |
---|
| 184 | +TPROGS_CFLAGS += -Wall -O2 |
---|
| 185 | +TPROGS_CFLAGS += -Wmissing-prototypes |
---|
| 186 | +TPROGS_CFLAGS += -Wstrict-prototypes |
---|
179 | 187 | |
---|
180 | | -HOSTCFLAGS_trace_output_user.o += -I$(srctree)/tools/lib/bpf/ |
---|
181 | | -HOSTCFLAGS_offwaketime_user.o += -I$(srctree)/tools/lib/bpf/ |
---|
182 | | -HOSTCFLAGS_spintest_user.o += -I$(srctree)/tools/lib/bpf/ |
---|
183 | | -HOSTCFLAGS_trace_event_user.o += -I$(srctree)/tools/lib/bpf/ |
---|
184 | | -HOSTCFLAGS_sampleip_user.o += -I$(srctree)/tools/lib/bpf/ |
---|
185 | | -HOSTCFLAGS_task_fd_query_user.o += -I$(srctree)/tools/lib/bpf/ |
---|
186 | | -HOSTCFLAGS_xdp_sample_pkts_user.o += -I$(srctree)/tools/lib/bpf/ |
---|
| 188 | +TPROGS_CFLAGS += -I$(objtree)/usr/include |
---|
| 189 | +TPROGS_CFLAGS += -I$(srctree)/tools/testing/selftests/bpf/ |
---|
| 190 | +TPROGS_CFLAGS += -I$(srctree)/tools/lib/ |
---|
| 191 | +TPROGS_CFLAGS += -I$(srctree)/tools/include |
---|
| 192 | +TPROGS_CFLAGS += -I$(srctree)/tools/perf |
---|
| 193 | +TPROGS_CFLAGS += -DHAVE_ATTR_TEST=0 |
---|
187 | 194 | |
---|
188 | | -KBUILD_HOSTLDLIBS += $(LIBBPF) -lelf |
---|
189 | | -HOSTLDLIBS_tracex4 += -lrt |
---|
190 | | -HOSTLDLIBS_trace_output += -lrt |
---|
191 | | -HOSTLDLIBS_map_perf_test += -lrt |
---|
192 | | -HOSTLDLIBS_test_overhead += -lrt |
---|
193 | | -HOSTLDLIBS_xdpsock += -pthread |
---|
| 195 | +ifdef SYSROOT |
---|
| 196 | +TPROGS_CFLAGS += --sysroot=$(SYSROOT) |
---|
| 197 | +TPROGS_LDFLAGS := -L$(SYSROOT)/usr/lib |
---|
| 198 | +endif |
---|
| 199 | + |
---|
| 200 | +TPROGCFLAGS_bpf_load.o += -Wno-unused-variable |
---|
| 201 | + |
---|
| 202 | +TPROGS_LDLIBS += $(LIBBPF) -lelf -lz |
---|
| 203 | +TPROGLDLIBS_tracex4 += -lrt |
---|
| 204 | +TPROGLDLIBS_trace_output += -lrt |
---|
| 205 | +TPROGLDLIBS_map_perf_test += -lrt |
---|
| 206 | +TPROGLDLIBS_test_overhead += -lrt |
---|
| 207 | +TPROGLDLIBS_xdpsock += -pthread |
---|
| 208 | +TPROGLDLIBS_xsk_fwd += -pthread |
---|
194 | 209 | |
---|
195 | 210 | # Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline: |
---|
196 | | -# make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang |
---|
| 211 | +# make M=samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang |
---|
197 | 212 | LLC ?= llc |
---|
198 | 213 | CLANG ?= clang |
---|
| 214 | +OPT ?= opt |
---|
| 215 | +LLVM_DIS ?= llvm-dis |
---|
199 | 216 | LLVM_OBJCOPY ?= llvm-objcopy |
---|
200 | 217 | BTF_PAHOLE ?= pahole |
---|
201 | 218 | |
---|
202 | 219 | # Detect that we're cross compiling and use the cross compiler |
---|
203 | 220 | ifdef CROSS_COMPILE |
---|
204 | | -HOSTCC = $(CROSS_COMPILE)gcc |
---|
205 | | -CLANG_ARCH_ARGS = -target $(ARCH) |
---|
| 221 | +CLANG_ARCH_ARGS = --target=$(notdir $(CROSS_COMPILE:%-=%)) |
---|
| 222 | +endif |
---|
| 223 | + |
---|
| 224 | +# Don't evaluate probes and warnings if we need to run make recursively |
---|
| 225 | +ifneq ($(src),) |
---|
| 226 | +HDR_PROBE := $(shell printf "\#include <linux/types.h>\n struct list_head { int a; }; int main() { return 0; }" | \ |
---|
| 227 | + $(CC) $(TPROGS_CFLAGS) $(TPROGS_LDFLAGS) -x c - \ |
---|
| 228 | + -o /dev/null 2>/dev/null && echo okay) |
---|
| 229 | + |
---|
| 230 | +ifeq ($(HDR_PROBE),) |
---|
| 231 | +$(warning WARNING: Detected possible issues with include path.) |
---|
| 232 | +$(warning WARNING: Please install kernel headers locally (make headers_install).) |
---|
206 | 233 | endif |
---|
207 | 234 | |
---|
208 | 235 | BTF_LLC_PROBE := $(shell $(LLC) -march=bpf -mattr=help 2>&1 | grep dwarfris) |
---|
209 | 236 | BTF_PAHOLE_PROBE := $(shell $(BTF_PAHOLE) --help 2>&1 | grep BTF) |
---|
210 | 237 | BTF_OBJCOPY_PROBE := $(shell $(LLVM_OBJCOPY) --help 2>&1 | grep -i 'usage.*llvm') |
---|
| 238 | +BTF_LLVM_PROBE := $(shell echo "int main() { return 0; }" | \ |
---|
| 239 | + $(CLANG) -target bpf -O2 -g -c -x c - -o ./llvm_btf_verify.o; \ |
---|
| 240 | + readelf -S ./llvm_btf_verify.o | grep BTF; \ |
---|
| 241 | + /bin/rm -f ./llvm_btf_verify.o) |
---|
211 | 242 | |
---|
| 243 | +BPF_EXTRA_CFLAGS += -fno-stack-protector |
---|
| 244 | +ifneq ($(BTF_LLVM_PROBE),) |
---|
| 245 | + BPF_EXTRA_CFLAGS += -g |
---|
| 246 | +else |
---|
212 | 247 | ifneq ($(and $(BTF_LLC_PROBE),$(BTF_PAHOLE_PROBE),$(BTF_OBJCOPY_PROBE)),) |
---|
213 | | - EXTRA_CFLAGS += -g |
---|
| 248 | + BPF_EXTRA_CFLAGS += -g |
---|
214 | 249 | LLC_FLAGS += -mattr=dwarfris |
---|
215 | 250 | DWARF2BTF = y |
---|
| 251 | +endif |
---|
| 252 | +endif |
---|
216 | 253 | endif |
---|
217 | 254 | |
---|
218 | 255 | # Trick to allow make to be run from this directory |
---|
219 | 256 | all: |
---|
220 | | - $(MAKE) -C ../../ $(CURDIR)/ BPF_SAMPLES_PATH=$(CURDIR) |
---|
| 257 | + $(MAKE) -C ../../ M=$(CURDIR) BPF_SAMPLES_PATH=$(CURDIR) |
---|
221 | 258 | |
---|
222 | 259 | clean: |
---|
223 | 260 | $(MAKE) -C ../../ M=$(CURDIR) clean |
---|
.. | .. |
---|
225 | 262 | |
---|
226 | 263 | $(LIBBPF): FORCE |
---|
227 | 264 | # Fix up variables inherited from Kbuild that tools/ build system won't like |
---|
228 | | - $(MAKE) -C $(dir $@) RM='rm -rf' LDFLAGS= srctree=$(BPF_SAMPLES_PATH)/../../ O= |
---|
229 | | - |
---|
230 | | -$(obj)/syscall_nrs.s: $(src)/syscall_nrs.c |
---|
231 | | - $(call if_changed_dep,cc_s_c) |
---|
| 265 | + $(MAKE) -C $(dir $@) RM='rm -rf' EXTRA_CFLAGS="$(TPROGS_CFLAGS)" \ |
---|
| 266 | + LDFLAGS=$(TPROGS_LDFLAGS) srctree=$(BPF_SAMPLES_PATH)/../../ O= |
---|
232 | 267 | |
---|
233 | 268 | $(obj)/syscall_nrs.h: $(obj)/syscall_nrs.s FORCE |
---|
234 | 269 | $(call filechk,offsets,__SYSCALL_NRS_H__) |
---|
235 | 270 | |
---|
| 271 | +targets += syscall_nrs.s |
---|
236 | 272 | clean-files += syscall_nrs.h |
---|
237 | 273 | |
---|
238 | 274 | FORCE: |
---|
.. | .. |
---|
260 | 296 | $(src)/*.c: verify_target_bpf $(LIBBPF) |
---|
261 | 297 | |
---|
262 | 298 | $(obj)/tracex5_kern.o: $(obj)/syscall_nrs.h |
---|
| 299 | +$(obj)/hbm_out_kern.o: $(src)/hbm.h $(src)/hbm_kern.h |
---|
| 300 | +$(obj)/hbm.o: $(src)/hbm.h |
---|
| 301 | +$(obj)/hbm_edt_kern.o: $(src)/hbm.h $(src)/hbm_kern.h |
---|
| 302 | + |
---|
| 303 | +-include $(BPF_SAMPLES_PATH)/Makefile.target |
---|
263 | 304 | |
---|
264 | 305 | # asm/sysreg.h - inline assembly used by it is incompatible with llvm. |
---|
265 | 306 | # But, there is no easy way to fix it, so just exclude it since it is |
---|
266 | 307 | # useless for BPF samples. |
---|
| 308 | +# below we use long chain of commands, clang | opt | llvm-dis | llc, |
---|
| 309 | +# to generate final object file. 'clang' compiles the source into IR |
---|
| 310 | +# with native target, e.g., x64, arm64, etc. 'opt' does bpf CORE IR builtin |
---|
| 311 | +# processing (llvm12) and IR optimizations. 'llvm-dis' converts |
---|
| 312 | +# 'opt' output to IR, and finally 'llc' generates bpf byte code. |
---|
267 | 313 | $(obj)/%.o: $(src)/%.c |
---|
268 | 314 | @echo " CLANG-bpf " $@ |
---|
269 | | - $(Q)$(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS) -I$(obj) \ |
---|
270 | | - -I$(srctree)/tools/testing/selftests/bpf/ \ |
---|
| 315 | + $(Q)$(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(BPF_EXTRA_CFLAGS) \ |
---|
| 316 | + -I$(obj) -I$(srctree)/tools/testing/selftests/bpf/ \ |
---|
| 317 | + -I$(srctree)/tools/lib/ \ |
---|
271 | 318 | -D__KERNEL__ -D__BPF_TRACING__ -Wno-unused-value -Wno-pointer-sign \ |
---|
272 | | - -D__TARGET_ARCH_$(ARCH) -Wno-compare-distinct-pointer-types \ |
---|
| 319 | + -D__TARGET_ARCH_$(SRCARCH) -Wno-compare-distinct-pointer-types \ |
---|
273 | 320 | -Wno-gnu-variable-sized-type-not-at-end \ |
---|
274 | 321 | -Wno-address-of-packed-member -Wno-tautological-compare \ |
---|
275 | 322 | -Wno-unknown-warning-option $(CLANG_ARCH_ARGS) \ |
---|
276 | | - -O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf $(LLC_FLAGS) -filetype=obj -o $@ |
---|
| 323 | + -I$(srctree)/samples/bpf/ -include asm_goto_workaround.h \ |
---|
| 324 | + -O2 -emit-llvm -Xclang -disable-llvm-passes -c $< -o - | \ |
---|
| 325 | + $(OPT) -O2 -mtriple=bpf-pc-linux | $(LLVM_DIS) | \ |
---|
| 326 | + $(LLC) -march=bpf $(LLC_FLAGS) -filetype=obj -o $@ |
---|
277 | 327 | ifeq ($(DWARF2BTF),y) |
---|
278 | 328 | $(BTF_PAHOLE) -J $@ |
---|
279 | 329 | endif |
---|