diff options
Diffstat (limited to 'tools/perf/Makefile')
-rw-r--r-- | tools/perf/Makefile | 142 |
1 files changed, 83 insertions, 59 deletions
diff --git a/tools/perf/Makefile b/tools/perf/Makefile index d75c28a825f5..41abb90df50d 100644 --- a/tools/perf/Makefile +++ b/tools/perf/Makefile | |||
@@ -157,9 +157,8 @@ all:: | |||
157 | # | 157 | # |
158 | # Define NO_DWARF if you do not want debug-info analysis feature at all. | 158 | # Define NO_DWARF if you do not want debug-info analysis feature at all. |
159 | 159 | ||
160 | $(shell sh -c 'mkdir -p $(OUTPUT)scripts/python/Perf-Trace-Util/' 2> /dev/null) | 160 | $(shell sh -c 'mkdir -p $(OUTPUT)scripts/{perl,python}/Perf-Trace-Util/' 2> /dev/null) |
161 | $(shell sh -c 'mkdir -p $(OUTPUT)scripts/perl/Perf-Trace-Util/' 2> /dev/null) | 161 | $(shell sh -c 'mkdir -p $(OUTPUT)util/{ui/browsers,scripting-engines}/' 2> /dev/null) |
162 | $(shell sh -c 'mkdir -p $(OUTPUT)util/scripting-engines/' 2> /dev/null) | ||
163 | $(shell sh -c 'mkdir $(OUTPUT)bench' 2> /dev/null) | 162 | $(shell sh -c 'mkdir $(OUTPUT)bench' 2> /dev/null) |
164 | 163 | ||
165 | $(OUTPUT)PERF-VERSION-FILE: .FORCE-PERF-VERSION-FILE | 164 | $(OUTPUT)PERF-VERSION-FILE: .FORCE-PERF-VERSION-FILE |
@@ -285,14 +284,10 @@ else | |||
285 | QUIET_STDERR = ">/dev/null 2>&1" | 284 | QUIET_STDERR = ">/dev/null 2>&1" |
286 | endif | 285 | endif |
287 | 286 | ||
288 | BITBUCKET = "/dev/null" | 287 | -include feature-tests.mak |
289 | 288 | ||
290 | 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) | 289 | ifeq ($(call try-cc,$(SOURCE_HELLO),-Werror -fstack-protector-all),y) |
291 | BITBUCKET = .perf.dev.null | 290 | CFLAGS := $(CFLAGS) -fstack-protector-all |
292 | endif | ||
293 | |||
294 | 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) | ||
295 | CFLAGS := $(CFLAGS) -fstack-protector-all | ||
296 | endif | 291 | endif |
297 | 292 | ||
298 | 293 | ||
@@ -508,7 +503,8 @@ PERFLIBS = $(LIB_FILE) | |||
508 | -include config.mak | 503 | -include config.mak |
509 | 504 | ||
510 | ifndef NO_DWARF | 505 | ifndef NO_DWARF |
511 | 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) | 506 | FLAGS_DWARF=$(ALL_CFLAGS) -I/usr/include/elfutils -ldw -lelf $(ALL_LDFLAGS) $(EXTLIBS) |
507 | ifneq ($(call try-cc,$(SOURCE_DWARF),$(FLAGS_DWARF)),y) | ||
512 | 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); | 508 | 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); |
513 | NO_DWARF := 1 | 509 | NO_DWARF := 1 |
514 | endif # Dwarf support | 510 | endif # Dwarf support |
@@ -536,16 +532,18 @@ ifneq ($(OUTPUT),) | |||
536 | BASIC_CFLAGS += -I$(OUTPUT) | 532 | BASIC_CFLAGS += -I$(OUTPUT) |
537 | endif | 533 | endif |
538 | 534 | ||
539 | 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) | 535 | FLAGS_LIBELF=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) |
540 | 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) | 536 | ifneq ($(call try-cc,$(SOURCE_LIBELF),$(FLAGS_LIBELF)),y) |
541 | msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static); | 537 | FLAGS_GLIBC=$(ALL_CFLAGS) $(ALL_LDFLAGS) |
538 | ifneq ($(call try-cc,$(SOURCE_GLIBC),$(FLAGS_GLIBC)),y) | ||
539 | msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static); | ||
540 | else | ||
541 | msg := $(error No libelf.h/libelf found, please install libelf-dev/elfutils-libelf-devel); | ||
542 | endif | ||
542 | endif | 543 | endif |
543 | 544 | ||
544 | 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) | 545 | ifneq ($(call try-cc,$(SOURCE_ELF_MMAP),$(FLAGS_COMMON)),y) |
545 | BASIC_CFLAGS += -DLIBELF_NO_MMAP | 546 | BASIC_CFLAGS += -DLIBELF_NO_MMAP |
546 | endif | ||
547 | else | ||
548 | msg := $(error No libelf.h/libelf found, please install libelf-dev/elfutils-libelf-devel and glibc-dev[el]); | ||
549 | endif | 547 | endif |
550 | 548 | ||
551 | ifndef NO_DWARF | 549 | ifndef NO_DWARF |
@@ -561,64 +559,86 @@ endif # NO_DWARF | |||
561 | ifdef NO_NEWT | 559 | ifdef NO_NEWT |
562 | BASIC_CFLAGS += -DNO_NEWT_SUPPORT | 560 | BASIC_CFLAGS += -DNO_NEWT_SUPPORT |
563 | else | 561 | else |
564 | 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) | 562 | FLAGS_NEWT=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -lnewt |
565 | msg := $(warning newt not found, disables TUI support. Please install newt-devel or libnewt-dev); | 563 | ifneq ($(call try-cc,$(SOURCE_NEWT),$(FLAGS_NEWT)),y) |
566 | BASIC_CFLAGS += -DNO_NEWT_SUPPORT | 564 | msg := $(warning newt not found, disables TUI support. Please install newt-devel or libnewt-dev); |
567 | else | 565 | BASIC_CFLAGS += -DNO_NEWT_SUPPORT |
568 | # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h | 566 | else |
569 | BASIC_CFLAGS += -I/usr/include/slang | 567 | # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h |
570 | EXTLIBS += -lnewt -lslang | 568 | BASIC_CFLAGS += -I/usr/include/slang |
571 | LIB_OBJS += $(OUTPUT)util/newt.o | 569 | EXTLIBS += -lnewt -lslang |
572 | endif | 570 | LIB_OBJS += $(OUTPUT)util/ui/setup.o |
573 | endif # NO_NEWT | 571 | LIB_OBJS += $(OUTPUT)util/ui/browser.o |
574 | 572 | LIB_OBJS += $(OUTPUT)util/ui/browsers/annotate.o | |
575 | ifndef NO_LIBPERL | 573 | LIB_OBJS += $(OUTPUT)util/ui/browsers/hists.o |
576 | PERL_EMBED_LDOPTS = `perl -MExtUtils::Embed -e ldopts 2>/dev/null` | 574 | LIB_OBJS += $(OUTPUT)util/ui/browsers/map.o |
577 | PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null` | 575 | LIB_OBJS += $(OUTPUT)util/ui/helpline.o |
576 | LIB_OBJS += $(OUTPUT)util/ui/progress.o | ||
577 | LIB_OBJS += $(OUTPUT)util/ui/util.o | ||
578 | LIB_H += util/ui/browser.h | ||
579 | LIB_H += util/ui/browsers/map.h | ||
580 | LIB_H += util/ui/helpline.h | ||
581 | LIB_H += util/ui/libslang.h | ||
582 | LIB_H += util/ui/progress.h | ||
583 | LIB_H += util/ui/util.h | ||
584 | endif | ||
578 | endif | 585 | endif |
579 | 586 | ||
580 | 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) | 587 | ifdef NO_LIBPERL |
581 | BASIC_CFLAGS += -DNO_LIBPERL | 588 | BASIC_CFLAGS += -DNO_LIBPERL |
582 | else | 589 | else |
583 | ALL_LDFLAGS += $(PERL_EMBED_LDOPTS) | 590 | PERL_EMBED_LDOPTS = `perl -MExtUtils::Embed -e ldopts 2>/dev/null` |
584 | LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-perl.o | 591 | PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null` |
585 | LIB_OBJS += $(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o | 592 | FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS) |
586 | endif | ||
587 | 593 | ||
588 | ifndef NO_LIBPYTHON | 594 | ifneq ($(call try-cc,$(SOURCE_PERL_EMBED),$(FLAGS_PERL_EMBED)),y) |
589 | PYTHON_EMBED_LDOPTS = `python-config --ldflags 2>/dev/null` | 595 | BASIC_CFLAGS += -DNO_LIBPERL |
590 | PYTHON_EMBED_CCOPTS = `python-config --cflags 2>/dev/null` | 596 | else |
597 | ALL_LDFLAGS += $(PERL_EMBED_LDOPTS) | ||
598 | LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-perl.o | ||
599 | LIB_OBJS += $(OUTPUT)scripts/perl/Perf-Trace-Util/Context.o | ||
600 | endif | ||
591 | endif | 601 | endif |
592 | 602 | ||
593 | 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) | 603 | ifdef NO_LIBPYTHON |
594 | BASIC_CFLAGS += -DNO_LIBPYTHON | 604 | BASIC_CFLAGS += -DNO_LIBPYTHON |
595 | else | 605 | else |
596 | ALL_LDFLAGS += $(PYTHON_EMBED_LDOPTS) | 606 | PYTHON_EMBED_LDOPTS = `python-config --ldflags 2>/dev/null` |
597 | LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-python.o | 607 | PYTHON_EMBED_CCOPTS = `python-config --cflags 2>/dev/null` |
598 | LIB_OBJS += $(OUTPUT)scripts/python/Perf-Trace-Util/Context.o | 608 | FLAGS_PYTHON_EMBED=$(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS) |
609 | ifneq ($(call try-cc,$(SOURCE_PYTHON_EMBED),$(FLAGS_PYTHON_EMBED)),y) | ||
610 | BASIC_CFLAGS += -DNO_LIBPYTHON | ||
611 | else | ||
612 | ALL_LDFLAGS += $(PYTHON_EMBED_LDOPTS) | ||
613 | LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-python.o | ||
614 | LIB_OBJS += $(OUTPUT)scripts/python/Perf-Trace-Util/Context.o | ||
615 | endif | ||
599 | endif | 616 | endif |
600 | 617 | ||
601 | ifdef NO_DEMANGLE | 618 | ifdef NO_DEMANGLE |
602 | BASIC_CFLAGS += -DNO_DEMANGLE | 619 | BASIC_CFLAGS += -DNO_DEMANGLE |
603 | else | 620 | else |
604 | ifdef HAVE_CPLUS_DEMANGLE | 621 | ifdef HAVE_CPLUS_DEMANGLE |
605 | EXTLIBS += -liberty | 622 | EXTLIBS += -liberty |
606 | BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE | 623 | BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE |
607 | else | 624 | else |
608 | 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") | 625 | FLAGS_BFD=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -lbfd |
609 | 626 | has_bfd := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD)) | |
610 | ifeq ($(has_bfd),y) | 627 | ifeq ($(has_bfd),y) |
611 | EXTLIBS += -lbfd | 628 | EXTLIBS += -lbfd |
612 | else | 629 | else |
613 | 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") | 630 | FLAGS_BFD_IBERTY=$(FLAGS_BFD) -liberty |
631 | has_bfd_iberty := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY)) | ||
614 | ifeq ($(has_bfd_iberty),y) | 632 | ifeq ($(has_bfd_iberty),y) |
615 | EXTLIBS += -lbfd -liberty | 633 | EXTLIBS += -lbfd -liberty |
616 | else | 634 | else |
617 | 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") | 635 | FLAGS_BFD_IBERTY_Z=$(FLAGS_BFD_IBERTY) -lz |
636 | has_bfd_iberty_z := $(call try-cc,$(SOURCE_BFD),$(FLAGS_BFD_IBERTY_Z)) | ||
618 | ifeq ($(has_bfd_iberty_z),y) | 637 | ifeq ($(has_bfd_iberty_z),y) |
619 | EXTLIBS += -lbfd -liberty -lz | 638 | EXTLIBS += -lbfd -liberty -lz |
620 | else | 639 | else |
621 | 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") | 640 | FLAGS_CPLUS_DEMANGLE=$(ALL_CFLAGS) $(ALL_LDFLAGS) $(EXTLIBS) -liberty |
641 | has_cplus_demangle := $(call try-cc,$(SOURCE_CPLUS_DEMANGLE),$(FLAGS_CPLUS_DEMANGLE)) | ||
622 | ifeq ($(has_cplus_demangle),y) | 642 | ifeq ($(has_cplus_demangle),y) |
623 | EXTLIBS += -liberty | 643 | EXTLIBS += -liberty |
624 | BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE | 644 | BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE |
@@ -867,7 +887,7 @@ export TAR INSTALL DESTDIR SHELL_PATH | |||
867 | 887 | ||
868 | SHELL = $(SHELL_PATH) | 888 | SHELL = $(SHELL_PATH) |
869 | 889 | ||
870 | all:: .perf.dev.null shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) $(OUTPUT)PERF-BUILD-OPTIONS | 890 | all:: shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) $(OUTPUT)PERF-BUILD-OPTIONS |
871 | ifneq (,$X) | 891 | ifneq (,$X) |
872 | $(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) perf$X)), test '$p' -ef '$p$X' || $(RM) '$p';) | 892 | $(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) perf$X)), test '$p' -ef '$p$X' || $(RM) '$p';) |
873 | endif | 893 | endif |
@@ -958,7 +978,16 @@ $(OUTPUT)builtin-init-db.o: builtin-init-db.c $(OUTPUT)PERF-CFLAGS | |||
958 | $(OUTPUT)util/config.o: util/config.c $(OUTPUT)PERF-CFLAGS | 978 | $(OUTPUT)util/config.o: util/config.c $(OUTPUT)PERF-CFLAGS |
959 | $(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $< | 979 | $(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $< |
960 | 980 | ||
961 | $(OUTPUT)util/newt.o: util/newt.c $(OUTPUT)PERF-CFLAGS | 981 | $(OUTPUT)util/ui/browser.o: util/ui/browser.c $(OUTPUT)PERF-CFLAGS |
982 | $(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $< | ||
983 | |||
984 | $(OUTPUT)util/ui/browsers/annotate.o: util/ui/browsers/annotate.c $(OUTPUT)PERF-CFLAGS | ||
985 | $(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $< | ||
986 | |||
987 | $(OUTPUT)util/ui/browsers/hists.o: util/ui/browsers/hists.c $(OUTPUT)PERF-CFLAGS | ||
988 | $(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $< | ||
989 | |||
990 | $(OUTPUT)util/ui/browsers/map.o: util/ui/browsers/map.c $(OUTPUT)PERF-CFLAGS | ||
962 | $(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $< | 991 | $(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) -DENABLE_SLFUTURE_CONST $< |
963 | 992 | ||
964 | $(OUTPUT)util/rbtree.o: ../../lib/rbtree.c $(OUTPUT)PERF-CFLAGS | 993 | $(OUTPUT)util/rbtree.o: ../../lib/rbtree.c $(OUTPUT)PERF-CFLAGS |
@@ -1197,11 +1226,6 @@ clean: | |||
1197 | .PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS | 1226 | .PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS |
1198 | .PHONY: .FORCE-PERF-BUILD-OPTIONS | 1227 | .PHONY: .FORCE-PERF-BUILD-OPTIONS |
1199 | 1228 | ||
1200 | .perf.dev.null: | ||
1201 | touch .perf.dev.null | ||
1202 | |||
1203 | .INTERMEDIATE: .perf.dev.null | ||
1204 | |||
1205 | ### Make sure built-ins do not have dups and listed in perf.c | 1229 | ### Make sure built-ins do not have dups and listed in perf.c |
1206 | # | 1230 | # |
1207 | check-builtins:: | 1231 | check-builtins:: |