mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
perf build: Default BUILD_BPF_SKEL, warn/disable for missing deps
LIBBPF is dependent on zlib so move the NO_ZLIB and feature check early to avoid statically building when zlib is disabled. This avoids a linkage failure with perf and static libbpf when zlib isn't specified. Move BUILD_BPF_SKEL logic to one place and if not defined set BUILD_BPF_SKEL to 1. Detect dependencies of building with BPF skeletons and warn/disable if the dependencies aren't present. Change Makefile.perf to contain BPF skeleton logic dependent on the Makefile.config result and refresh the comment about BUILD_BPF_SKEL. Signed-off-by: Ian Rogers <irogers@google.com> Tested-by: Namhyung Kim <namhyung@kernel.org> Cc: James Clark <james.clark@arm.com> Cc: Nick Terrell <terrelln@fb.com> Cc: Patrice Duroux <patrice.duroux@gmail.com> Cc: Nick Desaulniers <ndesaulniers@google.com> Cc: Andrii Nakryiko <andrii@kernel.org> Cc: Nathan Chancellor <nathan@kernel.org> Cc: Kajol Jain <kjain@linux.ibm.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Tiezhu Yang <yangtiezhu@loongson.cn> Cc: Tom Rix <trix@redhat.com> Cc: llvm@lists.linux.dev Cc: bpf@vger.kernel.org Link: https://lore.kernel.org/r/20230914211948.814999-3-irogers@google.com Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
parent
727e431437
commit
9925495d96
|
|
@ -216,12 +216,6 @@ ifeq ($(call get-executable,$(BISON)),)
|
|||
dummy := $(error Error: $(BISON) is missing on this system, please install it)
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_BPF_SKEL),1)
|
||||
ifeq ($(call get-executable,$(CLANG)),)
|
||||
dummy := $(error $(CLANG) is missing on this system, please install it to be able to build with BUILD_BPF_SKEL=1)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(OUTPUT),)
|
||||
ifeq ($(shell expr $(shell $(BISON) --version | grep bison | sed -e 's/.\+ \([0-9]\+\).\([0-9]\+\).\([0-9]\+\)/\1\2\3/g') \>\= 371), 1)
|
||||
BISON_FILE_PREFIX_MAP := --file-prefix-map=$(OUTPUT)=
|
||||
|
|
@ -530,6 +524,16 @@ ifdef CORESIGHT
|
|||
endif
|
||||
endif
|
||||
|
||||
ifndef NO_ZLIB
|
||||
ifeq ($(feature-zlib), 1)
|
||||
CFLAGS += -DHAVE_ZLIB_SUPPORT
|
||||
EXTLIBS += -lz
|
||||
$(call detected,CONFIG_ZLIB)
|
||||
else
|
||||
NO_ZLIB := 1
|
||||
endif
|
||||
endif
|
||||
|
||||
ifndef NO_LIBELF
|
||||
CFLAGS += -DHAVE_LIBELF_SUPPORT
|
||||
EXTLIBS += -lelf
|
||||
|
|
@ -571,22 +575,28 @@ ifndef NO_LIBELF
|
|||
|
||||
ifndef NO_LIBBPF
|
||||
ifeq ($(feature-bpf), 1)
|
||||
CFLAGS += -DHAVE_LIBBPF_SUPPORT
|
||||
$(call detected,CONFIG_LIBBPF)
|
||||
|
||||
# detecting libbpf without LIBBPF_DYNAMIC, so make VF=1 shows libbpf detection status
|
||||
$(call feature_check,libbpf)
|
||||
|
||||
ifdef LIBBPF_DYNAMIC
|
||||
ifeq ($(feature-libbpf), 1)
|
||||
EXTLIBS += -lbpf
|
||||
CFLAGS += -DHAVE_LIBBPF_SUPPORT
|
||||
$(call detected,CONFIG_LIBBPF)
|
||||
$(call detected,CONFIG_LIBBPF_DYNAMIC)
|
||||
else
|
||||
dummy := $(error Error: No libbpf devel library found or older than v1.0, please install/update libbpf-devel);
|
||||
endif
|
||||
else
|
||||
# Libbpf will be built as a static library from tools/lib/bpf.
|
||||
LIBBPF_STATIC := 1
|
||||
ifeq ($(NO_ZLIB), 1)
|
||||
dummy := $(warning Warning: Statically building libbpf not possible as zlib is missing)
|
||||
NO_LIBBPF := 1
|
||||
else
|
||||
# Libbpf will be built as a static library from tools/lib/bpf.
|
||||
LIBBPF_STATIC := 1
|
||||
$(call detected,CONFIG_LIBBPF)
|
||||
CFLAGS += -DHAVE_LIBBPF_SUPPORT
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif # NO_LIBBPF
|
||||
|
|
@ -663,16 +673,36 @@ 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/not installed. Please install recent clang to build with BUILD_BPF_SKEL)
|
||||
endif
|
||||
ifndef BUILD_BPF_SKEL
|
||||
# BPF skeletons control a large number of perf features, by default
|
||||
# they are enabled.
|
||||
BUILD_BPF_SKEL := 1
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_BPF_SKEL),1)
|
||||
ifeq ($(filter -DHAVE_LIBBPF_SUPPORT, $(CFLAGS)),)
|
||||
dummy := $(error Error: BPF skeleton support requires libbpf)
|
||||
dummy := $(warning Warning: Disabled BPF skeletons as libbpf is required)
|
||||
BUILD_BPF_SKEL := 0
|
||||
else ifeq ($(filter -DHAVE_LIBELF_SUPPORT, $(CFLAGS)),)
|
||||
dummy := $(warning Warning: Disabled BPF skeletons as libelf is required by bpftool)
|
||||
BUILD_BPF_SKEL := 0
|
||||
else ifeq ($(filter -DHAVE_ZLIB_SUPPORT, $(CFLAGS)),)
|
||||
dummy := $(warning Warning: Disabled BPF skeletons as zlib is required by bpftool)
|
||||
BUILD_BPF_SKEL := 0
|
||||
else ifeq ($(call get-executable,$(CLANG)),)
|
||||
dummy := $(warning Warning: Disabled BPF skeletons as clang ($(CLANG)) is missing)
|
||||
BUILD_BPF_SKEL := 0
|
||||
else
|
||||
$(call feature_check,clang-bpf-co-re)
|
||||
ifeq ($(feature-clang-bpf-co-re), 0)
|
||||
dummy := $(warning Warning: Disabled BPF skeletons as clang is too old)
|
||||
BUILD_BPF_SKEL := 0
|
||||
endif
|
||||
endif
|
||||
ifeq ($(BUILD_BPF_SKEL),1)
|
||||
$(call detected,CONFIG_PERF_BPF_SKEL)
|
||||
CFLAGS += -DHAVE_BPF_SKEL
|
||||
endif
|
||||
$(call detected,CONFIG_PERF_BPF_SKEL)
|
||||
CFLAGS += -DHAVE_BPF_SKEL
|
||||
endif
|
||||
|
||||
ifndef GEN_VMLINUX_H
|
||||
|
|
@ -946,16 +976,6 @@ ifndef NO_DEMANGLE
|
|||
endif
|
||||
endif
|
||||
|
||||
ifndef NO_ZLIB
|
||||
ifeq ($(feature-zlib), 1)
|
||||
CFLAGS += -DHAVE_ZLIB_SUPPORT
|
||||
EXTLIBS += -lz
|
||||
$(call detected,CONFIG_ZLIB)
|
||||
else
|
||||
NO_ZLIB := 1
|
||||
endif
|
||||
endif
|
||||
|
||||
ifndef NO_LZMA
|
||||
ifeq ($(feature-lzma), 1)
|
||||
CFLAGS += -DHAVE_LZMA_SUPPORT
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ include ../scripts/utilities.mak
|
|||
#
|
||||
# Define NO_LIBDEBUGINFOD if you do not want support debuginfod
|
||||
#
|
||||
# Define BUILD_BPF_SKEL to enable BPF skeletons
|
||||
# Set BUILD_BPF_SKEL to 0 to override BUILD_BPF_SKEL and not build BPF skeletons
|
||||
#
|
||||
# Define BUILD_NONDISTRO to enable building an linking against libbfd and
|
||||
# libiberty distribution license incompatible libraries.
|
||||
|
|
@ -1042,7 +1042,7 @@ SKELETONS += $(SKEL_OUT)/augmented_raw_syscalls.skel.h
|
|||
$(SKEL_TMP_OUT) $(LIBAPI_OUTPUT) $(LIBBPF_OUTPUT) $(LIBPERF_OUTPUT) $(LIBSUBCMD_OUTPUT) $(LIBSYMBOL_OUTPUT):
|
||||
$(Q)$(MKDIR) -p $@
|
||||
|
||||
ifdef BUILD_BPF_SKEL
|
||||
ifeq ($(CONFIG_PERF_BPF_SKEL),y)
|
||||
BPFTOOL := $(SKEL_TMP_OUT)/bootstrap/bpftool
|
||||
# Get Clang's default includes on this system, as opposed to those seen by
|
||||
# '--target=bpf'. This fixes "missing" files on some architectures/distros,
|
||||
|
|
@ -1120,11 +1120,11 @@ bpf-skel: $(SKELETONS)
|
|||
|
||||
.PRECIOUS: $(SKEL_TMP_OUT)/%.bpf.o
|
||||
|
||||
else # BUILD_BPF_SKEL
|
||||
else # CONFIG_PERF_BPF_SKEL
|
||||
|
||||
bpf-skel:
|
||||
|
||||
endif # BUILD_BPF_SKEL
|
||||
endif # CONFIG_PERF_BPF_SKEL
|
||||
|
||||
bpf-skel-clean:
|
||||
$(call QUIET_CLEAN, bpf-skel) $(RM) -r $(SKEL_TMP_OUT) $(SKELETONS)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user