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