Merge tag 'driver-core-5.13-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / tools / perf / Makefile.config
1 # SPDX-License-Identifier: GPL-2.0-only
2
3 ifeq ($(src-perf),)
4 src-perf := $(srctree)/tools/perf
5 endif
6
7 ifeq ($(obj-perf),)
8 obj-perf := $(OUTPUT)
9 endif
10
11 ifneq ($(obj-perf),)
12 obj-perf := $(abspath $(obj-perf))/
13 endif
14
15 $(shell printf "" > $(OUTPUT).config-detected)
16 detected     = $(shell echo "$(1)=y"       >> $(OUTPUT).config-detected)
17 detected_var = $(shell echo "$(1)=$($(1))" >> $(OUTPUT).config-detected)
18
19 CFLAGS := $(EXTRA_CFLAGS) $(filter-out -Wnested-externs,$(EXTRA_WARNINGS))
20
21 include $(srctree)/tools/scripts/Makefile.arch
22
23 $(call detected_var,SRCARCH)
24
25 NO_PERF_REGS := 1
26
27 ifneq ($(NO_SYSCALL_TABLE),1)
28   NO_SYSCALL_TABLE := 1
29
30   ifeq ($(SRCARCH),x86)
31     ifeq (${IS_64_BIT}, 1)
32       NO_SYSCALL_TABLE := 0
33     endif
34   else
35     ifeq ($(SRCARCH),$(filter $(SRCARCH),powerpc arm64 s390 mips))
36       NO_SYSCALL_TABLE := 0
37     endif
38   endif
39
40   ifneq ($(NO_SYSCALL_TABLE),1)
41     CFLAGS += -DHAVE_SYSCALL_TABLE_SUPPORT
42   endif
43 endif
44
45 # Additional ARCH settings for ppc
46 ifeq ($(SRCARCH),powerpc)
47   NO_PERF_REGS := 0
48   CFLAGS += -I$(OUTPUT)arch/powerpc/include/generated
49   LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
50 endif
51
52 # Additional ARCH settings for x86
53 ifeq ($(SRCARCH),x86)
54   $(call detected,CONFIG_X86)
55   ifeq (${IS_64_BIT}, 1)
56     CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT -I$(OUTPUT)arch/x86/include/generated
57     ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
58     LIBUNWIND_LIBS = -lunwind-x86_64 -lunwind -llzma
59     $(call detected,CONFIG_X86_64)
60   else
61     LIBUNWIND_LIBS = -lunwind-x86 -llzma -lunwind
62   endif
63   NO_PERF_REGS := 0
64 endif
65
66 ifeq ($(SRCARCH),arm)
67   NO_PERF_REGS := 0
68   LIBUNWIND_LIBS = -lunwind -lunwind-arm
69 endif
70
71 ifeq ($(SRCARCH),arm64)
72   NO_PERF_REGS := 0
73   CFLAGS += -I$(OUTPUT)arch/arm64/include/generated
74   LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
75 endif
76
77 ifeq ($(SRCARCH),riscv)
78   NO_PERF_REGS := 0
79 endif
80
81 ifeq ($(SRCARCH),csky)
82   NO_PERF_REGS := 0
83 endif
84
85 ifeq ($(ARCH),s390)
86   NO_PERF_REGS := 0
87   CFLAGS += -fPIC -I$(OUTPUT)arch/s390/include/generated
88 endif
89
90 ifeq ($(ARCH),mips)
91   NO_PERF_REGS := 0
92   CFLAGS += -I$(OUTPUT)arch/mips/include/generated
93   LIBUNWIND_LIBS = -lunwind -lunwind-mips
94 endif
95
96 ifeq ($(NO_PERF_REGS),0)
97   $(call detected,CONFIG_PERF_REGS)
98 endif
99
100 # So far there's only x86 and arm libdw unwind support merged in perf.
101 # Disable it on all other architectures in case libdw unwind
102 # support is detected in system. Add supported architectures
103 # to the check.
104 ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc s390 csky riscv))
105   NO_LIBDW_DWARF_UNWIND := 1
106 endif
107
108 ifeq ($(LIBUNWIND_LIBS),)
109   NO_LIBUNWIND := 1
110 endif
111 #
112 # For linking with debug library, run like:
113 #
114 #   make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
115 #
116
117 libunwind_arch_set_flags = $(eval $(libunwind_arch_set_flags_code))
118 define libunwind_arch_set_flags_code
119   FEATURE_CHECK_CFLAGS-libunwind-$(1)  = -I$(LIBUNWIND_DIR)/include
120   FEATURE_CHECK_LDFLAGS-libunwind-$(1) = -L$(LIBUNWIND_DIR)/lib
121 endef
122
123 ifdef LIBUNWIND_DIR
124   LIBUNWIND_CFLAGS  = -I$(LIBUNWIND_DIR)/include
125   LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib
126   LIBUNWIND_ARCHS = x86 x86_64 arm aarch64 debug-frame-arm debug-frame-aarch64
127   $(foreach libunwind_arch,$(LIBUNWIND_ARCHS),$(call libunwind_arch_set_flags,$(libunwind_arch)))
128 endif
129
130 # Set per-feature check compilation flags
131 FEATURE_CHECK_CFLAGS-libunwind = $(LIBUNWIND_CFLAGS)
132 FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
133 FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS)
134 FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
135
136 FEATURE_CHECK_LDFLAGS-libunwind-arm = -lunwind -lunwind-arm
137 FEATURE_CHECK_LDFLAGS-libunwind-aarch64 = -lunwind -lunwind-aarch64
138 FEATURE_CHECK_LDFLAGS-libunwind-x86 = -lunwind -llzma -lunwind-x86
139 FEATURE_CHECK_LDFLAGS-libunwind-x86_64 = -lunwind -llzma -lunwind-x86_64
140
141 FEATURE_CHECK_LDFLAGS-libcrypto = -lcrypto
142
143 ifdef CSINCLUDES
144   LIBOPENCSD_CFLAGS := -I$(CSINCLUDES)
145 endif
146 OPENCSDLIBS := -lopencsd_c_api -lopencsd
147 ifdef CSLIBS
148   LIBOPENCSD_LDFLAGS := -L$(CSLIBS)
149 endif
150 FEATURE_CHECK_CFLAGS-libopencsd := $(LIBOPENCSD_CFLAGS)
151 FEATURE_CHECK_LDFLAGS-libopencsd := $(LIBOPENCSD_LDFLAGS) $(OPENCSDLIBS)
152
153 ifeq ($(NO_PERF_REGS),0)
154   CFLAGS += -DHAVE_PERF_REGS_SUPPORT
155 endif
156
157 # for linking with debug library, run like:
158 # make DEBUG=1 LIBDW_DIR=/opt/libdw/
159 ifdef LIBDW_DIR
160   LIBDW_CFLAGS  := -I$(LIBDW_DIR)/include
161   LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
162 endif
163 DWARFLIBS := -ldw
164 ifeq ($(findstring -static,${LDFLAGS}),-static)
165   DWARFLIBS += -lelf -lebl -ldl -lz -llzma -lbz2
166 endif
167 FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
168 FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) $(DWARFLIBS)
169
170 # for linking with debug library, run like:
171 # make DEBUG=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/
172 ifdef LIBBABELTRACE_DIR
173   LIBBABELTRACE_CFLAGS  := -I$(LIBBABELTRACE_DIR)/include
174   LIBBABELTRACE_LDFLAGS := -L$(LIBBABELTRACE_DIR)/lib
175 endif
176 FEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS)
177 FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
178
179 ifdef LIBZSTD_DIR
180   LIBZSTD_CFLAGS  := -I$(LIBZSTD_DIR)/lib
181   LIBZSTD_LDFLAGS := -L$(LIBZSTD_DIR)/lib
182 endif
183 FEATURE_CHECK_CFLAGS-libzstd := $(LIBZSTD_CFLAGS)
184 FEATURE_CHECK_LDFLAGS-libzstd := $(LIBZSTD_LDFLAGS)
185
186 FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi -I$(srctree)/tools/include/uapi
187 # include ARCH specific config
188 -include $(src-perf)/arch/$(SRCARCH)/Makefile
189
190 ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
191   CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
192 endif
193
194 include $(srctree)/tools/scripts/utilities.mak
195
196 ifeq ($(call get-executable,$(FLEX)),)
197   dummy := $(error Error: $(FLEX) is missing on this system, please install it)
198 endif
199
200 ifeq ($(call get-executable,$(BISON)),)
201   dummy := $(error Error: $(BISON) is missing on this system, please install it)
202 endif
203
204 # Treat warnings as errors unless directed not to
205 ifneq ($(WERROR),0)
206   CORE_CFLAGS += -Werror
207   CXXFLAGS += -Werror
208 endif
209
210 ifndef DEBUG
211   DEBUG := 0
212 endif
213
214 ifeq ($(DEBUG),0)
215 ifeq ($(CC_NO_CLANG), 0)
216   CORE_CFLAGS += -O3
217 else
218   CORE_CFLAGS += -O6
219 endif
220 endif
221
222 ifdef PARSER_DEBUG
223   PARSER_DEBUG_BISON := -t
224   PARSER_DEBUG_FLEX  := -d
225   CFLAGS             += -DPARSER_DEBUG
226   $(call detected_var,PARSER_DEBUG_BISON)
227   $(call detected_var,PARSER_DEBUG_FLEX)
228 endif
229
230 # Try different combinations to accommodate systems that only have
231 # python[2][-config] in weird combinations but always preferring
232 # python2 and python2-config as per pep-0394. If python2 or python
233 # aren't found, then python3 is used.
234 PYTHON_AUTO := python
235 PYTHON_AUTO := $(if $(call get-executable,python3),python3,$(PYTHON_AUTO))
236 PYTHON_AUTO := $(if $(call get-executable,python),python,$(PYTHON_AUTO))
237 PYTHON_AUTO := $(if $(call get-executable,python2),python2,$(PYTHON_AUTO))
238 override PYTHON := $(call get-executable-or-default,PYTHON,$(PYTHON_AUTO))
239 PYTHON_AUTO_CONFIG := \
240   $(if $(call get-executable,$(PYTHON)-config),$(PYTHON)-config,python-config)
241 override PYTHON_CONFIG := \
242   $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON_AUTO_CONFIG))
243
244 grep-libs  = $(filter -l%,$(1))
245 strip-libs  = $(filter-out -l%,$(1))
246
247 PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
248
249 # Python 3.8 changed the output of `python-config --ldflags` to not include the
250 # '-lpythonX.Y' flag unless '--embed' is also passed. The feature check for
251 # libpython fails if that flag is not included in LDFLAGS
252 ifeq ($(shell $(PYTHON_CONFIG_SQ) --ldflags --embed 2>&1 1>/dev/null; echo $$?), 0)
253   PYTHON_CONFIG_LDFLAGS := --ldflags --embed
254 else
255   PYTHON_CONFIG_LDFLAGS := --ldflags
256 endif
257
258 ifdef PYTHON_CONFIG
259   PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) $(PYTHON_CONFIG_LDFLAGS) 2>/dev/null)
260   PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
261   PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS)) -lutil
262   PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --includes 2>/dev/null)
263   FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
264 endif
265
266 FEATURE_CHECK_CFLAGS-libpython := $(PYTHON_EMBED_CCOPTS)
267 FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
268 FEATURE_CHECK_CFLAGS-libpython-version := $(PYTHON_EMBED_CCOPTS)
269 FEATURE_CHECK_LDFLAGS-libpython-version := $(PYTHON_EMBED_LDOPTS)
270
271 FEATURE_CHECK_LDFLAGS-libaio = -lrt
272
273 FEATURE_CHECK_LDFLAGS-disassembler-four-args = -lbfd -lopcodes -ldl
274
275 CORE_CFLAGS += -fno-omit-frame-pointer
276 CORE_CFLAGS += -ggdb3
277 CORE_CFLAGS += -funwind-tables
278 CORE_CFLAGS += -Wall
279 CORE_CFLAGS += -Wextra
280 CORE_CFLAGS += -std=gnu99
281
282 CXXFLAGS += -std=gnu++11 -fno-exceptions -fno-rtti
283 CXXFLAGS += -Wall
284 CXXFLAGS += -fno-omit-frame-pointer
285 CXXFLAGS += -ggdb3
286 CXXFLAGS += -funwind-tables
287 CXXFLAGS += -Wno-strict-aliasing
288
289 # Enforce a non-executable stack, as we may regress (again) in the future by
290 # adding assembler files missing the .GNU-stack linker note.
291 LDFLAGS += -Wl,-z,noexecstack
292
293 EXTLIBS = -lpthread -lrt -lm -ldl
294
295 ifneq ($(TCMALLOC),)
296   CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
297   EXTLIBS += -ltcmalloc
298 endif
299
300 ifeq ($(FEATURES_DUMP),)
301 # We will display at the end of this Makefile.config, using $(call feature_display_entries)
302 # As we may retry some feature detection here, see the disassembler-four-args case, for instance
303   FEATURE_DISPLAY_DEFERRED := 1
304 include $(srctree)/tools/build/Makefile.feature
305 else
306 include $(FEATURES_DUMP)
307 endif
308
309 ifeq ($(feature-stackprotector-all), 1)
310   CORE_CFLAGS += -fstack-protector-all
311 endif
312
313 ifeq ($(DEBUG),0)
314   ifeq ($(feature-fortify-source), 1)
315     CORE_CFLAGS += -D_FORTIFY_SOURCE=2
316   endif
317 endif
318
319 INC_FLAGS += -I$(srctree)/tools/lib/perf/include
320 INC_FLAGS += -I$(src-perf)/util/include
321 INC_FLAGS += -I$(src-perf)/arch/$(SRCARCH)/include
322 INC_FLAGS += -I$(srctree)/tools/include/
323 INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi
324 INC_FLAGS += -I$(srctree)/tools/include/uapi
325 INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/
326 INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/
327
328 # $(obj-perf)      for generated common-cmds.h
329 # $(obj-perf)/util for generated bison/flex headers
330 ifneq ($(OUTPUT),)
331 INC_FLAGS += -I$(obj-perf)/util
332 INC_FLAGS += -I$(obj-perf)
333 endif
334
335 INC_FLAGS += -I$(src-perf)/util
336 INC_FLAGS += -I$(src-perf)
337 INC_FLAGS += -I$(srctree)/tools/lib/
338
339 CORE_CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
340
341 CFLAGS   += $(CORE_CFLAGS) $(INC_FLAGS)
342 CXXFLAGS += $(INC_FLAGS)
343
344 LIBPERF_CFLAGS := $(CORE_CFLAGS) $(EXTRA_CFLAGS)
345
346 ifeq ($(feature-sync-compare-and-swap), 1)
347   CFLAGS += -DHAVE_SYNC_COMPARE_AND_SWAP_SUPPORT
348 endif
349
350 ifeq ($(feature-pthread-attr-setaffinity-np), 1)
351   CFLAGS += -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP
352 endif
353
354 ifeq ($(feature-pthread-barrier), 1)
355   CFLAGS += -DHAVE_PTHREAD_BARRIER
356 endif
357
358 ifndef NO_BIONIC
359   $(call feature_check,bionic)
360   ifeq ($(feature-bionic), 1)
361     BIONIC := 1
362     CFLAGS += -DLACKS_SIGQUEUE_PROTOTYPE
363     CFLAGS += -DLACKS_OPEN_MEMSTREAM_PROTOTYPE
364     EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
365     EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
366   endif
367 endif
368
369 ifeq ($(feature-eventfd), 1)
370   CFLAGS += -DHAVE_EVENTFD_SUPPORT
371 endif
372
373 ifeq ($(feature-get_current_dir_name), 1)
374   CFLAGS += -DHAVE_GET_CURRENT_DIR_NAME
375 endif
376
377 ifeq ($(feature-gettid), 1)
378   CFLAGS += -DHAVE_GETTID
379 endif
380
381 ifeq ($(feature-file-handle), 1)
382   CFLAGS += -DHAVE_FILE_HANDLE
383 endif
384
385 ifdef NO_LIBELF
386   NO_DWARF := 1
387   NO_DEMANGLE := 1
388   NO_LIBUNWIND := 1
389   NO_LIBDW_DWARF_UNWIND := 1
390   NO_LIBBPF := 1
391   NO_JVMTI := 1
392 else
393   ifeq ($(feature-libelf), 0)
394     ifeq ($(feature-glibc), 1)
395       LIBC_SUPPORT := 1
396     endif
397     ifeq ($(BIONIC),1)
398       LIBC_SUPPORT := 1
399     endif
400     ifeq ($(LIBC_SUPPORT),1)
401       msg := $(warning No libelf found. Disables 'probe' tool, jvmti and BPF support in 'perf record'. Please install libelf-dev, libelf-devel or elfutils-libelf-devel);
402
403       NO_LIBELF := 1
404       NO_DWARF := 1
405       NO_DEMANGLE := 1
406       NO_LIBUNWIND := 1
407       NO_LIBDW_DWARF_UNWIND := 1
408       NO_LIBBPF := 1
409       NO_JVMTI := 1
410     else
411       ifneq ($(filter s% -fsanitize=address%,$(EXTRA_CFLAGS),),)
412         ifneq ($(shell ldconfig -p | grep libasan >/dev/null 2>&1; echo $$?), 0)
413           msg := $(error No libasan found, please install libasan);
414         endif
415       endif
416
417       ifneq ($(filter s% -fsanitize=undefined%,$(EXTRA_CFLAGS),),)
418         ifneq ($(shell ldconfig -p | grep libubsan >/dev/null 2>&1; echo $$?), 0)
419           msg := $(error No libubsan found, please install libubsan);
420         endif
421       endif
422
423       ifneq ($(filter s% -static%,$(LDFLAGS),),)
424         msg := $(error No static glibc found, please install glibc-static);
425       else
426         msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]);
427       endif
428     endif
429   else
430     ifndef NO_LIBDW_DWARF_UNWIND
431       ifneq ($(feature-libdw-dwarf-unwind),1)
432         NO_LIBDW_DWARF_UNWIND := 1
433         msg := $(warning No libdw DWARF unwind found, Please install elfutils-devel/libdw-dev >= 0.158 and/or set LIBDW_DIR);
434       endif
435     endif
436     ifneq ($(feature-dwarf), 1)
437       ifndef NO_DWARF
438         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);
439         NO_DWARF := 1
440       endif
441     else
442       ifneq ($(feature-dwarf_getlocations), 1)
443         msg := $(warning Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157);
444       else
445         CFLAGS += -DHAVE_DWARF_GETLOCATIONS_SUPPORT
446       endif # dwarf_getlocations
447     endif # Dwarf support
448   endif # libelf support
449 endif # NO_LIBELF
450
451 ifeq ($(feature-glibc), 1)
452   CFLAGS += -DHAVE_GLIBC_SUPPORT
453 endif
454
455 ifeq ($(feature-libaio), 1)
456   ifndef NO_AIO
457     CFLAGS += -DHAVE_AIO_SUPPORT
458   endif
459 endif
460
461 ifdef NO_DWARF
462   NO_LIBDW_DWARF_UNWIND := 1
463 endif
464
465 ifeq ($(feature-sched_getcpu), 1)
466   CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORT
467 endif
468
469 ifeq ($(feature-setns), 1)
470   CFLAGS += -DHAVE_SETNS_SUPPORT
471   $(call detected,CONFIG_SETNS)
472 endif
473
474 ifdef CORESIGHT
475   $(call feature_check,libopencsd)
476   ifeq ($(feature-libopencsd), 1)
477     CFLAGS += -DHAVE_CSTRACE_SUPPORT $(LIBOPENCSD_CFLAGS)
478     ifeq ($(feature-reallocarray), 0)
479       CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
480     endif
481     LDFLAGS += $(LIBOPENCSD_LDFLAGS)
482     EXTLIBS += $(OPENCSDLIBS)
483     $(call detected,CONFIG_LIBOPENCSD)
484     ifdef CSTRACE_RAW
485       CFLAGS += -DCS_DEBUG_RAW
486       ifeq (${CSTRACE_RAW}, packed)
487         CFLAGS += -DCS_RAW_PACKED
488       endif
489     endif
490   endif
491 endif
492
493 ifndef NO_LIBELF
494   CFLAGS += -DHAVE_LIBELF_SUPPORT
495   EXTLIBS += -lelf
496   $(call detected,CONFIG_LIBELF)
497
498   ifeq ($(feature-libelf-getphdrnum), 1)
499     CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
500   endif
501
502   ifeq ($(feature-libelf-gelf_getnote), 1)
503     CFLAGS += -DHAVE_GELF_GETNOTE_SUPPORT
504   else
505     msg := $(warning gelf_getnote() not found on libelf, SDT support disabled);
506   endif
507
508   ifeq ($(feature-libelf-getshdrstrndx), 1)
509     CFLAGS += -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT
510   endif
511
512   ifndef NO_LIBDEBUGINFOD
513     $(call feature_check,libdebuginfod)
514     ifeq ($(feature-libdebuginfod), 1)
515       CFLAGS += -DHAVE_DEBUGINFOD_SUPPORT
516       EXTLIBS += -ldebuginfod
517     endif
518   endif
519
520   ifndef NO_DWARF
521     ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
522       msg := $(warning DWARF register mappings have not been defined for architecture $(SRCARCH), DWARF support disabled);
523       NO_DWARF := 1
524     else
525       CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
526       LDFLAGS += $(LIBDW_LDFLAGS)
527       EXTLIBS += ${DWARFLIBS}
528       $(call detected,CONFIG_DWARF)
529     endif # PERF_HAVE_DWARF_REGS
530   endif # NO_DWARF
531
532   ifndef NO_LIBBPF
533     ifeq ($(feature-bpf), 1)
534       CFLAGS += -DHAVE_LIBBPF_SUPPORT
535       $(call detected,CONFIG_LIBBPF)
536
537       # detecting libbpf without LIBBPF_DYNAMIC, so make VF=1 shows libbpf detection status
538       $(call feature_check,libbpf)
539       ifdef LIBBPF_DYNAMIC
540         ifeq ($(feature-libbpf), 1)
541           EXTLIBS += -lbpf
542           $(call detected,CONFIG_LIBBPF_DYNAMIC)
543         else
544           dummy := $(error Error: No libbpf devel library found, please install libbpf-devel);
545         endif
546       endif
547     endif
548
549     ifndef NO_DWARF
550       ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
551         CFLAGS += -DHAVE_BPF_PROLOGUE
552         $(call detected,CONFIG_BPF_PROLOGUE)
553       else
554         msg := $(warning BPF prologue is not supported by architecture $(SRCARCH), missing regs_query_register_offset());
555       endif
556     else
557       msg := $(warning DWARF support is off, BPF prologue is disabled);
558     endif
559
560   endif # NO_LIBBPF
561 endif # NO_LIBELF
562
563 ifndef NO_SDT
564   ifneq ($(feature-sdt), 1)
565     msg := $(warning No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev);
566     NO_SDT := 1;
567   else
568     CFLAGS += -DHAVE_SDT_EVENT
569     $(call detected,CONFIG_SDT_EVENT)
570   endif
571 endif
572
573 ifdef PERF_HAVE_JITDUMP
574   ifndef NO_LIBELF
575     $(call detected,CONFIG_JITDUMP)
576     CFLAGS += -DHAVE_JITDUMP
577   endif
578 endif
579
580 ifeq ($(SRCARCH),powerpc)
581   ifndef NO_DWARF
582     CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
583   endif
584 endif
585
586 ifndef NO_LIBUNWIND
587   have_libunwind :=
588
589   $(call feature_check,libunwind-x86)
590   ifeq ($(feature-libunwind-x86), 1)
591     $(call detected,CONFIG_LIBUNWIND_X86)
592     CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
593     LDFLAGS += -lunwind-x86
594     EXTLIBS_LIBUNWIND += -lunwind-x86
595     have_libunwind = 1
596   endif
597
598   $(call feature_check,libunwind-aarch64)
599   ifeq ($(feature-libunwind-aarch64), 1)
600     $(call detected,CONFIG_LIBUNWIND_AARCH64)
601     CFLAGS += -DHAVE_LIBUNWIND_AARCH64_SUPPORT
602     LDFLAGS += -lunwind-aarch64
603     EXTLIBS_LIBUNWIND += -lunwind-aarch64
604     have_libunwind = 1
605     $(call feature_check,libunwind-debug-frame-aarch64)
606     ifneq ($(feature-libunwind-debug-frame-aarch64), 1)
607       msg := $(warning No debug_frame support found in libunwind-aarch64);
608       CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME_AARCH64
609     endif
610   endif
611
612   ifneq ($(feature-libunwind), 1)
613     msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
614     NO_LOCAL_LIBUNWIND := 1
615   else
616     have_libunwind := 1
617     $(call detected,CONFIG_LOCAL_LIBUNWIND)
618   endif
619
620   ifneq ($(have_libunwind), 1)
621     NO_LIBUNWIND := 1
622   endif
623 else
624   NO_LOCAL_LIBUNWIND := 1
625 endif
626
627 ifndef NO_LIBBPF
628   ifneq ($(feature-bpf), 1)
629     msg := $(warning BPF API too old. Please install recent kernel headers. BPF support in 'perf record' is disabled.)
630     NO_LIBBPF := 1
631   endif
632 endif
633
634 ifdef BUILD_BPF_SKEL
635   $(call feature_check,clang-bpf-co-re)
636   ifeq ($(feature-clang-bpf-co-re), 0)
637     dummy := $(error Error: clang too old. Please install recent clang)
638   endif
639   $(call detected,CONFIG_PERF_BPF_SKEL)
640   CFLAGS += -DHAVE_BPF_SKEL
641 endif
642
643 dwarf-post-unwind := 1
644 dwarf-post-unwind-text := BUG
645
646 # setup DWARF post unwinder
647 ifdef NO_LIBUNWIND
648   ifdef NO_LIBDW_DWARF_UNWIND
649     msg := $(warning Disabling post unwind, no support found.);
650     dwarf-post-unwind := 0
651   else
652     dwarf-post-unwind-text := libdw
653     $(call detected,CONFIG_LIBDW_DWARF_UNWIND)
654   endif
655 else
656   dwarf-post-unwind-text := libunwind
657   $(call detected,CONFIG_LIBUNWIND)
658   # Enable libunwind support by default.
659   ifndef NO_LIBDW_DWARF_UNWIND
660     NO_LIBDW_DWARF_UNWIND := 1
661   endif
662 endif
663
664 ifeq ($(dwarf-post-unwind),1)
665   CFLAGS += -DHAVE_DWARF_UNWIND_SUPPORT
666   $(call detected,CONFIG_DWARF_UNWIND)
667 else
668   NO_DWARF_UNWIND := 1
669 endif
670
671 ifndef NO_LOCAL_LIBUNWIND
672   ifeq ($(SRCARCH),$(filter $(SRCARCH),arm arm64))
673     $(call feature_check,libunwind-debug-frame)
674     ifneq ($(feature-libunwind-debug-frame), 1)
675       msg := $(warning No debug_frame support found in libunwind);
676       CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
677     endif
678   else
679     # non-ARM has no dwarf_find_debug_frame() function:
680     CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
681   endif
682   EXTLIBS += $(LIBUNWIND_LIBS)
683   LDFLAGS += $(LIBUNWIND_LIBS)
684 endif
685 ifeq ($(findstring -static,${LDFLAGS}),-static)
686   # gcc -static links libgcc_eh which contans piece of libunwind
687   LIBUNWIND_LDFLAGS += -Wl,--allow-multiple-definition
688 endif
689
690 ifndef NO_LIBUNWIND
691   CFLAGS  += -DHAVE_LIBUNWIND_SUPPORT
692   CFLAGS  += $(LIBUNWIND_CFLAGS)
693   LDFLAGS += $(LIBUNWIND_LDFLAGS)
694   EXTLIBS += $(EXTLIBS_LIBUNWIND)
695 endif
696
697 ifeq ($(NO_SYSCALL_TABLE),0)
698   $(call detected,CONFIG_TRACE)
699 else
700   ifndef NO_LIBAUDIT
701     $(call feature_check,libaudit)
702     ifneq ($(feature-libaudit), 1)
703       msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
704       NO_LIBAUDIT := 1
705     else
706       CFLAGS += -DHAVE_LIBAUDIT_SUPPORT
707       EXTLIBS += -laudit
708       $(call detected,CONFIG_TRACE)
709     endif
710   endif
711 endif
712
713 ifndef NO_LIBCRYPTO
714   ifneq ($(feature-libcrypto), 1)
715     msg := $(warning No libcrypto.h found, disables jitted code injection, please install openssl-devel or libssl-dev);
716     NO_LIBCRYPTO := 1
717   else
718     CFLAGS += -DHAVE_LIBCRYPTO_SUPPORT
719     EXTLIBS += -lcrypto
720     $(call detected,CONFIG_CRYPTO)
721   endif
722 endif
723
724 ifdef NO_NEWT
725   NO_SLANG=1
726 endif
727
728 ifndef NO_SLANG
729   ifneq ($(feature-libslang), 1)
730     ifneq ($(feature-libslang-include-subdir), 1)
731       msg := $(warning slang not found, disables TUI support. Please install slang-devel, libslang-dev or libslang2-dev);
732       NO_SLANG := 1
733     else
734       CFLAGS += -DHAVE_SLANG_INCLUDE_SUBDIR
735     endif
736   endif
737   ifndef NO_SLANG
738     # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
739     CFLAGS += -DHAVE_SLANG_SUPPORT
740     EXTLIBS += -lslang
741     $(call detected,CONFIG_SLANG)
742   endif
743 endif
744
745 ifdef GTK2
746   FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
747   $(call feature_check,gtk2)
748   ifneq ($(feature-gtk2), 1)
749     msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
750     NO_GTK2 := 1
751   else
752     $(call feature_check,gtk2-infobar)
753     ifeq ($(feature-gtk2-infobar), 1)
754       GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
755     endif
756     CFLAGS += -DHAVE_GTK2_SUPPORT
757     GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
758     GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
759     EXTLIBS += -ldl
760   endif
761 endif
762
763 ifdef NO_LIBPERL
764   CFLAGS += -DNO_LIBPERL
765 else
766   PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
767   PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
768   PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
769   PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
770   PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
771   PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
772   PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
773   FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
774
775   ifneq ($(feature-libperl), 1)
776     CFLAGS += -DNO_LIBPERL
777     NO_LIBPERL := 1
778     msg := $(warning Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev);
779   else
780     LDFLAGS += $(PERL_EMBED_LDFLAGS)
781     EXTLIBS += $(PERL_EMBED_LIBADD)
782     CFLAGS += -DHAVE_LIBPERL_SUPPORT
783     $(call detected,CONFIG_LIBPERL)
784   endif
785 endif
786
787 ifeq ($(feature-timerfd), 1)
788   CFLAGS += -DHAVE_TIMERFD_SUPPORT
789 else
790   msg := $(warning No timerfd support. Disables 'perf kvm stat live');
791 endif
792
793 disable-python = $(eval $(disable-python_code))
794 define disable-python_code
795   CFLAGS += -DNO_LIBPYTHON
796   $(warning $1)
797   NO_LIBPYTHON := 1
798 endef
799
800 ifdef NO_LIBPYTHON
801   $(call disable-python,Python support disabled by user)
802 else
803
804   ifndef PYTHON
805     $(call disable-python,No python interpreter was found: disables Python support - please install python-devel/python-dev)
806   else
807     PYTHON_WORD := $(call shell-wordify,$(PYTHON))
808
809     ifndef PYTHON_CONFIG
810       $(call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
811     else
812
813       ifneq ($(feature-libpython), 1)
814         $(call disable-python,No 'Python.h' (for Python 2.x support) was found: disables Python support - please install python-devel/python-dev)
815       else
816          LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
817          EXTLIBS += $(PYTHON_EMBED_LIBADD)
818          LANG_BINDINGS += $(obj-perf)python/perf.so
819          CFLAGS += -DHAVE_LIBPYTHON_SUPPORT
820          $(call detected,CONFIG_LIBPYTHON)
821       endif
822     endif
823   endif
824 endif
825
826 ifeq ($(feature-libbfd), 1)
827   EXTLIBS += -lbfd -lopcodes
828 else
829   # we are on a system that requires -liberty and (maybe) -lz
830   # to link against -lbfd; test each case individually here
831
832   # call all detections now so we get correct
833   # status in VF output
834   $(call feature_check,libbfd-liberty)
835   $(call feature_check,libbfd-liberty-z)
836
837   ifeq ($(feature-libbfd-liberty), 1)
838     EXTLIBS += -lbfd -lopcodes -liberty
839     FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -ldl
840   else
841     ifeq ($(feature-libbfd-liberty-z), 1)
842       EXTLIBS += -lbfd -lopcodes -liberty -lz
843       FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -lz -ldl
844     endif
845   endif
846   $(call feature_check,disassembler-four-args)
847 endif
848
849 ifeq ($(feature-libbfd-buildid), 1)
850   CFLAGS += -DHAVE_LIBBFD_BUILDID_SUPPORT
851 else
852   msg := $(warning Old version of libbfd/binutils things like PE executable profiling will not be available);
853 endif
854
855 ifdef NO_DEMANGLE
856   CFLAGS += -DNO_DEMANGLE
857 else
858   ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
859     EXTLIBS += -liberty
860   else
861     ifeq ($(filter -liberty,$(EXTLIBS)),)
862       $(call feature_check,cplus-demangle)
863
864       # we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
865       # or any of 'bfd iberty z' trinity
866       ifeq ($(feature-cplus-demangle), 1)
867         EXTLIBS += -liberty
868       else
869         msg := $(warning No bfd.h/libbfd found, please install binutils-dev[el]/zlib-static/libiberty-dev to gain symbol demangling)
870         CFLAGS += -DNO_DEMANGLE
871       endif
872     endif
873   endif
874
875   ifneq ($(filter -liberty,$(EXTLIBS)),)
876     CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
877   endif
878 endif
879
880 ifneq ($(filter -lbfd,$(EXTLIBS)),)
881   CFLAGS += -DHAVE_LIBBFD_SUPPORT
882 endif
883
884 ifndef NO_ZLIB
885   ifeq ($(feature-zlib), 1)
886     CFLAGS += -DHAVE_ZLIB_SUPPORT
887     EXTLIBS += -lz
888     $(call detected,CONFIG_ZLIB)
889   else
890     NO_ZLIB := 1
891   endif
892 endif
893
894 ifndef NO_LZMA
895   ifeq ($(feature-lzma), 1)
896     CFLAGS += -DHAVE_LZMA_SUPPORT
897     EXTLIBS += -llzma
898     $(call detected,CONFIG_LZMA)
899   else
900     msg := $(warning No liblzma found, disables xz kernel module decompression, please install xz-devel/liblzma-dev);
901     NO_LZMA := 1
902   endif
903 endif
904
905 ifndef NO_LIBZSTD
906   ifeq ($(feature-libzstd), 1)
907     CFLAGS += -DHAVE_ZSTD_SUPPORT
908     CFLAGS += $(LIBZSTD_CFLAGS)
909     LDFLAGS += $(LIBZSTD_LDFLAGS)
910     EXTLIBS += -lzstd
911     $(call detected,CONFIG_ZSTD)
912   else
913     msg := $(warning No libzstd found, disables trace compression, please install libzstd-dev[el] and/or set LIBZSTD_DIR);
914     NO_LIBZSTD := 1
915   endif
916 endif
917
918 ifndef NO_LIBCAP
919   ifeq ($(feature-libcap), 1)
920     CFLAGS += -DHAVE_LIBCAP_SUPPORT
921     EXTLIBS += -lcap
922     $(call detected,CONFIG_LIBCAP)
923   else
924     msg := $(warning No libcap found, disables capability support, please install libcap-devel/libcap-dev);
925     NO_LIBCAP := 1
926   endif
927 endif
928
929 ifndef NO_BACKTRACE
930   ifeq ($(feature-backtrace), 1)
931     CFLAGS += -DHAVE_BACKTRACE_SUPPORT
932   endif
933 endif
934
935 ifndef NO_LIBNUMA
936   ifeq ($(feature-libnuma), 0)
937     msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev);
938     NO_LIBNUMA := 1
939   else
940     ifeq ($(feature-numa_num_possible_cpus), 0)
941       msg := $(warning Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8);
942       NO_LIBNUMA := 1
943     else
944       CFLAGS += -DHAVE_LIBNUMA_SUPPORT
945       EXTLIBS += -lnuma
946       $(call detected,CONFIG_NUMA)
947     endif
948   endif
949 endif
950
951 ifdef HAVE_KVM_STAT_SUPPORT
952     CFLAGS += -DHAVE_KVM_STAT_SUPPORT
953 endif
954
955 ifeq ($(feature-disassembler-four-args), 1)
956     CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
957 endif
958
959 ifeq (${IS_64_BIT}, 1)
960   ifndef NO_PERF_READ_VDSO32
961     $(call feature_check,compile-32)
962     ifeq ($(feature-compile-32), 1)
963       CFLAGS += -DHAVE_PERF_READ_VDSO32
964     else
965       NO_PERF_READ_VDSO32 := 1
966     endif
967   endif
968   ifneq ($(SRCARCH), x86)
969     NO_PERF_READ_VDSOX32 := 1
970   endif
971   ifndef NO_PERF_READ_VDSOX32
972     $(call feature_check,compile-x32)
973     ifeq ($(feature-compile-x32), 1)
974       CFLAGS += -DHAVE_PERF_READ_VDSOX32
975     else
976       NO_PERF_READ_VDSOX32 := 1
977     endif
978   endif
979 else
980   NO_PERF_READ_VDSO32 := 1
981   NO_PERF_READ_VDSOX32 := 1
982 endif
983
984 ifndef NO_LIBBABELTRACE
985   $(call feature_check,libbabeltrace)
986   ifeq ($(feature-libbabeltrace), 1)
987     CFLAGS += -DHAVE_LIBBABELTRACE_SUPPORT $(LIBBABELTRACE_CFLAGS)
988     LDFLAGS += $(LIBBABELTRACE_LDFLAGS)
989     EXTLIBS += -lbabeltrace-ctf
990     $(call detected,CONFIG_LIBBABELTRACE)
991   else
992     msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
993   endif
994 endif
995
996 ifndef NO_AUXTRACE
997   ifeq ($(SRCARCH),x86)
998     ifeq ($(feature-get_cpuid), 0)
999       msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc);
1000       NO_AUXTRACE := 1
1001     endif
1002   endif
1003   ifndef NO_AUXTRACE
1004     $(call detected,CONFIG_AUXTRACE)
1005     CFLAGS += -DHAVE_AUXTRACE_SUPPORT
1006   endif
1007 endif
1008
1009 ifndef NO_JVMTI
1010   ifneq (,$(wildcard /usr/sbin/update-java-alternatives))
1011     JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}')
1012   else
1013     ifneq (,$(wildcard /usr/sbin/alternatives))
1014       JDIR=$(shell /usr/sbin/alternatives --display java | tail -1 | cut -d' ' -f 5 | sed -e 's%/jre/bin/java.%%g' -e 's%/bin/java.%%g')
1015     endif
1016   endif
1017   ifndef JDIR
1018     $(warning No alternatives command found, you need to set JDIR= to point to the root of your Java directory)
1019     NO_JVMTI := 1
1020   endif
1021 endif
1022
1023 ifndef NO_JVMTI
1024   FEATURE_CHECK_CFLAGS-jvmti := -I$(JDIR)/include -I$(JDIR)/include/linux
1025   $(call feature_check,jvmti)
1026   ifeq ($(feature-jvmti), 1)
1027     $(call detected_var,JDIR)
1028     ifndef NO_JVMTI_CMLR
1029       FEATURE_CHECK_CFLAGS-jvmti-cmlr := $(FEATURE_CHECK_CFLAGS-jvmti)
1030       $(call feature_check,jvmti-cmlr)
1031       ifeq ($(feature-jvmti-cmlr), 1)
1032         CFLAGS += -DHAVE_JVMTI_CMLR
1033       endif
1034     endif # NO_JVMTI_CMLR
1035   else
1036     $(warning No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel)
1037     NO_JVMTI := 1
1038   endif
1039 endif
1040
1041 USE_CXX = 0
1042 USE_CLANGLLVM = 0
1043 ifdef LIBCLANGLLVM
1044   $(call feature_check,cxx)
1045   ifneq ($(feature-cxx), 1)
1046     msg := $(warning No g++ found, disable clang and llvm support. Please install g++)
1047   else
1048     $(call feature_check,llvm)
1049     $(call feature_check,llvm-version)
1050     ifneq ($(feature-llvm), 1)
1051       msg := $(warning No suitable libLLVM found, disabling builtin clang and LLVM support. Please install llvm-dev(el) (>= 3.9.0))
1052     else
1053       $(call feature_check,clang)
1054       ifneq ($(feature-clang), 1)
1055         msg := $(warning No suitable libclang found, disabling builtin clang and LLVM support. Please install libclang-dev(el) (>= 3.9.0))
1056       else
1057         CFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT
1058         CXXFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT -I$(shell $(LLVM_CONFIG) --includedir)
1059         $(call detected,CONFIG_CXX)
1060         $(call detected,CONFIG_CLANGLLVM)
1061         USE_CXX = 1
1062         USE_LLVM = 1
1063         USE_CLANG = 1
1064         ifneq ($(feature-llvm-version),1)
1065           msg := $(warning This version of LLVM is not tested. May cause build errors)
1066         endif
1067       endif
1068     endif
1069   endif
1070 endif
1071
1072 ifdef LIBPFM4
1073   $(call feature_check,libpfm4)
1074   ifeq ($(feature-libpfm4), 1)
1075     CFLAGS += -DHAVE_LIBPFM
1076     EXTLIBS += -lpfm
1077     ASCIIDOC_EXTRA = -aHAVE_LIBPFM=1
1078     $(call detected,CONFIG_LIBPFM4)
1079   else
1080     msg := $(warning libpfm4 not found, disables libpfm4 support. Please install libpfm4-dev);
1081     NO_LIBPFM4 := 1
1082   endif
1083 endif
1084
1085 ifdef LIBTRACEEVENT_DYNAMIC
1086   $(call feature_check,libtraceevent)
1087   ifeq ($(feature-libtraceevent), 1)
1088     EXTLIBS += -ltraceevent
1089   else
1090     dummy := $(error Error: No libtraceevent devel library found, please install libtraceevent-devel);
1091   endif
1092 endif
1093
1094 # Among the variables below, these:
1095 #   perfexecdir
1096 #   perf_include_dir
1097 #   perf_examples_dir
1098 #   template_dir
1099 #   mandir
1100 #   infodir
1101 #   htmldir
1102 #   ETC_PERFCONFIG (but not sysconfdir)
1103 # can be specified as a relative path some/where/else;
1104 # this is interpreted as relative to $(prefix) and "perf" at
1105 # runtime figures out where they are based on the path to the executable.
1106 # This can help installing the suite in a relocatable way.
1107
1108 # Make the path relative to DESTDIR, not to prefix
1109 ifndef DESTDIR
1110 prefix ?= $(HOME)
1111 endif
1112 bindir_relative = bin
1113 bindir = $(abspath $(prefix)/$(bindir_relative))
1114 mandir = share/man
1115 infodir = share/info
1116 perfexecdir = libexec/perf-core
1117 perf_include_dir = lib/perf/include
1118 perf_examples_dir = lib/perf/examples
1119 sharedir = $(prefix)/share
1120 template_dir = share/perf-core/templates
1121 STRACE_GROUPS_DIR = share/perf-core/strace/groups
1122 htmldir = share/doc/perf-doc
1123 tipdir = share/doc/perf-tip
1124 srcdir = $(srctree)/tools/perf
1125 ifeq ($(prefix),/usr)
1126 sysconfdir = /etc
1127 ETC_PERFCONFIG = $(sysconfdir)/perfconfig
1128 else
1129 sysconfdir = $(prefix)/etc
1130 ETC_PERFCONFIG = etc/perfconfig
1131 endif
1132 ifndef lib
1133 ifeq ($(SRCARCH)$(IS_64_BIT), x861)
1134 lib = lib64
1135 else
1136 lib = lib
1137 endif
1138 endif # lib
1139 libdir = $(prefix)/$(lib)
1140
1141 # Shell quote (do not use $(call) to accommodate ancient setups);
1142 ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
1143 STRACE_GROUPS_DIR_SQ = $(subst ','\'',$(STRACE_GROUPS_DIR))
1144 DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
1145 bindir_SQ = $(subst ','\'',$(bindir))
1146 mandir_SQ = $(subst ','\'',$(mandir))
1147 infodir_SQ = $(subst ','\'',$(infodir))
1148 perfexecdir_SQ = $(subst ','\'',$(perfexecdir))
1149 perf_include_dir_SQ = $(subst ','\'',$(perf_include_dir))
1150 perf_examples_dir_SQ = $(subst ','\'',$(perf_examples_dir))
1151 template_dir_SQ = $(subst ','\'',$(template_dir))
1152 htmldir_SQ = $(subst ','\'',$(htmldir))
1153 tipdir_SQ = $(subst ','\'',$(tipdir))
1154 prefix_SQ = $(subst ','\'',$(prefix))
1155 sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
1156 libdir_SQ = $(subst ','\'',$(libdir))
1157 srcdir_SQ = $(subst ','\'',$(srcdir))
1158
1159 ifneq ($(filter /%,$(firstword $(perfexecdir))),)
1160 perfexec_instdir = $(perfexecdir)
1161 perf_include_instdir = $(perf_include_dir)
1162 perf_examples_instdir = $(perf_examples_dir)
1163 STRACE_GROUPS_INSTDIR = $(STRACE_GROUPS_DIR)
1164 tip_instdir = $(tipdir)
1165 else
1166 perfexec_instdir = $(prefix)/$(perfexecdir)
1167 perf_include_instdir = $(prefix)/$(perf_include_dir)
1168 perf_examples_instdir = $(prefix)/$(perf_examples_dir)
1169 STRACE_GROUPS_INSTDIR = $(prefix)/$(STRACE_GROUPS_DIR)
1170 tip_instdir = $(prefix)/$(tipdir)
1171 endif
1172 perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
1173 perf_include_instdir_SQ = $(subst ','\'',$(perf_include_instdir))
1174 perf_examples_instdir_SQ = $(subst ','\'',$(perf_examples_instdir))
1175 STRACE_GROUPS_INSTDIR_SQ = $(subst ','\'',$(STRACE_GROUPS_INSTDIR))
1176 tip_instdir_SQ = $(subst ','\'',$(tip_instdir))
1177
1178 # If we install to $(HOME) we keep the traceevent default:
1179 # $(HOME)/.traceevent/plugins
1180 # Otherwise we install plugins into the global $(libdir).
1181 ifdef DESTDIR
1182 plugindir=$(libdir)/traceevent/plugins
1183 plugindir_SQ= $(subst ','\'',$(plugindir))
1184 endif
1185
1186 print_var = $(eval $(print_var_code)) $(info $(MSG))
1187 define print_var_code
1188     MSG = $(shell printf '...%30s: %s' $(1) $($(1)))
1189 endef
1190
1191 ifeq ($(VF),1)
1192   # Display EXTRA features which are detected manualy
1193   # from here with feature_check call and thus cannot
1194   # be partof global state output.
1195   $(foreach feat,$(FEATURE_TESTS_EXTRA),$(call feature_print_status,$(feat),))
1196   $(call print_var,prefix)
1197   $(call print_var,bindir)
1198   $(call print_var,libdir)
1199   $(call print_var,sysconfdir)
1200   $(call print_var,LIBUNWIND_DIR)
1201   $(call print_var,LIBDW_DIR)
1202   $(call print_var,JDIR)
1203
1204   ifeq ($(dwarf-post-unwind),1)
1205     $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
1206   endif
1207   $(info )
1208 endif
1209
1210 $(call detected_var,bindir_SQ)
1211 $(call detected_var,PYTHON_WORD)
1212 ifneq ($(OUTPUT),)
1213 $(call detected_var,OUTPUT)
1214 endif
1215 $(call detected_var,htmldir_SQ)
1216 $(call detected_var,infodir_SQ)
1217 $(call detected_var,mandir_SQ)
1218 $(call detected_var,ETC_PERFCONFIG_SQ)
1219 $(call detected_var,STRACE_GROUPS_DIR_SQ)
1220 $(call detected_var,prefix_SQ)
1221 $(call detected_var,perfexecdir_SQ)
1222 $(call detected_var,perf_include_dir_SQ)
1223 $(call detected_var,perf_examples_dir_SQ)
1224 $(call detected_var,tipdir_SQ)
1225 $(call detected_var,srcdir_SQ)
1226 $(call detected_var,LIBDIR)
1227 $(call detected_var,GTK_CFLAGS)
1228 $(call detected_var,PERL_EMBED_CCOPTS)
1229 $(call detected_var,PYTHON_EMBED_CCOPTS)
1230
1231 # re-generate FEATURE-DUMP as we may have called feature_check, found out
1232 # extra libraries to add to LDFLAGS of some other test and then redo those
1233 # tests, see the block about libbfd, disassembler-four-args, for instance.
1234 $(shell rm -f $(FEATURE_DUMP_FILENAME))
1235 $(foreach feat,$(FEATURE_TESTS),$(shell echo "$(call feature_assign,$(feat))" >> $(FEATURE_DUMP_FILENAME)))
1236
1237 ifeq ($(feature_display),1)
1238   $(call feature_display_entries)
1239 endif