Commit 9925495d authored by Ian Rogers's avatar Ian Rogers Committed by Namhyung Kim
Browse files

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: default avatarIan Rogers <irogers@google.com>
Tested-by: default avatarNamhyung 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: default avatarNamhyung Kim <namhyung@kernel.org>
parent 727e4314
Loading
Loading
Loading
Loading
+49 −29
Original line number Diff line number Diff line
@@ -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
        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,17 +673,37 @@ ifndef NO_LIBBPF
  endif
endif

ifdef BUILD_BPF_SKEL
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 := $(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 := $(error Error: clang too old/not installed. Please install recent clang to build with BUILD_BPF_SKEL)
      dummy := $(warning Warning: Disabled BPF skeletons as clang is too old)
      BUILD_BPF_SKEL := 0
    endif
  ifeq ($(filter -DHAVE_LIBBPF_SUPPORT, $(CFLAGS)),)
    dummy := $(error Error: BPF skeleton support requires libbpf)
  endif
  ifeq ($(BUILD_BPF_SKEL),1)
    $(call detected,CONFIG_PERF_BPF_SKEL)
    CFLAGS += -DHAVE_BPF_SKEL
  endif
endif

ifndef GEN_VMLINUX_H
  VMLINUX_H=$(src-perf)/util/bpf_skel/vmlinux/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
+4 −4
Original line number Diff line number Diff line
@@ -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)