104b3e5abSBenjamin Tissoires# SPDX-License-Identifier: GPL-2.0 204b3e5abSBenjamin TissoiresOUTPUT := .output 304b3e5abSBenjamin Tissoiresabs_out := $(abspath $(OUTPUT)) 404b3e5abSBenjamin Tissoires 504b3e5abSBenjamin TissoiresCLANG ?= clang 604b3e5abSBenjamin TissoiresLLC ?= llc 704b3e5abSBenjamin TissoiresLLVM_STRIP ?= llvm-strip 804b3e5abSBenjamin Tissoires 904b3e5abSBenjamin TissoiresTOOLS_PATH := $(abspath ../../../../tools) 1004b3e5abSBenjamin TissoiresBPFTOOL_SRC := $(TOOLS_PATH)/bpf/bpftool 1104b3e5abSBenjamin TissoiresBPFTOOL_OUTPUT := $(abs_out)/bpftool 1204b3e5abSBenjamin TissoiresDEFAULT_BPFTOOL := $(BPFTOOL_OUTPUT)/bootstrap/bpftool 1304b3e5abSBenjamin TissoiresBPFTOOL ?= $(DEFAULT_BPFTOOL) 1404b3e5abSBenjamin Tissoires 1504b3e5abSBenjamin TissoiresLIBBPF_SRC := $(TOOLS_PATH)/lib/bpf 1604b3e5abSBenjamin TissoiresLIBBPF_OUTPUT := $(abs_out)/libbpf 1704b3e5abSBenjamin TissoiresLIBBPF_DESTDIR := $(LIBBPF_OUTPUT) 1804b3e5abSBenjamin TissoiresLIBBPF_INCLUDE := $(LIBBPF_DESTDIR)/include 1904b3e5abSBenjamin TissoiresBPFOBJ := $(LIBBPF_OUTPUT)/libbpf.a 2004b3e5abSBenjamin Tissoires 2104b3e5abSBenjamin TissoiresINCLUDES := -I$(OUTPUT) -I$(LIBBPF_INCLUDE) -I$(TOOLS_PATH)/include/uapi 2204b3e5abSBenjamin TissoiresCFLAGS := -g -Wall 2304b3e5abSBenjamin Tissoires 2404b3e5abSBenjamin TissoiresVMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \ 2504b3e5abSBenjamin Tissoires $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \ 2604b3e5abSBenjamin Tissoires ../../../../vmlinux \ 2704b3e5abSBenjamin Tissoires /sys/kernel/btf/vmlinux \ 2804b3e5abSBenjamin Tissoires /boot/vmlinux-$(shell uname -r) 2904b3e5abSBenjamin TissoiresVMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS)))) 3004b3e5abSBenjamin Tissoiresifeq ($(VMLINUX_BTF),) 3104b3e5abSBenjamin Tissoires$(error Cannot find a vmlinux for VMLINUX_BTF at any of "$(VMLINUX_BTF_PATHS)") 3204b3e5abSBenjamin Tissoiresendif 3304b3e5abSBenjamin Tissoires 3404b3e5abSBenjamin Tissoiresifeq ($(V),1) 3504b3e5abSBenjamin TissoiresQ = 3604b3e5abSBenjamin Tissoiresmsg = 3704b3e5abSBenjamin Tissoireselse 3804b3e5abSBenjamin TissoiresQ = @ 3904b3e5abSBenjamin Tissoiresmsg = @printf ' %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))"; 4004b3e5abSBenjamin TissoiresMAKEFLAGS += --no-print-directory 4104b3e5abSBenjamin Tissoiressubmake_extras := feature_display=0 4204b3e5abSBenjamin Tissoiresendif 4304b3e5abSBenjamin Tissoires 4404b3e5abSBenjamin Tissoires.DELETE_ON_ERROR: 4504b3e5abSBenjamin Tissoires 4604b3e5abSBenjamin Tissoires.PHONY: all clean 4704b3e5abSBenjamin Tissoires 4804b3e5abSBenjamin TissoiresSOURCES = $(wildcard *.bpf.c) 4904b3e5abSBenjamin TissoiresTARGETS = $(SOURCES:.bpf.c=.bpf.o) 5004b3e5abSBenjamin Tissoires 5104b3e5abSBenjamin Tissoiresall: $(TARGETS) 5204b3e5abSBenjamin Tissoires 5304b3e5abSBenjamin Tissoiresclean: 5404b3e5abSBenjamin Tissoires $(call msg,CLEAN) 5504b3e5abSBenjamin Tissoires $(Q)rm -rf $(OUTPUT) $(TARGETS) 5604b3e5abSBenjamin Tissoires 5704b3e5abSBenjamin Tissoires%.bpf.o: %.bpf.c vmlinux.h $(BPFOBJ) | $(OUTPUT) 5804b3e5abSBenjamin Tissoires $(call msg,BPF,$@) 59*c94ae218SBenjamin Tissoires $(Q)$(CLANG) -g -O2 --target=bpf -Wall -Werror $(INCLUDES) \ 6004b3e5abSBenjamin Tissoires -c $(filter %.c,$^) -o $@ && \ 6104b3e5abSBenjamin Tissoires $(LLVM_STRIP) -g $@ 6204b3e5abSBenjamin Tissoires 6304b3e5abSBenjamin Tissoiresvmlinux.h: $(VMLINUX_BTF) $(BPFTOOL) | $(INCLUDE_DIR) 6404b3e5abSBenjamin Tissoiresifeq ($(VMLINUX_H),) 6504b3e5abSBenjamin Tissoires $(call msg,GEN,,$@) 6604b3e5abSBenjamin Tissoires $(Q)$(BPFTOOL) btf dump file $(VMLINUX_BTF) format c > $@ 6704b3e5abSBenjamin Tissoireselse 6804b3e5abSBenjamin Tissoires $(call msg,CP,,$@) 6904b3e5abSBenjamin Tissoires $(Q)cp "$(VMLINUX_H)" $@ 7004b3e5abSBenjamin Tissoiresendif 7104b3e5abSBenjamin Tissoires 7204b3e5abSBenjamin Tissoires$(OUTPUT) $(LIBBPF_OUTPUT) $(BPFTOOL_OUTPUT): 7304b3e5abSBenjamin Tissoires $(call msg,MKDIR,$@) 7404b3e5abSBenjamin Tissoires $(Q)mkdir -p $@ 7504b3e5abSBenjamin Tissoires 7604b3e5abSBenjamin Tissoires$(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OUTPUT) 7704b3e5abSBenjamin Tissoires $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) \ 7804b3e5abSBenjamin Tissoires OUTPUT=$(abspath $(dir $@))/ prefix= \ 7904b3e5abSBenjamin Tissoires DESTDIR=$(LIBBPF_DESTDIR) $(abspath $@) install_headers 8004b3e5abSBenjamin Tissoires 8104b3e5abSBenjamin Tissoiresifeq ($(CROSS_COMPILE),) 8204b3e5abSBenjamin Tissoires$(DEFAULT_BPFTOOL): $(BPFOBJ) | $(BPFTOOL_OUTPUT) 8304b3e5abSBenjamin Tissoires $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOL_SRC) \ 8404b3e5abSBenjamin Tissoires OUTPUT=$(BPFTOOL_OUTPUT)/ \ 8504b3e5abSBenjamin Tissoires LIBBPF_BOOTSTRAP_OUTPUT=$(LIBBPF_OUTPUT)/ \ 8604b3e5abSBenjamin Tissoires LIBBPF_BOOTSTRAP_DESTDIR=$(LIBBPF_DESTDIR)/ bootstrap 8704b3e5abSBenjamin Tissoireselse 8804b3e5abSBenjamin Tissoires$(DEFAULT_BPFTOOL): | $(BPFTOOL_OUTPUT) 8904b3e5abSBenjamin Tissoires $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOL_SRC) \ 9004b3e5abSBenjamin Tissoires OUTPUT=$(BPFTOOL_OUTPUT)/ bootstrap 9104b3e5abSBenjamin Tissoiresendif 92