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