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