Add CONFIG_LIBC as well. It is only used to determine if lack of elf support is due to support missing for libc or libelf.
Signed-off-by: David Ahern <dsah...@gmail.com> Cc: Arnaldo Carvalho de Melo <a...@ghostprotocols.net> Cc: Borislav Petkov <b...@alien8.de> Cc: Frederic Weisbecker <fweis...@gmail.com> Cc: Ingo Molnar <mi...@kernel.org> Cc: Jiri Olsa <jo...@redhat.com> Cc: Namhyung Kim <namhy...@kernel.org> Cc: Peter Zijlstra <a.p.zijls...@chello.nl> Cc: Stephane Eranian <eran...@google.com> --- tools/perf/Makefile | 103 +++++++++++++++++++++++---------------------------- tools/perf/Pconfig | 7 ++++ 2 files changed, 54 insertions(+), 56 deletions(-) diff --git a/tools/perf/Makefile b/tools/perf/Makefile index 0060275..9bb12b5 100644 --- a/tools/perf/Makefile +++ b/tools/perf/Makefile @@ -36,8 +36,6 @@ include config/utilities.mak # # Define NO_DEMANGLE if you do not want C++ symbol demangling. # -# Define NO_LIBELF if you do not want libelf dependency (e.g. cross-builds) -# # Define NO_LIBUNWIND if you do not want libunwind dependency for dwarf # backtrace post unwind. # @@ -545,30 +543,22 @@ ifneq ($(MAKECMDGOALS),tags) # because maintaining the nesting to match is a pain. If # we had "elif" things would have been much nicer... -ifdef NO_LIBELF - NO_DWARF := 1 - NO_DEMANGLE := 1 - NO_LIBUNWIND := 1 -else -FLAGS_LIBELF=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -ifneq ($(call try-cc,$(SOURCE_LIBELF),$(FLAGS_LIBELF),libelf),y) - FLAGS_GLIBC=$(ALL_CFLAGS) $(ALL_LDFLAGS) - ifeq ($(call try-cc,$(SOURCE_GLIBC),$(FLAGS_GLIBC),glibc),y) - LIBC_SUPPORT := 1 - endif - ifeq ($(BIONIC),1) - LIBC_SUPPORT := 1 - endif - ifeq ($(LIBC_SUPPORT),1) - msg := $(warning No libelf found, disables 'probe' tool, please install elfutils-libelf-devel/libelf-dev); +ifdef CONFIG_LIBELF + FLAGS_LIBELF=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) + + # try to compile with libelf support ... + ifneq ($(call try-cc,$(SOURCE_LIBELF),$(FLAGS_LIBELF),libelf),y) + FLAGS_GLIBC=$(ALL_CFLAGS) $(ALL_LDFLAGS) + # ... it failed. Is the failure due to missing libc or libelf + # development support? + ifneq ($(call try-cc,$(SOURCE_GLIBC),$(FLAGS_GLIBC),glibc),y) + $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static or disable CONFIG_LIBC) + endif + + # libelf not installed + $(error No libelf found, please install elfutils-libelf-devel/libelf-dev or disable CONFIG_LIBELF); + endif - NO_LIBELF := 1 - NO_DWARF := 1 - NO_DEMANGLE := 1 - else - msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static); - endif -else # for linking with debug library, run like: # make DEBUG=1 LIBDW_DIR=/opt/libdw/ ifdef LIBDW_DIR @@ -576,13 +566,17 @@ else LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib endif + # libelf supported - what about dwarf? FLAGS_DWARF=$(ALL_CFLAGS) $(LIBDW_CFLAGS) -ldw -lelf $(LIBDW_LDFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) ifneq ($(call try-cc,$(SOURCE_DWARF),$(FLAGS_DWARF),libdw),y) msg := $(warning No libdw.h found or old libdw.h found or elfutils is older than 0.138, disables dwarf support. Please install new elfutils-devel/libdw-dev); NO_DWARF := 1 - endif # Dwarf support -endif # SOURCE_LIBELF -endif # NO_LIBELF + endif +else + NO_DWARF := 1 + NO_DEMANGLE := 1 + NO_LIBUNWIND := 1 +endif # There's only x86 (both 32 and 64) support for CFI unwind so far ifneq ($(ARCH),x86) @@ -610,41 +604,38 @@ ifneq ($(OUTPUT),) BASIC_CFLAGS += -I$(OUTPUT) endif -ifdef NO_LIBELF -EXTLIBS := $(filter-out -lelf,$(EXTLIBS)) +ifdef CONFIG_LIBELF + BASIC_CFLAGS += -DLIBELF_SUPPORT -# Remove ELF/DWARF dependent codes -LIB_OBJS := $(filter-out $(OUTPUT)util/symbol-elf.o,$(LIB_OBJS)) -LIB_OBJS := $(filter-out $(OUTPUT)util/dwarf-aux.o,$(LIB_OBJS)) -LIB_OBJS := $(filter-out $(OUTPUT)util/probe-event.o,$(LIB_OBJS)) -LIB_OBJS := $(filter-out $(OUTPUT)util/probe-finder.o,$(LIB_OBJS)) + FLAGS_LIBELF=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) + ifeq ($(call try-cc,$(SOURCE_ELF_MMAP),$(FLAGS_LIBELF),-DLIBELF_MMAP),y) + BASIC_CFLAGS += -DLIBELF_MMAP + endif -BUILTIN_OBJS := $(filter-out $(OUTPUT)builtin-probe.o,$(BUILTIN_OBJS)) + ifndef NO_DWARF + ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined) + msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled); + else + BASIC_CFLAGS := -DDWARF_SUPPORT $(LIBDW_CFLAGS) $(BASIC_CFLAGS) + BASIC_LDFLAGS := $(LIBDW_LDFLAGS) $(BASIC_LDFLAGS) + EXTLIBS += -lelf -ldw + LIB_OBJS += $(OUTPUT)util/probe-finder.o + LIB_OBJS += $(OUTPUT)util/dwarf-aux.o + endif # PERF_HAVE_DWARF_REGS + endif # NO_DWARF -# Use minimal symbol handling -LIB_OBJS += $(OUTPUT)util/symbol-minimal.o +else + EXTLIBS := $(filter-out -lelf,$(EXTLIBS)) -else # NO_LIBELF -BASIC_CFLAGS += -DLIBELF_SUPPORT + # Remove ELF/DWARF dependent codes + LIB_OBJS := $(filter-out $(OUTPUT)util/symbol-elf.o,$(LIB_OBJS)) + LIB_OBJS := $(filter-out $(OUTPUT)util/probe-event.o,$(LIB_OBJS)) + BUILTIN_OBJS := $(filter-out $(OUTPUT)builtin-probe.o,$(BUILTIN_OBJS)) -FLAGS_LIBELF=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -ifeq ($(call try-cc,$(SOURCE_ELF_MMAP),$(FLAGS_LIBELF),-DLIBELF_MMAP),y) - BASIC_CFLAGS += -DLIBELF_MMAP + # Use minimal symbol handling + LIB_OBJS += $(OUTPUT)util/symbol-minimal.o endif -ifndef NO_DWARF -ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined) - msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled); -else - BASIC_CFLAGS := -DDWARF_SUPPORT $(LIBDW_CFLAGS) $(BASIC_CFLAGS) - BASIC_LDFLAGS := $(LIBDW_LDFLAGS) $(BASIC_LDFLAGS) - EXTLIBS += -lelf -ldw - LIB_OBJS += $(OUTPUT)util/probe-finder.o - LIB_OBJS += $(OUTPUT)util/dwarf-aux.o -endif # PERF_HAVE_DWARF_REGS -endif # NO_DWARF -endif # NO_LIBELF - ifndef NO_LIBUNWIND BASIC_CFLAGS += -DLIBUNWIND_SUPPORT EXTLIBS += $(LIBUNWIND_LIBS) diff --git a/tools/perf/Pconfig b/tools/perf/Pconfig index 367cc65..334674c 100644 --- a/tools/perf/Pconfig +++ b/tools/perf/Pconfig @@ -4,6 +4,13 @@ config NEWT config GTK2 bool "Enable GTK-based UI" +config LIBC + bool "Development support for libc is available - glibc or bionic" + +config LIBELF + bool "Enable support for libelf" + depends on LIBC + config LIBPERL bool "Enable support for perl scripting engine" -- 1.7.10.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/