Commit 7b65e203 authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo

perf tools: Allow to link with libbpf dynamicaly

Currently we support only static linking with kernel's libbpf
(tools/lib/bpf). This patch adds libbpf package detection and support to
link perf with it dynamically.

The libbpf package status is displayed with:

  $ make VF=1
  Auto-detecting system features:
  ...
  ...                        libbpf: [ on  ]

It's not checked by default, because it's quite new.  Once it's on most
distros we can switch it on.

For the same reason it's not added to the test-all check.

Perf does not need advanced version of libbpf, so we can check just for
the base bpf_object__open function.

Adding new compile variable to detect libbpf package and link bpf
dynamically:

  $ make LIBBPF_DYNAMIC=1
    ...
    LINK     perf
  $ ldd perf | grep bpf
    libbpf.so.0 => /lib64/libbpf.so.0 (0x00007f46818bc000)

If libbpf is not installed, build stops with:

  Makefile.config:486: *** Error: No libbpf devel library found,\
  please install libbpf-devel.  Stop.

Committer testing:

  $ make LIBBPF_DYNAMIC=1 -C tools/perf O=/tmp/build/perf
  make: Entering directory '/home/acme/git/perf/tools/perf'
    BUILD:   Doing 'make -j8' parallel build
  Makefile.config:493: *** Error: No libbpf devel library found, please install libbpf-devel.  Stop.
  make[1]: *** [Makefile.perf:225: sub-make] Error 2
  make: *** [Makefile:70: all] Error 2
  make: Leaving directory '/home/acme/git/perf/tools/perf'
  $
Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Cc: Toke Høiland-Jørgensen <toke@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: Andrii Nakryiko <andriin@fb.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Jesper Dangaard Brouer <brouer@redhat.com>
Cc: Martin KaFai Lau <kafai@fb.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Song Liu <songliubraving@fb.com>
Cc: Yonghong Song <yhs@fb.com>
Cc: bpf@vger.kernel.org
Cc: netdev@vger.kernel.org
Link: http://lore.kernel.org/lkml/20191126121253.28253-1-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent a5732681
...@@ -96,7 +96,8 @@ FEATURE_TESTS_EXTRA := \ ...@@ -96,7 +96,8 @@ FEATURE_TESTS_EXTRA := \
cxx \ cxx \
llvm \ llvm \
llvm-version \ llvm-version \
clang clang \
libbpf
FEATURE_TESTS ?= $(FEATURE_TESTS_BASIC) FEATURE_TESTS ?= $(FEATURE_TESTS_BASIC)
......
...@@ -53,6 +53,7 @@ FILES= \ ...@@ -53,6 +53,7 @@ FILES= \
test-zlib.bin \ test-zlib.bin \
test-lzma.bin \ test-lzma.bin \
test-bpf.bin \ test-bpf.bin \
test-libbpf.bin \
test-get_cpuid.bin \ test-get_cpuid.bin \
test-sdt.bin \ test-sdt.bin \
test-cxx.bin \ test-cxx.bin \
...@@ -270,6 +271,9 @@ $(OUTPUT)test-get_cpuid.bin: ...@@ -270,6 +271,9 @@ $(OUTPUT)test-get_cpuid.bin:
$(OUTPUT)test-bpf.bin: $(OUTPUT)test-bpf.bin:
$(BUILD) $(BUILD)
$(OUTPUT)test-libbpf.bin:
$(BUILD) -lbpf
$(OUTPUT)test-sdt.bin: $(OUTPUT)test-sdt.bin:
$(BUILD) $(BUILD)
......
// SPDX-License-Identifier: GPL-2.0
#include <bpf/libbpf.h>
int main(void)
{
return bpf_object__open("test") ? 0 : -1;
}
...@@ -483,6 +483,16 @@ ifndef NO_LIBELF ...@@ -483,6 +483,16 @@ ifndef NO_LIBELF
ifeq ($(feature-bpf), 1) ifeq ($(feature-bpf), 1)
CFLAGS += -DHAVE_LIBBPF_SUPPORT CFLAGS += -DHAVE_LIBBPF_SUPPORT
$(call detected,CONFIG_LIBBPF) $(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
else
dummy := $(error Error: No libbpf devel library found, please install libbpf-devel);
endif
endif
endif endif
ifndef NO_DWARF ifndef NO_DWARF
......
...@@ -116,6 +116,8 @@ include ../scripts/utilities.mak ...@@ -116,6 +116,8 @@ include ../scripts/utilities.mak
# #
# Define TCMALLOC to enable tcmalloc heap profiling. # Define TCMALLOC to enable tcmalloc heap profiling.
# #
# Define LIBBPF_DYNAMIC to enable libbpf dynamic linking.
#
# As per kernel Makefile, avoid funny character set dependencies # As per kernel Makefile, avoid funny character set dependencies
unexport LC_ALL unexport LC_ALL
...@@ -360,7 +362,9 @@ export PERL_PATH ...@@ -360,7 +362,9 @@ export PERL_PATH
PERFLIBS = $(LIBAPI) $(LIBTRACEEVENT) $(LIBSUBCMD) $(LIBPERF) PERFLIBS = $(LIBAPI) $(LIBTRACEEVENT) $(LIBSUBCMD) $(LIBPERF)
ifndef NO_LIBBPF ifndef NO_LIBBPF
ifndef LIBBPF_DYNAMIC
PERFLIBS += $(LIBBPF) PERFLIBS += $(LIBBPF)
endif
endif endif
# We choose to avoid "if .. else if .. else .. endif endif" # We choose to avoid "if .. else if .. else .. endif endif"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment