linux/tools/perf/Makefile.config
<<
>>
Prefs
   1# SPDX-License-Identifier: GPL-2.0-only
   2
   3ifeq ($(src-perf),)
   4src-perf := $(srctree)/tools/perf
   5endif
   6
   7ifeq ($(obj-perf),)
   8obj-perf := $(OUTPUT)
   9endif
  10
  11ifneq ($(obj-perf),)
  12obj-perf := $(abspath $(obj-perf))/
  13endif
  14
  15$(shell printf "" > $(OUTPUT).config-detected)
  16detected     = $(shell echo "$(1)=y"       >> $(OUTPUT).config-detected)
  17detected_var = $(shell echo "$(1)=$($(1))" >> $(OUTPUT).config-detected)
  18
  19CFLAGS := $(EXTRA_CFLAGS) $(filter-out -Wnested-externs,$(EXTRA_WARNINGS))
  20
  21include $(srctree)/tools/scripts/Makefile.arch
  22
  23$(call detected_var,SRCARCH)
  24
  25NO_PERF_REGS := 1
  26
  27ifneq ($(NO_SYSCALL_TABLE),1)
  28  NO_SYSCALL_TABLE := 1
  29
  30  ifeq ($(SRCARCH),x86)
  31    ifeq (${IS_64_BIT}, 1)
  32      NO_SYSCALL_TABLE := 0
  33    endif
  34  else
  35    ifeq ($(SRCARCH),$(filter $(SRCARCH),powerpc arm64 s390 mips))
  36      NO_SYSCALL_TABLE := 0
  37    endif
  38  endif
  39
  40  ifneq ($(NO_SYSCALL_TABLE),1)
  41    CFLAGS += -DHAVE_SYSCALL_TABLE_SUPPORT
  42  endif
  43endif
  44
  45# Additional ARCH settings for ppc
  46ifeq ($(SRCARCH),powerpc)
  47  NO_PERF_REGS := 0
  48  CFLAGS += -I$(OUTPUT)arch/powerpc/include/generated
  49  LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
  50endif
  51
  52# Additional ARCH settings for x86
  53ifeq ($(SRCARCH),x86)
  54  $(call detected,CONFIG_X86)
  55  ifeq (${IS_64_BIT}, 1)
  56    CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT -I$(OUTPUT)arch/x86/include/generated
  57    ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
  58    LIBUNWIND_LIBS = -lunwind-x86_64 -lunwind -llzma
  59    $(call detected,CONFIG_X86_64)
  60  else
  61    LIBUNWIND_LIBS = -lunwind-x86 -llzma -lunwind
  62  endif
  63  NO_PERF_REGS := 0
  64endif
  65
  66ifeq ($(SRCARCH),arm)
  67  NO_PERF_REGS := 0
  68  LIBUNWIND_LIBS = -lunwind -lunwind-arm
  69endif
  70
  71ifeq ($(SRCARCH),arm64)
  72  NO_PERF_REGS := 0
  73  CFLAGS += -I$(OUTPUT)arch/arm64/include/generated
  74  LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
  75endif
  76
  77ifeq ($(SRCARCH),riscv)
  78  NO_PERF_REGS := 0
  79endif
  80
  81ifeq ($(SRCARCH),csky)
  82  NO_PERF_REGS := 0
  83endif
  84
  85ifeq ($(ARCH),s390)
  86  NO_PERF_REGS := 0
  87  CFLAGS += -fPIC -I$(OUTPUT)arch/s390/include/generated
  88endif
  89
  90ifeq ($(ARCH),mips)
  91  NO_PERF_REGS := 0
  92  CFLAGS += -I$(OUTPUT)arch/mips/include/generated
  93  LIBUNWIND_LIBS = -lunwind -lunwind-mips
  94endif
  95
  96ifeq ($(NO_PERF_REGS),0)
  97  $(call detected,CONFIG_PERF_REGS)
  98endif
  99
 100# So far there's only x86 and arm libdw unwind support merged in perf.
 101# Disable it on all other architectures in case libdw unwind
 102# support is detected in system. Add supported architectures
 103# to the check.
 104ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc s390 csky riscv))
 105  NO_LIBDW_DWARF_UNWIND := 1
 106endif
 107
 108ifeq ($(LIBUNWIND_LIBS),)
 109  NO_LIBUNWIND := 1
 110endif
 111#
 112# For linking with debug library, run like:
 113#
 114#   make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
 115#
 116
 117libunwind_arch_set_flags = $(eval $(libunwind_arch_set_flags_code))
 118define libunwind_arch_set_flags_code
 119  FEATURE_CHECK_CFLAGS-libunwind-$(1)  = -I$(LIBUNWIND_DIR)/include
 120  FEATURE_CHECK_LDFLAGS-libunwind-$(1) = -L$(LIBUNWIND_DIR)/lib
 121endef
 122
 123ifdef LIBUNWIND_DIR
 124  LIBUNWIND_CFLAGS  = -I$(LIBUNWIND_DIR)/include
 125  LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib
 126  LIBUNWIND_ARCHS = x86 x86_64 arm aarch64 debug-frame-arm debug-frame-aarch64
 127  $(foreach libunwind_arch,$(LIBUNWIND_ARCHS),$(call libunwind_arch_set_flags,$(libunwind_arch)))
 128endif
 129
 130# Set per-feature check compilation flags
 131FEATURE_CHECK_CFLAGS-libunwind = $(LIBUNWIND_CFLAGS)
 132FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
 133FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS)
 134FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
 135
 136FEATURE_CHECK_LDFLAGS-libunwind-arm += -lunwind -lunwind-arm
 137FEATURE_CHECK_LDFLAGS-libunwind-aarch64 += -lunwind -lunwind-aarch64
 138FEATURE_CHECK_LDFLAGS-libunwind-x86 += -lunwind -llzma -lunwind-x86
 139FEATURE_CHECK_LDFLAGS-libunwind-x86_64 += -lunwind -llzma -lunwind-x86_64
 140
 141FEATURE_CHECK_LDFLAGS-libcrypto = -lcrypto
 142
 143ifdef CSINCLUDES
 144  LIBOPENCSD_CFLAGS := -I$(CSINCLUDES)
 145endif
 146OPENCSDLIBS := -lopencsd_c_api -lopencsd -lstdc++
 147ifdef CSLIBS
 148  LIBOPENCSD_LDFLAGS := -L$(CSLIBS)
 149endif
 150FEATURE_CHECK_CFLAGS-libopencsd := $(LIBOPENCSD_CFLAGS)
 151FEATURE_CHECK_LDFLAGS-libopencsd := $(LIBOPENCSD_LDFLAGS) $(OPENCSDLIBS)
 152
 153ifeq ($(NO_PERF_REGS),0)
 154  CFLAGS += -DHAVE_PERF_REGS_SUPPORT
 155endif
 156
 157# for linking with debug library, run like:
 158# make DEBUG=1 LIBDW_DIR=/opt/libdw/
 159ifdef LIBDW_DIR
 160  LIBDW_CFLAGS  := -I$(LIBDW_DIR)/include
 161  LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
 162endif
 163DWARFLIBS := -ldw
 164ifeq ($(findstring -static,${LDFLAGS}),-static)
 165  DWARFLIBS += -lelf -lebl -ldl -lz -llzma -lbz2
 166endif
 167FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
 168FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) $(DWARFLIBS)
 169
 170# for linking with debug library, run like:
 171# make DEBUG=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/
 172ifdef LIBBABELTRACE_DIR
 173  LIBBABELTRACE_CFLAGS  := -I$(LIBBABELTRACE_DIR)/include
 174  LIBBABELTRACE_LDFLAGS := -L$(LIBBABELTRACE_DIR)/lib
 175endif
 176FEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS)
 177FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
 178
 179ifdef LIBZSTD_DIR
 180  LIBZSTD_CFLAGS  := -I$(LIBZSTD_DIR)/lib
 181  LIBZSTD_LDFLAGS := -L$(LIBZSTD_DIR)/lib
 182endif
 183FEATURE_CHECK_CFLAGS-libzstd := $(LIBZSTD_CFLAGS)
 184FEATURE_CHECK_LDFLAGS-libzstd := $(LIBZSTD_LDFLAGS)
 185
 186FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi -I$(srctree)/tools/include/uapi
 187# include ARCH specific config
 188-include $(src-perf)/arch/$(SRCARCH)/Makefile
 189
 190ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
 191  CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
 192endif
 193
 194include $(srctree)/tools/scripts/utilities.mak
 195
 196ifeq ($(call get-executable,$(FLEX)),)
 197  dummy := $(error Error: $(FLEX) is missing on this system, please install it)
 198endif
 199
 200ifeq ($(call get-executable,$(BISON)),)
 201  dummy := $(error Error: $(BISON) is missing on this system, please install it)
 202endif
 203
 204ifneq ($(OUTPUT),)
 205  ifeq ($(shell expr $(shell $(BISON) --version | grep bison | sed -e 's/.\+ \([0-9]\+\).\([0-9]\+\).\([0-9]\+\)/\1\2\3/g') \>\= 371), 1)
 206    BISON_FILE_PREFIX_MAP := --file-prefix-map=$(OUTPUT)=
 207  endif
 208endif
 209
 210# Treat warnings as errors unless directed not to
 211ifneq ($(WERROR),0)
 212  CORE_CFLAGS += -Werror
 213  CXXFLAGS += -Werror
 214endif
 215
 216ifndef DEBUG
 217  DEBUG := 0
 218endif
 219
 220ifeq ($(DEBUG),0)
 221ifeq ($(CC_NO_CLANG), 0)
 222  CORE_CFLAGS += -O3
 223else
 224  CORE_CFLAGS += -O6
 225endif
 226endif
 227
 228ifdef PARSER_DEBUG
 229  PARSER_DEBUG_BISON := -t
 230  PARSER_DEBUG_FLEX  := -d
 231  CFLAGS             += -DPARSER_DEBUG
 232  $(call detected_var,PARSER_DEBUG_BISON)
 233  $(call detected_var,PARSER_DEBUG_FLEX)
 234endif
 235
 236# Try different combinations to accommodate systems that only have
 237# python[2][-config] in weird combinations but always preferring
 238# python2 and python2-config as per pep-0394. If python2 or python
 239# aren't found, then python3 is used.
 240PYTHON_AUTO := python
 241PYTHON_AUTO := $(if $(call get-executable,python3),python3,$(PYTHON_AUTO))
 242PYTHON_AUTO := $(if $(call get-executable,python),python,$(PYTHON_AUTO))
 243PYTHON_AUTO := $(if $(call get-executable,python2),python2,$(PYTHON_AUTO))
 244override PYTHON := $(call get-executable-or-default,PYTHON,$(PYTHON_AUTO))
 245PYTHON_AUTO_CONFIG := \
 246  $(if $(call get-executable,$(PYTHON)-config),$(PYTHON)-config,python-config)
 247override PYTHON_CONFIG := \
 248  $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON_AUTO_CONFIG))
 249
 250grep-libs  = $(filter -l%,$(1))
 251strip-libs  = $(filter-out -l%,$(1))
 252
 253PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
 254
 255# Python 3.8 changed the output of `python-config --ldflags` to not include the
 256# '-lpythonX.Y' flag unless '--embed' is also passed. The feature check for
 257# libpython fails if that flag is not included in LDFLAGS
 258ifeq ($(shell $(PYTHON_CONFIG_SQ) --ldflags --embed 2>&1 1>/dev/null; echo $$?), 0)
 259  PYTHON_CONFIG_LDFLAGS := --ldflags --embed
 260else
 261  PYTHON_CONFIG_LDFLAGS := --ldflags
 262endif
 263
 264ifdef PYTHON_CONFIG
 265  PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) $(PYTHON_CONFIG_LDFLAGS) 2>/dev/null)
 266  PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
 267  PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS)) -lutil
 268  PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --includes 2>/dev/null)
 269  FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
 270endif
 271
 272FEATURE_CHECK_CFLAGS-libpython := $(PYTHON_EMBED_CCOPTS)
 273FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
 274FEATURE_CHECK_CFLAGS-libpython-version := $(PYTHON_EMBED_CCOPTS)
 275FEATURE_CHECK_LDFLAGS-libpython-version := $(PYTHON_EMBED_LDOPTS)
 276
 277FEATURE_CHECK_LDFLAGS-libaio = -lrt
 278
 279FEATURE_CHECK_LDFLAGS-disassembler-four-args = -lbfd -lopcodes -ldl
 280
 281CORE_CFLAGS += -fno-omit-frame-pointer
 282CORE_CFLAGS += -ggdb3
 283CORE_CFLAGS += -funwind-tables
 284CORE_CFLAGS += -Wall
 285CORE_CFLAGS += -Wextra
 286CORE_CFLAGS += -std=gnu99
 287
 288CXXFLAGS += -std=gnu++11 -fno-exceptions -fno-rtti
 289CXXFLAGS += -Wall
 290CXXFLAGS += -fno-omit-frame-pointer
 291CXXFLAGS += -ggdb3
 292CXXFLAGS += -funwind-tables
 293CXXFLAGS += -Wno-strict-aliasing
 294
 295# Enforce a non-executable stack, as we may regress (again) in the future by
 296# adding assembler files missing the .GNU-stack linker note.
 297LDFLAGS += -Wl,-z,noexecstack
 298
 299EXTLIBS = -lpthread -lrt -lm -ldl
 300
 301ifneq ($(TCMALLOC),)
 302  CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
 303  EXTLIBS += -ltcmalloc
 304endif
 305
 306ifeq ($(FEATURES_DUMP),)
 307# We will display at the end of this Makefile.config, using $(call feature_display_entries)
 308# As we may retry some feature detection here, see the disassembler-four-args case, for instance
 309  FEATURE_DISPLAY_DEFERRED := 1
 310include $(srctree)/tools/build/Makefile.feature
 311else
 312include $(FEATURES_DUMP)
 313endif
 314
 315ifeq ($(feature-stackprotector-all), 1)
 316  CORE_CFLAGS += -fstack-protector-all
 317endif
 318
 319ifeq ($(DEBUG),0)
 320  ifeq ($(feature-fortify-source), 1)
 321    CORE_CFLAGS += -D_FORTIFY_SOURCE=2
 322  endif
 323endif
 324
 325INC_FLAGS += -I$(srctree)/tools/lib/perf/include
 326INC_FLAGS += -I$(src-perf)/util/include
 327INC_FLAGS += -I$(src-perf)/arch/$(SRCARCH)/include
 328INC_FLAGS += -I$(srctree)/tools/include/
 329INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi
 330INC_FLAGS += -I$(srctree)/tools/include/uapi
 331INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/
 332INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/
 333
 334# $(obj-perf)      for generated common-cmds.h
 335# $(obj-perf)/util for generated bison/flex headers
 336ifneq ($(OUTPUT),)
 337INC_FLAGS += -I$(obj-perf)/util
 338INC_FLAGS += -I$(obj-perf)
 339endif
 340
 341INC_FLAGS += -I$(src-perf)/util
 342INC_FLAGS += -I$(src-perf)
 343INC_FLAGS += -I$(srctree)/tools/lib/
 344
 345CORE_CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
 346
 347CFLAGS   += $(CORE_CFLAGS) $(INC_FLAGS)
 348CXXFLAGS += $(INC_FLAGS)
 349
 350LIBPERF_CFLAGS := $(CORE_CFLAGS) $(EXTRA_CFLAGS)
 351
 352ifeq ($(feature-pthread-attr-setaffinity-np), 1)
 353  CFLAGS += -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP
 354endif
 355
 356ifeq ($(feature-pthread-barrier), 1)
 357  CFLAGS += -DHAVE_PTHREAD_BARRIER
 358endif
 359
 360ifndef NO_BIONIC
 361  $(call feature_check,bionic)
 362  ifeq ($(feature-bionic), 1)
 363    BIONIC := 1
 364    CFLAGS += -DLACKS_SIGQUEUE_PROTOTYPE
 365    CFLAGS += -DLACKS_OPEN_MEMSTREAM_PROTOTYPE
 366    EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
 367    EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
 368  endif
 369endif
 370
 371ifeq ($(feature-eventfd), 1)
 372  CFLAGS += -DHAVE_EVENTFD_SUPPORT
 373endif
 374
 375ifeq ($(feature-get_current_dir_name), 1)
 376  CFLAGS += -DHAVE_GET_CURRENT_DIR_NAME
 377endif
 378
 379ifeq ($(feature-gettid), 1)
 380  CFLAGS += -DHAVE_GETTID
 381endif
 382
 383ifeq ($(feature-file-handle), 1)
 384  CFLAGS += -DHAVE_FILE_HANDLE
 385endif
 386
 387ifdef NO_LIBELF
 388  NO_DWARF := 1
 389  NO_DEMANGLE := 1
 390  NO_LIBUNWIND := 1
 391  NO_LIBDW_DWARF_UNWIND := 1
 392  NO_LIBBPF := 1
 393  NO_JVMTI := 1
 394else
 395  ifeq ($(feature-libelf), 0)
 396    ifeq ($(feature-glibc), 1)
 397      LIBC_SUPPORT := 1
 398    endif
 399    ifeq ($(BIONIC),1)
 400      LIBC_SUPPORT := 1
 401    endif
 402    ifeq ($(LIBC_SUPPORT),1)
 403      msg := $(warning No libelf found. Disables 'probe' tool, jvmti and BPF support in 'perf record'. Please install libelf-dev, libelf-devel or elfutils-libelf-devel);
 404
 405      NO_LIBELF := 1
 406      NO_DWARF := 1
 407      NO_DEMANGLE := 1
 408      NO_LIBUNWIND := 1
 409      NO_LIBDW_DWARF_UNWIND := 1
 410      NO_LIBBPF := 1
 411      NO_JVMTI := 1
 412    else
 413      ifneq ($(filter s% -fsanitize=address%,$(EXTRA_CFLAGS),),)
 414        ifneq ($(shell ldconfig -p | grep libasan >/dev/null 2>&1; echo $$?), 0)
 415          msg := $(error No libasan found, please install libasan);
 416        endif
 417      endif
 418
 419      ifneq ($(filter s% -fsanitize=undefined%,$(EXTRA_CFLAGS),),)
 420        ifneq ($(shell ldconfig -p | grep libubsan >/dev/null 2>&1; echo $$?), 0)
 421          msg := $(error No libubsan found, please install libubsan);
 422        endif
 423      endif
 424
 425      ifneq ($(filter s% -static%,$(LDFLAGS),),)
 426        msg := $(error No static glibc found, please install glibc-static);
 427      else
 428        msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]);
 429      endif
 430    endif
 431  else
 432    ifndef NO_LIBDW_DWARF_UNWIND
 433      ifneq ($(feature-libdw-dwarf-unwind),1)
 434        NO_LIBDW_DWARF_UNWIND := 1
 435        msg := $(warning No libdw DWARF unwind found, Please install elfutils-devel/libdw-dev >= 0.158 and/or set LIBDW_DIR);
 436      endif
 437    endif
 438    ifneq ($(feature-dwarf), 1)
 439      ifndef NO_DWARF
 440        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);
 441        NO_DWARF := 1
 442      endif
 443    else
 444      ifneq ($(feature-dwarf_getlocations), 1)
 445        msg := $(warning Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157);
 446      else
 447        CFLAGS += -DHAVE_DWARF_GETLOCATIONS_SUPPORT
 448      endif # dwarf_getlocations
 449    endif # Dwarf support
 450  endif # libelf support
 451endif # NO_LIBELF
 452
 453ifeq ($(feature-glibc), 1)
 454  CFLAGS += -DHAVE_GLIBC_SUPPORT
 455endif
 456
 457ifeq ($(feature-libaio), 1)
 458  ifndef NO_AIO
 459    CFLAGS += -DHAVE_AIO_SUPPORT
 460  endif
 461endif
 462
 463ifdef NO_DWARF
 464  NO_LIBDW_DWARF_UNWIND := 1
 465endif
 466
 467ifeq ($(feature-sched_getcpu), 1)
 468  CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORT
 469endif
 470
 471ifeq ($(feature-setns), 1)
 472  CFLAGS += -DHAVE_SETNS_SUPPORT
 473  $(call detected,CONFIG_SETNS)
 474endif
 475
 476ifdef CORESIGHT
 477  $(call feature_check,libopencsd)
 478  ifeq ($(feature-libopencsd), 1)
 479    CFLAGS += -DHAVE_CSTRACE_SUPPORT $(LIBOPENCSD_CFLAGS)
 480    ifeq ($(feature-reallocarray), 0)
 481      CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
 482    endif
 483    LDFLAGS += $(LIBOPENCSD_LDFLAGS)
 484    EXTLIBS += $(OPENCSDLIBS)
 485    $(call detected,CONFIG_LIBOPENCSD)
 486    ifdef CSTRACE_RAW
 487      CFLAGS += -DCS_DEBUG_RAW
 488      ifeq (${CSTRACE_RAW}, packed)
 489        CFLAGS += -DCS_RAW_PACKED
 490      endif
 491    endif
 492  else
 493    dummy := $(error Error: No libopencsd library found or the version is not up-to-date. Please install recent libopencsd to build with CORESIGHT=1)
 494  endif
 495endif
 496
 497ifndef NO_LIBELF
 498  CFLAGS += -DHAVE_LIBELF_SUPPORT
 499  EXTLIBS += -lelf
 500  $(call detected,CONFIG_LIBELF)
 501
 502  ifeq ($(feature-libelf-getphdrnum), 1)
 503    CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
 504  endif
 505
 506  ifeq ($(feature-libelf-gelf_getnote), 1)
 507    CFLAGS += -DHAVE_GELF_GETNOTE_SUPPORT
 508  else
 509    msg := $(warning gelf_getnote() not found on libelf, SDT support disabled);
 510  endif
 511
 512  ifeq ($(feature-libelf-getshdrstrndx), 1)
 513    CFLAGS += -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT
 514  endif
 515
 516  ifndef NO_LIBDEBUGINFOD
 517    $(call feature_check,libdebuginfod)
 518    ifeq ($(feature-libdebuginfod), 1)
 519      CFLAGS += -DHAVE_DEBUGINFOD_SUPPORT
 520      EXTLIBS += -ldebuginfod
 521    endif
 522  endif
 523
 524  ifndef NO_DWARF
 525    ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
 526      msg := $(warning DWARF register mappings have not been defined for architecture $(SRCARCH), DWARF support disabled);
 527      NO_DWARF := 1
 528    else
 529      CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
 530      LDFLAGS += $(LIBDW_LDFLAGS)
 531      EXTLIBS += ${DWARFLIBS}
 532      $(call detected,CONFIG_DWARF)
 533    endif # PERF_HAVE_DWARF_REGS
 534  endif # NO_DWARF
 535
 536  ifndef NO_LIBBPF
 537    ifeq ($(feature-bpf), 1)
 538      CFLAGS += -DHAVE_LIBBPF_SUPPORT
 539      $(call detected,CONFIG_LIBBPF)
 540
 541      # detecting libbpf without LIBBPF_DYNAMIC, so make VF=1 shows libbpf detection status
 542      $(call feature_check,libbpf)
 543      ifdef LIBBPF_DYNAMIC
 544        ifeq ($(feature-libbpf), 1)
 545          EXTLIBS += -lbpf
 546          $(call detected,CONFIG_LIBBPF_DYNAMIC)
 547        else
 548          dummy := $(error Error: No libbpf devel library found, please install libbpf-devel);
 549        endif
 550      endif
 551    endif
 552
 553    ifndef NO_DWARF
 554      ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
 555        CFLAGS += -DHAVE_BPF_PROLOGUE
 556        $(call detected,CONFIG_BPF_PROLOGUE)
 557      else
 558        msg := $(warning BPF prologue is not supported by architecture $(SRCARCH), missing regs_query_register_offset());
 559      endif
 560    else
 561      msg := $(warning DWARF support is off, BPF prologue is disabled);
 562    endif
 563
 564  endif # NO_LIBBPF
 565endif # NO_LIBELF
 566
 567ifndef NO_SDT
 568  ifneq ($(feature-sdt), 1)
 569    msg := $(warning No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev);
 570    NO_SDT := 1;
 571  else
 572    CFLAGS += -DHAVE_SDT_EVENT
 573    $(call detected,CONFIG_SDT_EVENT)
 574  endif
 575endif
 576
 577ifdef PERF_HAVE_JITDUMP
 578  ifndef NO_LIBELF
 579    $(call detected,CONFIG_JITDUMP)
 580    CFLAGS += -DHAVE_JITDUMP
 581  endif
 582endif
 583
 584ifeq ($(SRCARCH),powerpc)
 585  ifndef NO_DWARF
 586    CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
 587  endif
 588endif
 589
 590ifndef NO_LIBUNWIND
 591  have_libunwind :=
 592
 593  $(call feature_check,libunwind-x86)
 594  ifeq ($(feature-libunwind-x86), 1)
 595    $(call detected,CONFIG_LIBUNWIND_X86)
 596    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
 597    LDFLAGS += -lunwind-x86
 598    EXTLIBS_LIBUNWIND += -lunwind-x86
 599    have_libunwind = 1
 600  endif
 601
 602  $(call feature_check,libunwind-aarch64)
 603  ifeq ($(feature-libunwind-aarch64), 1)
 604    $(call detected,CONFIG_LIBUNWIND_AARCH64)
 605    CFLAGS += -DHAVE_LIBUNWIND_AARCH64_SUPPORT
 606    LDFLAGS += -lunwind-aarch64
 607    EXTLIBS_LIBUNWIND += -lunwind-aarch64
 608    have_libunwind = 1
 609    $(call feature_check,libunwind-debug-frame-aarch64)
 610    ifneq ($(feature-libunwind-debug-frame-aarch64), 1)
 611      msg := $(warning No debug_frame support found in libunwind-aarch64);
 612      CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME_AARCH64
 613    endif
 614  endif
 615
 616  ifneq ($(feature-libunwind), 1)
 617    msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
 618    NO_LOCAL_LIBUNWIND := 1
 619  else
 620    have_libunwind := 1
 621    $(call detected,CONFIG_LOCAL_LIBUNWIND)
 622  endif
 623
 624  ifneq ($(have_libunwind), 1)
 625    NO_LIBUNWIND := 1
 626  endif
 627else
 628  NO_LOCAL_LIBUNWIND := 1
 629endif
 630
 631ifndef NO_LIBBPF
 632  ifneq ($(feature-bpf), 1)
 633    msg := $(warning BPF API too old. Please install recent kernel headers. BPF support in 'perf record' is disabled.)
 634    NO_LIBBPF := 1
 635  endif
 636endif
 637
 638ifdef BUILD_BPF_SKEL
 639  $(call feature_check,clang-bpf-co-re)
 640  ifeq ($(feature-clang-bpf-co-re), 0)
 641    dummy := $(error Error: clang too old/not installed. Please install recent clang to build with BUILD_BPF_SKEL)
 642  endif
 643  $(call detected,CONFIG_PERF_BPF_SKEL)
 644  CFLAGS += -DHAVE_BPF_SKEL
 645endif
 646
 647dwarf-post-unwind := 1
 648dwarf-post-unwind-text := BUG
 649
 650# setup DWARF post unwinder
 651ifdef NO_LIBUNWIND
 652  ifdef NO_LIBDW_DWARF_UNWIND
 653    msg := $(warning Disabling post unwind, no support found.);
 654    dwarf-post-unwind := 0
 655  else
 656    dwarf-post-unwind-text := libdw
 657    $(call detected,CONFIG_LIBDW_DWARF_UNWIND)
 658  endif
 659else
 660  dwarf-post-unwind-text := libunwind
 661  $(call detected,CONFIG_LIBUNWIND)
 662  # Enable libunwind support by default.
 663  ifndef NO_LIBDW_DWARF_UNWIND
 664    NO_LIBDW_DWARF_UNWIND := 1
 665  endif
 666endif
 667
 668ifeq ($(dwarf-post-unwind),1)
 669  CFLAGS += -DHAVE_DWARF_UNWIND_SUPPORT
 670  $(call detected,CONFIG_DWARF_UNWIND)
 671else
 672  NO_DWARF_UNWIND := 1
 673endif
 674
 675ifndef NO_LOCAL_LIBUNWIND
 676  ifeq ($(SRCARCH),$(filter $(SRCARCH),arm arm64))
 677    $(call feature_check,libunwind-debug-frame)
 678    ifneq ($(feature-libunwind-debug-frame), 1)
 679      msg := $(warning No debug_frame support found in libunwind);
 680      CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
 681    endif
 682  else
 683    # non-ARM has no dwarf_find_debug_frame() function:
 684    CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
 685  endif
 686  EXTLIBS += $(LIBUNWIND_LIBS)
 687  LDFLAGS += $(LIBUNWIND_LIBS)
 688endif
 689ifeq ($(findstring -static,${LDFLAGS}),-static)
 690  # gcc -static links libgcc_eh which contans piece of libunwind
 691  LIBUNWIND_LDFLAGS += -Wl,--allow-multiple-definition
 692endif
 693
 694ifndef NO_LIBUNWIND
 695  CFLAGS  += -DHAVE_LIBUNWIND_SUPPORT
 696  CFLAGS  += $(LIBUNWIND_CFLAGS)
 697  LDFLAGS += $(LIBUNWIND_LDFLAGS)
 698  EXTLIBS += $(EXTLIBS_LIBUNWIND)
 699endif
 700
 701ifeq ($(NO_SYSCALL_TABLE),0)
 702  $(call detected,CONFIG_TRACE)
 703else
 704  ifndef NO_LIBAUDIT
 705    $(call feature_check,libaudit)
 706    ifneq ($(feature-libaudit), 1)
 707      msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
 708      NO_LIBAUDIT := 1
 709    else
 710      CFLAGS += -DHAVE_LIBAUDIT_SUPPORT
 711      EXTLIBS += -laudit
 712      $(call detected,CONFIG_TRACE)
 713    endif
 714  endif
 715endif
 716
 717ifndef NO_LIBCRYPTO
 718  ifneq ($(feature-libcrypto), 1)
 719    msg := $(warning No libcrypto.h found, disables jitted code injection, please install openssl-devel or libssl-dev);
 720    NO_LIBCRYPTO := 1
 721  else
 722    CFLAGS += -DHAVE_LIBCRYPTO_SUPPORT
 723    EXTLIBS += -lcrypto
 724    $(call detected,CONFIG_CRYPTO)
 725  endif
 726endif
 727
 728ifdef NO_NEWT
 729  NO_SLANG=1
 730endif
 731
 732ifndef NO_SLANG
 733  ifneq ($(feature-libslang), 1)
 734    ifneq ($(feature-libslang-include-subdir), 1)
 735      msg := $(warning slang not found, disables TUI support. Please install slang-devel, libslang-dev or libslang2-dev);
 736      NO_SLANG := 1
 737    else
 738      CFLAGS += -DHAVE_SLANG_INCLUDE_SUBDIR
 739    endif
 740  endif
 741  ifndef NO_SLANG
 742    # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
 743    CFLAGS += -DHAVE_SLANG_SUPPORT
 744    EXTLIBS += -lslang
 745    $(call detected,CONFIG_SLANG)
 746  endif
 747endif
 748
 749ifdef GTK2
 750  FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
 751  $(call feature_check,gtk2)
 752  ifneq ($(feature-gtk2), 1)
 753    msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
 754    NO_GTK2 := 1
 755  else
 756    $(call feature_check,gtk2-infobar)
 757    ifeq ($(feature-gtk2-infobar), 1)
 758      GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
 759    endif
 760    CFLAGS += -DHAVE_GTK2_SUPPORT
 761    GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
 762    GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
 763    EXTLIBS += -ldl
 764  endif
 765endif
 766
 767ifdef NO_LIBPERL
 768  CFLAGS += -DNO_LIBPERL
 769else
 770  PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
 771  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
 772  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
 773  PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
 774  PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
 775  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
 776  PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
 777  FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
 778
 779  ifneq ($(feature-libperl), 1)
 780    CFLAGS += -DNO_LIBPERL
 781    NO_LIBPERL := 1
 782    msg := $(warning Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev);
 783  else
 784    LDFLAGS += $(PERL_EMBED_LDFLAGS)
 785    EXTLIBS += $(PERL_EMBED_LIBADD)
 786    CFLAGS += -DHAVE_LIBPERL_SUPPORT
 787    $(call detected,CONFIG_LIBPERL)
 788  endif
 789endif
 790
 791ifeq ($(feature-timerfd), 1)
 792  CFLAGS += -DHAVE_TIMERFD_SUPPORT
 793else
 794  msg := $(warning No timerfd support. Disables 'perf kvm stat live');
 795endif
 796
 797disable-python = $(eval $(disable-python_code))
 798define disable-python_code
 799  CFLAGS += -DNO_LIBPYTHON
 800  $(warning $1)
 801  NO_LIBPYTHON := 1
 802endef
 803
 804ifdef NO_LIBPYTHON
 805  $(call disable-python,Python support disabled by user)
 806else
 807
 808  ifndef PYTHON
 809    $(call disable-python,No python interpreter was found: disables Python support - please install python-devel/python-dev)
 810  else
 811    PYTHON_WORD := $(call shell-wordify,$(PYTHON))
 812
 813    ifndef PYTHON_CONFIG
 814      $(call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
 815    else
 816
 817      ifneq ($(feature-libpython), 1)
 818        $(call disable-python,No 'Python.h' (for Python 2.x support) was found: disables Python support - please install python-devel/python-dev)
 819      else
 820         LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
 821         EXTLIBS += $(PYTHON_EMBED_LIBADD)
 822         LANG_BINDINGS += $(obj-perf)python/perf.so
 823         CFLAGS += -DHAVE_LIBPYTHON_SUPPORT
 824         $(call detected,CONFIG_LIBPYTHON)
 825      endif
 826    endif
 827  endif
 828endif
 829
 830
 831ifndef NO_LIBBFD
 832  ifeq ($(feature-libbfd), 1)
 833    EXTLIBS += -lbfd -lopcodes
 834  else
 835    # we are on a system that requires -liberty and (maybe) -lz
 836    # to link against -lbfd; test each case individually here
 837
 838    # call all detections now so we get correct
 839    # status in VF output
 840    $(call feature_check,libbfd-liberty)
 841    $(call feature_check,libbfd-liberty-z)
 842
 843    ifeq ($(feature-libbfd-liberty), 1)
 844      EXTLIBS += -lbfd -lopcodes -liberty
 845      FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -ldl
 846    else
 847      ifeq ($(feature-libbfd-liberty-z), 1)
 848        EXTLIBS += -lbfd -lopcodes -liberty -lz
 849        FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -lz -ldl
 850      endif
 851    endif
 852    $(call feature_check,disassembler-four-args)
 853  endif
 854
 855  ifeq ($(feature-libbfd-buildid), 1)
 856    CFLAGS += -DHAVE_LIBBFD_BUILDID_SUPPORT
 857  else
 858    msg := $(warning Old version of libbfd/binutils things like PE executable profiling will not be available);
 859  endif
 860endif
 861
 862ifdef NO_DEMANGLE
 863  CFLAGS += -DNO_DEMANGLE
 864else
 865  ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
 866    EXTLIBS += -liberty
 867  else
 868    ifeq ($(filter -liberty,$(EXTLIBS)),)
 869      $(call feature_check,cplus-demangle)
 870
 871      # we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
 872      # or any of 'bfd iberty z' trinity
 873      ifeq ($(feature-cplus-demangle), 1)
 874        EXTLIBS += -liberty
 875      else
 876        msg := $(warning No bfd.h/libbfd found, please install binutils-dev[el]/zlib-static/libiberty-dev to gain symbol demangling)
 877        CFLAGS += -DNO_DEMANGLE
 878      endif
 879    endif
 880  endif
 881
 882  ifneq ($(filter -liberty,$(EXTLIBS)),)
 883    CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
 884  endif
 885endif
 886
 887ifneq ($(filter -lbfd,$(EXTLIBS)),)
 888  CFLAGS += -DHAVE_LIBBFD_SUPPORT
 889endif
 890
 891ifndef NO_ZLIB
 892  ifeq ($(feature-zlib), 1)
 893    CFLAGS += -DHAVE_ZLIB_SUPPORT
 894    EXTLIBS += -lz
 895    $(call detected,CONFIG_ZLIB)
 896  else
 897    NO_ZLIB := 1
 898  endif
 899endif
 900
 901ifndef NO_LZMA
 902  ifeq ($(feature-lzma), 1)
 903    CFLAGS += -DHAVE_LZMA_SUPPORT
 904    EXTLIBS += -llzma
 905    $(call detected,CONFIG_LZMA)
 906  else
 907    msg := $(warning No liblzma found, disables xz kernel module decompression, please install xz-devel/liblzma-dev);
 908    NO_LZMA := 1
 909  endif
 910endif
 911
 912ifndef NO_LIBZSTD
 913  ifeq ($(feature-libzstd), 1)
 914    CFLAGS += -DHAVE_ZSTD_SUPPORT
 915    CFLAGS += $(LIBZSTD_CFLAGS)
 916    LDFLAGS += $(LIBZSTD_LDFLAGS)
 917    EXTLIBS += -lzstd
 918    $(call detected,CONFIG_ZSTD)
 919  else
 920    msg := $(warning No libzstd found, disables trace compression, please install libzstd-dev[el] and/or set LIBZSTD_DIR);
 921    NO_LIBZSTD := 1
 922  endif
 923endif
 924
 925ifndef NO_LIBCAP
 926  ifeq ($(feature-libcap), 1)
 927    CFLAGS += -DHAVE_LIBCAP_SUPPORT
 928    EXTLIBS += -lcap
 929    $(call detected,CONFIG_LIBCAP)
 930  else
 931    msg := $(warning No libcap found, disables capability support, please install libcap-devel/libcap-dev);
 932    NO_LIBCAP := 1
 933  endif
 934endif
 935
 936ifndef NO_BACKTRACE
 937  ifeq ($(feature-backtrace), 1)
 938    CFLAGS += -DHAVE_BACKTRACE_SUPPORT
 939  endif
 940endif
 941
 942ifndef NO_LIBNUMA
 943  ifeq ($(feature-libnuma), 0)
 944    msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev);
 945    NO_LIBNUMA := 1
 946  else
 947    ifeq ($(feature-numa_num_possible_cpus), 0)
 948      msg := $(warning Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8);
 949      NO_LIBNUMA := 1
 950    else
 951      CFLAGS += -DHAVE_LIBNUMA_SUPPORT
 952      EXTLIBS += -lnuma
 953      $(call detected,CONFIG_NUMA)
 954    endif
 955  endif
 956endif
 957
 958ifdef HAVE_KVM_STAT_SUPPORT
 959    CFLAGS += -DHAVE_KVM_STAT_SUPPORT
 960endif
 961
 962ifeq ($(feature-disassembler-four-args), 1)
 963    CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
 964endif
 965
 966ifeq (${IS_64_BIT}, 1)
 967  ifndef NO_PERF_READ_VDSO32
 968    $(call feature_check,compile-32)
 969    ifeq ($(feature-compile-32), 1)
 970      CFLAGS += -DHAVE_PERF_READ_VDSO32
 971    else
 972      NO_PERF_READ_VDSO32 := 1
 973    endif
 974  endif
 975  ifneq ($(SRCARCH), x86)
 976    NO_PERF_READ_VDSOX32 := 1
 977  endif
 978  ifndef NO_PERF_READ_VDSOX32
 979    $(call feature_check,compile-x32)
 980    ifeq ($(feature-compile-x32), 1)
 981      CFLAGS += -DHAVE_PERF_READ_VDSOX32
 982    else
 983      NO_PERF_READ_VDSOX32 := 1
 984    endif
 985  endif
 986else
 987  NO_PERF_READ_VDSO32 := 1
 988  NO_PERF_READ_VDSOX32 := 1
 989endif
 990
 991ifndef NO_LIBBABELTRACE
 992  $(call feature_check,libbabeltrace)
 993  ifeq ($(feature-libbabeltrace), 1)
 994    CFLAGS += -DHAVE_LIBBABELTRACE_SUPPORT $(LIBBABELTRACE_CFLAGS)
 995    LDFLAGS += $(LIBBABELTRACE_LDFLAGS)
 996    EXTLIBS += -lbabeltrace-ctf
 997    $(call detected,CONFIG_LIBBABELTRACE)
 998  else
 999    msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
