Makefile (61b7369483efb5e0a9f3b48e75fac00d46d661e0) Makefile (a5d0c26a2784890d803fca5e0dd27c590472b43d)
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 .)
9TOOLSDIR := $(abspath ../../..)
10LIBDIR := $(TOOLSDIR)/lib
11BPFDIR := $(LIBDIR)/bpf
12TOOLSINCDIR := $(TOOLSDIR)/include
13BPFTOOLDIR := $(TOOLSDIR)/bpf/bpftool
14APIDIR := $(TOOLSINCDIR)/uapi
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 .)
9TOOLSDIR := $(abspath ../../..)
10LIBDIR := $(TOOLSDIR)/lib
11BPFDIR := $(LIBDIR)/bpf
12TOOLSINCDIR := $(TOOLSDIR)/include
13BPFTOOLDIR := $(TOOLSDIR)/bpf/bpftool
14APIDIR := $(TOOLSINCDIR)/uapi
15ifneq ($(O),)
16GENDIR := $(O)/include/generated
17else
15GENDIR := $(abspath ../../../../include/generated)
18GENDIR := $(abspath ../../../../include/generated)
19endif
16GENHDR := $(GENDIR)/autoconf.h
17HOSTPKG_CONFIG := pkg-config
18
19ifneq ($(wildcard $(GENHDR)),)
20 GENFLAGS := -DHAVE_GENHDR
21endif
22
23BPF_GCC ?= $(shell command -v bpf-gcc;)
24SAN_CFLAGS ?=
25SAN_LDFLAGS ?= $(SAN_CFLAGS)
26CFLAGS += -g -O0 -rdynamic -Wall -Werror $(GENFLAGS) $(SAN_CFLAGS) \
27 -I$(CURDIR) -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) \
28 -I$(TOOLSINCDIR) -I$(APIDIR) -I$(OUTPUT)
29LDFLAGS += $(SAN_LDFLAGS)
30LDLIBS += -lelf -lz -lrt -lpthread
31
20GENHDR := $(GENDIR)/autoconf.h
21HOSTPKG_CONFIG := pkg-config
22
23ifneq ($(wildcard $(GENHDR)),)
24 GENFLAGS := -DHAVE_GENHDR
25endif
26
27BPF_GCC ?= $(shell command -v bpf-gcc;)
28SAN_CFLAGS ?=
29SAN_LDFLAGS ?= $(SAN_CFLAGS)
30CFLAGS += -g -O0 -rdynamic -Wall -Werror $(GENFLAGS) $(SAN_CFLAGS) \
31 -I$(CURDIR) -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) \
32 -I$(TOOLSINCDIR) -I$(APIDIR) -I$(OUTPUT)
33LDFLAGS += $(SAN_LDFLAGS)
34LDLIBS += -lelf -lz -lrt -lpthread
35
32# Silence some warnings when compiled with clang
33ifneq ($(LLVM),)
36ifneq ($(LLVM),)
37# Silence some warnings when compiled with clang
34CFLAGS += -Wno-unused-command-line-argument
38CFLAGS += -Wno-unused-command-line-argument
39# Check whether cpu=v4 is supported or not by clang
40ifneq ($(shell $(CLANG) --target=bpf -mcpu=help 2>&1 | grep 'v4'),)
41CLANG_CPUV4 := 1
35endif
42endif
43endif
36
37# Order correspond to 'make run_tests' order
38TEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map test_progs \
39 test_dev_cgroup \
40 test_sock test_sockmap get_cgroup_id_user \
41 test_cgroup_storage \
42 test_tcpnotify_user test_sysctl \
43 test_progs-no_alu32
44
45# Also test bpf-gcc, if present
46ifneq ($(BPF_GCC),)
47TEST_GEN_PROGS += test_progs-bpf_gcc
48endif
49
44
45# Order correspond to 'make run_tests' order
46TEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map test_progs \
47 test_dev_cgroup \
48 test_sock test_sockmap get_cgroup_id_user \
49 test_cgroup_storage \
50 test_tcpnotify_user test_sysctl \
51 test_progs-no_alu32
52
53# Also test bpf-gcc, if present
54ifneq ($(BPF_GCC),)
55TEST_GEN_PROGS += test_progs-bpf_gcc
56endif
57
58ifneq ($(CLANG_CPUV4),)
59TEST_GEN_PROGS += test_progs-cpuv4
60endif
61
50TEST_GEN_FILES = test_lwt_ip_encap.bpf.o test_tc_edt.bpf.o
51TEST_FILES = xsk_prereqs.sh $(wildcard progs/btf_dump_test_case_*.c)
52
53# Order correspond to 'make run_tests' order
54TEST_PROGS := test_kmod.sh \
55 test_xdp_redirect.sh \
56 test_xdp_redirect_multi.sh \
57 test_xdp_meta.sh \

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

