Makefile (e269d7caf9e0dbd95fac9991991298f74930c2c0) Makefile (2a2cb45b727b7a1041f3d3d93414b774e66454bb)
1# SPDX-License-Identifier: GPL-2.0
2include ../../../build/Build.include
3include ../../../scripts/Makefile.arch
4include ../../../scripts/Makefile.include
5
6CXX ?= $(CROSS_COMPILE)g++
7
8CURDIR := $(abspath .)

--- 9 unchanged lines hidden (view full) ---

18ifneq ($(wildcard $(GENHDR)),)
19 GENFLAGS := -DHAVE_GENHDR
20endif
21
22BPF_GCC ?= $(shell command -v bpf-gcc;)
23SAN_CFLAGS ?=
24CFLAGS += -g -O0 -rdynamic -Wall $(GENFLAGS) $(SAN_CFLAGS) \
25 -I$(CURDIR) -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) \
1# SPDX-License-Identifier: GPL-2.0
2include ../../../build/Build.include
3include ../../../scripts/Makefile.arch
4include ../../../scripts/Makefile.include
5
6CXX ?= $(CROSS_COMPILE)g++
7
8CURDIR := $(abspath .)

--- 9 unchanged lines hidden (view full) ---

18ifneq ($(wildcard $(GENHDR)),)
19 GENFLAGS := -DHAVE_GENHDR
20endif
21
22BPF_GCC ?= $(shell command -v bpf-gcc;)
23SAN_CFLAGS ?=
24CFLAGS += -g -O0 -rdynamic -Wall $(GENFLAGS) $(SAN_CFLAGS) \
25 -I$(CURDIR) -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) \
26 -I$(TOOLSINCDIR) -I$(APIDIR) -I$(OUTPUT) \
27 -Dbpf_prog_load=bpf_prog_test_load \
28 -Dbpf_load_program=bpf_test_load_program
26 -I$(TOOLSINCDIR) -I$(APIDIR) -I$(OUTPUT)
27LDFLAGS += $(SAN_CFLAGS)
29LDLIBS += -lcap -lelf -lz -lrt -lpthread
30
31# Silence some warnings when compiled with clang
32ifneq ($(LLVM),)
33CFLAGS += -Wno-unused-command-line-argument
34endif
35
36# Order correspond to 'make run_tests' order

--- 80 unchanged lines hidden (view full) ---

117
118SCRATCH_DIR := $(OUTPUT)/tools
119BUILD_DIR := $(SCRATCH_DIR)/build
120INCLUDE_DIR := $(SCRATCH_DIR)/include
121BPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a
122ifneq ($(CROSS_COMPILE),)
123HOST_BUILD_DIR := $(BUILD_DIR)/host
124HOST_SCRATCH_DIR := $(OUTPUT)/host-tools
28LDLIBS += -lcap -lelf -lz -lrt -lpthread
29
30# Silence some warnings when compiled with clang
31ifneq ($(LLVM),)
32CFLAGS += -Wno-unused-command-line-argument
33endif
34
35# Order correspond to 'make run_tests' order

--- 80 unchanged lines hidden (view full) ---

116
117SCRATCH_DIR := $(OUTPUT)/tools
118BUILD_DIR := $(SCRATCH_DIR)/build
119INCLUDE_DIR := $(SCRATCH_DIR)/include
120BPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a
121ifneq ($(CROSS_COMPILE),)
122HOST_BUILD_DIR := $(BUILD_DIR)/host
123HOST_SCRATCH_DIR := $(OUTPUT)/host-tools
124HOST_INCLUDE_DIR := $(HOST_SCRATCH_DIR)/include
125else
126HOST_BUILD_DIR := $(BUILD_DIR)
127HOST_SCRATCH_DIR := $(SCRATCH_DIR)
125else
126HOST_BUILD_DIR := $(BUILD_DIR)
127HOST_SCRATCH_DIR := $(SCRATCH_DIR)
128HOST_INCLUDE_DIR := $(INCLUDE_DIR)
128endif
129HOST_BPFOBJ := $(HOST_BUILD_DIR)/libbpf/libbpf.a
130RESOLVE_BTFIDS := $(HOST_BUILD_DIR)/resolve_btfids/resolve_btfids
129endif
130HOST_BPFOBJ := $(HOST_BUILD_DIR)/libbpf/libbpf.a
131RESOLVE_BTFIDS := $(HOST_BUILD_DIR)/resolve_btfids/resolve_btfids
132RUNQSLOWER_OUTPUT := $(BUILD_DIR)/runqslower/
131
132VMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \
133 $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \
134 ../../../../vmlinux \
135 /sys/kernel/btf/vmlinux \
136 /boot/vmlinux-$(shell uname -r)
137VMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS))))
138ifeq ($(VMLINUX_BTF),)

