|
@@ -285,14 +285,10 @@ else
|
|
|
QUIET_STDERR = ">/dev/null 2>&1"
|
|
|
endif
|
|
|
|
|
|
-BITBUCKET = "/dev/null"
|
|
|
+-include feature-tests.mak
|
|
|
|
|
|
-ifneq ($(shell sh -c "(echo '\#include <stdio.h>'; echo 'int main(void) { return puts(\"hi\"); }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) "$(QUIET_STDERR)" && echo y"), y)
|
|
|
- BITBUCKET = .perf.dev.null
|
|
|
-endif
|
|
|
-
|
|
|
-ifeq ($(shell sh -c "echo 'int foo(void) {char X[2]; return 3;}' | $(CC) -x c -c -Werror -fstack-protector-all - -o $(BITBUCKET) "$(QUIET_STDERR)" && echo y"), y)
|
|
|
- CFLAGS := $(CFLAGS) -fstack-protector-all
|
|
|
+ifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -fstack-protector-all),y)
|
|
|
+ CFLAGS := $(CFLAGS) -fstack-protector-all
|
|
|
endif
|
|
|
|
|
|
|
|
@@ -508,7 +504,8 @@ PERFLIBS = $(LIB_FILE)
|
|
|
-include config.mak
|
|
|
|
|
|
ifndef NO_DWARF
|
|
|
-ifneq ($(shell sh -c "(echo '\#include <dwarf.h>'; echo '\#include <libdw.h>'; echo '\#include <version.h>'; echo '\#ifndef _ELFUTILS_PREREQ'; echo '\#error'; echo '\#endif'; echo 'int main(void) { Dwarf *dbg; dbg = dwarf_begin(0, DWARF_C_READ); return (long)dbg; }') | $(CC) -x c - $(ALL_CFLAGS) -I/usr/include/elfutils -ldw -lelf -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y)
|
|
|
+FLAGS_DWARF=$(ALL_CFLAGS) -I/usr/include/elfutils -ldw -lelf $(ALL_LDFLAGS) $(EXTLIBS)
|
|
|
+ifneq ($(call try-cc,$(SOURCE_DWARF),$(FLAGS_DWARF)),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
|
|
@@ -536,16 +533,18 @@ ifneq ($(OUTPUT),)
|
|
|
BASIC_CFLAGS += -I$(OUTPUT)
|
|
|
endif
|
|
|
|
|
|
-ifeq ($(shell sh -c "(echo '\#include <libelf.h>'; echo 'int main(void) { Elf * elf = elf_begin(0, ELF_C_READ, 0); return (long)elf; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y)
|
|
|
-ifneq ($(shell sh -c "(echo '\#include <gnu/libc-version.h>'; echo 'int main(void) { const char * version = gnu_get_libc_version(); return (long)version; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y)
|
|
|
- msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static);
|
|
|
+FLAGS_LIBELF=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS)
|
|
|
+ifneq ($(call try-cc,$(SOURCE_LIBELF),$(FLAGS_LIBELF)),y)
|
|
|
+ FLAGS_GLIBC=$(ALL_CFLAGS) $(ALL_LDFLAGS)
|
|
|
+ ifneq ($(call try-cc,$(SOURCE_GLIBC),$(FLAGS_GLIBC)),y)
|
|
|
+ msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static);
|
|
|
+ else
|
|
|
+ msg := $(error No libelf.h/libelf found, please install libelf-dev/elfutils-libelf-devel);
|
|
|
+ endif
|
|
|
endif
|
|
|
|
|
|
- ifneq ($(shell sh -c "(echo '\#include <libelf.h>'; echo 'int main(void) { Elf * elf = elf_begin(0, ELF_C_READ_MMAP, 0); return (long)elf; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y)
|
|
|
- BASIC_CFLAGS += -DLIBELF_NO_MMAP
|
|
|
- endif
|
|
|
-else
|
|
|
- msg := $(error No libelf.h/libelf found, please install libelf-dev/elfutils-libelf-devel and glibc-dev[el]);
|
|
|
+ifneq ($(call try-cc,$(SOURCE_ELF_MMAP),$(FLAGS_COMMON)),y)
|
|
|
+ BASIC_CFLAGS += -DLIBELF_NO_MMAP
|
|
|
endif
|
|
|
|
|
|
ifndef NO_DWARF
|
|
@@ -561,41 +560,47 @@ endif # NO_DWARF
|
|
|
ifdef NO_NEWT
|
|
|
BASIC_CFLAGS += -DNO_NEWT_SUPPORT
|
|
|
else
|
|
|
-ifneq ($(shell sh -c "(echo '\#include <newt.h>'; echo 'int main(void) { newtInit(); newtCls(); return newtFinished(); }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -lnewt -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y)
|
|
|
- msg := $(warning newt not found, disables TUI support. Please install newt-devel or libnewt-dev);
|
|
|
- BASIC_CFLAGS += -DNO_NEWT_SUPPORT
|
|
|
-else
|
|
|
- # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
|
|
|
- BASIC_CFLAGS += -I/usr/include/slang
|
|
|
- EXTLIBS += -lnewt -lslang
|
|
|
- LIB_OBJS += $(OUTPUT)util/newt.o
|
|
|
-endif
|
|
|
-endif # NO_NEWT
|
|
|
-
|
|
|
-ifndef NO_LIBPERL
|
|
|
-PERL_EMBED_LDOPTS = `perl -MExtUtils::Embed -e ldopts 2>/dev/null`
|
|
|
-PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
|
|
|
+ FLAGS_NEWT=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -lnewt
|
|
|
+ ifneq ($(call try-cc,$(SOURCE_NEWT),$(FLAGS_NEWT)),y)
|
|
|
+ msg := $(warning newt not found, disables TUI support. Please install newt-devel or libnewt-dev);
|
|
|
+ BASIC_CFLAGS += -DNO_NEWT_SUPPORT
|
|
|
+ else
|
|
|
+ # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
|
|
|
+ BASIC_CFLAGS += -I/usr/include/slang
|
|
|
+ EXTLIBS += -lnewt -lslang
|
|
|
+ LIB_OBJS += $(OUTPUT)util/newt.o
|
|
|
+ endif
|
|
|
endif
|
|
|
|
|
|
-ifneq ($(shell sh -c "(echo '\#include <EXTERN.h>'; echo '\#include <perl.h>'; echo 'int main(void) { perl_alloc(); return 0; }') | $(CC) -x c - $(PERL_EMBED_CCOPTS) -o $(BITBUCKET) $(PERL_EMBED_LDOPTS) > /dev/null 2>&1 && echo y"), y)
|
|
|
+ifdef NO_LIBPERL
|
|
|
BASIC_CFLAGS += -DNO_LIBPERL
|
|
|
else
|
|
|
- ALL_LDFLAGS += $(PERL_EMBED_LDOPTS)
|
|
|
- LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-perl.o
|
|
|
- LIB_OBJS += $(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o
|
|
|
-endif
|
|
|
+ PERL_EMBED_LDOPTS = `perl -MExtUtils::Embed -e ldopts 2>/dev/null`
|
|
|
+ PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
|
|
|
+ PERL_EMBED_FLAGS=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
|
|
|
|
|
|
-ifndef NO_LIBPYTHON
|
|
|
-PYTHON_EMBED_LDOPTS = `python-config --ldflags 2>/dev/null`
|
|
|
-PYTHON_EMBED_CCOPTS = `python-config --cflags 2>/dev/null`
|
|
|
+ ifneq ($(call try-cc,$(SOURCE_PERL_EMBED),$(FLAGS_PERL_EMBED)),y)
|
|
|
+ BASIC_CFLAGS += -DNO_LIBPERL
|
|
|
+ else
|
|
|
+ ALL_LDFLAGS += $(PERL_EMBED_LDOPTS)
|
|
|
+ LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-perl.o
|
|
|
+ LIB_OBJS += $(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o
|
|
|
+ endif
|
|
|
endif
|
|
|
|
|
|
-ifneq ($(shell sh -c "(echo '\#include <Python.h>'; echo 'int main(void) { Py_Initialize(); return 0; }') | $(CC) -x c - $(PYTHON_EMBED_CCOPTS) -o $(BITBUCKET) $(PYTHON_EMBED_LDOPTS) > /dev/null 2>&1 && echo y"), y)
|
|
|
+ifdef NO_LIBPYTHON
|
|
|
BASIC_CFLAGS += -DNO_LIBPYTHON
|
|
|
else
|
|
|
- ALL_LDFLAGS += $(PYTHON_EMBED_LDOPTS)
|
|
|
- LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-python.o
|
|
|
- LIB_OBJS += $(OUTPUT)scripts/python/Perf-Trace-Util/Context.o
|
|
|
+ PYTHON_EMBED_LDOPTS = `python-config --ldflags 2>/dev/null`
|
|
|
+ PYTHON_EMBED_CCOPTS = `python-config --cflags 2>/dev/null`
|
|
|
+ FLAGS_PYTHON_EMBED=$(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
|
|
|
+ ifneq ($(call try-cc,$(SOURCE_PYTHON_EMBED),$(FLAGS_PYTHON_EMBED)),y)
|
|
|
+ BASIC_CFLAGS += -DNO_LIBPYTHON
|
|
|
+ else
|
|
|
+ ALL_LDFLAGS += $(PYTHON_EMBED_LDOPTS)
|
|
|
+ LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-python.o
|
|
|
+ LIB_OBJS += $(OUTPUT)scripts/python/Perf-Trace-Util/Context.o
|
|
|
+ endif
|
|
|
endif
|
|
|
|
|
|
ifdef NO_DEMANGLE
|
|
@@ -604,20 +609,23 @@ else ifdef HAVE_CPLUS_DEMANGLE
|
|
|
EXTLIBS += -liberty
|
|
|
BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE
|
|
|
else
|
|
|
- has_bfd := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd "$(QUIET_STDERR)" && echo y")
|
|
|
-
|
|
|
+ FLAGS_BFD=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd
|
|
|
+ has_bfd := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD))
|
|
|
ifeq ($(has_bfd),y)
|
|
|
EXTLIBS += -lbfd
|
|
|
else
|
|
|
- has_bfd_iberty := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd -liberty "$(QUIET_STDERR)" && echo y")
|
|
|
+ FLAGS_BFD_IBERTY=$(FLAGS_BFD) -liberty
|
|
|
+ has_bfd_iberty := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY))
|
|
|
ifeq ($(has_bfd_iberty),y)
|
|
|
EXTLIBS += -lbfd -liberty
|
|
|
else
|
|
|
- has_bfd_iberty_z := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd -liberty -lz "$(QUIET_STDERR)" && echo y")
|
|
|
+ FLAGS_BFD_IBERTY_Z=$(FLAGS_BFD_IBERTY) -lz
|
|
|
+ has_bfd_iberty_z := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY_Z))
|
|
|
ifeq ($(has_bfd_iberty_z),y)
|
|
|
EXTLIBS += -lbfd -liberty -lz
|
|
|
else
|
|
|
- has_cplus_demangle := $(shell sh -c "(echo 'extern char *cplus_demangle(const char *, int);'; echo 'int main(void) { cplus_demangle(0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) -liberty "$(QUIET_STDERR)" && echo y")
|
|
|
+ FLAGS_CPLUS_DEMANGLE=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -liberty
|
|
|
+ has_cplus_demangle := $(call try-cc,$(SOURCE_CPLUS_DEMANGLE),$(FLAGS_CPLUS_DEMANGLE))
|
|
|
ifeq ($(has_cplus_demangle),y)
|
|
|
EXTLIBS += -liberty
|
|
|
BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE
|
|
@@ -865,7 +873,7 @@ export TAR INSTALL DESTDIR SHELL_PATH
|
|
|
|
|
|
SHELL = $(SHELL_PATH)
|
|
|
|
|
|
-all:: .perf.dev.null shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) $(OUTPUT)PERF-BUILD-OPTIONS
|
|
|
+all:: shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) $(OUTPUT)PERF-BUILD-OPTIONS
|
|
|
ifneq (,$X)
|
|
|
$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) perf$X)), test '$p' -ef '$p$X' || $(RM) '$p';)
|
|
|
endif
|
|
@@ -1195,11 +1203,6 @@ clean:
|
|
|
.PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS
|
|
|
.PHONY: .FORCE-PERF-BUILD-OPTIONS
|
|
|
|
|
|
-.perf.dev.null:
|
|
|
- touch .perf.dev.null
|
|
|
-
|
|
|
-.INTERMEDIATE: .perf.dev.null
|
|
|
-
|
|
|
### Make sure built-ins do not have dups and listed in perf.c
|
|
|
#
|
|
|
check-builtins::
|