1 BPF_DEPENDS
:= @HAS_BPF_TOOLCHAIN
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
)
10 CLANG
:=$(firstword $(shell PATH
='$(BPF_PATH)' which clang clang-13 clang-12 clang-11
))
11 LLVM_VER
:=$(subst clang
,,$(notdir $(CLANG
)))
13 CLANG
:=$(STAGING_DIR_HOST
)/bin
/clang
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
)
24 BPF_ARCH
:=mips
$(if
$(CONFIG_BIG_ENDIAN
),,el
)
26 BPF_HEADERS_DIR
:=$(STAGING_DIR
)/bpf-headers
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
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 \
57 -O2
-emit-llvm
-Xclang
-disable-llvm-passes
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))