hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/samples/bpf/Makefile
....@@ -4,55 +4,56 @@
44 TOOLS_PATH := $(BPF_SAMPLES_PATH)/../../tools
55
66 # 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
5657
5758 # Libbpf dependencies
5859 LIBBPF = $(TOOLS_PATH)/lib/bpf/libbpf.a
....@@ -60,164 +61,200 @@
6061 CGROUP_HELPERS := ../../tools/testing/selftests/bpf/cgroup_helpers.o
6162 TRACE_HELPERS := ../../tools/testing/selftests/bpf/trace_helpers.o
6263
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
8181 test_overhead-objs := bpf_load.o test_overhead_user.o
8282 test_cgrp2_array_pin-objs := test_cgrp2_array_pin.o
8383 test_cgrp2_attach-objs := test_cgrp2_attach.o
84
-test_cgrp2_attach2-objs := test_cgrp2_attach2.o $(CGROUP_HELPERS)
8584 test_cgrp2_sock-objs := test_cgrp2_sock.o
8685 test_cgrp2_sock2-objs := bpf_load.o test_cgrp2_sock2.o
8786 xdp1-objs := xdp1_user.o
8887 # reuse xdp1 source intentionally
8988 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) \
9291 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)
9594 tc_l2_redirect-objs := bpf_load.o tc_l2_redirect_user.o
9695 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
9998 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
104103 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
107106 xdp_adjust_tail-objs := xdp_adjust_tail_user.o
108107 xdpsock-objs := xdpsock_user.o
108
+xsk_fwd-objs := xsk_fwd.o
109109 xdp_fwd-objs := xdp_fwd_user.o
110110 task_fd_query-objs := bpf_load.o task_fd_query_user.o $(TRACE_HELPERS)
111111 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)
112114
113115 # 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
169175
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
176183
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
179187
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
187194
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
194209
195210 # 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
197212 LLC ?= llc
198213 CLANG ?= clang
214
+OPT ?= opt
215
+LLVM_DIS ?= llvm-dis
199216 LLVM_OBJCOPY ?= llvm-objcopy
200217 BTF_PAHOLE ?= pahole
201218
202219 # Detect that we're cross compiling and use the cross compiler
203220 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).)
206233 endif
207234
208235 BTF_LLC_PROBE := $(shell $(LLC) -march=bpf -mattr=help 2>&1 | grep dwarfris)
209236 BTF_PAHOLE_PROBE := $(shell $(BTF_PAHOLE) --help 2>&1 | grep BTF)
210237 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)
211242
243
+BPF_EXTRA_CFLAGS += -fno-stack-protector
244
+ifneq ($(BTF_LLVM_PROBE),)
245
+ BPF_EXTRA_CFLAGS += -g
246
+else
212247 ifneq ($(and $(BTF_LLC_PROBE),$(BTF_PAHOLE_PROBE),$(BTF_OBJCOPY_PROBE)),)
213
- EXTRA_CFLAGS += -g
248
+ BPF_EXTRA_CFLAGS += -g
214249 LLC_FLAGS += -mattr=dwarfris
215250 DWARF2BTF = y
251
+endif
252
+endif
216253 endif
217254
218255 # Trick to allow make to be run from this directory
219256 all:
220
- $(MAKE) -C ../../ $(CURDIR)/ BPF_SAMPLES_PATH=$(CURDIR)
257
+ $(MAKE) -C ../../ M=$(CURDIR) BPF_SAMPLES_PATH=$(CURDIR)
221258
222259 clean:
223260 $(MAKE) -C ../../ M=$(CURDIR) clean
....@@ -225,14 +262,13 @@
225262
226263 $(LIBBPF): FORCE
227264 # 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=
232267
233268 $(obj)/syscall_nrs.h: $(obj)/syscall_nrs.s FORCE
234269 $(call filechk,offsets,__SYSCALL_NRS_H__)
235270
271
+targets += syscall_nrs.s
236272 clean-files += syscall_nrs.h
237273
238274 FORCE:
....@@ -260,20 +296,34 @@
260296 $(src)/*.c: verify_target_bpf $(LIBBPF)
261297
262298 $(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
263304
264305 # asm/sysreg.h - inline assembly used by it is incompatible with llvm.
265306 # But, there is no easy way to fix it, so just exclude it since it is
266307 # 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.
267313 $(obj)/%.o: $(src)/%.c
268314 @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/ \
271318 -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 \
273320 -Wno-gnu-variable-sized-type-not-at-end \
274321 -Wno-address-of-packed-member -Wno-tautological-compare \
275322 -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 $@
277327 ifeq ($(DWARF2BTF),y)
278328 $(BTF_PAHOLE) -J $@
279329 endif