162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ciOUTPUT := .output
362306a36Sopenharmony_ciabs_out := $(abspath $(OUTPUT))
462306a36Sopenharmony_ci
562306a36Sopenharmony_ciCLANG ?= clang
662306a36Sopenharmony_ciLLC ?= llc
762306a36Sopenharmony_ciLLVM_STRIP ?= llvm-strip
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciTOOLS_PATH := $(abspath ../../../../tools)
1062306a36Sopenharmony_ciBPFTOOL_SRC := $(TOOLS_PATH)/bpf/bpftool
1162306a36Sopenharmony_ciBPFTOOL_OUTPUT := $(abs_out)/bpftool
1262306a36Sopenharmony_ciDEFAULT_BPFTOOL := $(BPFTOOL_OUTPUT)/bootstrap/bpftool
1362306a36Sopenharmony_ciBPFTOOL ?= $(DEFAULT_BPFTOOL)
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciLIBBPF_SRC := $(TOOLS_PATH)/lib/bpf
1662306a36Sopenharmony_ciLIBBPF_OUTPUT := $(abs_out)/libbpf
1762306a36Sopenharmony_ciLIBBPF_DESTDIR := $(LIBBPF_OUTPUT)
1862306a36Sopenharmony_ciLIBBPF_INCLUDE := $(LIBBPF_DESTDIR)/include
1962306a36Sopenharmony_ciBPFOBJ := $(LIBBPF_OUTPUT)/libbpf.a
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciINCLUDES := -I$(OUTPUT) -I$(LIBBPF_INCLUDE) -I$(TOOLS_PATH)/include/uapi
2262306a36Sopenharmony_ciCFLAGS := -g -Wall
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciVMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux)				\
2562306a36Sopenharmony_ci		     $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux)	\
2662306a36Sopenharmony_ci		     ../../../../vmlinux				\
2762306a36Sopenharmony_ci		     /sys/kernel/btf/vmlinux				\
2862306a36Sopenharmony_ci		     /boot/vmlinux-$(shell uname -r)
2962306a36Sopenharmony_ciVMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS))))
3062306a36Sopenharmony_ciifeq ($(VMLINUX_BTF),)
3162306a36Sopenharmony_ci$(error Cannot find a vmlinux for VMLINUX_BTF at any of "$(VMLINUX_BTF_PATHS)")
3262306a36Sopenharmony_ciendif
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ciifeq ($(V),1)
3562306a36Sopenharmony_ciQ =
3662306a36Sopenharmony_cimsg =
3762306a36Sopenharmony_cielse
3862306a36Sopenharmony_ciQ = @
3962306a36Sopenharmony_cimsg = @printf '  %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))";
4062306a36Sopenharmony_ciMAKEFLAGS += --no-print-directory
4162306a36Sopenharmony_cisubmake_extras := feature_display=0
4262306a36Sopenharmony_ciendif
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci.DELETE_ON_ERROR:
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci.PHONY: all clean
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ciall: entrypoints.lskel.h
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ciclean:
5162306a36Sopenharmony_ci	$(call msg,CLEAN)
5262306a36Sopenharmony_ci	$(Q)rm -rf $(OUTPUT) entrypoints
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_cientrypoints.lskel.h: $(OUTPUT)/entrypoints.bpf.o | $(BPFTOOL)
5562306a36Sopenharmony_ci	$(call msg,GEN-SKEL,$@)
5662306a36Sopenharmony_ci	$(Q)$(BPFTOOL) gen skeleton -L $< > $@
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci$(OUTPUT)/entrypoints.bpf.o: entrypoints.bpf.c $(OUTPUT)/vmlinux.h $(BPFOBJ) | $(OUTPUT)
6062306a36Sopenharmony_ci	$(call msg,BPF,$@)
6162306a36Sopenharmony_ci	$(Q)$(CLANG) -g -O2 --target=bpf $(INCLUDES)			      \
6262306a36Sopenharmony_ci		 -c $(filter %.c,$^) -o $@ &&				      \
6362306a36Sopenharmony_ci	$(LLVM_STRIP) -g $@
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci$(OUTPUT)/vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL) | $(INCLUDE_DIR)
6662306a36Sopenharmony_ciifeq ($(VMLINUX_H),)
6762306a36Sopenharmony_ci	$(call msg,GEN,,$@)
6862306a36Sopenharmony_ci	$(Q)$(BPFTOOL) btf dump file $(VMLINUX_BTF) format c > $@
6962306a36Sopenharmony_cielse
7062306a36Sopenharmony_ci	$(call msg,CP,,$@)
7162306a36Sopenharmony_ci	$(Q)cp "$(VMLINUX_H)" $@
7262306a36Sopenharmony_ciendif
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci$(OUTPUT) $(LIBBPF_OUTPUT) $(BPFTOOL_OUTPUT):
7562306a36Sopenharmony_ci	$(call msg,MKDIR,$@)
7662306a36Sopenharmony_ci	$(Q)mkdir -p $@
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci$(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OUTPUT)
7962306a36Sopenharmony_ci	$(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC)			       \
8062306a36Sopenharmony_ci		    OUTPUT=$(abspath $(dir $@))/ prefix=		       \
8162306a36Sopenharmony_ci		    DESTDIR=$(LIBBPF_DESTDIR) $(abspath $@) install_headers
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ciifeq ($(CROSS_COMPILE),)
8462306a36Sopenharmony_ci$(DEFAULT_BPFTOOL): $(BPFOBJ) | $(BPFTOOL_OUTPUT)
8562306a36Sopenharmony_ci	$(Q)$(MAKE) $(submake_extras) -C $(BPFTOOL_SRC)			       \
8662306a36Sopenharmony_ci		    OUTPUT=$(BPFTOOL_OUTPUT)/				       \
8762306a36Sopenharmony_ci		    LIBBPF_BOOTSTRAP_OUTPUT=$(LIBBPF_OUTPUT)/		       \
8862306a36Sopenharmony_ci		    LIBBPF_BOOTSTRAP_DESTDIR=$(LIBBPF_DESTDIR)/ bootstrap
8962306a36Sopenharmony_cielse
9062306a36Sopenharmony_ci$(DEFAULT_BPFTOOL): | $(BPFTOOL_OUTPUT)
9162306a36Sopenharmony_ci	$(Q)$(MAKE) $(submake_extras) -C $(BPFTOOL_SRC)			       \
9262306a36Sopenharmony_ci		    OUTPUT=$(BPFTOOL_OUTPUT)/ bootstrap
9362306a36Sopenharmony_ciendif
94