--- 8 unchanged lines hidden (view full) ---

147 $(TEST_PROGS) \
148 $(TEST_PROGS_EXTENDED) \
149 $(TEST_GEN_PROGS_EXTENDED) \
150 $(TEST_CUSTOM_PROGS)): %: $(OUTPUT)/% ;
151
152# sort removes libbpf duplicates when not cross-building
153MAKE_DIRS := $(sort $(BUILD_DIR)/libbpf $(HOST_BUILD_DIR)/libbpf \
154 $(HOST_BUILD_DIR)/bpftool $(HOST_BUILD_DIR)/resolve_btfids \
133
134VMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \
135 $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \
136 ../../../../vmlinux \
137 /sys/kernel/btf/vmlinux \
138 /boot/vmlinux-$(shell uname -r)
139VMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS))))
140ifeq ($(VMLINUX_BTF),)

--- 8 unchanged lines hidden (view full) ---

149 $(TEST_PROGS) \
150 $(TEST_PROGS_EXTENDED) \
151 $(TEST_GEN_PROGS_EXTENDED) \
152 $(TEST_CUSTOM_PROGS)): %: $(OUTPUT)/% ;
153
154# sort removes libbpf duplicates when not cross-building
155MAKE_DIRS := $(sort $(BUILD_DIR)/libbpf $(HOST_BUILD_DIR)/libbpf \
156 $(HOST_BUILD_DIR)/bpftool $(HOST_BUILD_DIR)/resolve_btfids \
155 $(INCLUDE_DIR))
157 $(RUNQSLOWER_OUTPUT) $(INCLUDE_DIR))
156$(MAKE_DIRS):
157 $(call msg,MKDIR,,$@)
158 $(Q)mkdir -p $@
159
160$(OUTPUT)/%.o: %.c
161 $(call msg,CC,,$@)
162 $(Q)$(CC) $(CFLAGS) -c $(filter %.c,$^) $(LDLIBS) -o $@
163

--- 6 unchanged lines hidden (view full) ---

