mirror of https://gitee.com/openkylin/linux.git
perf build: Support build BPF skeletons with perf
BPF programs are useful in perf to profile BPF programs. BPF skeleton is by far the easiest way to write BPF tools. Enable building BPF skeletons in util/bpf_skel. A dummy bpf skeleton is added. More bpf skeletons will be added for different use cases. Signed-off-by: Song Liu <songliubraving@fb.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Acked-by: Jiri Olsa <jolsa@redhat.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: kernel-team@fb.com Link: http://lore.kernel.org/lkml/20201229214214.3413833-3-songliubraving@fb.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d2032d4510
commit
fbcdaa1908
|
@ -99,7 +99,9 @@ FEATURE_TESTS_EXTRA := \
|
|||
clang \
|
||||
libbpf \
|
||||
libpfm4 \
|
||||
libdebuginfod
|
||||
libdebuginfod \
|
||||
clang-bpf-co-re
|
||||
|
||||
|
||||
FEATURE_TESTS ?= $(FEATURE_TESTS_BASIC)
|
||||
|
||||
|
|
|
@ -621,6 +621,15 @@ ifndef NO_LIBBPF
|
|||
endif
|
||||
endif
|
||||
|
||||
ifdef BUILD_BPF_SKEL
|
||||
$(call feature_check,clang-bpf-co-re)
|
||||
ifeq ($(feature-clang-bpf-co-re), 0)
|
||||
dummy := $(error Error: clang too old. Please install recent clang)
|
||||
endif
|
||||
$(call detected,CONFIG_PERF_BPF_SKEL)
|
||||
CFLAGS += -DHAVE_BPF_SKEL
|
||||
endif
|
||||
|
||||
dwarf-post-unwind := 1
|
||||
dwarf-post-unwind-text := BUG
|
||||
|
||||
|
|
|
@ -126,6 +126,8 @@ include ../scripts/utilities.mak
|
|||
#
|
||||
# Define NO_LIBDEBUGINFOD if you do not want support debuginfod
|
||||
#
|
||||
# Define BUILD_BPF_SKEL to enable BPF skeletons
|
||||
#
|
||||
|
||||
# As per kernel Makefile, avoid funny character set dependencies
|
||||
unexport LC_ALL
|
||||
|
@ -175,6 +177,12 @@ endef
|
|||
|
||||
LD += $(EXTRA_LDFLAGS)
|
||||
|
||||
HOSTCC ?= gcc
|
||||
HOSTLD ?= ld
|
||||
HOSTAR ?= ar
|
||||
CLANG ?= clang
|
||||
LLVM_STRIP ?= llvm-strip
|
||||
|
||||
PKG_CONFIG = $(CROSS_COMPILE)pkg-config
|
||||
LLVM_CONFIG ?= llvm-config
|
||||
|
||||
|
@ -731,7 +739,8 @@ prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders $(drm_ioc
|
|||
$(x86_arch_prctl_code_array) \
|
||||
$(rename_flags_array) \
|
||||
$(arch_errno_name_array) \
|
||||
$(sync_file_range_arrays)
|
||||
$(sync_file_range_arrays) \
|
||||
bpf-skel
|
||||
|
||||
$(OUTPUT)%.o: %.c prepare FORCE
|
||||
$(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
|
||||
|
@ -1004,7 +1013,43 @@ config-clean:
|
|||
python-clean:
|
||||
$(python-clean)
|
||||
|
||||
clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean $(LIBPERF)-clean config-clean fixdep-clean python-clean
|
||||
SKEL_OUT := $(abspath $(OUTPUT)util/bpf_skel)
|
||||
SKEL_TMP_OUT := $(abspath $(SKEL_OUT)/.tmp)
|
||||
SKELETONS :=
|
||||
|
||||
ifdef BUILD_BPF_SKEL
|
||||
BPFTOOL := $(SKEL_TMP_OUT)/bootstrap/bpftool
|
||||
LIBBPF_SRC := $(abspath ../lib/bpf)
|
||||
BPF_INCLUDE := -I$(SKEL_TMP_OUT)/.. -I$(BPF_PATH) -I$(LIBBPF_SRC)/..
|
||||
|
||||
$(SKEL_TMP_OUT):
|
||||
$(Q)$(MKDIR) -p $@
|
||||
|
||||
$(BPFTOOL): | $(SKEL_TMP_OUT)
|
||||
CFLAGS= $(MAKE) -C ../bpf/bpftool \
|
||||
OUTPUT=$(SKEL_TMP_OUT)/ bootstrap
|
||||
|
||||
$(SKEL_TMP_OUT)/%.bpf.o: util/bpf_skel/%.bpf.c $(LIBBPF) | $(SKEL_TMP_OUT)
|
||||
$(QUIET_CLANG)$(CLANG) -g -O2 -target bpf $(BPF_INCLUDE) \
|
||||
-c $(filter util/bpf_skel/%.bpf.c,$^) -o $@ && $(LLVM_STRIP) -g $@
|
||||
|
||||
$(SKEL_OUT)/%.skel.h: $(SKEL_TMP_OUT)/%.bpf.o | $(BPFTOOL)
|
||||
$(QUIET_GENSKEL)$(BPFTOOL) gen skeleton $< > $@
|
||||
|
||||
bpf-skel: $(SKELETONS)
|
||||
|
||||
.PRECIOUS: $(SKEL_TMP_OUT)/%.bpf.o
|
||||
|
||||
else # BUILD_BPF_SKEL
|
||||
|
||||
bpf-skel:
|
||||
|
||||
endif # BUILD_BPF_SKEL
|
||||
|
||||
bpf-skel-clean:
|
||||
$(call QUIET_CLEAN, bpf-skel) $(RM) -r $(SKEL_TMP_OUT) $(SKELETONS)
|
||||
|
||||
clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean $(LIBPERF)-clean config-clean fixdep-clean python-clean bpf-skel-clean
|
||||
$(call QUIET_CLEAN, core-objs) $(RM) $(LIBPERF_A) $(OUTPUT)perf-archive $(OUTPUT)perf-with-kcore $(LANG_BINDINGS)
|
||||
$(Q)find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
|
||||
$(Q)$(RM) $(OUTPUT).config-detected
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
.tmp
|
||||
*.skel.h
|
|
@ -127,6 +127,7 @@ ifneq ($(silent),1)
|
|||
$(MAKE) $(PRINT_DIR) -C $$subdir
|
||||
QUIET_FLEX = @echo ' FLEX '$@;
|
||||
QUIET_BISON = @echo ' BISON '$@;
|
||||
QUIET_GENSKEL = @echo ' GEN-SKEL '$@;
|
||||
|
||||
descend = \
|
||||
+@echo ' DESCEND '$(1); \
|
||||
|
|
Loading…
Reference in New Issue