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