1000  endif
1001endif
1002
1003ifndef NO_AUXTRACE
1004  ifeq ($(SRCARCH),x86)
1005    ifeq ($(feature-get_cpuid), 0)
1006      msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc);
1007      NO_AUXTRACE := 1
1008    endif
1009  endif
1010  ifndef NO_AUXTRACE
1011    $(call detected,CONFIG_AUXTRACE)
1012    CFLAGS += -DHAVE_AUXTRACE_SUPPORT
1013  endif
1014endif
1015
1016ifndef NO_JVMTI
1017  ifneq (,$(wildcard /usr/sbin/update-java-alternatives))
1018    JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}')
1019  else
1020    ifneq (,$(wildcard /usr/sbin/alternatives))
1021      JDIR=$(shell /usr/sbin/alternatives --display java | tail -1 | cut -d' ' -f 5 | sed -e 's%/jre/bin/java.%%g' -e 's%/bin/java.%%g')
1022    endif
1023  endif
1024  ifndef JDIR
1025    $(warning No alternatives command found, you need to set JDIR= to point to the root of your Java directory)
1026    NO_JVMTI := 1
1027  endif
1028endif
1029
1030ifndef NO_JVMTI
1031  FEATURE_CHECK_CFLAGS-jvmti := -I$(JDIR)/include -I$(JDIR)/include/linux
1032  $(call feature_check,jvmti)
1033  ifeq ($(feature-jvmti), 1)
1034    $(call detected_var,JDIR)
1035    ifndef NO_JVMTI_CMLR
1036      FEATURE_CHECK_CFLAGS-jvmti-cmlr := $(FEATURE_CHECK_CFLAGS-jvmti)
1037      $(call feature_check,jvmti-cmlr)
1038      ifeq ($(feature-jvmti-cmlr), 1)
1039        CFLAGS += -DHAVE_JVMTI_CMLR
1040      endif
1041    endif # NO_JVMTI_CMLR
1042  else
1043    $(warning No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel)
1044    NO_JVMTI := 1
1045  endif
1046endif
1047
1048USE_CXX = 0
1049USE_CLANGLLVM = 0
1050ifdef LIBCLANGLLVM
1051  $(call feature_check,cxx)
1052  ifneq ($(feature-cxx), 1)
1053    msg := $(warning No g++ found, disable clang and llvm support. Please install g++)
1054  else
1055    $(call feature_check,llvm)
1056    $(call feature_check,llvm-version)
1057    ifneq ($(feature-llvm), 1)
1058      msg := $(warning No suitable libLLVM found, disabling builtin clang and LLVM support. Please install llvm-dev(el) (>= 3.9.0))
1059    else
1060      $(call feature_check,clang)
1061      ifneq ($(feature-clang), 1)
1062        msg := $(warning No suitable libclang found, disabling builtin clang and LLVM support. Please install libclang-dev(el) (>= 3.9.0))
1063      else
1064        CFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT
1065        CXXFLAGS += -DHAVE_LIBCLANGLLVM_SUPPORT -I$(shell $(LLVM_CONFIG) --includedir)
1066        $(call detected,CONFIG_CXX)
1067        $(call detected,CONFIG_CLANGLLVM)
1068        USE_CXX = 1
1069        USE_LLVM = 1
1070        USE_CLANG = 1
1071        ifneq ($(feature-llvm-version),1)
1072          msg := $(warning This version of LLVM is not tested. May cause build errors)
1073        endif
1074      endif
1075    endif
1076  endif
1077endif
1078
1079ifdef LIBPFM4
1080  $(call feature_check,libpfm4)
1081  ifeq ($(feature-libpfm4), 1)
1082    CFLAGS += -DHAVE_LIBPFM
1083    EXTLIBS += -lpfm
1084    ASCIIDOC_EXTRA = -aHAVE_LIBPFM=1
1085    $(call detected,CONFIG_LIBPFM4)
1086  else
1087    msg := $(warning libpfm4 not found, disables libpfm4 support. Please install libpfm4-dev);
1088    NO_LIBPFM4 := 1
1089  endif
1090endif
1091
1092ifdef LIBTRACEEVENT_DYNAMIC
1093  $(call feature_check,libtraceevent)
1094  ifeq ($(feature-libtraceevent), 1)
1095    EXTLIBS += -ltraceevent
1096  else
1097    dummy := $(error Error: No libtraceevent devel library found, please install libtraceevent-devel);
1098  endif
1099endif
1100
1101# Among the variables below, these:
1102#   perfexecdir
1103#   perf_include_dir
1104#   perf_examples_dir
1105#   template_dir
1106#   mandir
1107#   infodir
1108#   htmldir
1109#   ETC_PERFCONFIG (but not sysconfdir)
1110# can be specified as a relative path some/where/else;
1111# this is interpreted as relative to $(prefix) and "perf" at
1112# runtime figures out where they are based on the path to the executable.
1113# This can help installing the suite in a relocatable way.
1114
1115# Make the path relative to DESTDIR, not to prefix
1116ifndef DESTDIR
1117prefix ?= $(HOME)
1118endif
1119bindir_relative = bin
1120bindir = $(abspath $(prefix)/$(bindir_relative))
1121includedir_relative = include
1122includedir = $(abspath $(prefix)/$(includedir_relative))
1123mandir = share/man
1124infodir = share/info
1125perfexecdir = libexec/perf-core
1126perf_include_dir = lib/perf/include
1127perf_examples_dir = lib/perf/examples
1128sharedir = $(prefix)/share
1129template_dir = share/perf-core/templates
1130STRACE_GROUPS_DIR = share/perf-core/strace/groups
1131htmldir = share/doc/perf-doc
1132tipdir = share/doc/perf-tip
1133srcdir = $(srctree)/tools/perf
1134ifeq ($(prefix),/usr)
1135sysconfdir = /etc
1136ETC_PERFCONFIG = $(sysconfdir)/perfconfig
1137else
1138sysconfdir = $(prefix)/etc
1139ETC_PERFCONFIG = etc/perfconfig
1140endif
1141ifndef lib
1142ifeq ($(SRCARCH)$(IS_64_BIT), x861)
1143lib = lib64
1144else
1145lib = lib
1146endif
1147endif # lib
1148libdir = $(prefix)/$(lib)
1149
1150# Shell quote (do not use $(call) to accommodate ancient setups);
1151ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
1152STRACE_GROUPS_DIR_SQ = $(subst ','\'',$(STRACE_GROUPS_DIR))
1153DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
1154bindir_SQ = $(subst ','\'',$(bindir))
1155includedir_SQ = $(subst ','\'',$(includedir))
1156mandir_SQ = $(subst ','\'',$(mandir))
1157infodir_SQ = $(subst ','\'',$(infodir))
1158perfexecdir_SQ = $(subst ','\'',$(perfexecdir))
1159perf_include_dir_SQ = $(subst ','\'',$(perf_include_dir))
1160perf_examples_dir_SQ = $(subst ','\'',$(perf_examples_dir))
1161template_dir_SQ = $(subst ','\'',$(template_dir))
1162htmldir_SQ = $(subst ','\'',$(htmldir))
1163tipdir_SQ = $(subst ','\'',$(tipdir))
1164prefix_SQ = $(subst ','\'',$(prefix))
1165sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
1166libdir_SQ = $(subst ','\'',$(libdir))
1167srcdir_SQ = $(subst ','\'',$(srcdir))
1168
1169ifneq ($(filter /%,$(firstword $(perfexecdir))),)
1170perfexec_instdir = $(perfexecdir)
1171perf_include_instdir = $(perf_include_dir)
1172perf_examples_instdir = $(perf_examples_dir)
1173STRACE_GROUPS_INSTDIR = $(STRACE_GROUPS_DIR)
1174tip_instdir = $(tipdir)
1175else
1176perfexec_instdir = $(prefix)/$(perfexecdir)
1177perf_include_instdir = $(prefix)/$(perf_include_dir)
1178perf_examples_instdir = $(prefix)/$(perf_examples_dir)
1179STRACE_GROUPS_INSTDIR = $(prefix)/$(STRACE_GROUPS_DIR)
1180tip_instdir = $(prefix)/$(tipdir)
1181endif
1182perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
1183perf_include_instdir_SQ = $(subst ','\'',$(perf_include_instdir))
1184perf_examples_instdir_SQ = $(subst ','\'',$(perf_examples_instdir))
1185STRACE_GROUPS_INSTDIR_SQ = $(subst ','\'',$(STRACE_GROUPS_INSTDIR))
1186tip_instdir_SQ = $(subst ','\'',$(tip_instdir))
1187
1188# If we install to $(HOME) we keep the traceevent default:
1189# $(HOME)/.traceevent/plugins
1190# Otherwise we install plugins into the global $(libdir).
1191ifdef DESTDIR
1192plugindir=$(libdir)/traceevent/plugins
1193plugindir_SQ= $(subst ','\'',$(plugindir))
1194endif
1195
1196print_var = $(eval $(print_var_code)) $(info $(MSG))
1197define print_var_code
1198    MSG = $(shell printf '...%30s: %s' $(1) $($(1)))
1199endef
1200
1201ifeq ($(VF),1)
1202  # Display EXTRA features which are detected manualy
1203  # from here with feature_check call and thus cannot
1204  # be partof global state output.
1205  $(foreach feat,$(FEATURE_TESTS_EXTRA),$(call feature_print_status,$(feat),))
1206  $(call print_var,prefix)
1207  $(call print_var,bindir)
1208  $(call print_var,libdir)
1209  $(call print_var,sysconfdir)
1210  $(call print_var,LIBUNWIND_DIR)
1211  $(call print_var,LIBDW_DIR)
1212  $(call print_var,JDIR)
1213
1214  ifeq ($(dwarf-post-unwind),1)
1215    $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text))
1216  endif
1217  $(info )
1218endif
1219
1220$(call detected_var,bindir_SQ)
1221$(call detected_var,PYTHON_WORD)
1222ifneq ($(OUTPUT),)
1223$(call detected_var,OUTPUT)
1224endif
1225$(call detected_var,htmldir_SQ)
1226$(call detected_var,infodir_SQ)
1227$(call detected_var,mandir_SQ)
1228$(call detected_var,ETC_PERFCONFIG_SQ)
1229$(call detected_var,STRACE_GROUPS_DIR_SQ)
1230$(call detected_var,prefix_SQ)
1231$(call detected_var,perfexecdir_SQ)
1232$(call detected_var,perf_include_dir_SQ)
1233$(call detected_var,perf_examples_dir_SQ)
1234$(call detected_var,tipdir_SQ)
1235$(call detected_var,srcdir_SQ)
1236$(call detected_var,LIBDIR)
1237$(call detected_var,GTK_CFLAGS)
1238$(call detected_var,PERL_EMBED_CCOPTS)
1239$(call detected_var,PYTHON_EMBED_CCOPTS)
1240ifneq ($(BISON_FILE_PREFIX_MAP),)
1241$(call detected_var,BISON_FILE_PREFIX_MAP)
1242endif
1243
1244# re-generate FEATURE-DUMP as we may have called feature_check, found out
1245# extra libraries to add to LDFLAGS of some other test and then redo those
1246# tests, see the block about libbfd, disassembler-four-args, for instance.
1247$(shell rm -f $(FEATURE_DUMP_FILENAME))
1248$(foreach feat,$(FEATURE_TESTS),$(shell echo "$(call feature_assign,$(feat))" >> $(FEATURE_DUMP_FILENAME)))
1249
1250ifeq ($(feature_display),1)
1251  $(call feature_display_entries)
1252endif
1253