|
1 | | -#taken from /samples/bpf/Makefile and removed all targets |
2 | | - |
3 | | -# SPDX-License-Identifier: GPL-2.0 |
4 | | - |
5 | | -BPF_SAMPLES_PATH ?= $(abspath $(srctree)/$(src)) |
6 | | -TOOLS_PATH := $(BPF_SAMPLES_PATH)/../../tools |
7 | | - |
8 | | -# Libbpf dependencies |
9 | | -LIBBPF = $(TOOLS_PATH)/lib/bpf/libbpf.a |
10 | | - |
11 | | -CGROUP_HELPERS := ../../tools/testing/selftests/bpf/cgroup_helpers.o |
12 | | -TRACE_HELPERS := ../../tools/testing/selftests/bpf/trace_helpers.o |
13 | | - |
14 | | -always-y += opensnitch.o opensnitch-dns.o opensnitch-procs.o |
15 | | - |
16 | | -ifeq ($(ARCH), arm) |
17 | | -# Strip all except -D__LINUX_ARM_ARCH__ option needed to handle linux |
18 | | -# headers when arm instruction set identification is requested. |
19 | | -ARM_ARCH_SELECTOR := $(filter -D__LINUX_ARM_ARCH__%, $(KBUILD_CFLAGS)) |
20 | | -BPF_EXTRA_CFLAGS := $(ARM_ARCH_SELECTOR) |
21 | | -TPROGS_CFLAGS += $(ARM_ARCH_SELECTOR) |
22 | | -endif |
23 | | - |
24 | | -TPROGS_CFLAGS += -Wall -O2 |
25 | | -TPROGS_CFLAGS += -Wmissing-prototypes |
26 | | -TPROGS_CFLAGS += -Wstrict-prototypes |
27 | | - |
28 | | -TPROGS_CFLAGS += -I$(objtree)/usr/include |
29 | | -TPROGS_CFLAGS += -I$(srctree)/tools/testing/selftests/bpf/ |
30 | | -TPROGS_CFLAGS += -I$(srctree)/tools/lib/ |
31 | | -TPROGS_CFLAGS += -I$(srctree)/tools/include |
32 | | -TPROGS_CFLAGS += -I$(srctree)/tools/perf |
33 | | -TPROGS_CFLAGS += -DHAVE_ATTR_TEST=0 |
34 | | - |
35 | | -ifdef SYSROOT |
36 | | -TPROGS_CFLAGS += --sysroot=$(SYSROOT) |
37 | | -TPROGS_LDFLAGS := -L$(SYSROOT)/usr/lib |
38 | | -endif |
39 | | - |
40 | | -TPROGCFLAGS_bpf_load.o += -Wno-unused-variable |
41 | | - |
42 | | -TPROGS_LDLIBS += $(LIBBPF) -lelf -lz |
43 | | -TPROGLDLIBS_tracex4 += -lrt |
44 | | -TPROGLDLIBS_trace_output += -lrt |
45 | | -TPROGLDLIBS_map_perf_test += -lrt |
46 | | -TPROGLDLIBS_test_overhead += -lrt |
47 | | -TPROGLDLIBS_xdpsock += -pthread |
48 | | - |
49 | | -# Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline: |
50 | | -# make M=samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang |
51 | | -LLC ?= llc |
| 1 | +# OpenSnitch - 2023 |
| 2 | +# |
| 3 | +# On Debian based distros we need the following 2 directories. |
| 4 | +# Otherwise, just use the kernel headers from the kernel sources. |
| 5 | +# |
| 6 | +KERNEL_DIR ?= /lib/modules/$(shell uname -r)/source |
| 7 | +KERNEL_HEADERS ?= /usr/src/linux-headers-$(shell uname -r)/ |
52 | 8 | CLANG ?= clang |
53 | | -LLVM_OBJCOPY ?= llvm-objcopy |
54 | | -BTF_PAHOLE ?= pahole |
55 | | - |
56 | | -# Detect that we're cross compiling and use the cross compiler |
57 | | -ifdef CROSS_COMPILE |
58 | | -CLANG_ARCH_ARGS = --target=$(notdir $(CROSS_COMPILE:%-=%)) |
59 | | -endif |
60 | | - |
61 | | -# Don't evaluate probes and warnings if we need to run make recursively |
62 | | -ifneq ($(src),) |
63 | | -HDR_PROBE := $(shell printf "\#include <linux/types.h>\n struct list_head { int a; }; int main() { return 0; }" | \ |
64 | | - $(CC) $(TPROGS_CFLAGS) $(TPROGS_LDFLAGS) -x c - \ |
65 | | - -o /dev/null 2>/dev/null && echo okay) |
66 | | - |
67 | | -ifeq ($(HDR_PROBE),) |
68 | | -$(warning WARNING: Detected possible issues with include path.) |
69 | | -$(warning WARNING: Please install kernel headers locally (make headers_install).) |
70 | | -endif |
71 | | - |
72 | | -BTF_LLC_PROBE := $(shell $(LLC) -march=bpf -mattr=help 2>&1 | grep dwarfris) |
73 | | -BTF_PAHOLE_PROBE := $(shell $(BTF_PAHOLE) --help 2>&1 | grep BTF) |
74 | | -BTF_OBJCOPY_PROBE := $(shell $(LLVM_OBJCOPY) --help 2>&1 | grep -i 'usage.*llvm') |
75 | | -BTF_LLVM_PROBE := $(shell echo "int main() { return 0; }" | \ |
76 | | - $(CLANG) -target bpf -O2 -g -c -x c - -o ./llvm_btf_verify.o; \ |
77 | | - readelf -S ./llvm_btf_verify.o | grep BTF; \ |
78 | | - /bin/rm -f ./llvm_btf_verify.o) |
79 | | - |
80 | | -BPF_EXTRA_CFLAGS += -fno-stack-protector |
81 | | -ifneq ($(BTF_LLVM_PROBE),) |
82 | | - BPF_EXTRA_CFLAGS += -g |
83 | | -else |
84 | | -ifneq ($(and $(BTF_LLC_PROBE),$(BTF_PAHOLE_PROBE),$(BTF_OBJCOPY_PROBE)),) |
85 | | - BPF_EXTRA_CFLAGS += -g |
86 | | - LLC_FLAGS += -mattr=dwarfris |
87 | | - DWARF2BTF = y |
88 | | -endif |
89 | | -endif |
90 | | -endif |
91 | | - |
92 | | -# Trick to allow make to be run from this directory |
93 | | -all: |
94 | | - $(MAKE) -C ../../ M=$(CURDIR) BPF_SAMPLES_PATH=$(CURDIR) |
95 | | - |
| 9 | +LLC ?= llc |
| 10 | +LLVM_STRIP ?= llvm-strip -g |
| 11 | +ARCH ?= $(shell arch) |
| 12 | + |
| 13 | +# as in /usr/src/linux-headers-*/arch/ |
| 14 | +# TODO: extract correctly the archs, and add more if needed. |
| 15 | +ifeq ($(ARCH),x86_64) |
| 16 | + ARCH := x86 |
| 17 | +else ifeq ($(ARCH),i686) |
| 18 | + ARCH := x86 |
| 19 | +else ifeq ($(ARCH),armv7l) |
| 20 | + ARCH := arm |
| 21 | +else ifeq ($(ARCH),aarch64) |
| 22 | + ARCH := arm64 |
| 23 | +endif |
| 24 | + |
| 25 | +ifeq ($(ARCH),arm) |
| 26 | + # on previous archs, it fails with "SMP not supported on pre-ARMv6" |
| 27 | + EXTRA_FLAGS = "-D__LINUX_ARM_ARCH__=7" |
| 28 | +endif |
| 29 | + |
| 30 | +BIN := opensnitch.o opensnitch-procs.o opensnitch-dns.o |
| 31 | +CLANG_FLAGS = -I. \ |
| 32 | + -I$(KERNEL_HEADERS)/arch/x86/include/generated/ \ |
| 33 | + -I$(KERNEL_HEADERS)/include \ |
| 34 | + -include $(KERNEL_DIR)/include/linux/kconfig.h \ |
| 35 | + -I$(KERNEL_DIR)/include \ |
| 36 | + -I$(KERNEL_DIR)/include/uapi \ |
| 37 | + -I$(KERNEL_DIR)/include/generated/uapi \ |
| 38 | + -I$(KERNEL_DIR)/arch/$(ARCH)/include \ |
| 39 | + -I$(KERNEL_DIR)/arch/$(ARCH)/include/generated \ |
| 40 | + -I$(KERNEL_DIR)/arch/$(ARCH)/include/uapi \ |
| 41 | + -I$(KERNEL_DIR)/arch/$(ARCH)/include/generated/uapi \ |
| 42 | + -I$(KERNEL_DIR)/tools/testing/selftests/bpf/ \ |
| 43 | + -D__KERNEL__ -D__BPF_TRACING__ -Wno-unused-value -Wno-pointer-sign \ |
| 44 | + -D__TARGET_ARCH_$(ARCH) -Wno-compare-distinct-pointer-types \ |
| 45 | + $(EXTRA_FLAGS) \ |
| 46 | + -Wno-gnu-variable-sized-type-not-at-end \ |
| 47 | + -Wno-address-of-packed-member -Wno-tautological-compare \ |
| 48 | + -Wno-unknown-warning-option \ |
| 49 | + -g -O2 -emit-llvm |
| 50 | + |
| 51 | +all: $(BIN) |
| 52 | + |
| 53 | +%.o: %.c |
| 54 | + $(CLANG) $(CLANG_FLAGS) -c $< -o - | \ |
| 55 | + $(LLC) -march=bpf -mcpu=$(CPU) -filetype=obj -o $@ |
96 | 56 | clean: |
97 | | - $(MAKE) -C ../../ M=$(CURDIR) clean |
98 | | - @find $(CURDIR) -type f -name '*~' -delete |
99 | | - |
100 | | -$(LIBBPF): FORCE |
101 | | -# Fix up variables inherited from Kbuild that tools/ build system won't like |
102 | | - $(MAKE) -C $(dir $@) RM='rm -rf' EXTRA_CFLAGS="$(TPROGS_CFLAGS)" \ |
103 | | - LDFLAGS=$(TPROGS_LDFLAGS) srctree=$(BPF_SAMPLES_PATH)/../../ O= |
104 | | - |
105 | | -$(obj)/syscall_nrs.h: $(obj)/syscall_nrs.s FORCE |
106 | | - $(call filechk,offsets,__SYSCALL_NRS_H__) |
107 | | - |
108 | | -targets += syscall_nrs.s |
109 | | -clean-files += syscall_nrs.h |
110 | | - |
111 | | -FORCE: |
112 | | - |
113 | | - |
114 | | -# Verify LLVM compiler tools are available and bpf target is supported by llc |
115 | | -.PHONY: verify_cmds verify_target_bpf $(CLANG) $(LLC) |
116 | | - |
117 | | -verify_cmds: $(CLANG) $(LLC) |
118 | | - @for TOOL in $^ ; do \ |
119 | | - if ! (which -- "$${TOOL}" > /dev/null 2>&1); then \ |
120 | | - echo "*** ERROR: Cannot find LLVM tool $${TOOL}" ;\ |
121 | | - exit 1; \ |
122 | | - else true; fi; \ |
123 | | - done |
124 | | - |
125 | | -verify_target_bpf: verify_cmds |
126 | | - @if ! (${LLC} -march=bpf -mattr=help > /dev/null 2>&1); then \ |
127 | | - echo "*** ERROR: LLVM (${LLC}) does not support 'bpf' target" ;\ |
128 | | - echo " NOTICE: LLVM version >= 3.7.1 required" ;\ |
129 | | - exit 2; \ |
130 | | - else true; fi |
131 | | - |
132 | | -$(BPF_SAMPLES_PATH)/*.c: verify_target_bpf $(LIBBPF) |
133 | | -$(src)/*.c: verify_target_bpf $(LIBBPF) |
134 | | - |
135 | | -$(obj)/tracex5_kern.o: $(obj)/syscall_nrs.h |
136 | | -$(obj)/hbm_out_kern.o: $(src)/hbm.h $(src)/hbm_kern.h |
137 | | -$(obj)/hbm.o: $(src)/hbm.h |
138 | | -$(obj)/hbm_edt_kern.o: $(src)/hbm.h $(src)/hbm_kern.h |
139 | | - |
140 | | --include $(BPF_SAMPLES_PATH)/Makefile.target |
141 | | - |
142 | | -# asm/sysreg.h - inline assembly used by it is incompatible with llvm. |
143 | | -# But, there is no easy way to fix it, so just exclude it since it is |
144 | | -# useless for BPF samples. |
145 | | -$(obj)/%.o: $(src)/%.c |
146 | | - @echo " CLANG-bpf " $@ |
147 | | - $(Q)$(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(BPF_EXTRA_CFLAGS) \ |
148 | | - -I$(obj) -I$(srctree)/tools/testing/selftests/bpf/ \ |
149 | | - -I$(srctree)/tools/lib/ \ |
150 | | - -D__KERNEL__ -D__BPF_TRACING__ -Wno-unused-value -Wno-pointer-sign \ |
151 | | - -D__TARGET_ARCH_$(SRCARCH) -Wno-compare-distinct-pointer-types \ |
152 | | - -Wno-gnu-variable-sized-type-not-at-end \ |
153 | | - -Wno-address-of-packed-member -Wno-tautological-compare \ |
154 | | - -Wno-unknown-warning-option $(CLANG_ARCH_ARGS) \ |
155 | | - -I$(srctree)/samples/bpf/ -include asm_goto_workaround.h \ |
156 | | - -O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf $(LLC_FLAGS) -filetype=obj -o $@ |
157 | | -ifeq ($(DWARF2BTF),y) |
158 | | - $(BTF_PAHOLE) -J $@ |
159 | | -endif |
| 57 | + rm -f *.o |
0 commit comments