170 $(Q)$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) -Wl,--build-id=sha1
171
172$(OUTPUT)/bpf_testmod.ko: $(VMLINUX_BTF) $(wildcard bpf_testmod/Makefile bpf_testmod/*.[ch])
173 $(call msg,MOD,,$@)
174 $(Q)$(RM) bpf_testmod/bpf_testmod.ko # force re-compilation
175 $(Q)$(MAKE) $(submake_extras) -C bpf_testmod
176 $(Q)cp bpf_testmod/bpf_testmod.ko $@
177
158$(MAKE_DIRS):
159 $(call msg,MKDIR,,$@)
160 $(Q)mkdir -p $@
161
162$(OUTPUT)/%.o: %.c
163 $(call msg,CC,,$@)
164 $(Q)$(CC) $(CFLAGS) -c $(filter %.c,$^) $(LDLIBS) -o $@
165

--- 6 unchanged lines hidden (view full) ---

172 $(Q)$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS) -Wl,--build-id=sha1
173
174$(OUTPUT)/bpf_testmod.ko: $(VMLINUX_BTF) $(wildcard bpf_testmod/Makefile bpf_testmod/*.[ch])
175 $(call msg,MOD,,$@)
176 $(Q)$(RM) bpf_testmod/bpf_testmod.ko # force re-compilation
177 $(Q)$(MAKE) $(submake_extras) -C bpf_testmod
178 $(Q)cp bpf_testmod/bpf_testmod.ko $@
179
178$(OUTPUT)/test_stub.o: test_stub.c $(BPFOBJ)
179 $(call msg,CC,,$@)
180 $(Q)$(CC) -c $(CFLAGS) -o $@ $<
181
182DEFAULT_BPFTOOL := $(HOST_SCRATCH_DIR)/sbin/bpftool
183
180DEFAULT_BPFTOOL := $(HOST_SCRATCH_DIR)/sbin/bpftool
181
184$(OUTPUT)/runqslower: $(BPFOBJ) | $(DEFAULT_BPFTOOL)
185 $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/runqslower \
186 OUTPUT=$(SCRATCH_DIR)/ VMLINUX_BTF=$(VMLINUX_BTF) \
187 BPFOBJ=$(BPFOBJ) BPF_INCLUDE=$(INCLUDE_DIR) && \
188 cp $(SCRATCH_DIR)/runqslower $@
182$(OUTPUT)/runqslower: $(BPFOBJ) | $(DEFAULT_BPFTOOL) $(RUNQSLOWER_OUTPUT)
183 $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/runqslower \
184 OUTPUT=$(RUNQSLOWER_OUTPUT) VMLINUX_BTF=$(VMLINUX_BTF) \
185 BPFTOOL_OUTPUT=$(BUILD_DIR)/bpftool/ \
186 BPFOBJ_OUTPUT=$(BUILD_DIR)/libbpf \
187 BPFOBJ=$(BPFOBJ) BPF_INCLUDE=$(INCLUDE_DIR) && \
188 cp $(RUNQSLOWER_OUTPUT)runqslower $@
189
190TEST_GEN_PROGS_EXTENDED += $(DEFAULT_BPFTOOL)
191
189
190TEST_GEN_PROGS_EXTENDED += $(DEFAULT_BPFTOOL)
191
192$(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(OUTPUT)/test_stub.o $(BPFOBJ)
192$(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(BPFOBJ)
193
193
194$(OUTPUT)/test_dev_cgroup: cgroup_helpers.c
195$(OUTPUT)/test_skb_cgroup_id_user: cgroup_helpers.c
196$(OUTPUT)/test_sock: cgroup_helpers.c
197$(OUTPUT)/test_sock_addr: cgroup_helpers.c
198$(OUTPUT)/test_sockmap: cgroup_helpers.c
199$(OUTPUT)/test_tcpnotify_user: cgroup_helpers.c trace_helpers.c
200$(OUTPUT)/get_cgroup_id_user: cgroup_helpers.c
201$(OUTPUT)/test_cgroup_storage: cgroup_helpers.c
202$(OUTPUT)/test_sock_fields: cgroup_helpers.c
203$(OUTPUT)/test_sysctl: cgroup_helpers.c
194$(OUTPUT)/test_dev_cgroup: cgroup_helpers.c testing_helpers.o
195$(OUTPUT)/test_skb_cgroup_id_user: cgroup_helpers.c testing_helpers.o
196$(OUTPUT)/test_sock: cgroup_helpers.c testing_helpers.o
197$(OUTPUT)/test_sock_addr: cgroup_helpers.c testing_helpers.o
198$(OUTPUT)/test_sockmap: cgroup_helpers.c testing_helpers.o
199$(OUTPUT)/test_tcpnotify_user: cgroup_helpers.c trace_helpers.c testing_helpers.o
200$(OUTPUT)/get_cgroup_id_user: cgroup_helpers.c testing_helpers.o
201$(OUTPUT)/test_cgroup_storage: cgroup_helpers.c testing_helpers.o
202$(OUTPUT)/test_sock_fields: cgroup_helpers.c testing_helpers.o
203$(OUTPUT)/test_sysctl: cgroup_helpers.c testing_helpers.o
204$(OUTPUT)/test_tag: testing_helpers.o
205$(OUTPUT)/test_lirc_mode2_user: testing_helpers.o
206$(OUTPUT)/xdping: testing_helpers.o
207$(OUTPUT)/flow_dissector_load: testing_helpers.o
208$(OUTPUT)/test_maps: testing_helpers.o
209$(OUTPUT)/test_verifier: testing_helpers.o
204
205BPFTOOL ?= $(DEFAULT_BPFTOOL)
206$(DEFAULT_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(BPFTOOLDIR)/Makefile) \
207 $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/bpftool
208 $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \
209 CC=$(HOSTCC) LD=$(HOSTLD) \
210 EXTRA_CFLAGS='-g -O0' \
211 OUTPUT=$(HOST_BUILD_DIR)/bpftool/ \
210
211BPFTOOL ?= $(DEFAULT_BPFTOOL)
212$(DEFAULT_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(BPFTOOLDIR)/Makefile) \
213 $(HOST_BPFOBJ) | $(HOST_BUILD_DIR)/bpftool
214 $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \
215 CC=$(HOSTCC) LD=$(HOSTLD) \
216 EXTRA_CFLAGS='-g -O0' \
217 OUTPUT=$(HOST_BUILD_DIR)/bpftool/ \
212 prefix= DESTDIR=$(HOST_SCRATCH_DIR)/ install
218 LIBBPF_OUTPUT=$(HOST_BUILD_DIR)/libbpf/ \
219 LIBBPF_DESTDIR=$(HOST_SCRATCH_DIR)/ \
220 prefix= DESTDIR=$(HOST_SCRATCH_DIR)/ install-bin
213
214all: docs
215
216docs:
217 $(Q)RST2MAN_OPTS="--exit-status=1" $(MAKE) $(submake_extras) \
218 -f Makefile.docs \
219 prefix= OUTPUT=$(OUTPUT)/ DESTDIR=$(OUTPUT)/ $@
220
221docs-clean:
222 $(Q)$(MAKE) $(submake_extras) \
223 -f Makefile.docs \
224 prefix= OUTPUT=$(OUTPUT)/ DESTDIR=$(OUTPUT)/ $@
225
226$(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
227 ../../../include/uapi/linux/bpf.h \
221
222all: docs
223
224docs:
225 $(Q)RST2MAN_OPTS="--exit-status=1" $(MAKE) $(submake_extras) \
226 -f Makefile.docs \
227 prefix= OUTPUT=$(OUTPUT)/ DESTDIR=$(OUTPUT)/ $@
228
229docs-clean:
230 $(Q)$(MAKE) $(submake_extras) \
231 -f Makefile.docs \
232 prefix= OUTPUT=$(OUTPUT)/ DESTDIR=$(OUTPUT)/ $@
233
234$(BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
235 ../../../include/uapi/linux/bpf.h \
228 | $(INCLUDE_DIR) $(BUILD_DIR)/libbpf
236 | $(BUILD_DIR)/libbpf
229 $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
230 EXTRA_CFLAGS='-g -O0' \
231 DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
232
233ifneq ($(BPFOBJ),$(HOST_BPFOBJ))
234$(HOST_BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
235 ../../../include/uapi/linux/bpf.h \
237 $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \
238 EXTRA_CFLAGS='-g -O0' \
239 DESTDIR=$(SCRATCH_DIR) prefix= all install_headers
240
241ifneq ($(BPFOBJ),$(HOST_BPFOBJ))
242$(HOST_BPFOBJ): $(wildcard $(BPFDIR)/*.[ch] $(BPFDIR)/Makefile) \
243 ../../../include/uapi/linux/bpf.h \
236 | $(INCLUDE_DIR) $(HOST_BUILD_DIR)/libbpf
244 | $(HOST_BUILD_DIR)/libbpf
237 $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) \
238 EXTRA_CFLAGS='-g -O0' \
239 OUTPUT=$(HOST_BUILD_DIR)/libbpf/ CC=$(HOSTCC) LD=$(HOSTLD) \
240 DESTDIR=$(HOST_SCRATCH_DIR)/ prefix= all install_headers
241endif
242
243$(INCLUDE_DIR)/vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL) | $(INCLUDE_DIR)
244ifeq ($(VMLINUX_H),)

--- 8 unchanged lines hidden (view full) ---

253 $(TOOLSDIR)/bpf/resolve_btfids/main.c \
254 $(TOOLSDIR)/lib/rbtree.c \
255 $(TOOLSDIR)/lib/zalloc.c \
256 $(TOOLSDIR)/lib/string.c \
257 $(TOOLSDIR)/lib/ctype.c \
258 $(TOOLSDIR)/lib/str_error_r.c
259 $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/resolve_btfids \
260 CC=$(HOSTCC) LD=$(HOSTLD) AR=$(HOSTAR) \
245 $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) \
246 EXTRA_CFLAGS='-g -O0' \
247 OUTPUT=$(HOST_BUILD_DIR)/libbpf/ CC=$(HOSTCC) LD=$(HOSTLD) \
248 DESTDIR=$(HOST_SCRATCH_DIR)/ prefix= all install_headers
249endif
250
251$(INCLUDE_DIR)/vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL) | $(INCLUDE_DIR)
252ifeq ($(VMLINUX_H),)

--- 8 unchanged lines hidden (view full) ---

261 $(TOOLSDIR)/bpf/resolve_btfids/main.c \
262 $(TOOLSDIR)/lib/rbtree.c \
263 $(TOOLSDIR)/lib/zalloc.c \
264 $(TOOLSDIR)/lib/string.c \
265 $(TOOLSDIR)/lib/ctype.c \
266 $(TOOLSDIR)/lib/str_error_r.c
267 $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/resolve_btfids \
268 CC=$(HOSTCC) LD=$(HOSTLD) AR=$(HOSTAR) \
269 LIBBPF_INCLUDE=$(HOST_INCLUDE_DIR) \
261 OUTPUT=$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=$(HOST_BPFOBJ)
262
263# Get Clang's default includes on this system, as opposed to those seen by
264# '-target bpf'. This fixes "missing" files on some architectures/distros,
265# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc.
266#
267# Use '-idirafter': Don't interfere with include mechanics except where the
268# build would have failed anyways.
269define get_sys_includes
270$(shell $(1) -v -E - </dev/null 2>&1 \
271 | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \
270 OUTPUT=$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=$(HOST_BPFOBJ)
271
272# Get Clang's default includes on this system, as opposed to those seen by
273# '-target bpf'. This fixes "missing" files on some architectures/distros,
274# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc.
275#
276# Use '-idirafter': Don't interfere with include mechanics except where the
277# build would have failed anyways.
278define get_sys_includes
279$(shell $(1) -v -E - </dev/null 2>&1 \
280 | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \
272$(shell $(1) -dM -E - </dev/null | grep '#define __riscv_xlen ' | sed 's/#define /-D/' | sed 's/ /=/')
281$(shell $(1) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=%d -D__BITS_PER_LONG=%d", $$3, $$3)}')
273endef
274
275# Determine target endianness.
276IS_LITTLE_ENDIAN = $(shell $(CC) -dM -E - </dev/null | \
277 grep 'define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__')
278MENDIAN=$(if $(IS_LITTLE_ENDIAN),-mlittle-endian,-mbig-endian)
279
280CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG))

--- 29 unchanged lines hidden (view full) ---

310endef
311
312SKEL_BLACKLIST := btf__% test_pinning_invalid.c test_sk_assign.c
313
314LINKED_SKELS := test_static_linked.skel.h linked_funcs.skel.h \
315 linked_vars.skel.h linked_maps.skel.h
316
317LSKELS := kfunc_call_test.c fentry_test.c fexit_test.c fexit_sleep.c \
282endef
283
284# Determine target endianness.
285IS_LITTLE_ENDIAN = $(shell $(CC) -dM -E - </dev/null | \
286 grep 'define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__')
287MENDIAN=$(if $(IS_LITTLE_ENDIAN),-mlittle-endian,-mbig-endian)
288
289CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG))

--- 29 unchanged lines hidden (view full) ---

319endef
320
321SKEL_BLACKLIST := btf__% test_pinning_invalid.c test_sk_assign.c
322
323LINKED_SKELS := test_static_linked.skel.h linked_funcs.skel.h \
324 linked_vars.skel.h linked_maps.skel.h
325
326LSKELS := kfunc_call_test.c fentry_test.c fexit_test.c fexit_sleep.c \
318 test_ksyms_module.c test_ringbuf.c atomics.c trace_printk.c
327 test_ringbuf.c atomics.c trace_printk.c trace_vprintk.c
328# Generate both light skeleton and libbpf skeleton for these
329LSKELS_EXTRA := test_ksyms_module.c test_ksyms_weak.c
319SKEL_BLACKLIST += $$(LSKELS)
320
321test_static_linked.skel.h-deps := test_static_linked1.o test_static_linked2.o
322linked_funcs.skel.h-deps := linked_funcs1.o linked_funcs2.o
323linked_vars.skel.h-deps := linked_vars1.o linked_vars2.o
324linked_maps.skel.h-deps := linked_maps1.o linked_maps2.o
325
326LINKED_BPF_SRCS := $(patsubst %.o,%.c,$(foreach skel,$(LINKED_SKELS),$($(skel)-deps)))

--- 13 unchanged lines hidden (view full) ---

340 $$(filter %.c,$(TRUNNER_EXTRA_SOURCES)))
341TRUNNER_EXTRA_HDRS := $$(filter %.h,$(TRUNNER_EXTRA_SOURCES))
342TRUNNER_TESTS_HDR := $(TRUNNER_TESTS_DIR)/tests.h
343TRUNNER_BPF_SRCS := $$(notdir $$(wildcard $(TRUNNER_BPF_PROGS_DIR)/*.c))
344TRUNNER_BPF_OBJS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.o, $$(TRUNNER_BPF_SRCS))
345TRUNNER_BPF_SKELS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.skel.h, \
346 $$(filter-out $(SKEL_BLACKLIST) $(LINKED_BPF_SRCS),\
347 $$(TRUNNER_BPF_SRCS)))
330SKEL_BLACKLIST += $$(LSKELS)
331
332test_static_linked.skel.h-deps := test_static_linked1.o test_static_linked2.o
333linked_funcs.skel.h-deps := linked_funcs1.o linked_funcs2.o
334linked_vars.skel.h-deps := linked_vars1.o linked_vars2.o
335linked_maps.skel.h-deps := linked_maps1.o linked_maps2.o
336
337LINKED_BPF_SRCS := $(patsubst %.o,%.c,$(foreach skel,$(LINKED_SKELS),$($(skel)-deps)))

--- 13 unchanged lines hidden (view full) ---

351 $$(filter %.c,$(TRUNNER_EXTRA_SOURCES)))
352TRUNNER_EXTRA_HDRS := $$(filter %.h,$(TRUNNER_EXTRA_SOURCES))
353TRUNNER_TESTS_HDR := $(TRUNNER_TESTS_DIR)/tests.h
354TRUNNER_BPF_SRCS := $$(notdir $$(wildcard $(TRUNNER_BPF_PROGS_DIR)/*.c))
355TRUNNER_BPF_OBJS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.o, $$(TRUNNER_BPF_SRCS))
356TRUNNER_BPF_SKELS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.skel.h, \
357 $$(filter-out $(SKEL_BLACKLIST) $(LINKED_BPF_SRCS),\
358 $$(TRUNNER_BPF_SRCS)))
348TRUNNER_BPF_LSKELS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.lskel.h, $$(LSKELS))
359TRUNNER_BPF_LSKELS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.lskel.h, $$(LSKELS) $$(LSKELS_EXTRA))
349TRUNNER_BPF_SKELS_LINKED := $$(addprefix $$(TRUNNER_OUTPUT)/,$(LINKED_SKELS))
350TEST_GEN_FILES += $$(TRUNNER_BPF_OBJS)
351
352# Evaluate rules now with extra TRUNNER_XXX variables above already defined
353$$(eval $$(call DEFINE_TEST_RUNNER_RULES,$1,$2))
354
355endef
356

--- 32 unchanged lines hidden (view full) ---

389 $(Q)$$(BPFTOOL) gen skeleton $$(<:.o=.linked3.o) name $$(notdir $$(<:.o=)) > $$@
390
391$(TRUNNER_BPF_LSKELS): %.lskel.h: %.o $(BPFTOOL) | $(TRUNNER_OUTPUT)
392 $$(call msg,GEN-SKEL,$(TRUNNER_BINARY),$$@)
393 $(Q)$$(BPFTOOL) gen object $$(<:.o=.linked1.o) $$<
394 $(Q)$$(BPFTOOL) gen object $$(<:.o=.linked2.o) $$(<:.o=.linked1.o)
395 $(Q)$$(BPFTOOL) gen object $$(<:.o=.linked3.o) $$(<:.o=.linked2.o)
396 $(Q)diff $$(<:.o=.linked2.o) $$(<:.o=.linked3.o)
360TRUNNER_BPF_SKELS_LINKED := $$(addprefix $$(TRUNNER_OUTPUT)/,$(LINKED_SKELS))
361TEST_GEN_FILES += $$(TRUNNER_BPF_OBJS)
362
363# Evaluate rules now with extra TRUNNER_XXX variables above already defined
364$$(eval $$(call DEFINE_TEST_RUNNER_RULES,$1,$2))
365
366endef
367

--- 32 unchanged lines hidden (view full) ---

400 $(Q)$$(BPFTOOL) gen skeleton $$(<:.o=.linked3.o) name $$(notdir $$(<:.o=)) > $$@
401
402$(TRUNNER_BPF_LSKELS): %.lskel.h: %.o $(BPFTOOL) | $(TRUNNER_OUTPUT)
403 $$(call msg,GEN-SKEL,$(TRUNNER_BINARY),$$@)
404 $(Q)$$(BPFTOOL) gen object $$(<:.o=.linked1.o) $$<
405 $(Q)$$(BPFTOOL) gen object $$(<:.o=.linked2.o) $$(<:.o=.linked1.o)
406 $(Q)$$(BPFTOOL) gen object $$(<:.o=.linked3.o) $$(<:.o=.linked2.o)
407 $(Q)diff $$(<:.o=.linked2.o) $$(<:.o=.linked3.o)
397 $(Q)$$(BPFTOOL) gen skeleton -L $$(<:.o=.linked3.o) name $$(notdir $$(<:.o=)) > $$@
408 $(Q)$$(BPFTOOL) gen skeleton -L $$(<:.o=.linked3.o) name $$(notdir $$(<:.o=_lskel)) > $$@
398
399$(TRUNNER_BPF_SKELS_LINKED): $(TRUNNER_BPF_OBJS) $(BPFTOOL) | $(TRUNNER_OUTPUT)
400 $$(call msg,LINK-BPF,$(TRUNNER_BINARY),$$(@:.skel.h=.o))
401 $(Q)$$(BPFTOOL) gen object $$(@:.skel.h=.linked1.o) $$(addprefix $(TRUNNER_OUTPUT)/,$$($$(@F)-deps))
402 $(Q)$$(BPFTOOL) gen object $$(@:.skel.h=.linked2.o) $$(@:.skel.h=.linked1.o)
403 $(Q)$$(BPFTOOL) gen object $$(@:.skel.h=.linked3.o) $$(@:.skel.h=.linked2.o)
404 $(Q)diff $$(@:.skel.h=.linked2.o) $$(@:.skel.h=.linked3.o)
405 $$(call msg,GEN-SKEL,$(TRUNNER_BINARY),$$@)
406 $(Q)$$(BPFTOOL) gen skeleton $$(@:.skel.h=.linked3.o) name $$(notdir $$(@:.skel.h=)) > $$@
407endif
408
409# ensure we set up tests.h header generation rule just once
410ifeq ($($(TRUNNER_TESTS_DIR)-tests-hdr),)
411$(TRUNNER_TESTS_DIR)-tests-hdr := y
412$(TRUNNER_TESTS_HDR): $(TRUNNER_TESTS_DIR)/*.c
413 $$(call msg,TEST-HDR,$(TRUNNER_BINARY),$$@)
409
410$(TRUNNER_BPF_SKELS_LINKED): $(TRUNNER_BPF_OBJS) $(BPFTOOL) | $(TRUNNER_OUTPUT)
411 $$(call msg,LINK-BPF,$(TRUNNER_BINARY),$$(@:.skel.h=.o))
412 $(Q)$$(BPFTOOL) gen object $$(@:.skel.h=.linked1.o) $$(addprefix $(TRUNNER_OUTPUT)/,$$($$(@F)-deps))
413 $(Q)$$(BPFTOOL) gen object $$(@:.skel.h=.linked2.o) $$(@:.skel.h=.linked1.o)
414 $(Q)$$(BPFTOOL) gen object $$(@:.skel.h=.linked3.o) $$(@:.skel.h=.linked2.o)
415 $(Q)diff $$(@:.skel.h=.linked2.o) $$(@:.skel.h=.linked3.o)
416 $$(call msg,GEN-SKEL,$(TRUNNER_BINARY),$$@)
417 $(Q)$$(BPFTOOL) gen skeleton $$(@:.skel.h=.linked3.o) name $$(notdir $$(@:.skel.h=)) > $$@
418endif
419
420# ensure we set up tests.h header generation rule just once
421ifeq ($($(TRUNNER_TESTS_DIR)-tests-hdr),)
422$(TRUNNER_TESTS_DIR)-tests-hdr := y
423$(TRUNNER_TESTS_HDR): $(TRUNNER_TESTS_DIR)/*.c
424 $$(call msg,TEST-HDR,$(TRUNNER_BINARY),$$@)
414 $$(shell ( cd $(TRUNNER_TESTS_DIR); \
415 echo '/* Generated header, do not edit */'; \
416 ls *.c 2> /dev/null | \
417 sed -e 's@\([^\.]*\)\.c@DEFINE_TEST(\1)@'; \
425 $$(shell (echo '/* Generated header, do not edit */'; \
426 sed -n -E 's/^void (serial_)?test_([a-zA-Z0-9_]+)\((void)?\).*/DEFINE_TEST(\2)/p' \
427 $(TRUNNER_TESTS_DIR)/*.c | sort ; \
418 ) > $$@)
419endif
420
421# compile individual test files
422# Note: we cd into output directory to ensure embedded BPF object is found
423$(TRUNNER_TEST_OBJS): $(TRUNNER_OUTPUT)/%.test.o: \
424 $(TRUNNER_TESTS_DIR)/%.c \
425 $(TRUNNER_EXTRA_HDRS) \

--- 22 unchanged lines hidden (view full) ---

448endif
449
450$(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS) \
451 $(TRUNNER_EXTRA_OBJS) $$(BPFOBJ) \
452 $(RESOLVE_BTFIDS) \
453 | $(TRUNNER_BINARY)-extras
454 $$(call msg,BINARY,,$$@)
455 $(Q)$$(CC) $$(CFLAGS) $$(filter %.a %.o,$$^) $$(LDLIBS) -o $$@
428 ) > $$@)
429endif
430
431# compile individual test files
432# Note: we cd into output directory to ensure embedded BPF object is found
433$(TRUNNER_TEST_OBJS): $(TRUNNER_OUTPUT)/%.test.o: \
434 $(TRUNNER_TESTS_DIR)/%.c \
435 $(TRUNNER_EXTRA_HDRS) \

