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