326 $(TOOLSDIR)/lib/ctype.c \
327 $(TOOLSDIR)/lib/str_error_r.c
328 $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/resolve_btfids \
329 CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \
330 LIBBPF_INCLUDE=$(HOST_INCLUDE_DIR) \
331 OUTPUT=$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=$(HOST_BPFOBJ)
332
333# Get Clang's default includes on this system, as opposed to those seen by
62TEST_GEN_FILES = test_lwt_ip_encap.bpf.o test_tc_edt.bpf.o
63TEST_FILES = xsk_prereqs.sh $(wildcard progs/btf_dump_test_case_*.c)
64
65# Order correspond to 'make run_tests' order
66TEST_PROGS := test_kmod.sh \
67 test_xdp_redirect.sh \
68 test_xdp_redirect_multi.sh \
69 test_xdp_meta.sh \

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

338 $(TOOLSDIR)/lib/ctype.c \
339 $(TOOLSDIR)/lib/str_error_r.c
340 $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/resolve_btfids \
341 CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \
342 LIBBPF_INCLUDE=$(HOST_INCLUDE_DIR) \
343 OUTPUT=$(HOST_BUILD_DIR)/resolve_btfids/ BPFOBJ=$(HOST_BPFOBJ)
344
345# Get Clang's default includes on this system, as opposed to those seen by
334# '-target bpf'. This fixes "missing" files on some architectures/distros,
346# '--target=bpf'. This fixes "missing" files on some architectures/distros,
335# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc.
336#
337# Use '-idirafter': Don't interfere with include mechanics except where the
338# build would have failed anyways.
339define get_sys_includes
340$(shell $(1) $(2) -v -E - </dev/null 2>&1 \
341 | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \
342$(shell $(1) $(2) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=%d -D__BITS_PER_LONG=%d", $$3, $$3)}') \

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

367$(OUTPUT)/cgroup_getset_retval_hooks.o: cgroup_getset_retval_hooks.h
368
369# Build BPF object using Clang
370# $1 - input .c file
371# $2 - output .o file
372# $3 - CFLAGS
373define CLANG_BPF_BUILD_RULE
374 $(call msg,CLNG-BPF,$(TRUNNER_BINARY),$2)
347# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc.
348#
349# Use '-idirafter': Don't interfere with include mechanics except where the
350# build would have failed anyways.
351define get_sys_includes
352$(shell $(1) $(2) -v -E - </dev/null 2>&1 \
353 | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \
354$(shell $(1) $(2) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=%d -D__BITS_PER_LONG=%d", $$3, $$3)}') \

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

379$(OUTPUT)/cgroup_getset_retval_hooks.o: cgroup_getset_retval_hooks.h
380
381# Build BPF object using Clang
382# $1 - input .c file
383# $2 - output .o file
384# $3 - CFLAGS
385define CLANG_BPF_BUILD_RULE
386 $(call msg,CLNG-BPF,$(TRUNNER_BINARY),$2)
375 $(Q)$(CLANG) $3 -O2 -target bpf -c $1 -mcpu=v3 -o $2
387 $(Q)$(CLANG) $3 -O2 --target=bpf -c $1 -mcpu=v3 -o $2
376endef
377# Similar to CLANG_BPF_BUILD_RULE, but with disabled alu32
378define CLANG_NOALU32_BPF_BUILD_RULE
379 $(call msg,CLNG-BPF,$(TRUNNER_BINARY),$2)
388endef
389# Similar to CLANG_BPF_BUILD_RULE, but with disabled alu32
390define CLANG_NOALU32_BPF_BUILD_RULE
391 $(call msg,CLNG-BPF,$(TRUNNER_BINARY),$2)
380 $(Q)$(CLANG) $3 -O2 -target bpf -c $1 -mcpu=v2 -o $2
392 $(Q)$(CLANG) $3 -O2 --target=bpf -c $1 -mcpu=v2 -o $2
381endef
393endef
394# Similar to CLANG_BPF_BUILD_RULE, but with cpu-v4
395define CLANG_CPUV4_BPF_BUILD_RULE
396 $(call msg,CLNG-BPF,$(TRUNNER_BINARY),$2)
397 $(Q)$(CLANG) $3 -O2 --target=bpf -c $1 -mcpu=v4 -o $2
398endef
382# Build BPF object using GCC
383define GCC_BPF_BUILD_RULE
384 $(call msg,GCC-BPF,$(TRUNNER_BINARY),$2)
385 $(Q)$(BPF_GCC) $3 -O2 -c $1 -o $2
386endef
387
388SKEL_BLACKLIST := btf__% test_pinning_invalid.c test_sk_assign.c
389

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

416xdp_features.skel.h-deps := xdp_features.bpf.o
417
418LINKED_BPF_SRCS := $(patsubst %.bpf.o,%.c,$(foreach skel,$(LINKED_SKELS),$($(skel)-deps)))
419
420# Set up extra TRUNNER_XXX "temporary" variables in the environment (relies on
421# $eval()) and pass control to DEFINE_TEST_RUNNER_RULES.
422# Parameters:
423# $1 - test runner base binary name (e.g., test_progs)
399# Build BPF object using GCC
400define GCC_BPF_BUILD_RULE
401 $(call msg,GCC-BPF,$(TRUNNER_BINARY),$2)
402 $(Q)$(BPF_GCC) $3 -O2 -c $1 -o $2
403endef
404
405SKEL_BLACKLIST := btf__% test_pinning_invalid.c test_sk_assign.c
406

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

433xdp_features.skel.h-deps := xdp_features.bpf.o
434
435LINKED_BPF_SRCS := $(patsubst %.bpf.o,%.c,$(foreach skel,$(LINKED_SKELS),$($(skel)-deps)))
436
437# Set up extra TRUNNER_XXX "temporary" variables in the environment (relies on
438# $eval()) and pass control to DEFINE_TEST_RUNNER_RULES.
439# Parameters:
440# $1 - test runner base binary name (e.g., test_progs)
424# $2 - test runner extra "flavor" (e.g., no_alu32, gcc-bpf, etc)
441# $2 - test runner extra "flavor" (e.g., no_alu32, cpuv4, gcc-bpf, etc)
425define DEFINE_TEST_RUNNER
426
427TRUNNER_OUTPUT := $(OUTPUT)$(if $2,/)$2
428TRUNNER_BINARY := $1$(if $2,-)$2
429TRUNNER_TEST_OBJS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.test.o, \
430 $$(notdir $$(wildcard $(TRUNNER_TESTS_DIR)/*.c)))
431TRUNNER_EXTRA_OBJS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.o, \
432 $$(filter %.c,$(TRUNNER_EXTRA_SOURCES)))

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

444# Evaluate rules now with extra TRUNNER_XXX variables above already defined
445$$(eval $$(call DEFINE_TEST_RUNNER_RULES,$1,$2))
446
447endef
448
449# Using TRUNNER_XXX variables, provided by callers of DEFINE_TEST_RUNNER and
450# set up by DEFINE_TEST_RUNNER itself, create test runner build rules with:
451# $1 - test runner base binary name (e.g., test_progs)
442define DEFINE_TEST_RUNNER
443
444TRUNNER_OUTPUT := $(OUTPUT)$(if $2,/)$2
445TRUNNER_BINARY := $1$(if $2,-)$2
446TRUNNER_TEST_OBJS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.test.o, \
447 $$(notdir $$(wildcard $(TRUNNER_TESTS_DIR)/*.c)))
448TRUNNER_EXTRA_OBJS := $$(patsubst %.c,$$(TRUNNER_OUTPUT)/%.o, \
449 $$(filter %.c,$(TRUNNER_EXTRA_SOURCES)))

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

461# Evaluate rules now with extra TRUNNER_XXX variables above already defined
462$$(eval $$(call DEFINE_TEST_RUNNER_RULES,$1,$2))
463
464endef
465
466# Using TRUNNER_XXX variables, provided by callers of DEFINE_TEST_RUNNER and
467# set up by DEFINE_TEST_RUNNER itself, create test runner build rules with:
468# $1 - test runner base binary name (e.g., test_progs)
452# $2 - test runner extra "flavor" (e.g., no_alu32, gcc-bpf, etc)
469# $2 - test runner extra "flavor" (e.g., no_alu32, cpuv4, gcc-bpf, etc)
453define DEFINE_TEST_RUNNER_RULES
454
455ifeq ($($(TRUNNER_OUTPUT)-dir),)
456$(TRUNNER_OUTPUT)-dir := y
457$(TRUNNER_OUTPUT):
458 $$(call msg,MKDIR,,$$@)
459 $(Q)mkdir -p $$@
460endif

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

575TRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(CLANG_CFLAGS) -DENABLE_ATOMICS_TESTS
576$(eval $(call DEFINE_TEST_RUNNER,test_progs))
577
578# Define test_progs-no_alu32 test runner.
579TRUNNER_BPF_BUILD_RULE := CLANG_NOALU32_BPF_BUILD_RULE
580TRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(CLANG_CFLAGS)
581$(eval $(call DEFINE_TEST_RUNNER,test_progs,no_alu32))
582
470define DEFINE_TEST_RUNNER_RULES
471
472ifeq ($($(TRUNNER_OUTPUT)-dir),)
473$(TRUNNER_OUTPUT)-dir := y
474$(TRUNNER_OUTPUT):
475 $$(call msg,MKDIR,,$$@)
476 $(Q)mkdir -p $$@
477endif

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

592TRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(CLANG_CFLAGS) -DENABLE_ATOMICS_TESTS
593$(eval $(call DEFINE_TEST_RUNNER,test_progs))
594
595# Define test_progs-no_alu32 test runner.
596TRUNNER_BPF_BUILD_RULE := CLANG_NOALU32_BPF_BUILD_RULE
597TRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(CLANG_CFLAGS)
598$(eval $(call DEFINE_TEST_RUNNER,test_progs,no_alu32))
599
600# Define test_progs-cpuv4 test runner.
601ifneq ($(CLANG_CPUV4),)
602TRUNNER_BPF_BUILD_RULE := CLANG_CPUV4_BPF_BUILD_RULE
603TRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(CLANG_CFLAGS)
604$(eval $(call DEFINE_TEST_RUNNER,test_progs,cpuv4))
605endif
606
583# Define test_progs BPF-GCC-flavored test runner.
584ifneq ($(BPF_GCC),)
585TRUNNER_BPF_BUILD_RULE := GCC_BPF_BUILD_RULE
586TRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(call get_sys_includes,gcc,)
587$(eval $(call DEFINE_TEST_RUNNER,test_progs,bpf_gcc))
588endif
589
590# Define test_maps test runner.

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

639$(OUTPUT)/bench_bloom_filter_map.o: $(OUTPUT)/bloom_filter_bench.skel.h
640$(OUTPUT)/bench_bpf_loop.o: $(OUTPUT)/bpf_loop_bench.skel.h
641$(OUTPUT)/bench_strncmp.o: $(OUTPUT)/strncmp_bench.skel.h
642$(OUTPUT)/bench_bpf_hashmap_full_update.o: $(OUTPUT)/bpf_hashmap_full_update_bench.skel.h
643$(OUTPUT)/bench_local_storage.o: $(OUTPUT)/local_storage_bench.skel.h
644$(OUTPUT)/bench_local_storage_rcu_tasks_trace.o: $(OUTPUT)/local_storage_rcu_tasks_trace_bench.skel.h
645$(OUTPUT)/bench_local_storage_create.o: $(OUTPUT)/bench_local_storage_create.skel.h
646$(OUTPUT)/bench_bpf_hashmap_lookup.o: $(OUTPUT)/bpf_hashmap_lookup.skel.h
607# Define test_progs BPF-GCC-flavored test runner.
608ifneq ($(BPF_GCC),)
609TRUNNER_BPF_BUILD_RULE := GCC_BPF_BUILD_RULE
610TRUNNER_BPF_CFLAGS := $(BPF_CFLAGS) $(call get_sys_includes,gcc,)
611$(eval $(call DEFINE_TEST_RUNNER,test_progs,bpf_gcc))
612endif
613
614# Define test_maps test runner.

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

663$(OUTPUT)/bench_bloom_filter_map.o: $(OUTPUT)/bloom_filter_bench.skel.h
664$(OUTPUT)/bench_bpf_loop.o: $(OUTPUT)/bpf_loop_bench.skel.h
665$(OUTPUT)/bench_strncmp.o: $(OUTPUT)/strncmp_bench.skel.h
666$(OUTPUT)/bench_bpf_hashmap_full_update.o: $(OUTPUT)/bpf_hashmap_full_update_bench.skel.h
667$(OUTPUT)/bench_local_storage.o: $(OUTPUT)/local_storage_bench.skel.h
668$(OUTPUT)/bench_local_storage_rcu_tasks_trace.o: $(OUTPUT)/local_storage_rcu_tasks_trace_bench.skel.h
669$(OUTPUT)/bench_local_storage_create.o: $(OUTPUT)/bench_local_storage_create.skel.h
670$(OUTPUT)/bench_bpf_hashmap_lookup.o: $(OUTPUT)/bpf_hashmap_lookup.skel.h
671$(OUTPUT)/bench_htab_mem.o: $(OUTPUT)/htab_mem_bench.skel.h
647$(OUTPUT)/bench.o: bench.h testing_helpers.h $(BPFOBJ)
648$(OUTPUT)/bench: LDLIBS += -lm
649$(OUTPUT)/bench: $(OUTPUT)/bench.o \
650 $(TESTING_HELPERS) \
651 $(TRACE_HELPERS) \
672$(OUTPUT)/bench.o: bench.h testing_helpers.h $(BPFOBJ)
673$(OUTPUT)/bench: LDLIBS += -lm
674$(OUTPUT)/bench: $(OUTPUT)/bench.o \
675 $(TESTING_HELPERS) \
676 $(TRACE_HELPERS) \
677 $(CGROUP_HELPERS) \
652 $(OUTPUT)/bench_count.o \
653 $(OUTPUT)/bench_rename.o \
654 $(OUTPUT)/bench_trigger.o \
655 $(OUTPUT)/bench_ringbufs.o \
656 $(OUTPUT)/bench_bloom_filter_map.o \
657 $(OUTPUT)/bench_bpf_loop.o \
658 $(OUTPUT)/bench_strncmp.o \
659 $(OUTPUT)/bench_bpf_hashmap_full_update.o \
660 $(OUTPUT)/bench_local_storage.o \
661 $(OUTPUT)/bench_local_storage_rcu_tasks_trace.o \
662 $(OUTPUT)/bench_bpf_hashmap_lookup.o \
663 $(OUTPUT)/bench_local_storage_create.o \
678 $(OUTPUT)/bench_count.o \
679 $(OUTPUT)/bench_rename.o \
680 $(OUTPUT)/bench_trigger.o \
681 $(OUTPUT)/bench_ringbufs.o \
682 $(OUTPUT)/bench_bloom_filter_map.o \
683 $(OUTPUT)/bench_bpf_loop.o \
684 $(OUTPUT)/bench_strncmp.o \
685 $(OUTPUT)/bench_bpf_hashmap_full_update.o \
686 $(OUTPUT)/bench_local_storage.o \
687 $(OUTPUT)/bench_local_storage_rcu_tasks_trace.o \
688 $(OUTPUT)/bench_bpf_hashmap_lookup.o \
689 $(OUTPUT)/bench_local_storage_create.o \
690 $(OUTPUT)/bench_htab_mem.o \
664 #
665 $(call msg,BINARY,,$@)
666 $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@
667
668$(OUTPUT)/veristat.o: $(BPFOBJ)
669$(OUTPUT)/veristat: $(OUTPUT)/veristat.o
670 $(call msg,BINARY,,$@)
671 $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@
672
673EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \
674 prog_tests/tests.h map_tests/tests.h verifier/tests.h \
675 feature bpftool \
676 $(addprefix $(OUTPUT)/,*.o *.skel.h *.lskel.h *.subskel.h \
691 #
692 $(call msg,BINARY,,$@)
693 $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@
694
695$(OUTPUT)/veristat.o: $(BPFOBJ)
696$(OUTPUT)/veristat: $(OUTPUT)/veristat.o
697 $(call msg,BINARY,,$@)
698 $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@
699
700EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \
701 prog_tests/tests.h map_tests/tests.h verifier/tests.h \
702 feature bpftool \
703 $(addprefix $(OUTPUT)/,*.o *.skel.h *.lskel.h *.subskel.h \
677 no_alu32 bpf_gcc bpf_testmod.ko \
704 no_alu32 cpuv4 bpf_gcc bpf_testmod.ko \
678 liburandom_read.so)
679
680.PHONY: docs docs-clean
681
682# Delete partially updated (corrupted) files on error
683.DELETE_ON_ERROR:
705 liburandom_read.so)
706
707.PHONY: docs docs-clean
708
709# Delete partially updated (corrupted) files on error
710.DELETE_ON_ERROR: