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