lkml.org 
[lkml]   [2015]   [Jun]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v9 23/50] 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.

    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.

    Signed-off-by: Wang Nan <wangnan0@huawei.com>
    ---
    tools/perf/MANIFEST | 3 +++
    tools/perf/Makefile.perf | 19 +++++++++++++++++--
    tools/perf/config/Makefile | 19 ++++++++++++++++++-
    tools/perf/tests/make | 4 +++-
    4 files changed, 41 insertions(+), 4 deletions(-)

    diff --git a/tools/perf/MANIFEST b/tools/perf/MANIFEST
    index fe50a1b..2c430dd 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/symbol/kallsyms.c
    tools/lib/symbol/kallsyms.h
    @@ -67,6 +68,8 @@ include/linux/poison.h
    include/linux/hw_breakpoint.h
    include/linux/rbtree_augmented.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 1af0cfe..5f453a8 100644
    --- a/tools/perf/Makefile.perf
    +++ b/tools/perf/Makefile.perf
    @@ -125,6 +125,7 @@ STRIP = strip

    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
    @@ -160,6 +161,7 @@ strip-libs = $(filter-out -l%,$(1))

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

    LIBTRACEEVENT = $(TE_PATH)libtraceevent.a
    @@ -179,6 +182,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/
    @@ -231,6 +236,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
    @@ -400,6 +408,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)'
    @@ -439,7 +454,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:
    @@ -542,7 +557,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) .config-detected
    diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
    index 317001c..1b387ec 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);
    @@ -301,6 +304,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)
    @@ -316,6 +326,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 65280d2..acf4634 100644
    --- a/tools/perf/tests/make
    +++ b/tools/perf/tests/make
    @@ -33,6 +33,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
    @@ -53,7 +54,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
    @@ -76,6 +77,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
    --
    1.8.3.4


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