--- 22 unchanged lines hidden (view full) ---

458endif
459
460$(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS) \
461 $(TRUNNER_EXTRA_OBJS) $$(BPFOBJ) \
462 $(RESOLVE_BTFIDS) \
463 | $(TRUNNER_BINARY)-extras
464 $$(call msg,BINARY,,$$@)
465 $(Q)$$(CC) $$(CFLAGS) $$(filter %.a %.o,$$^) $$(LDLIBS) -o $$@
456 $(Q)$(RESOLVE_BTFIDS) --no-fail --btf $(TRUNNER_OUTPUT)/btf_data.o $$@
466 $(Q)$(RESOLVE_BTFIDS) --btf $(TRUNNER_OUTPUT)/btf_data.o $$@
457
458endef
459
460# Define test_progs test runner.
461TRUNNER_TESTS_DIR := prog_tests
462TRUNNER_BPF_PROGS_DIR := progs
463TRUNNER_EXTRA_SOURCES := test_progs.c cgroup_helpers.c trace_helpers.c \
464 network_helpers.c testing_helpers.c \

--- 43 unchanged lines hidden (view full) ---

508 $(Q)$(CC) $(CFLAGS) $(filter %.a %.o %.c,$^) $(LDLIBS) -o $@
509
510# Make sure we are able to include and link libbpf against c++.
511$(OUTPUT)/test_cpp: test_cpp.cpp $(OUTPUT)/test_core_extern.skel.h $(BPFOBJ)
512 $(call msg,CXX,,$@)
513 $(Q)$(CXX) $(CFLAGS) $(filter %.a %.o %.cpp,$^) $(LDLIBS) -o $@
514
515# Benchmark runner
467
468endef
469
470# Define test_progs test runner.
471TRUNNER_TESTS_DIR := prog_tests
472TRUNNER_BPF_PROGS_DIR := progs
473TRUNNER_EXTRA_SOURCES := test_progs.c cgroup_helpers.c trace_helpers.c \
474 network_helpers.c testing_helpers.c \

