Merge branch 'linus' into perf/core, to fix conflicts
[firefly-linux-kernel-4.4.55.git] / tools / perf / config / Makefile
1
2 ifeq ($(src-perf),)
3 src-perf := $(srctree)/tools/perf
4 endif
5
6 ifeq ($(obj-perf),)
7 obj-perf := $(OUTPUT)
8 endif
9
10 ifneq ($(obj-perf),)
11 obj-perf := $(abspath $(obj-perf))/
12 endif
13
14 LIB_INCLUDE := $(srctree)/tools/lib/
15 CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)
16
17 include $(src-perf)/config/Makefile.arch
18
19 NO_PERF_REGS := 1
20
21 # Additional ARCH settings for x86
22 ifeq ($(ARCH),x86)
23   ifeq (${IS_X86_64}, 1)
24     CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT
25     ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
26     LIBUNWIND_LIBS = -lunwind -lunwind-x86_64
27   else
28     LIBUNWIND_LIBS = -lunwind -lunwind-x86
29   endif
30   NO_PERF_REGS := 0
31 endif
32
33 ifeq ($(ARCH),arm)
34   NO_PERF_REGS := 0
35   LIBUNWIND_LIBS = -lunwind -lunwind-arm
36 endif
37
38 ifeq ($(ARCH),arm64)
39   NO_PERF_REGS := 0
40   LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
41 endif
42
43 # So far there's only x86 and arm libdw unwind support merged in perf.
44 # Disable it on all other architectures in case libdw unwind
45 # support is detected in system. Add supported architectures
46 # to the check.
47 ifneq ($(ARCH),$(filter $(ARCH),x86 arm))
48   NO_LIBDW_DWARF_UNWIND := 1
49 endif
50
51 ifeq ($(ARCH),powerpc)
52   CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
53 endif
54
55 ifeq ($(LIBUNWIND_LIBS),)
56   NO_LIBUNWIND := 1
57 else
58   #
59   # For linking with debug library, run like:
60   #
61   #   make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
62   #
63   ifdef LIBUNWIND_DIR
64     LIBUNWIND_CFLAGS  = -I$(LIBUNWIND_DIR)/include
65     LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib
66   endif
67   LIBUNWIND_LDFLAGS += $(LIBUNWIND_LIBS)
68
69   # Set per-feature check compilation flags
70   FEATURE_CHECK_CFLAGS-libunwind = $(LIBUNWIND_CFLAGS)
71   FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS)
72   FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS)
73   FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS)
74 endif
75
76 ifeq ($(NO_PERF_REGS),0)
77   CFLAGS += -DHAVE_PERF_REGS_SUPPORT
78 endif
79
80 ifndef NO_LIBELF
81   # for linking with debug library, run like:
82   # make DEBUG=1 LIBDW_DIR=/opt/libdw/
83   ifdef LIBDW_DIR
84     LIBDW_CFLAGS  := -I$(LIBDW_DIR)/include
85     LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
86   endif
87   FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
88   FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) -ldw
89 endif
90
91 # include ARCH specific config
92 -include $(src-perf)/arch/$(ARCH)/Makefile
93
94 include $(src-perf)/config/utilities.mak
95
96 ifeq ($(call get-executable,$(FLEX)),)
97   dummy := $(error Error: $(FLEX) is missing on this system, please install it)
98 endif
99
100 ifeq ($(call get-executable,$(BISON)),)
101   dummy := $(error Error: $(BISON) is missing on this system, please install it)
102 endif
103
104 # Treat warnings as errors unless directed not to
105 ifneq ($(WERROR),0)
106   CFLAGS += -Werror
107 endif
108
109 ifndef DEBUG
110   DEBUG := 0
111 endif
112
113 ifeq ($(DEBUG),0)
114   CFLAGS += -O6
115 endif
116
117 ifdef PARSER_DEBUG
118   PARSER_DEBUG_BISON := -t
119   PARSER_DEBUG_FLEX  := -d
120   CFLAGS             += -DPARSER_DEBUG
121 endif
122
123 ifndef NO_LIBPYTHON
124   # Try different combinations to accommodate systems that only have
125   # python[2][-config] in weird combinations but always preferring
126   # python2 and python2-config as per pep-0394. If we catch a
127   # python[-config] in version 3, the version check will kill it.
128   PYTHON2 := $(if $(call get-executable,python2),python2,python)
129   override PYTHON := $(call get-executable-or-default,PYTHON,$(PYTHON2))
130   PYTHON2_CONFIG := \
131     $(if $(call get-executable,$(PYTHON)-config),$(PYTHON)-config,python-config)
132   override PYTHON_CONFIG := \
133     $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON2_CONFIG))
134
135   PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
136
137   PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
138   PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
139
140   FEATURE_CHECK_CFLAGS-libpython := $(PYTHON_EMBED_CCOPTS)
141   FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
142   FEATURE_CHECK_CFLAGS-libpython-version := $(PYTHON_EMBED_CCOPTS)
143   FEATURE_CHECK_LDFLAGS-libpython-version := $(PYTHON_EMBED_LDOPTS)
144 endif
145
146 CFLAGS += -fno-omit-frame-pointer
147 CFLAGS += -ggdb3
148 CFLAGS += -funwind-tables
149 CFLAGS += -Wall
150 CFLAGS += -Wextra
151 CFLAGS += -std=gnu99
152
153 # Enforce a non-executable stack, as we may regress (again) in the future by
154 # adding assembler files missing the .GNU-stack linker note.
155 LDFLAGS += -Wl,-z,noexecstack
156
157 EXTLIBS = -lelf -lpthread -lrt -lm -ldl
158
159 ifneq ($(OUTPUT),)
160   OUTPUT_FEATURES = $(OUTPUT)config/feature-checks/
161   $(shell mkdir -p $(OUTPUT_FEATURES))
162 endif
163
164 feature_check = $(eval $(feature_check_code))
165 define feature_check_code
166   feature-$(1) := $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS) $(FEATURE_CHECK_CFLAGS-$(1))" LDFLAGS="$(LDFLAGS) $(FEATURE_CHECK_LDFLAGS-$(1))" -C config/feature-checks test-$1.bin >/dev/null 2>/dev/null && echo 1 || echo 0)
167 endef
168
169 feature_set = $(eval $(feature_set_code))
170 define feature_set_code
171   feature-$(1) := 1
172 endef
173
174 #
175 # Build the feature check binaries in parallel, ignore errors, ignore return value and suppress output:
176 #
177
178 #
179 # Note that this is not a complete list of all feature tests, just
180 # those that are typically built on a fully configured system.
181 #
182 # [ Feature tests not mentioned here have to be built explicitly in
183 #   the rule that uses them - an example for that is the 'bionic'
184 #   feature check. ]
185 #
186 CORE_FEATURE_TESTS =                    \
187         backtrace                       \
188         dwarf                           \
189         fortify-source                  \
190         sync-compare-and-swap           \
191         glibc                           \
192         gtk2                            \
193         gtk2-infobar                    \
194         libaudit                        \
195         libbfd                          \
196         libelf                          \
197         libelf-getphdrnum               \
198         libelf-mmap                     \
199         libnuma                         \
200         libperl                         \
201         libpython                       \
202         libpython-version               \
203         libslang                        \
204         libunwind                       \
205         stackprotector-all              \
206         timerfd                         \
207         libdw-dwarf-unwind
208
209 LIB_FEATURE_TESTS =                     \
210         dwarf                           \
211         glibc                           \
212         gtk2                            \
213         libaudit                        \
214         libbfd                          \
215         libelf                          \
216         libnuma                         \
217         libperl                         \
218         libpython                       \
219         libslang                        \
220         libunwind                       \
221         libdw-dwarf-unwind
222
223 VF_FEATURE_TESTS =                      \
224         backtrace                       \
225         fortify-source                  \
226         sync-compare-and-swap           \
227         gtk2-infobar                    \
228         libelf-getphdrnum               \
229         libelf-mmap                     \
230         libpython-version               \
231         stackprotector-all              \
232         timerfd                         \
233         libunwind-debug-frame           \
234         bionic                          \
235         liberty                         \
236         liberty-z                       \
237         cplus-demangle
238
239 # Set FEATURE_CHECK_(C|LD)FLAGS-all for all CORE_FEATURE_TESTS features.
240 # If in the future we need per-feature checks/flags for features not
241 # mentioned in this list we need to refactor this ;-).
242 set_test_all_flags = $(eval $(set_test_all_flags_code))
243 define set_test_all_flags_code
244   FEATURE_CHECK_CFLAGS-all  += $(FEATURE_CHECK_CFLAGS-$(1))
245   FEATURE_CHECK_LDFLAGS-all += $(FEATURE_CHECK_LDFLAGS-$(1))
246 endef
247
248 $(foreach feat,$(CORE_FEATURE_TESTS),$(call set_test_all_flags,$(feat)))
249
250 #
251 # Special fast-path for the 'all features are available' case:
252 #
253 $(call feature_check,all,$(MSG))
254
255 #
256 # Just in case the build freshly failed, make sure we print the
257 # feature matrix:
258 #
259 ifeq ($(feature-all), 1)
260   #
261   # test-all.c passed - just set all the core feature flags to 1:
262   #
263   $(foreach feat,$(CORE_FEATURE_TESTS),$(call feature_set,$(feat)))
264 else
265   $(shell $(MAKE) OUTPUT=$(OUTPUT_FEATURES) CFLAGS="$(EXTRA_CFLAGS)" LDFLAGS=$(LDFLAGS) -i -j -C config/feature-checks $(addsuffix .bin,$(CORE_FEATURE_TESTS)) >/dev/null 2>&1)
266   $(foreach feat,$(CORE_FEATURE_TESTS),$(call feature_check,$(feat)))
267 endif
268
269 ifeq ($(feature-stackprotector-all), 1)
270   CFLAGS += -fstack-protector-all
271 endif
272
273 ifeq ($(DEBUG),0)
274   ifeq ($(feature-fortify-source), 1)
275     CFLAGS += -D_FORTIFY_SOURCE=2
276   endif
277 endif
278
279 CFLAGS += -I$(src-perf)/util/include
280 CFLAGS += -I$(src-perf)/arch/$(ARCH)/include
281 CFLAGS += -I$(srctree)/tools/include/
282 CFLAGS += -I$(srctree)/arch/$(ARCH)/include/uapi
283 CFLAGS += -I$(srctree)/arch/$(ARCH)/include
284 CFLAGS += -I$(srctree)/include/uapi
285 CFLAGS += -I$(srctree)/include
286
287 # $(obj-perf)      for generated common-cmds.h
288 # $(obj-perf)/util for generated bison/flex headers
289 ifneq ($(OUTPUT),)
290 CFLAGS += -I$(obj-perf)/util
291 CFLAGS += -I$(obj-perf)
292 endif
293
294 CFLAGS += -I$(src-perf)/util
295 CFLAGS += -I$(src-perf)
296 CFLAGS += -I$(LIB_INCLUDE)
297
298 CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
299
300 ifeq ($(feature-sync-compare-and-swap), 1)
301   CFLAGS += -DHAVE_SYNC_COMPARE_AND_SWAP_SUPPORT
302 endif
303
304 ifndef NO_BIONIC
305   $(call feature_check,bionic)
306   ifeq ($(feature-bionic), 1)
307     BIONIC := 1
308     EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
309     EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
310   endif
311 endif
312
313 ifdef NO_LIBELF
314   NO_DWARF := 1
315   NO_DEMANGLE := 1
316   NO_LIBUNWIND := 1
317   NO_LIBDW_DWARF_UNWIND := 1
318 else
319   ifeq ($(feature-libelf), 0)
320     ifeq ($(feature-glibc), 1)
321       LIBC_SUPPORT := 1
322     endif
323     ifeq ($(BIONIC),1)
324       LIBC_SUPPORT := 1
325     endif
326     ifeq ($(LIBC_SUPPORT),1)
327       msg := $(warning No libelf found, disables 'probe' tool, please install elfutils-libelf-devel/libelf-dev);
328
329       NO_LIBELF := 1
330       NO_DWARF := 1
331       NO_DEMANGLE := 1
332       NO_LIBUNWIND := 1
333       NO_LIBDW_DWARF_UNWIND := 1
334     else
335       ifneq ($(filter s% -static%,$(LDFLAGS),),)
336         msg := $(error No static glibc found, please install glibc-static);
337       else
338         msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]);
339       endif
340     endif
341   else
342     ifndef NO_LIBDW_DWARF_UNWIND
343       ifneq ($(feature-libdw-dwarf-unwind),1)
344         NO_LIBDW_DWARF_UNWIND := 1
345         msg := $(warning No libdw DWARF unwind found, Please install elfutils-devel/libdw-dev >= 0.158 and/or set LIBDW_DIR);
346       endif
347     endif
348     ifneq ($(feature-dwarf), 1)
349       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);
350       NO_DWARF := 1
351     endif # Dwarf support
352   endif # libelf support
353 endif # NO_LIBELF
354
355 ifndef NO_LIBELF
356   CFLAGS += -DHAVE_LIBELF_SUPPORT
357
358   ifeq ($(feature-libelf-mmap), 1)
359     CFLAGS += -DHAVE_LIBELF_MMAP_SUPPORT
360   endif
361
362   ifeq ($(feature-libelf-getphdrnum), 1)
363     CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
364   endif
365
366   # include ARCH specific config
367   -include $(src-perf)/arch/$(ARCH)/Makefile
368
369   ifndef NO_DWARF
370     ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
371       msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled);
372       NO_DWARF := 1
373     else
374       CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
375       LDFLAGS += $(LIBDW_LDFLAGS)
376       EXTLIBS += -lelf -ldw
377     endif # PERF_HAVE_DWARF_REGS
378   endif # NO_DWARF
379 endif # NO_LIBELF
380
381 ifndef NO_LIBUNWIND
382   ifneq ($(feature-libunwind), 1)
383     msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
384     NO_LIBUNWIND := 1
385   endif
386 endif
387
388 dwarf-post-unwind := 1
389 dwarf-post-unwind-text := BUG
390
391 # setup DWARF post unwinder
392 ifdef NO_LIBUNWIND
393   ifdef NO_LIBDW_DWARF_UNWIND
394     msg := $(warning Disabling post unwind, no support found.);
395     dwarf-post-unwind := 0
396   else
397     dwarf-post-unwind-text := libdw
398   endif
399 else
400   dwarf-post-unwind-text := libunwind
401   # Enable libunwind support by default.
402   ifndef NO_LIBDW_DWARF_UNWIND
403     NO_LIBDW_DWARF_UNWIND := 1
404   endif
405 endif
406
407 ifeq ($(dwarf-post-unwind),1)
408   CFLAGS += -DHAVE_DWARF_UNWIND_SUPPORT
409 else
410   NO_DWARF_UNWIND := 1
411 endif
412
413 ifndef NO_LIBUNWIND
414   ifeq ($(ARCH),$(filter $(ARCH),arm arm64))
415     $(call feature_check,libunwind-debug-frame)
416     ifneq ($(feature-libunwind-debug-frame), 1)
417       msg := $(warning No debug_frame support found in libunwind);
418       CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
419     endif
420   else
421     # non-ARM has no dwarf_find_debug_frame() function:
422     CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
423   endif
424   CFLAGS  += -DHAVE_LIBUNWIND_SUPPORT
425   EXTLIBS += $(LIBUNWIND_LIBS)
426   CFLAGS  += $(LIBUNWIND_CFLAGS)
427   LDFLAGS += $(LIBUNWIND_LDFLAGS)
428 endif
429
430 ifndef NO_LIBAUDIT
431   ifneq ($(feature-libaudit), 1)
432     msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
433     NO_LIBAUDIT := 1
434   else
435     CFLAGS += -DHAVE_LIBAUDIT_SUPPORT
436     EXTLIBS += -laudit
437   endif
438 endif
439
440 ifdef NO_NEWT
441   NO_SLANG=1
442 endif
443
444 ifndef NO_SLANG
445   ifneq ($(feature-libslang), 1)
446     msg := $(warning slang not found, disables TUI support. Please install slang-devel or libslang-dev);
447     NO_SLANG := 1
448   else
449     # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
450     CFLAGS += -I/usr/include/slang
451     CFLAGS += -DHAVE_SLANG_SUPPORT
452     EXTLIBS += -lslang
453   endif
454 endif
455
456 ifndef NO_GTK2
457   FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
458   ifneq ($(feature-gtk2), 1)
459     msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
460     NO_GTK2 := 1
461   else
462     ifeq ($(feature-gtk2-infobar), 1)
463       GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
464     endif
465     CFLAGS += -DHAVE_GTK2_SUPPORT
466     GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
467     GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
468     EXTLIBS += -ldl
469   endif
470 endif
471
472 grep-libs  = $(filter -l%,$(1))
473 strip-libs = $(filter-out -l%,$(1))
474
475 ifdef NO_LIBPERL
476   CFLAGS += -DNO_LIBPERL
477 else
478   PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
479   PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
480   PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
481   PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
482   FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
483
484   ifneq ($(feature-libperl), 1)
485     CFLAGS += -DNO_LIBPERL
486     NO_LIBPERL := 1
487     msg := $(warning Missing perl devel files. Disabling perl scripting support, consider installing perl-ExtUtils-Embed);
488   else
489     LDFLAGS += $(PERL_EMBED_LDFLAGS)
490     EXTLIBS += $(PERL_EMBED_LIBADD)
491   endif
492 endif
493
494 ifeq ($(feature-timerfd), 1)
495   CFLAGS += -DHAVE_TIMERFD_SUPPORT
496 else
497   msg := $(warning No timerfd support. Disables 'perf kvm stat live');
498 endif
499
500 disable-python = $(eval $(disable-python_code))
501 define disable-python_code
502   CFLAGS += -DNO_LIBPYTHON
503   $(if $(1),$(warning No $(1) was found))
504   $(warning Python support will not be built)
505   NO_LIBPYTHON := 1
506 endef
507
508 ifdef NO_LIBPYTHON
509   $(call disable-python)
510 else
511
512   ifndef PYTHON
513     $(call disable-python,python interpreter)
514   else
515     PYTHON_WORD := $(call shell-wordify,$(PYTHON))
516
517     ifndef PYTHON_CONFIG
518       $(call disable-python,python-config tool)
519     else
520
521       PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
522
523       PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
524       PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
525       PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS))
526       PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
527       FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
528
529       ifneq ($(feature-libpython), 1)
530         $(call disable-python,Python.h (for Python 2.x))
531       else
532
533         ifneq ($(feature-libpython-version), 1)
534           $(warning Python 3 is not yet supported; please set)
535           $(warning PYTHON and/or PYTHON_CONFIG appropriately.)
536           $(warning If you also have Python 2 installed, then)
537           $(warning try something like:)
538           $(warning $(and ,))
539           $(warning $(and ,)  make PYTHON=python2)
540           $(warning $(and ,))
541           $(warning Otherwise, disable Python support entirely:)
542           $(warning $(and ,))
543           $(warning $(and ,)  make NO_LIBPYTHON=1)
544           $(warning $(and ,))
545           $(error   $(and ,))
546         else
547           LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
548           EXTLIBS += $(PYTHON_EMBED_LIBADD)
549           LANG_BINDINGS += $(obj-perf)python/perf.so
550         endif
551       endif
552     endif
553   endif
554 endif
555
556 ifeq ($(feature-libbfd), 1)
557   EXTLIBS += -lbfd
558
559   # call all detections now so we get correct
560   # status in VF output
561   $(call feature_check,liberty)
562   $(call feature_check,liberty-z)
563   $(call feature_check,cplus-demangle)
564
565   ifeq ($(feature-liberty), 1)
566     EXTLIBS += -liberty
567   else
568     ifeq ($(feature-liberty-z), 1)
569       EXTLIBS += -liberty -lz
570     endif
571   endif
572 endif
573
574 ifdef NO_DEMANGLE
575   CFLAGS += -DNO_DEMANGLE
576 else
577   ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
578     EXTLIBS += -liberty
579     CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
580   else
581     ifneq ($(feature-libbfd), 1)
582       ifneq ($(feature-liberty), 1)
583         ifneq ($(feature-liberty-z), 1)
584           # we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
585           # or any of 'bfd iberty z' trinity
586           ifeq ($(feature-cplus-demangle), 1)
587             EXTLIBS += -liberty
588             CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
589           else
590             msg := $(warning No bfd.h/libbfd found, install binutils-dev[el]/zlib-static to gain symbol demangling)
591             CFLAGS += -DNO_DEMANGLE
592           endif
593         endif
594       endif
595     endif
596   endif
597 endif
598
599 ifneq ($(filter -lbfd,$(EXTLIBS)),)
600   CFLAGS += -DHAVE_LIBBFD_SUPPORT
601 endif
602
603 ifndef NO_BACKTRACE
604   ifeq ($(feature-backtrace), 1)
605     CFLAGS += -DHAVE_BACKTRACE_SUPPORT
606   endif
607 endif
608
609 ifndef NO_LIBNUMA
610   ifeq ($(feature-libnuma), 0)
611     msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev);
612     NO_LIBNUMA := 1
613   else
614     CFLAGS += -DHAVE_LIBNUMA_SUPPORT
615     EXTLIBS += -lnuma
616   endif
617 endif
618
619 ifdef HAVE_KVM_STAT_SUPPORT
620     CFLAGS += -DHAVE_KVM_STAT_SUPPORT
621 endif
622
623 # Among the variables below, these:
624 #   perfexecdir
625 #   template_dir
626 #   mandir
627 #   infodir
628 #   htmldir
629 #   ETC_PERFCONFIG (but not sysconfdir)
630 # can be specified as a relative path some/where/else;
631 # this is interpreted as relative to $(prefix) and "perf" at
632 # runtime figures out where they are based on the path to the executable.
633 # This can help installing the suite in a relocatable way.
634
635 # Make the path relative to DESTDIR, not to prefix
636 ifndef DESTDIR
637 prefix ?= $(HOME)
638 endif
639 bindir_relative = bin
640 bindir = $(prefix)/$(bindir_relative)
641 mandir = share/man
642 infodir = share/info
643 perfexecdir = libexec/perf-core
644 sharedir = $(prefix)/share
645 template_dir = share/perf-core/templates
646 htmldir = share/doc/perf-doc
647 ifeq ($(prefix),/usr)
648 sysconfdir = /etc
649 ETC_PERFCONFIG = $(sysconfdir)/perfconfig
650 else
651 sysconfdir = $(prefix)/etc
652 ETC_PERFCONFIG = etc/perfconfig
653 endif
654 ifeq ($(IS_X86_64),1)
655 lib = lib64
656 else
657 lib = lib
658 endif
659 libdir = $(prefix)/$(lib)
660
661 # Shell quote (do not use $(call) to accommodate ancient setups);
662 ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
663 DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
664 bindir_SQ = $(subst ','\'',$(bindir))
665 mandir_SQ = $(subst ','\'',$(mandir))
666 infodir_SQ = $(subst ','\'',$(infodir))
667 perfexecdir_SQ = $(subst ','\'',$(perfexecdir))
668 template_dir_SQ = $(subst ','\'',$(template_dir))
669 htmldir_SQ = $(subst ','\'',$(htmldir))
670 prefix_SQ = $(subst ','\'',$(prefix))
671 sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
672 libdir_SQ = $(subst ','\'',$(libdir))
673
674 ifneq ($(filter /%,$(firstword $(perfexecdir))),)
675 perfexec_instdir = $(perfexecdir)
676 else
677 perfexec_instdir = $(prefix)/$(perfexecdir)
678 endif
679 perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
680
681 # If we install to $(HOME) we keep the traceevent default:
682 # $(HOME)/.traceevent/plugins
683 # Otherwise we install plugins into the global $(libdir).
684 ifdef DESTDIR
685 plugindir=$(libdir)/traceevent/plugins
686 plugindir_SQ= $(subst ','\'',$(plugindir))
687 endif
688
689 #
690 # Print the result of the feature test:
691 #
692 feature_print_status = $(eval $(feature_print_status_code)) $(info $(MSG))
693
694 define feature_print_status_code
695   ifeq ($(feature-$(1)), 1)
696     MSG = $(shell printf '...%30s: [ \033[32mon\033[m  ]' $(1))
697   else
698     MSG = $(shell printf '...%30s: [ \033[31mOFF\033[m ]' $(1))
699   endif
700 endef
701
702 feature_print_var = $(eval $(feature_print_var_code)) $(info $(MSG))
703 define feature_print_var_code
704     MSG = $(shell printf '...%30s: %s' $(1) $($(1)))
705 endef
706
707 feature_print_text = $(eval $(feature_print_text_code)) $(info $(MSG))
708 define feature_print_text_code
709     MSG = $(shell printf '...%30s: %s' $(1) $(2))
710 endef
711
712 PERF_FEATURES := $(foreach feat,$(LIB_FEATURE_TESTS),feature-$(feat)($(feature-$(feat))))
713 PERF_FEATURES_FILE := $(shell touch $(OUTPUT)PERF-FEATURES; cat $(OUTPUT)PERF-FEATURES)
714
715 ifeq ($(dwarf-post-unwind),1)
716   PERF_FEATURES += dwarf-post-unwind($(dwarf-post-unwind-text))
717 endif
718
719 # The $(display_lib) controls the default detection message
720 # output. It's set if:
721 # - detected features differes from stored features from
722 #   last build (in PERF-FEATURES file)
723 # - one of the $(LIB_FEATURE_TESTS) is not detected
724 # - VF is enabled
725
726 ifneq ("$(PERF_FEATURES)","$(PERF_FEATURES_FILE)")
727   $(shell echo "$(PERF_FEATURES)" > $(OUTPUT)PERF-FEATURES)
728   display_lib := 1
729 endif
730
731 feature_check = $(eval $(feature_check_code))
732 define feature_check_code
733   ifneq ($(feature-$(1)), 1)
734     display_lib := 1
735   endif
736 endef
737
738 $(foreach feat,$(LIB_FEATURE_TESTS),$(call feature_check,$(feat)))
739
740 ifeq ($(VF),1)
741   display_lib := 1
742   display_vf := 1
743 endif
744
745 ifeq ($(display_lib),1)
746   $(info )
747   $(info Auto-detecting system features:)
748   $(foreach feat,$(LIB_FEATURE_TESTS),$(call feature_print_status,$(feat),))
749
750   ifeq ($(dwarf-post-unwind),1)
751     $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
752   endif
753 endif
754
755 ifeq ($(display_vf),1)
756   $(foreach feat,$(VF_FEATURE_TESTS),$(call feature_print_status,$(feat),))
757   $(info )
758   $(call feature_print_var,prefix)
759   $(call feature_print_var,bindir)
760   $(call feature_print_var,libdir)
761   $(call feature_print_var,sysconfdir)
762   $(call feature_print_var,LIBUNWIND_DIR)
763   $(call feature_print_var,LIBDW_DIR)
764 endif
765
766 ifeq ($(display_lib),1)
767   $(info )
768 endif