Linux Audio

Check our new training course

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