# SPDX-License-Identifier: GPL-2.0 # Shared BPF Skeleton Generator Rules include $(srctree)/tools/scripts/Makefile.include # Shared foundational tooling always lives in util/bpf_skel SKEL_TOOL_OUT := $(abspath $(OUTPUT)util/bpf_skel) SKEL_TOOL_TMP_OUT := $(abspath $(SKEL_TOOL_OUT)/.tmp) # Component specific output lives in $(dir)/bpf_skel SKEL_OUT := $(abspath $(OUTPUT)$(dir)/bpf_skel) SKEL_TMP_OUT := $(abspath $(SKEL_OUT)/.tmp) ifeq ($(CONFIG_PERF_BPF_SKEL),y) BPFTOOL := $(SKEL_TOOL_TMP_OUT)/bootstrap/bpftool VMLINUX_H := $(SKEL_TOOL_OUT)/vmlinux.h .PHONY: bpf-skel-prepare bpf-skel-prepare: $(BPFTOOL) $(VMLINUX_H) @: define get_sys_includes $(shell $(1) $(2) -v -E - &1 \ | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \ $(shell $(1) $(2) -dM -E - $@ else $(Q)cp "$(VMLINUX_H_FILE)" $@ endif # Consolidated Pattern rule for $(dir)/bpf_skel/ $(SKEL_TMP_OUT)/%.bpf.o: $(srctree)/tools/perf/$(dir)/bpf_skel/%.bpf.c $(LIBBPF) $(VMLINUX_H) $(OUTPUT)PERF-VERSION-FILE util/bpf_skel/perf_version.h $(call rule_mkdir) $(QUIET_CLANG) $(Q)$(CLANG) -g -O2 -fno-stack-protector --target=bpf \ $(CLANG_OPTIONS) $(EXTRA_BPF_FLAGS) $(BPF_INCLUDE) $(TOOLS_UAPI_INCLUDE) \ -include $(OUTPUT)PERF-VERSION-FILE -include util/bpf_skel/perf_version.h \ -fms-extensions -Wno-microsoft-anon-tag \ -c $< -o $@ $(SKEL_OUT)/%.skel.h: $(SKEL_TMP_OUT)/%.bpf.o $(BPFTOOL) $(call rule_mkdir) $(QUIET_GENSKEL) $(Q)$(BPFTOOL) gen skeleton $< > $@ .PRECIOUS: $(SKEL_TMP_OUT)/%.bpf.o else # CONFIG_PERF_BPF_SKEL .PHONY: bpf-skel-prepare bpf-skel-prepare: @: endif # CONFIG_PERF_BPF_SKEL clean: $(call QUIET_CLEAN, bpf-skel) $(RM) -r $(SKEL_TOOL_TMP_OUT) $(OUTPUT)bench/bpf_skel/.tmp $(SKEL_TOOL_OUT)/*.skel.h $(OUTPUT)bench/bpf_skel/*.skel.h $(SKEL_TOOL_OUT)/vmlinux.h .PHONY: clean