--- 43 unchanged lines hidden (view full) ---

518 $(Q)$(CC) $(CFLAGS) $(filter %.a %.o %.c,$^) $(LDLIBS) -o $@
519
520# Make sure we are able to include and link libbpf against c++.
521$(OUTPUT)/test_cpp: test_cpp.cpp $(OUTPUT)/test_core_extern.skel.h $(BPFOBJ)
522 $(call msg,CXX,,$@)
523 $(Q)$(CXX) $(CFLAGS) $(filter %.a %.o %.cpp,$^) $(LDLIBS) -o $@
524
525# Benchmark runner
516$(OUTPUT)/bench_%.o: benchs/bench_%.c bench.h
526$(OUTPUT)/bench_%.o: benchs/bench_%.c bench.h $(BPFOBJ)
517 $(call msg,CC,,$@)
527 $(call msg,CC,,$@)
518 $(Q)$(CC) $(CFLAGS) -c $(filter %.c,$^) $(LDLIBS) -o $@
528 $(Q)$(CC) $(CFLAGS) -O2 -c $(filter %.c,$^) $(LDLIBS) -o $@
519$(OUTPUT)/bench_rename.o: $(OUTPUT)/test_overhead.skel.h
520$(OUTPUT)/bench_trigger.o: $(OUTPUT)/trigger_bench.skel.h
521$(OUTPUT)/bench_ringbufs.o: $(OUTPUT)/ringbuf_bench.skel.h \
522 $(OUTPUT)/perfbuf_bench.skel.h
529$(OUTPUT)/bench_rename.o: $(OUTPUT)/test_overhead.skel.h
530$(OUTPUT)/bench_trigger.o: $(OUTPUT)/trigger_bench.skel.h
531$(OUTPUT)/bench_ringbufs.o: $(OUTPUT)/ringbuf_bench.skel.h \
532 $(OUTPUT)/perfbuf_bench.skel.h
523$(OUTPUT)/bench.o: bench.h testing_helpers.h
533$(OUTPUT)/bench_bloom_filter_map.o: $(OUTPUT)/bloom_filter_bench.skel.h
534$(OUTPUT)/bench.o: bench.h testing_helpers.h $(BPFOBJ)
524$(OUTPUT)/bench: LDLIBS += -lm
525$(OUTPUT)/bench: $(OUTPUT)/bench.o $(OUTPUT)/testing_helpers.o \
526 $(OUTPUT)/bench_count.o \
527 $(OUTPUT)/bench_rename.o \
528 $(OUTPUT)/bench_trigger.o \
535$(OUTPUT)/bench: LDLIBS += -lm
536$(OUTPUT)/bench: $(OUTPUT)/bench.o $(OUTPUT)/testing_helpers.o \
537 $(OUTPUT)/bench_count.o \
538 $(OUTPUT)/bench_rename.o \
539 $(OUTPUT)/bench_trigger.o \
529 $(OUTPUT)/bench_ringbufs.o
540 $(OUTPUT)/bench_ringbufs.o \
541 $(OUTPUT)/bench_bloom_filter_map.o
530 $(call msg,BINARY,,$@)
531 $(Q)$(CC) $(LDFLAGS) -o $@ $(filter %.a %.o,$^) $(LDLIBS)
532
533EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \
534 prog_tests/tests.h map_tests/tests.h verifier/tests.h \
535 feature \
536 $(addprefix $(OUTPUT)/,*.o *.skel.h *.lskel.h no_alu32 bpf_gcc bpf_testmod.ko)
537
538.PHONY: docs docs-clean
542 $(call msg,BINARY,,$@)
543 $(Q)$(CC) $(LDFLAGS) -o $@ $(filter %.a %.o,$^) $(LDLIBS)
544
545EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \
546 prog_tests/tests.h map_tests/tests.h verifier/tests.h \
547 feature \
548 $(addprefix $(OUTPUT)/,*.o *.skel.h *.lskel.h no_alu32 bpf_gcc bpf_testmod.ko)
549
550.PHONY: docs docs-clean