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