lkml.org 
[lkml]   [2015]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 04/31] perf tools: Make perf depend on libbpf
    Date
    By adding libbpf into perf's Makefile, this patch enables perf to build
    libbpf during building if libelf is found and neither NO_LIBELF nor
    NO_LIBBPF is set. The newly introduced code is similar to libapi and
    libtraceevent building in Makefile.perf.

    MANIFEST is also updated for 'make perf-*-src-pkg'.

    Append make_no_libbpf to tools/perf/tests/make.

    'bpf' feature check is appended into default FEATURE_TESTS and
    FEATURE_DISPLAY, so perf will check API version of bpf in
    /path/to/kernel/include/uapi/linux/bpf.h. Which should not fail except
    when we are trying to port this code to an old kernel.

    Error messages are also updated to notify users about the disable of BPF
    support of 'perf record' if libelf is missed or BPF API check failed.

    tools/lib/bpf is added into TAG_FOLDERS to allow us to navigate on
    libbpf files when working on perf using tools/perf/tags.

    Signed-off-by: Wang Nan <wangnan0@huawei.com>
    Acked-by: Alexei Starovoitov <ast@plumgrid.com>
    Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: He Kuang <hekuang@huawei.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kaixu Xia <xiakaixu@huawei.com>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/1435716878-189507-24-git-send-email-wangnan0@huawei.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/build/Makefile.feature | 6 ++++--
    tools/perf/MANIFEST | 3 +++
    tools/perf/Makefile.perf | 19 +++++++++++++++++--
    tools/perf/config/Makefile | 19 ++++++++++++++++++-
    tools/perf/tests/make | 4 +++-
    5 files changed, 45 insertions(+), 6 deletions(-)

    diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
    index 2975632..5ec6b37 100644
    --- a/tools/build/Makefile.feature
    +++ b/tools/build/Makefile.feature
    @@ -51,7 +51,8 @@ FEATURE_TESTS ?= \
    timerfd \
    libdw-dwarf-unwind \
    zlib \
    - lzma
    + lzma \
    + bpf

    FEATURE_DISPLAY ?= \
    dwarf \
    @@ -67,7 +68,8 @@ FEATURE_DISPLAY ?= \
    libunwind \
    libdw-dwarf-unwind \
    zlib \
    - lzma
    + lzma \
    + bpf

    # Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features.
    # If in the future we need per-feature checks/flags for features not
    diff --git a/tools/perf/MANIFEST b/tools/perf/MANIFEST
    index af009bd..56fe0c9 100644
    --- a/tools/perf/MANIFEST
    +++ b/tools/perf/MANIFEST
    @@ -17,6 +17,7 @@ tools/build
    tools/arch/x86/include/asm/atomic.h
    tools/arch/x86/include/asm/rmwcc.h
    tools/lib/traceevent
    +tools/lib/bpf
    tools/lib/api
    tools/lib/bpf
    tools/lib/hweight.c
    @@ -67,6 +68,8 @@ arch/*/lib/memset*.S
    include/linux/poison.h
    include/linux/hw_breakpoint.h
    include/uapi/linux/perf_event.h
    +include/uapi/linux/bpf.h
    +include/uapi/linux/bpf_common.h
    include/uapi/linux/const.h
    include/uapi/linux/swab.h
    include/uapi/linux/hw_breakpoint.h
    diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
    index d9863cb..a6a789e 100644
    --- a/tools/perf/Makefile.perf
    +++ b/tools/perf/Makefile.perf
    @@ -145,6 +145,7 @@ AWK = awk

    LIB_DIR = $(srctree)/tools/lib/api/
    TRACE_EVENT_DIR = $(srctree)/tools/lib/traceevent/
    +BPF_DIR = $(srctree)/tools/lib/bpf/

    # include config/Makefile by default and rule out
    # non-config cases
    @@ -180,6 +181,7 @@ strip-libs = $(filter-out -l%,$(1))

    ifneq ($(OUTPUT),)
    TE_PATH=$(OUTPUT)
    + BPF_PATH=$(OUTPUT)
    ifneq ($(subdir),)
    LIB_PATH=$(OUTPUT)/../lib/api/
    else
    @@ -188,6 +190,7 @@ endif
    else
    TE_PATH=$(TRACE_EVENT_DIR)
    LIB_PATH=$(LIB_DIR)
    + BPF_PATH=$(BPF_DIR)
    endif

    LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
    @@ -199,6 +202,8 @@ LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS = -Xlinker --dynamic-list=$(LIBTRACEEVENT_DYN
    LIBAPI = $(LIB_PATH)libapi.a
    export LIBAPI

    +LIBBPF = $(BPF_PATH)libbpf.a
    +
    # python extension build directories
    PYTHON_EXTBUILD := $(OUTPUT)python_ext_build/
    PYTHON_EXTBUILD_LIB := $(PYTHON_EXTBUILD)lib/
    @@ -251,6 +256,9 @@ export PERL_PATH
    LIB_FILE=$(OUTPUT)libperf.a

    PERFLIBS = $(LIB_FILE) $(LIBAPI) $(LIBTRACEEVENT)
    +ifndef NO_LIBBPF
    + PERFLIBS += $(LIBBPF)
    +endif

    # We choose to avoid "if .. else if .. else .. endif endif"
    # because maintaining the nesting to match is a pain. If
    @@ -420,6 +428,13 @@ $(LIBAPI)-clean:
    $(call QUIET_CLEAN, libapi)
    $(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) clean >/dev/null

    +$(LIBBPF): FORCE
    + $(Q)$(MAKE) -C $(BPF_DIR) O=$(OUTPUT) $(OUTPUT)libbpf.a
    +
    +$(LIBBPF)-clean:
    + $(call QUIET_CLEAN, libbpf)
    + $(Q)$(MAKE) -C $(BPF_DIR) O=$(OUTPUT) clean >/dev/null
    +
    help:
    @echo 'Perf make targets:'
    @echo ' doc - make *all* documentation (see below)'
    @@ -459,7 +474,7 @@ INSTALL_DOC_TARGETS += quick-install-doc quick-install-man quick-install-html
    $(DOC_TARGETS):
    $(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) $(@:doc=all)

    -TAG_FOLDERS= . ../lib/traceevent ../lib/api ../lib/symbol
    +TAG_FOLDERS= . ../lib/traceevent ../lib/api ../lib/symbol ../lib/bpf
    TAG_FILES= ../../include/uapi/linux/perf_event.h

    TAGS:
    @@ -567,7 +582,7 @@ config-clean:
    $(call QUIET_CLEAN, config)
    $(Q)$(MAKE) -C $(srctree)/tools/build/feature/ clean >/dev/null

    -clean: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean config-clean
    +clean: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean config-clean
    $(call QUIET_CLEAN, core-objs) $(RM) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf-with-kcore $(LANG_BINDINGS)
    $(Q)find . -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
    $(Q)$(RM) $(OUTPUT).config-detected
    diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
    index 827557f..38a4144 100644
    --- a/tools/perf/config/Makefile
    +++ b/tools/perf/config/Makefile
    @@ -106,6 +106,7 @@ ifdef LIBBABELTRACE
    FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
    endif

    +FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/arch/$(ARCH)/include/uapi -I$(srctree)/include/uapi
    # include ARCH specific config
    -include $(src-perf)/arch/$(ARCH)/Makefile

    @@ -233,6 +234,7 @@ ifdef NO_LIBELF
    NO_DEMANGLE := 1
    NO_LIBUNWIND := 1
    NO_LIBDW_DWARF_UNWIND := 1
    + NO_LIBBPF := 1
    else
    ifeq ($(feature-libelf), 0)
    ifeq ($(feature-glibc), 1)
    @@ -242,13 +244,14 @@ else
    LIBC_SUPPORT := 1
    endif
    ifeq ($(LIBC_SUPPORT),1)
    - msg := $(warning No libelf found, disables 'probe' tool, please install elfutils-libelf-devel/libelf-dev);
    + msg := $(warning No libelf found, disables 'probe' tool and BPF support in 'perf record', please install elfutils-libelf-devel/libelf-dev);

    NO_LIBELF := 1
    NO_DWARF := 1
    NO_DEMANGLE := 1
    NO_LIBUNWIND := 1
    NO_LIBDW_DWARF_UNWIND := 1
    + NO_LIBBPF := 1
    else
    ifneq ($(filter s% -static%,$(LDFLAGS),),)
    msg := $(error No static glibc found, please install glibc-static);
    @@ -305,6 +308,13 @@ ifndef NO_LIBELF
    $(call detected,CONFIG_DWARF)
    endif # PERF_HAVE_DWARF_REGS
    endif # NO_DWARF
    +
    + ifndef NO_LIBBPF
    + ifeq ($(feature-bpf), 1)
    + CFLAGS += -DHAVE_LIBBPF_SUPPORT
    + $(call detected,CONFIG_LIBBPF)
    + endif
    + endif # NO_LIBBPF
    endif # NO_LIBELF

    ifeq ($(ARCH),powerpc)
    @@ -320,6 +330,13 @@ ifndef NO_LIBUNWIND
    endif
    endif

    +ifndef NO_LIBBPF
    + ifneq ($(feature-bpf), 1)
    + msg := $(warning BPF API too old. Please install recent kernel headers. BPF support in 'perf record' is disabled.)
    + NO_LIBBPF := 1
    + endif
    +endif
    +
    dwarf-post-unwind := 1
    dwarf-post-unwind-text := BUG

    diff --git a/tools/perf/tests/make b/tools/perf/tests/make
    index ba31c4b..2cbd0c6 100644
    --- a/tools/perf/tests/make
    +++ b/tools/perf/tests/make
    @@ -44,6 +44,7 @@ make_no_libnuma := NO_LIBNUMA=1
    make_no_libaudit := NO_LIBAUDIT=1
    make_no_libbionic := NO_LIBBIONIC=1
    make_no_auxtrace := NO_AUXTRACE=1
    +make_no_libbpf := NO_LIBBPF=1
    make_tags := tags
    make_cscope := cscope
    make_help := help
    @@ -66,7 +67,7 @@ make_static := LDFLAGS=-static
    make_minimal := NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1
    make_minimal += NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1
    make_minimal += NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1
    -make_minimal += NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1
    +make_minimal += NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1

    # $(run) contains all available tests
    run := make_pure
    @@ -94,6 +95,7 @@ run += make_no_libnuma
    run += make_no_libaudit
    run += make_no_libbionic
    run += make_no_auxtrace
    +run += make_no_libbpf
    run += make_help
    run += make_doc
    run += make_perf_o
    --
    2.1.0


    \
     
     \ /
      Last update: 2015-08-29 06:41    [W:4.129 / U:0.296 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site