xref: /linux/drivers/hid/bpf/progs/Makefile (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
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