mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 06:57:57 +00:00
9f90a89655
When the prebuilt llvm toolchain is unpacked into the source dir, it is automatically picked up and used by the build system, and eBPF based packages can be selected Signed-off-by: Felix Fietkau <nbd@nbd.name>
73 lines
2.6 KiB
Makefile
73 lines
2.6 KiB
Makefile
BPF_DEPENDS := @HAS_BPF_TOOLCHAIN
|
|
LLVM_VER:=
|
|
|
|
ifneq ($(CONFIG_USE_LLVM_HOST),)
|
|
BPF_TOOLCHAIN_HOST_PATH:=$(call qstrip,$(CONFIG_BPF_TOOLCHAIN_HOST_PATH))
|
|
ifneq ($(BPF_TOOLCHAIN_HOST_PATH),)
|
|
BPF_PATH:=$(BPF_TOOLCHAIN_HOST_PATH)/bin:$(PATH)
|
|
else
|
|
BPF_PATH:=$(PATH)
|
|
endif
|
|
CLANG:=$(firstword $(shell PATH='$(BPF_PATH)' which clang clang-13 clang-12 clang-11))
|
|
LLVM_VER:=$(subst clang,,$(notdir $(CLANG)))
|
|
endif
|
|
ifneq ($(CONFIG_USE_LLVM_PREBUILT),)
|
|
CLANG:=$(TOPDIR)/llvm-bpf/bin/clang
|
|
endif
|
|
ifneq ($(CONFIG_USE_LLVM_BUILD),)
|
|
CLANG:=$(STAGING_DIR_HOST)/llvm-bpf/bin/clang
|
|
endif
|
|
|
|
LLVM_PATH:=$(dir $(CLANG))
|
|
LLVM_LLC:=$(LLVM_PATH)/llc$(LLVM_VER)
|
|
LLVM_DIS:=$(LLVM_PATH)/llvm-dis$(LLVM_VER)
|
|
LLVM_OPT:=$(LLVM_PATH)/opt$(LLVM_VER)
|
|
LLVM_STRIP:=$(LLVM_PATH)/llvm-strip$(LLVM_VER)
|
|
|
|
BPF_KARCH:=mips
|
|
BPF_ARCH:=mips$(if $(CONFIG_BIG_ENDIAN),,el)
|
|
BPF_TARGET:=bpf$(if $(CONFIG_BIG_ENDIAN),eb,el)
|
|
|
|
BPF_HEADERS_DIR:=$(STAGING_DIR)/bpf-headers
|
|
|
|
BPF_KERNEL_INCLUDE := \
|
|
-nostdinc -isystem $(TOOLCHAIN_DIR)/include \
|
|
-I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include \
|
|
-I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/asm/mach-generic \
|
|
-I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/generated \
|
|
-I$(BPF_HEADERS_DIR)/include \
|
|
-I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/uapi \
|
|
-I$(BPF_HEADERS_DIR)/arch/$(BPF_KARCH)/include/generated/uapi \
|
|
-I$(BPF_HEADERS_DIR)/include/uapi \
|
|
-I$(BPF_HEADERS_DIR)/include/generated/uapi \
|
|
-I$(BPF_HEADERS_DIR)/tools/lib \
|
|
-I$(BPF_HEADERS_DIR)/tools/testing/selftests \
|
|
-I$(BPF_HEADERS_DIR)/samples/bpf \
|
|
-include linux/kconfig.h -include asm_goto_workaround.h
|
|
|
|
BPF_CFLAGS := \
|
|
$(BPF_KERNEL_INCLUDE) -I$(PKG_BUILD_DIR) \
|
|
-D__KERNEL__ -D__BPF_TRACING__ \
|
|
-D__TARGET_ARCH_${BPF_KARCH} \
|
|
-m$(if $(CONFIG_BIG_ENDIAN),big,little)-endian \
|
|
-fno-stack-protector -Wall \
|
|
-Wno-unused-value -Wno-pointer-sign \
|
|
-Wno-compare-distinct-pointer-types \
|
|
-Wno-gnu-variable-sized-type-not-at-end \
|
|
-Wno-address-of-packed-member -Wno-tautological-compare \
|
|
-Wno-unknown-warning-option \
|
|
-fno-asynchronous-unwind-tables \
|
|
-Wno-uninitialized -Wno-unused-variable \
|
|
-Wno-unused-label \
|
|
-O2 -emit-llvm -Xclang -disable-llvm-passes
|
|
|
|
define CompileBPF
|
|
$(CLANG) -g -target $(BPF_ARCH)-linux-gnu $(BPF_CFLAGS) $(2) \
|
|
-c $(1) -o $(patsubst %.c,%.bc,$(1))
|
|
$(LLVM_OPT) -O2 -mtriple=$(BPF_TARGET) < $(patsubst %.c,%.bc,$(1)) > $(patsubst %.c,%.opt,$(1))
|
|
$(LLVM_DIS) < $(patsubst %.c,%.opt,$(1)) > $(patsubst %.c,%.S,$(1))
|
|
$(LLVM_LLC) -march=$(BPF_TARGET) -filetype=obj -o $(patsubst %.c,%.o,$(1)) < $(patsubst %.c,%.S,$(1))
|
|
$(LLVM_STRIP) --strip-debug $(patsubst %.c,%.o,$(1))
|
|
endef
|
|
|