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