build: fix bpf toolchain dependency for qosify
[openwrt/staging/stintel.git] / include / bpf.mk
1 BPF_DEPENDS := @HAS_BPF_TOOLCHAIN
2
3 ifneq ($(CONFIG_BPF_TOOLCHAIN_HOST),)
4 BPF_TOOLCHAIN_HOST_PATH:=$(call qstrip,$(CONFIG_BPF_TOOLCHAIN_HOST_PATH))
5 ifneq ($(BPF_TOOLCHAIN_HOST_PATH),)
6 BPF_PATH:=$(BPF_TOOLCHAIN_HOST_PATH)/bin:$(PATH)
7 else
8 BPF_PATH:=$(BPF_PATH)
9 endif
10 CLANG:=$(firstword $(shell PATH='$(BPF_PATH)' which clang clang-13 clang-12 clang-11))
11 LLVM_VER:=$(subst clang,,$(notdir $(CLANG)))
12 else
13 CLANG:=$(STAGING_DIR_HOST)/bin/clang
14 LLVM_VER:=
15 endif
16
17 LLVM_PATH:=$(dir $(CLANG))
18 LLVM_LLC:=$(LLVM_PATH)/llc$(LLVM_VER)
19 LLVM_DIS:=$(LLVM_PATH)/llvm-dis$(LLVM_VER)
20 LLVM_OPT:=$(LLVM_PATH)/opt$(LLVM_VER)
21 LLVM_STRIP:=$(LLVM_PATH)/llvm-strip$(LLVM_VER)
22
23 BPF_KARCH:=mips
24 BPF_ARCH:=mips$(if $(CONFIG_BIG_ENDIAN),,el)
25
26 BPF_HEADERS_DIR:=$(STAGING_DIR)/bpf-headers
27
28 BPF_KERNEL_INCLUDE := \
29 -nostdinc -isystem $(TOOLCHAIN_DIR)/include \
30 -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include \
31 -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/asm/mach-generic \
32 -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/generated \
33 -I$(BPF_HEADERS_DIR)/include \
34 -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/uapi \
35 -I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/generated/uapi \
36 -I$(BPF_HEADERS_DIR)/include/uapi \
37 -I$(BPF_HEADERS_DIR)/include/generated/uapi \
38 -I$(BPF_HEADERS_DIR)/tools/lib \
39 -I$(BPF_HEADERS_DIR)/tools/testing/selftests \
40 -I$(BPF_HEADERS_DIR)/samples/bpf \
41 -include linux/kconfig.h -include asm_goto_workaround.h
42
43 BPF_CFLAGS := \
44 $(BPF_KERNEL_INCLUDE) -I$(PKG_BUILD_DIR) \
45 -D__KERNEL__ -D__BPF_TRACING__ \
46 -D__TARGET_ARCH_${BPF_KARCH} \
47 -m$(if $(CONFIG_BIG_ENDIAN),big,little)-endian \
48 -fno-stack-protector -Wall \
49 -Wno-unused-value -Wno-pointer-sign \
50 -Wno-compare-distinct-pointer-types \
51 -Wno-gnu-variable-sized-type-not-at-end \
52 -Wno-address-of-packed-member -Wno-tautological-compare \
53 -Wno-unknown-warning-option \
54 -fno-asynchronous-unwind-tables \
55 -Wno-uninitialized -Wno-unused-variable \
56 -Wno-unused-label \
57 -O2 -emit-llvm -Xclang -disable-llvm-passes
58
59 define CompileBPF
60 $(CLANG) -g -target $(BPF_ARCH)-linux-gnu $(BPF_CFLAGS) $(2) \
61 -c $(1) -o $(patsubst %.c,%.bc,$(1))
62 $(LLVM_OPT) -O2 -mtriple=bpf-pc-linux < $(patsubst %.c,%.bc,$(1)) > $(patsubst %.c,%.opt,$(1))
63 $(LLVM_DIS) < $(patsubst %.c,%.opt,$(1)) > $(patsubst %.c,%.S,$(1))
64 $(LLVM_LLC) -march=bpf -filetype=obj -o $(patsubst %.c,%.o,$(1)) < $(patsubst %.c,%.S,$(1))
65 $(LLVM_STRIP) --strip-debug $(patsubst %.c,%.o,$(1))
66 endef
67