# SPDX-License-Identifier: GPL-2.0-only

ifeq ($(src-perf),)
src-perf := $(srctree)/tools/perf
endif

ifeq ($(obj-perf),)
obj-perf := $(OUTPUT)
endif

ifneq ($(obj-perf),)
obj-perf := $(abspath $(obj-perf))/
endif

$(shell printf "" > $(OUTPUT).config-detected)
detected     = $(shell echo "$(1)=y"       >> $(OUTPUT).config-detected)
detected_var = $(shell echo "$(1)=$($(1))" >> $(OUTPUT).config-detected)

CFLAGS := $(EXTRA_CFLAGS) $(filter-out -Wnested-externs,$(EXTRA_WARNINGS))
HOSTCFLAGS := $(filter-out -Wnested-externs,$(EXTRA_WARNINGS))

# This is required because the kernel is built with this and some of the code
# borrowed from kernel headers depends on it, e.g. put_unaligned_*().
CFLAGS += -fno-strict-aliasing

# Set target flag and options when using clang as compiler.
ifeq ($(CC_NO_CLANG), 0)
  CLANG_TARGET_FLAGS_arm	:= arm-linux-gnueabi
  CLANG_TARGET_FLAGS_arm64	:= aarch64-linux-gnu
  CLANG_TARGET_FLAGS_loongarch	:= loongarch64-linux-gnu
  CLANG_TARGET_FLAGS_m68k	:= m68k-linux-gnu
  CLANG_TARGET_FLAGS_mips	:= mipsel-linux-gnu
  CLANG_TARGET_FLAGS_powerpc	:= powerpc64le-linux-gnu
  CLANG_TARGET_FLAGS_riscv	:= riscv64-linux-gnu
  CLANG_TARGET_FLAGS_s390	:= s390x-linux-gnu
  CLANG_TARGET_FLAGS_x86	:= x86_64-linux-gnu
  CLANG_TARGET_FLAGS_x86_64	:= x86_64-linux-gnu

  # Default to host architecture if ARCH is not explicitly given.
  ifeq ($(ARCH), $(HOSTARCH))
    CLANG_TARGET_FLAGS := $(shell $(CLANG) -print-target-triple)
  else
    CLANG_TARGET_FLAGS := $(CLANG_TARGET_FLAGS_$(ARCH))
  endif

  ifeq ($(CROSS_COMPILE),)
    ifeq ($(CLANG_TARGET_FLAGS),)
      $(error Specify CROSS_COMPILE or add CLANG_TARGET_FLAGS for $(ARCH))
    else
      CLANG_FLAGS += --target=$(CLANG_TARGET_FLAGS)
    endif # CLANG_TARGET_FLAGS
  else
    CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%))
  endif # CROSS_COMPILE

  CC := $(CLANG) $(CLANG_FLAGS) -fintegrated-as
  CXX := $(CXX) $(CLANG_FLAGS) -fintegrated-as

  # Enabled Wthread-safety analysis for clang builds.
  CFLAGS += -Wthread-safety
endif

include $(srctree)/tools/scripts/Makefile.arch

$(call detected_var,SRCARCH)

CFLAGS += -I$(OUTPUT)arch/$(SRCARCH)/include/generated

# Additional ARCH settings for x86
ifeq ($(SRCARCH),x86)
  $(call detected,CONFIG_X86)
  ifeq (${IS_64_BIT}, 1)
    CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT
    ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
    $(call detected,CONFIG_X86_64)
  endif
endif

ifeq ($(ARCH),s390)
  CFLAGS += -fPIC
  CXXFLAGS += -fPIC
endif

# Unconditionally set up the libunwind feature build flags as a
# feature-dump build doesn't specify LIBUNWIND=1. This means that
# dumping the libunwind features will be broken that can impact later
# builds that use the feature dump.
ifeq ($(SRCARCH),arm)
  LIBUNWIND_LIBS = -lunwind -lunwind-arm
endif
ifeq ($(SRCARCH),arm64)
  LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
endif
ifeq ($(SRCARCH),loongarch)
  LIBUNWIND_LIBS = -lunwind -lunwind-loongarch64
endif
ifeq ($(ARCH),mips)
  LIBUNWIND_LIBS = -lunwind -lunwind-mips
endif
ifeq ($(SRCARCH),powerpc)
  LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
endif
ifeq ($(SRCARCH),riscv)
  LIBUNWIND_LIBS := -lunwind -lunwind-riscv
endif
ifeq ($(SRCARCH),s390)
  LIBUNWIND_LIBS := -lunwind -lunwind-s390x
endif
ifeq ($(SRCARCH),x86)
  ifeq (${IS_64_BIT}, 1)
    LIBUNWIND_LIBS = -lunwind-x86_64 -lunwind -llzma
  else
    LIBUNWIND_LIBS = -lunwind-x86 -lunwind -llzma
  endif
endif
ifneq ($(LIBUNWIND),1)
  NO_LIBUNWIND := 1
endif
ifeq ($(LIBUNWIND_LIBS),)
  NO_LIBUNWIND := 1
endif

#
# For linking with debug library, run like:
#
#   make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
#
LIBUNWIND_ARCHS:=aarch64 arm loongarch64 mips ppc32 ppc64 riscv s390x x86 x86_64

# "Local" (no arch specified) feature test flags.
FEATURE_CHECK_CFLAGS-libunwind = $(LIBUNWIND_CFLAGS)
FEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
FEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS)
FEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)

# Add directory into the "remote" (build for a a specific arch) feature tests.
ifdef LIBUNWIND_DIR
  LIBUNWIND_CFLAGS  = -I$(LIBUNWIND_DIR)/include
  LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib

  define libunwind_arch_set_flags
    FEATURE_CHECK_CFLAGS-libunwind-$(1)  = -I$(LIBUNWIND_DIR)/include
    FEATURE_CHECK_LDFLAGS-libunwind-$(1) = -L$(LIBUNWIND_DIR)/lib -lunwind -lunwind-$(1)
  endef
  $(foreach arch,$(LIBUNWIND_ARCHS), \
    $(eval $(call libunwind_arch_set_flags,$(arch))) \
  )
endif

ifdef CSINCLUDES
  LIBOPENCSD_CFLAGS := -I$(CSINCLUDES)
endif
OPENCSDLIBS := -lopencsd_c_api -lopencsd
ifeq ($(findstring -static,${LDFLAGS}),-static)
  OPENCSDLIBS += -lstdc++
endif
ifdef CSLIBS
  LIBOPENCSD_LDFLAGS := -L$(CSLIBS)
endif
FEATURE_CHECK_CFLAGS-libopencsd := $(LIBOPENCSD_CFLAGS)
FEATURE_CHECK_LDFLAGS-libopencsd := $(LIBOPENCSD_LDFLAGS) $(OPENCSDLIBS)

# for linking with debug library, run like:
# make DEBUG=1 LIBDW_DIR=/opt/libdw/
ifdef LIBDW_DIR
  LIBDW_CFLAGS  := -I$(LIBDW_DIR)/include
  LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
endif
DWARFLIBS := -ldw
ifeq ($(findstring -static,${LDFLAGS}),-static)
  DWARFLIBS += -lelf -lz -llzma -lbz2

  LIBDW_VERSION := $(shell $(PKG_CONFIG) --modversion libdw).0.0
  LIBDW_VERSION_1 := $(word 1, $(subst ., ,$(LIBDW_VERSION)))
  LIBDW_VERSION_2 := $(word 2, $(subst ., ,$(LIBDW_VERSION)))

  # Elfutils merged libebl.a into libdw.a starting from version 0.177,
  # Link libebl.a only if libdw is older than this version.
  ifeq ($(shell test $(LIBDW_VERSION_2) -lt 177; echo $$?),0)
    DWARFLIBS += -lebl
  endif

  # Must put -ldl after -lebl for dependency
  DWARFLIBS += -ldl
endif
FEATURE_CHECK_CFLAGS-libdw := $(LIBDW_CFLAGS)
FEATURE_CHECK_LDFLAGS-libdw := $(LIBDW_LDFLAGS) $(DWARFLIBS)

ifneq ($(NO_BABELTRACE2),1)
  ifeq ($(call get-executable,$(PKG_CONFIG)),)
    $(error Error: $(PKG_CONFIG) needed by babeltrace2 is missing on this system, please install it)
  endif
endif

# for linking with debug library, run like:
# make DEBUG=1 LIBCAPSTONE_DIR=/opt/capstone/
ifdef LIBCAPSTONE_DIR
  LIBCAPSTONE_CFLAGS  := -I$(LIBCAPSTONE_DIR)/include
  LIBCAPSTONE_LDFLAGS := -L$(LIBCAPSTONE_DIR)/
endif
FEATURE_CHECK_CFLAGS-libcapstone := $(LIBCAPSTONE_CFLAGS)
FEATURE_CHECK_LDFLAGS-libcapstone := $(LIBCAPSTONE_LDFLAGS) -lcapstone

ifdef LIBZSTD_DIR
  LIBZSTD_CFLAGS  := -I$(LIBZSTD_DIR)/lib
  LIBZSTD_LDFLAGS := -L$(LIBZSTD_DIR)/lib
endif
FEATURE_CHECK_CFLAGS-libzstd := $(LIBZSTD_CFLAGS)
FEATURE_CHECK_LDFLAGS-libzstd := $(LIBZSTD_LDFLAGS)

# for linking with debug library, run like:
# make DEBUG=1 PKG_CONFIG_PATH=/opt/libtraceevent/(lib|lib64)/pkgconfig

ifneq ($(NO_LIBTRACEEVENT),1)
  ifeq ($(call get-executable,$(PKG_CONFIG)),)
    $(error Error: $(PKG_CONFIG) needed by libtraceevent is missing on this system, please install it)
  endif
endif

FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi -I$(srctree)/tools/include/uapi
# include ARCH specific config
-include $(src-perf)/arch/$(SRCARCH)/Makefile

include $(srctree)/tools/scripts/utilities.mak

ifeq ($(call get-executable,$(FLEX)),)
  $(error Error: $(FLEX) is missing on this system, please install it)
endif

ifeq ($(call get-executable,$(BISON)),)
  $(error Error: $(BISON) is missing on this system, please install it)
endif

ifneq ($(OUTPUT),)
  ifeq ($(shell expr $(shell $(BISON) --version | grep bison | sed -e 's/.\+ \([0-9]\+\).\([0-9]\+\).\([0-9]\+\)/\1\2\3/g') \>\= 371), 1)
    BISON_FILE_PREFIX_MAP := --file-prefix-map=$(OUTPUT)=
  endif
endif

# Treat warnings as errors unless directed not to
ifneq ($(WERROR),0)
  CORE_CFLAGS += -Werror
  CXXFLAGS += -Werror
  HOSTCFLAGS += -Werror
endif

ifndef DEBUG
  DEBUG := 0
endif

ifeq ($(DEBUG),0)
CORE_CFLAGS += -DNDEBUG=1
CORE_CFLAGS += -O3
else
  CORE_CFLAGS += -g
  CXXFLAGS += -g
endif

ifdef PARSER_DEBUG
  PARSER_DEBUG_BISON := -t
  PARSER_DEBUG_FLEX  := -d
  CFLAGS             += -DPARSER_DEBUG
  $(call detected_var,PARSER_DEBUG_BISON)
  $(call detected_var,PARSER_DEBUG_FLEX)
endif

ifdef LTO
  CORE_CFLAGS += -flto
  CXXFLAGS += -flto
endif

# Try different combinations to accommodate systems that only have
# python[2][3]-config in weird combinations in the following order of
# priority from lowest to highest:
#   * python2-config as per pep-0394.
#   * python-config
#   * python3-config
#   * $(PYTHON)-config (If PYTHON is user supplied but PYTHON_CONFIG isn't)
#
PYTHON_AUTO := python-config
PYTHON_AUTO := $(if $(call get-executable,python2-config),python2-config,$(PYTHON_AUTO))
PYTHON_AUTO := $(if $(call get-executable,python-config),python-config,$(PYTHON_AUTO))
PYTHON_AUTO := $(if $(call get-executable,python3-config),python3-config,$(PYTHON_AUTO))

# If PYTHON is defined but PYTHON_CONFIG isn't, then take $(PYTHON)-config as if it was the user
# supplied value for PYTHON_CONFIG. Because it's "user supplied", error out if it doesn't exist.
ifdef PYTHON
  ifndef PYTHON_CONFIG
    PYTHON_CONFIG_AUTO := $(call get-executable,$(PYTHON)-config)
    PYTHON_CONFIG := $(if $(PYTHON_CONFIG_AUTO),$(PYTHON_CONFIG_AUTO),\
                          $(call $(error $(PYTHON)-config not found)))
  endif
endif

# Select either auto detected python and python-config or use user supplied values if they are
# defined. get-executable-or-default fails with an error if the first argument is supplied but
# doesn't exist.
override PYTHON_CONFIG := $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON_AUTO))
override PYTHON := $(call get-executable-or-default,PYTHON,$(subst -config,,$(PYTHON_CONFIG)))

grep-libs  = $(filter -l%,$(1))
strip-libs  = $(filter-out -l%,$(1))

PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))

# Python 3.8 changed the output of `python-config --ldflags` to not include the
# '-lpythonX.Y' flag unless '--embed' is also passed. The feature check for
# libpython fails if that flag is not included in LDFLAGS
ifeq ($(shell $(PYTHON_CONFIG_SQ) --ldflags --embed 2>&1 1>/dev/null; echo $$?), 0)
  PYTHON_CONFIG_LDFLAGS := --ldflags --embed
else
  PYTHON_CONFIG_LDFLAGS := --ldflags
endif

ifdef PYTHON_CONFIG
  PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) $(PYTHON_CONFIG_LDFLAGS) 2>/dev/null)
  # Update the python flags for cross compilation
  ifdef CROSS_COMPILE
    PYTHON_NATIVE := $(shell echo $(PYTHON_EMBED_LDOPTS) | sed 's/\(-L.*\/\)\(.*-linux-gnu\).*/\2/')
    PYTHON_EMBED_LDOPTS := $(subst $(PYTHON_NATIVE),$(shell $(CC) -dumpmachine),$(PYTHON_EMBED_LDOPTS))
  endif
  PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
  PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS)) -lutil
  PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --includes 2>/dev/null)
  FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
  ifeq ($(CC_NO_CLANG), 0)
    PYTHON_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PYTHON_EMBED_CCOPTS))
  endif
endif

FEATURE_CHECK_CFLAGS-libpython := $(PYTHON_EMBED_CCOPTS)
FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)

FEATURE_CHECK_LDFLAGS-libaio = -lrt

CORE_CFLAGS += -fno-omit-frame-pointer
CORE_CFLAGS += -Wall
CORE_CFLAGS += -Wextra
CORE_CFLAGS += -std=gnu11
CORE_CFLAGS += -funsigned-char

CXXFLAGS += -std=gnu++17 -fno-exceptions -fno-rtti
CXXFLAGS += -Wall
CXXFLAGS += -Wextra
CXXFLAGS += -fno-omit-frame-pointer

HOSTCFLAGS += -Wall
HOSTCFLAGS += -Wextra

# Enforce a non-executable stack, as we may regress (again) in the future by
# adding assembler files missing the .GNU-stack linker note.
LDFLAGS += -Wl,-z,noexecstack

EXTLIBS = -lpthread -lrt -lm -ldl

ifneq ($(TCMALLOC),)
  CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
  EXTLIBS += -ltcmalloc
endif

ifeq ($(FEATURES_DUMP),)
# We will display at the end of this Makefile.config, using $(call feature_display_entries),
# as we may retry some feature detection here.
  FEATURE_DISPLAY_DEFERRED := 1
include $(srctree)/tools/build/Makefile.feature
else
include $(FEATURES_DUMP)
endif

ifeq ($(feature-stackprotector-all), 1)
  CORE_CFLAGS += -fstack-protector-all
endif

ifeq ($(DEBUG),0)
  ifeq ($(feature-fortify-source), 1)
    CORE_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
  endif
endif

INC_FLAGS += -I$(src-perf)/util/include
INC_FLAGS += -I$(src-perf)/arch/$(SRCARCH)/include
INC_FLAGS += -I$(srctree)/tools/include/
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi
INC_FLAGS += -I$(srctree)/tools/include/uapi
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/
INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/

# $(obj-perf)      for generated common-cmds.h
# $(obj-perf)/util for generated bison/flex headers
ifneq ($(OUTPUT),)
INC_FLAGS += -I$(obj-perf)/util
INC_FLAGS += -I$(obj-perf)
endif

INC_FLAGS += -I$(src-perf)/util
INC_FLAGS += -I$(src-perf)

CORE_CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE

CFLAGS   += $(CORE_CFLAGS) $(INC_FLAGS)
CXXFLAGS += $(INC_FLAGS)

LIBPERF_CFLAGS := $(CORE_CFLAGS) $(EXTRA_CFLAGS)

ifeq ($(feature-pthread-attr-setaffinity-np), 1)
  CFLAGS += -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP
endif

ifeq ($(feature-pthread-barrier), 1)
  CFLAGS += -DHAVE_PTHREAD_BARRIER
endif

ifndef NO_BIONIC
  $(call feature_check,bionic)
  ifeq ($(feature-bionic), 1)
    BIONIC := 1
    CFLAGS += -DLACKS_SIGQUEUE_PROTOTYPE
    CFLAGS += -DLACKS_OPEN_MEMSTREAM_PROTOTYPE
    EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
    EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
  endif
endif

ifeq ($(feature-eventfd), 1)
  CFLAGS += -DHAVE_EVENTFD_SUPPORT
endif

ifeq ($(feature-gettid), 1)
  CFLAGS += -DHAVE_GETTID
endif

ifeq ($(feature-file-handle), 1)
  CFLAGS += -DHAVE_FILE_HANDLE
endif

ifdef NO_LIBELF
  NO_LIBDW := 1
  NO_LIBUNWIND := 1
  NO_LIBBPF := 1
  NO_JVMTI := 1
else
  ifeq ($(feature-libelf), 0)
    ifeq ($(feature-glibc), 1)
      LIBC_SUPPORT := 1
    endif
    ifeq ($(BIONIC),1)
      LIBC_SUPPORT := 1
    endif
    ifeq ($(LIBC_SUPPORT),1)
      $(error ERROR: No libelf found. Disables 'probe' tool, jvmti and BPF support. Please install libelf-dev, libelf-devel, elfutils-libelf-devel or build with NO_LIBELF=1.)
    else
      ifneq ($(filter s% -fsanitize=address%,$(EXTRA_CFLAGS),),)
        ifneq ($(shell ldconfig -p | grep libasan >/dev/null 2>&1; echo $$?), 0)
          $(error No libasan found, please install libasan)
        endif
      endif

      ifneq ($(filter s% -fsanitize=undefined%,$(EXTRA_CFLAGS),),)
        ifneq ($(shell ldconfig -p | grep libubsan >/dev/null 2>&1; echo $$?), 0)
          $(error No libubsan found, please install libubsan)
        endif
      endif

      ifneq ($(filter s% -static%,$(LDFLAGS),),)
        $(error No static glibc found, please install glibc-static)
      else
        $(error No gnu/libc-version.h found, please install glibc-dev[el])
      endif
    endif
  else
    ifneq ($(feature-libdw), 1)
      ifndef NO_LIBDW
        $(warning No libdw.h found or old libdw.h found or elfutils is older than 0.157, disables dwarf support. Please install new elfutils-devel/libdw-dev)
        NO_LIBDW := 1
      endif
    endif # Dwarf support
  endif # libelf support
endif # NO_LIBELF

ifeq ($(feature-libaio), 1)
  ifndef NO_AIO
    CFLAGS += -DHAVE_AIO_SUPPORT
  endif
endif

ifeq ($(feature-scandirat), 1)
  # Ignore having scandirat with memory sanitizer that lacks an interceptor.
  ifeq ($(filter s% -fsanitize=memory%,$(EXTRA_CFLAGS),),)
    CFLAGS += -DHAVE_SCANDIRAT_SUPPORT
  endif
endif

ifeq ($(feature-sched_getcpu), 1)
  CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORT
endif

ifeq ($(feature-setns), 1)
  CFLAGS += -DHAVE_SETNS_SUPPORT
  $(call detected,CONFIG_SETNS)
endif

ifeq ($(feature-reallocarray), 0)
  CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
endif

ifdef CORESIGHT
  $(call feature_check,libopencsd)
  ifeq ($(feature-libopencsd), 1)
    CFLAGS += -DHAVE_CSTRACE_SUPPORT $(LIBOPENCSD_CFLAGS)
    LDFLAGS += $(LIBOPENCSD_LDFLAGS)
    EXTLIBS += $(OPENCSDLIBS)
    $(call detected,CONFIG_LIBOPENCSD)
    ifdef CSTRACE_RAW
      CFLAGS += -DCS_DEBUG_RAW
      ifeq (${CSTRACE_RAW}, packed)
        CFLAGS += -DCS_RAW_PACKED
      endif
    endif
  else
    $(error Error: No libopencsd library found or the version is not up-to-date. Please install recent libopencsd to build with CORESIGHT=1)
  endif
endif

ifndef NO_ZLIB
  ifeq ($(feature-zlib), 1)
    CFLAGS += -DHAVE_ZLIB_SUPPORT
    EXTLIBS += -lz
    $(call detected,CONFIG_ZLIB)
  else
    NO_ZLIB := 1
  endif
endif

ifndef NO_LIBELF
  CFLAGS += -DHAVE_LIBELF_SUPPORT
  EXTLIBS += -lelf
  $(call detected,CONFIG_LIBELF)

  ifeq ($(feature-libelf-getphdrnum), 1)
    CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
  endif

  ifeq ($(feature-libelf-gelf_getnote), 1)
    CFLAGS += -DHAVE_GELF_GETNOTE_SUPPORT
  else
    $(warning gelf_getnote() not found on libelf, SDT support disabled)
  endif

  ifeq ($(feature-libelf-getshdrstrndx), 1)
    CFLAGS += -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT
  endif

  ifeq ($(feature-libelf-zstd), 1)
    ifdef NO_LIBZSTD
      $(error Error: libzstd is required by libelf, please do not set NO_LIBZSTD)
    endif
  endif

  ifndef NO_LIBDEBUGINFOD
    $(call feature_check,libdebuginfod)
    ifeq ($(feature-libdebuginfod), 1)
      CFLAGS += -DHAVE_DEBUGINFOD_SUPPORT
      EXTLIBS += -ldebuginfod
    else
      $(warning No elfutils/debuginfod.h found, no debuginfo server support, please install libdebuginfod-dev/elfutils-debuginfod-client-devel or equivalent)
    endif
  endif

  ifndef NO_LIBDW
    CFLAGS += -DHAVE_LIBDW_SUPPORT $(LIBDW_CFLAGS)
    LDFLAGS += $(LIBDW_LDFLAGS)
    EXTLIBS += ${DWARFLIBS}
    $(call detected,CONFIG_LIBDW)
  endif # NO_LIBDW

  ifndef NO_LIBBPF
    ifeq ($(feature-bpf), 1)
      ifdef LIBBPF_DYNAMIC
        $(call feature_check,libbpf)
        ifeq ($(feature-libbpf), 1)
          EXTLIBS += -lbpf
          CFLAGS += -DHAVE_LIBBPF_SUPPORT
          $(call detected,CONFIG_LIBBPF)
          $(call detected,CONFIG_LIBBPF_DYNAMIC)
        else
          $(error Error: No libbpf devel library found or older than v1.0, please install/update libbpf-devel)
        endif
      else
        ifeq ($(NO_ZLIB), 1)
          $(warning Warning: Statically building libbpf not possible as zlib is missing)
          NO_LIBBPF := 1
        else
          # Libbpf will be built as a static library from tools/lib/bpf.
          LIBBPF_STATIC := 1
          $(call detected,CONFIG_LIBBPF)
          CFLAGS += -DHAVE_LIBBPF_SUPPORT
	  LIBBPF_INCLUDE = $(LIBBPF_DIR)/..
        endif
      endif
    endif
  endif # NO_LIBBPF
endif # NO_LIBELF

ifndef NO_SDT
  ifneq ($(feature-sdt), 1)
    $(warning No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev)
    NO_SDT := 1;
  else
    CFLAGS += -DHAVE_SDT_EVENT
    $(call detected,CONFIG_SDT_EVENT)
  endif
endif

ifdef PERF_HAVE_JITDUMP
  ifndef NO_LIBELF
    $(call detected,CONFIG_JITDUMP)
    CFLAGS += -DHAVE_JITDUMP
  endif
endif

ifeq ($(SRCARCH),powerpc)
  ifndef NO_LIBDW
    CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
  endif
endif

ifndef NO_LIBBPF
  ifneq ($(feature-bpf), 1)
    $(warning BPF API too old. Please install recent kernel headers. BPF support in 'perf record' is disabled.)
    NO_LIBBPF := 1
  endif
endif

ifeq ($(feature-libopenssl), 1)
  $(call detected,CONFIG_LIBOPENSSL)
  CFLAGS += -DHAVE_LIBOPENSSL_SUPPORT
endif

ifndef BUILD_BPF_SKEL
  # BPF skeletons control a large number of perf features, by default
  # they are enabled.
  BUILD_BPF_SKEL := 1
endif

ifeq ($(BUILD_BPF_SKEL),1)
  ifeq ($(filter -DHAVE_LIBELF_SUPPORT, $(CFLAGS)),)
    $(warning Warning: Disabled BPF skeletons as libelf is required by bpftool)
    BUILD_BPF_SKEL := 0
  else ifeq ($(filter -DHAVE_ZLIB_SUPPORT, $(CFLAGS)),)
    $(warning Warning: Disabled BPF skeletons as zlib is required by bpftool)
    BUILD_BPF_SKEL := 0
  else ifeq ($(filter -DHAVE_LIBBPF_SUPPORT, $(CFLAGS)),)
    $(warning Warning: Disabled BPF skeletons as libbpf is required)
    BUILD_BPF_SKEL := 0
  else ifeq ($(filter -DHAVE_LIBOPENSSL_SUPPORT, $(CFLAGS)),)
    $(warning Warning: Disabled BPF skeletons as libopenssl is required)
    BUILD_BPF_SKEL := 0
  else ifeq ($(call get-executable,$(CLANG)),)
    $(warning Warning: Disabled BPF skeletons as clang ($(CLANG)) is missing)
    BUILD_BPF_SKEL := 0
  else
    CLANG_VERSION := $(shell $(CLANG) --version | head -1 | sed 's/.*clang version \([[:digit:]]\+.[[:digit:]]\+.[[:digit:]]\+\).*/\1/g')
    ifeq ($(call version-lt3,$(CLANG_VERSION),12.0.1),1)
      $(warning Warning: Disabled BPF skeletons as reliable BTF generation needs at least $(CLANG) version 12.0.1)
      BUILD_BPF_SKEL := 0
    endif
  endif
  ifeq ($(BUILD_BPF_SKEL),1)
    $(call feature_check,clang-bpf-co-re)
    ifeq ($(feature-clang-bpf-co-re), 0)
      $(warning Warning: Disabled BPF skeletons as clang is too old)
      BUILD_BPF_SKEL := 0
    endif
  endif
  ifeq ($(BUILD_BPF_SKEL),1)
    $(call detected,CONFIG_PERF_BPF_SKEL)
    CFLAGS += -DHAVE_BPF_SKEL
  endif
endif

ifndef GEN_VMLINUX_H
  VMLINUX_H_FILE=$(src-perf)/util/bpf_skel/vmlinux/vmlinux.h
endif

ifndef NO_LIBUNWIND
  have_libunwind :=

  $(call feature_check,libunwind)
  ifneq ($(feature-libunwind), 1)
    $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR and set LIBUNWIND=1 in the make command line as it is opt-in now)
    NO_LOCAL_LIBUNWIND := 1
  else
    have_libunwind := 1
    $(call detected,CONFIG_LOCAL_LIBUNWIND)
    CFLAGS  += -DHAVE_LIBUNWIND_SUPPORT
    CFLAGS  += $(LIBUNWIND_CFLAGS)
    LDFLAGS += $(LIBUNWIND_LDFLAGS)
    EXTLIBS_LIBUNWIND := $(LIBUNWIND_LIBS)
    $(call feature_check,libunwind-debug-frame)
    ifneq ($(feature-libunwind-debug-frame), 1)
      CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
    endif
  endif

  define PROCESS_REMOTE_LIBUNWIND_ARCH
    $(call feature_check,libunwind-$(1))

    ifeq ($$(feature-libunwind-$(1)), 1)
      upper_arch := $$(shell echo $(1) | tr '[:lower:]' '[:upper:]')
      $$(call detected,CONFIG_LIBUNWIND_$$(upper_arch))

      CFLAGS += -DHAVE_LIBUNWIND_$$(upper_arch)_SUPPORT
      LDFLAGS += -lunwind-$(1)
      EXTLIBS_LIBUNWIND += -lunwind-$(1)
      have_libunwind := 1

      $$(call feature_check,libunwind-debug-frame-$(1))
      ifneq ($$(feature-libunwind-debug-frame-$(1)), 1)
        CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME_$$(upper_arch)
      endif
    endif
  endef
  $(foreach arch,$(LIBUNWIND_ARCHS), \
    $(eval $(call PROCESS_REMOTE_LIBUNWIND_ARCH,$(arch))) \
  )

  EXTLIBS += $(EXTLIBS_LIBUNWIND)

  ifeq ($(findstring -static,${LDFLAGS}),-static)
    # gcc -static links libgcc_eh which contains piece of libunwind
    LIBUNWIND_LDFLAGS += -Wl,--allow-multiple-definition
  endif

  ifneq ($(have_libunwind), 1)
    NO_LIBUNWIND := 1
  endif
endif

dwarf-post-unwind := 1
dwarf-post-unwind-text := BUG

# setup DWARF post unwinder
ifdef NO_LIBUNWIND
  ifdef NO_LIBDW
    $(warning Disabling post unwind, no support found.)
    dwarf-post-unwind := 0
  else
    dwarf-post-unwind-text := libdw
    $(call detected,CONFIG_LIBDW_DWARF_UNWIND)
  endif
else
  dwarf-post-unwind-text := libunwind
  $(call detected,CONFIG_LIBUNWIND)
endif

ifeq ($(dwarf-post-unwind),1)
  CFLAGS += -DHAVE_DWARF_UNWIND_SUPPORT
  $(call detected,CONFIG_DWARF_UNWIND)
endif

ifneq ($(NO_LIBTRACEEVENT),1)
  $(call detected,CONFIG_TRACE)
endif

ifndef NO_SLANG
  ifneq ($(feature-libslang), 1)
    $(warning slang not found, disables TUI support. Please install slang-devel, libslang-dev or libslang2-dev)
    NO_SLANG := 1
  endif
  ifndef NO_SLANG
    CFLAGS += -DHAVE_SLANG_SUPPORT
    EXTLIBS += -lslang
    $(call detected,CONFIG_SLANG)
  endif
endif

ifdef GTK2
  FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
  $(call feature_check,gtk2)
  ifneq ($(feature-gtk2), 1)
    $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev)
    NO_GTK2 := 1
  else
    $(call feature_check,gtk2-infobar)
    ifeq ($(feature-gtk2-infobar), 1)
      GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
    endif
    CFLAGS += -DHAVE_GTK2_SUPPORT
    GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
    GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
    EXTLIBS += -ldl
  endif
endif

ifdef LIBPERL
  PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
  PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
  PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
  PERL_EMBED_CCOPTS := $(filter-out -flto% -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
  PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
  FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)

  $(call feature_check,libperl)
  ifneq ($(feature-libperl), 1)
    $(error Missing perl devel files. Please install perl-ExtUtils-Embed/libperl-dev)
  else
    LDFLAGS += $(PERL_EMBED_LDFLAGS)
    EXTLIBS += $(PERL_EMBED_LIBADD)
    CFLAGS += -DHAVE_LIBPERL_SUPPORT
    $(call detected,CONFIG_LIBPERL)
  endif
endif

ifeq ($(feature-timerfd), 1)
  CFLAGS += -DHAVE_TIMERFD_SUPPORT
else
  $(warning No timerfd support. Disables 'perf kvm stat live')
endif

disable-python = $(eval $(disable-python_code))
define disable-python_code
  CFLAGS += -DNO_LIBPYTHON
  $(warning $1)
  NO_LIBPYTHON := 1
endef

PYTHON_EXTENSION_SUFFIX := '.so'
ifdef NO_LIBPYTHON
  $(call disable-python,Python support disabled by user)
else

  ifndef PYTHON
    $(call disable-python,No python interpreter was found: disables Python support - please install python-devel/python-dev)
  else
    PYTHON_WORD := $(call shell-wordify,$(PYTHON))

    ifndef PYTHON_CONFIG
      $(call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
    else

      ifneq ($(feature-libpython), 1)
        $(call disable-python,No 'Python.h' was found: disables Python support - please install python-devel/python-dev)
      else
         LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
         EXTLIBS += $(PYTHON_EMBED_LIBADD)
         PYTHON_SETUPTOOLS_INSTALLED := $(shell $(PYTHON) -c 'import setuptools;' 2> /dev/null && echo "yes" || echo "no")
         ifeq ($(PYTHON_SETUPTOOLS_INSTALLED), yes)
           PYTHON_EXTENSION_SUFFIX := $(shell $(PYTHON) -c 'from importlib import machinery; print(machinery.EXTENSION_SUFFIXES[0])')
           ifdef CROSS_COMPILE
             PYTHON_EXTENSION_SUFFIX := $(subst $(PYTHON_NATIVE),$(shell $(CC) -dumpmachine),$(PYTHON_EXTENSION_SUFFIX))
           endif
           LANG_BINDINGS += $(obj-perf)python/perf$(PYTHON_EXTENSION_SUFFIX)
	 else
           $(warning Missing python setuptools, the python binding won't be built, please install python3-setuptools or equivalent)
         endif
         CFLAGS += -DHAVE_LIBPYTHON_SUPPORT
         $(call detected,CONFIG_LIBPYTHON)
         ifeq ($(filter -fPIC,$(CFLAGS)),)
           # Building a shared library requires position independent code.
           CFLAGS += -fPIC
           CXXFLAGS += -fPIC
         endif
      endif
    endif
  endif
endif

ifneq ($(NO_JEVENTS),1)
  ifeq ($(wildcard pmu-events/arch/$(SRCARCH)/mapfile.csv),)
    NO_JEVENTS := 1
  endif
endif
ifneq ($(NO_JEVENTS),1)
  NO_JEVENTS := 0
  ifndef PYTHON
    $(error ERROR: No python interpreter needed for jevents generation. Install python or build with NO_JEVENTS=1.)
  else
    # jevents.py uses f-strings present in Python 3.6 released in Dec. 2016.
    JEVENTS_PYTHON_GOOD := $(shell $(PYTHON) -c 'import sys;print("1" if(sys.version_info.major >= 3 and sys.version_info.minor >= 6) else "0")' 2> /dev/null)
    ifneq ($(JEVENTS_PYTHON_GOOD), 1)
      $(error ERROR: Python interpreter needed for jevents generation too old (older than 3.6). Install a newer python or build with NO_JEVENTS=1.)
    endif
  endif
endif

ifdef BUILD_NONDISTRO
  # call all detections now so we get correct status in VF output
  $(call feature_check,libbfd)
  $(call feature_check,disassembler-four-args)
  $(call feature_check,disassembler-init-styled)
  $(call feature_check,libbfd-threadsafe)
  $(call feature_check,libbfd-liberty)
  $(call feature_check,libbfd-liberty-z)

  ifneq ($(feature-libbfd-threadsafe), 1)
    $(error binutils-dev(el) 2.42 or later is required for non-distro builds)
  endif

  # we may be on a system that requires -liberty and (maybe) -lz
  # to link against -lbfd; test each case individually here
  ifeq ($(feature-libbfd), 1)
    EXTLIBS += -lbfd -lopcodes
  else ifeq ($(feature-libbfd-liberty), 1)
    EXTLIBS += -lbfd -lopcodes -liberty
  else ifeq ($(feature-libbfd-liberty-z), 1)
    EXTLIBS += -lbfd -lopcodes -liberty -lz
  endif

  CFLAGS += -DHAVE_LIBBFD_SUPPORT
  CXXFLAGS += -DHAVE_LIBBFD_SUPPORT
  $(call detected,CONFIG_LIBBFD)

  ifeq ($(feature-disassembler-four-args), 1)
    CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
  endif

  ifeq ($(feature-disassembler-init-styled), 1)
    CFLAGS += -DDISASM_INIT_STYLED
  endif
endif

ifndef NO_LIBLLVM
  $(call feature_check,llvm-perf)
  ifeq ($(feature-llvm-perf), 1)
    CFLAGS += -DHAVE_LIBLLVM_SUPPORT
    LLVM_CFLAGS := $(shell $(LLVM_CONFIG) --cflags 2>/dev/null)
    LLVM_CXXFLAGS := $(shell $(LLVM_CONFIG) --cxxflags 2>/dev/null)
    LLVM_LIBLLVM := $(shell $(LLVM_CONFIG) --libs all 2>/dev/null) $(shell $(LLVM_CONFIG) --system-libs 2>/dev/null)
    LLVM_LIBDIR := $(shell $(LLVM_CONFIG) --libdir 2>/dev/null)
    CFLAGS += $(LLVM_CFLAGS)
    CXXFLAGS += -DHAVE_LIBLLVM_SUPPORT $(LLVM_CXXFLAGS)
    LIBLLVM := $(LLVM_LIBLLVM)
    EXTLIBS += -L$(LLVM_LIBDIR) $(LIBLLVM)
    EXTLIBS += -lstdc++
    $(call detected,CONFIG_LIBLLVM)
  else
    $(warning No libllvm 13+ found, slower source file resolution, please install llvm-devel/llvm-dev)
    NO_LIBLLVM := 1
  endif
endif

ifndef NO_DEMANGLE
  $(call feature_check,cxa-demangle)
  ifeq ($(feature-cxa-demangle), 1)
    EXTLIBS += -lstdc++
    CFLAGS += -DHAVE_CXA_DEMANGLE_SUPPORT
    CXXFLAGS += -DHAVE_CXA_DEMANGLE_SUPPORT
    $(call detected,CONFIG_CXX_DEMANGLE)
  endif
  ifdef BUILD_NONDISTRO
    ifeq ($(filter -liberty,$(EXTLIBS)),)
      $(call feature_check,cplus-demangle)
      ifeq ($(feature-cplus-demangle), 1)
        EXTLIBS += -liberty
      endif
    endif
    ifneq ($(filter -liberty,$(EXTLIBS)),)
      CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
      CXXFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
    endif
  endif
endif

ifndef NO_LZMA
  ifeq ($(feature-lzma), 1)
    CFLAGS += -DHAVE_LZMA_SUPPORT
    EXTLIBS += -llzma
    $(call detected,CONFIG_LZMA)
  else
    $(warning No liblzma found, disables xz kernel module decompression, please install xz-devel/liblzma-dev)
    NO_LZMA := 1
  endif
endif

ifndef NO_LIBZSTD
  ifeq ($(feature-libzstd), 1)
    CFLAGS += -DHAVE_ZSTD_SUPPORT
    CFLAGS += $(LIBZSTD_CFLAGS)
    LDFLAGS += $(LIBZSTD_LDFLAGS)
    EXTLIBS += -lzstd
    $(call detected,CONFIG_ZSTD)
  else
    $(warning No libzstd found, disables trace compression, please install libzstd-dev[el] and/or set LIBZSTD_DIR)
    NO_LIBZSTD := 1
  endif
endif

ifndef NO_BACKTRACE
  ifeq ($(feature-backtrace), 1)
    CFLAGS += -DHAVE_BACKTRACE_SUPPORT
  endif
endif

ifndef NO_LIBNUMA
  ifeq ($(feature-libnuma), 0)
    $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev)
    NO_LIBNUMA := 1
  else
    ifeq ($(feature-numa_num_possible_cpus), 0)
      $(warning Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8)
      NO_LIBNUMA := 1
    else
      CFLAGS += -DHAVE_LIBNUMA_SUPPORT
      EXTLIBS += -lnuma
      $(call detected,CONFIG_NUMA)
    endif
  endif
endif

ifeq (${IS_64_BIT}, 1)
  ifndef NO_PERF_READ_VDSO32
    $(call feature_check,compile-32)
    ifeq ($(feature-compile-32), 1)
      CFLAGS += -DHAVE_PERF_READ_VDSO32
    else
      NO_PERF_READ_VDSO32 := 1
    endif
  endif
  ifneq ($(SRCARCH), x86)
    NO_PERF_READ_VDSOX32 := 1
  endif
  ifndef NO_PERF_READ_VDSOX32
    $(call feature_check,compile-x32)
    ifeq ($(feature-compile-x32), 1)
      CFLAGS += -DHAVE_PERF_READ_VDSOX32
    else
      NO_PERF_READ_VDSOX32 := 1
    endif
  endif
else
  NO_PERF_READ_VDSO32 := 1
  NO_PERF_READ_VDSOX32 := 1
endif

ifndef NO_BABELTRACE2
  $(call feature_check,babeltrace2-ctf-writer)
  ifeq ($(feature-babeltrace2-ctf-writer), 1)
    CFLAGS += -DHAVE_BABELTRACE2_CTF_WRITER_SUPPORT $(shell $(PKG_CONFIG) --cflags babeltrace2-ctf-writer)
    LDFLAGS += $(shell $(PKG_CONFIG) --libs-only-L babeltrace2-ctf-writer)
    EXTLIBS += $(shell $(PKG_CONFIG) --libs-only-l babeltrace2-ctf-writer)
    $(call detected,CONFIG_BABELTRACE2_CTF_WRITER)
  else
    $(warning No babeltrace2 found, disables 'perf data' CTF format support, please install libbabeltrace2-dev[el])
  endif
endif

ifndef NO_CAPSTONE
  $(call feature_check,libcapstone)
  ifeq ($(feature-libcapstone), 1)
    CFLAGS += -DHAVE_LIBCAPSTONE_SUPPORT $(LIBCAPSTONE_CFLAGS)
    ifdef LIBCAPSTONE_DLOPEN
      CFLAGS += -DLIBCAPSTONE_DLOPEN
    else
      LDFLAGS += $(LIBCAPSTONE_LDFLAGS)
      EXTLIBS += -lcapstone
    endif
    $(call detected,CONFIG_LIBCAPSTONE)
  else
    msg := $(warning No libcapstone found, disables disasm engine support for 'perf script', please install libcapstone-dev/capstone-devel);
  endif
endif

ifdef EXTRA_TESTS
    $(call detected,CONFIG_EXTRA_TESTS)
    CFLAGS += -DHAVE_EXTRA_TESTS
endif

ifndef NO_JVMTI
  ifneq (,$(wildcard /usr/sbin/update-java-alternatives))
    JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}')
  else
    ifneq (,$(wildcard /usr/sbin/alternatives))
      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')
    endif
  endif
  ifndef JDIR
    $(warning No alternatives command found, you need to set JDIR= to point to the root of your Java directory)
    NO_JVMTI := 1
  endif
endif

ifndef NO_JVMTI
  FEATURE_CHECK_CFLAGS-jvmti := -I$(JDIR)/include -I$(JDIR)/include/linux
  $(call feature_check,jvmti)
  ifeq ($(feature-jvmti), 1)
    $(call detected_var,JDIR)
    ifndef NO_JVMTI_CMLR
      FEATURE_CHECK_CFLAGS-jvmti-cmlr := $(FEATURE_CHECK_CFLAGS-jvmti)
      $(call feature_check,jvmti-cmlr)
      ifeq ($(feature-jvmti-cmlr), 1)
        CFLAGS += -DHAVE_JVMTI_CMLR
      endif
    endif # NO_JVMTI_CMLR
  else
    $(warning No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-latest-openjdk-devel)
    NO_JVMTI := 1
  endif
endif

ifndef NO_LIBPFM4
  $(call feature_check,libpfm4)
  ifeq ($(feature-libpfm4), 1)
    CFLAGS += -DHAVE_LIBPFM
    EXTLIBS += -lpfm
    ASCIIDOC_EXTRA = -aHAVE_LIBPFM=1
    $(call detected,CONFIG_LIBPFM4)
  else
    $(warning libpfm4 not found, disables libpfm4 support. Please install libpfm-devel or libpfm4-dev)
  endif
endif

# libtraceevent is a recommended dependency picked up from the system.
ifneq ($(NO_LIBTRACEEVENT),1)
  ifeq ($(feature-libtraceevent), 1)
    CFLAGS += -DHAVE_LIBTRACEEVENT $(shell $(PKG_CONFIG) --cflags libtraceevent)
    LDFLAGS += $(shell $(PKG_CONFIG) --libs-only-L libtraceevent)
    EXTLIBS += $(shell $(PKG_CONFIG) --libs-only-l libtraceevent)
    LIBTRACEEVENT_VERSION := $(shell $(PKG_CONFIG) --modversion libtraceevent).0.0
    LIBTRACEEVENT_VERSION_1 := $(word 1, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
    LIBTRACEEVENT_VERSION_2 := $(word 2, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
    LIBTRACEEVENT_VERSION_3 := $(word 3, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
    LIBTRACEEVENT_VERSION_CPP := $(shell expr $(LIBTRACEEVENT_VERSION_1) \* 255 \* 255 + $(LIBTRACEEVENT_VERSION_2) \* 255 + $(LIBTRACEEVENT_VERSION_3))
    CFLAGS += -DLIBTRACEEVENT_VERSION=$(LIBTRACEEVENT_VERSION_CPP)
    $(call detected,CONFIG_LIBTRACEEVENT)
  else
    $(error ERROR: libtraceevent is missing. Please install libtraceevent-dev/libtraceevent-devel and/or set LIBTRACEEVENT_DIR or build with NO_LIBTRACEEVENT=1)
  endif
endif

ifndef NO_RUST
  $(call feature_check,rust)
  ifneq ($(feature-rust), 1)
    $(warning Rust is not found. Test workloads with rust are disabled.)
    NO_RUST := 1
  else
    NO_RUST := 0
    CFLAGS += -DHAVE_RUST_SUPPORT
    $(call detected,CONFIG_RUST_SUPPORT)
  endif

  ifneq ($(CROSS_COMPILE),)
    RUST_TARGET_FLAGS_arm	:= arm-unknown-linux-gnueabi
    RUST_TARGET_FLAGS_arm64	:= aarch64-unknown-linux-gnu
    RUST_TARGET_FLAGS_loongarch	:= loongarch64-unknown-linux-gnu
    RUST_TARGET_FLAGS_m68k	:= m68k-unknown-linux-gnu
    RUST_TARGET_FLAGS_mips	:= mipsel-unknown-linux-gnu
    RUST_TARGET_FLAGS_powerpc	:= powerpc64le-unknown-linux-gnu
    RUST_TARGET_FLAGS_riscv	:= riscv64gc-unknown-linux-gnu
    RUST_TARGET_FLAGS_s390	:= s390x-unknown-linux-gnu
    RUST_TARGET_FLAGS_x86	:= x86_64-unknown-linux-gnu
    RUST_TARGET_FLAGS_x86_64	:= x86_64-unknown-linux-gnu

    ifeq ($(RUST_TARGET_FLAGS_$(ARCH)),)
      $(error Unknown rust cross compilation architecture $(ARCH))
    endif

    RUST_FLAGS += --target=$(RUST_TARGET_FLAGS_$(ARCH))
  endif
endif

# Among the variables below, these:
#   perfexecdir
#   libbpf_include_dir
#   perf_examples_dir
#   template_dir
#   mandir
#   infodir
#   htmldir
#   ETC_PERFCONFIG (but not sysconfdir)
# can be specified as a relative path some/where/else;
# this is interpreted as relative to $(prefix) and "perf" at
# runtime figures out where they are based on the path to the executable.
# This can help installing the suite in a relocatable way.

# Make the path relative to DESTDIR, not to prefix
ifndef DESTDIR
prefix ?= $(HOME)
endif
bindir_relative = bin
bindir = $(abspath $(prefix)/$(bindir_relative))
includedir_relative = include
includedir = $(abspath $(prefix)/$(includedir_relative))
mandir = share/man
infodir = share/info
perfexecdir = libexec/perf-core
# FIXME: system's libbpf header directory, where we expect to find bpf/bpf_helpers.h, for instance
libbpf_include_dir = /usr/include
perf_examples_dir = lib/perf/examples
sharedir = $(prefix)/share
template_dir = share/perf-core/templates
STRACE_GROUPS_DIR = share/perf-core/strace/groups
htmldir = share/doc/perf-doc
tipdir = share/doc/perf-tip
srcdir = $(srctree)/tools/perf
ifeq ($(prefix),/usr)
sysconfdir = /etc
ETC_PERFCONFIG = $(sysconfdir)/perfconfig
else
sysconfdir = $(prefix)/etc
ETC_PERFCONFIG = etc/perfconfig
endif
ifndef lib
ifeq ($(SRCARCH)$(IS_64_BIT), x861)
lib = lib64
else
lib = lib
endif
endif # lib
libdir = $(prefix)/$(lib)

# Shell quote (do not use $(call) to accommodate ancient setups);
ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
STRACE_GROUPS_DIR_SQ = $(subst ','\'',$(STRACE_GROUPS_DIR))
DESTDIR_SQ = $(subst ','\'',$(DESTDIR))
bindir_SQ = $(subst ','\'',$(bindir))
includedir_SQ = $(subst ','\'',$(includedir))
mandir_SQ = $(subst ','\'',$(mandir))
infodir_SQ = $(subst ','\'',$(infodir))
perfexecdir_SQ = $(subst ','\'',$(perfexecdir))
libbpf_include_dir_SQ = $(subst ','\'',$(libbpf_include_dir))
perf_examples_dir_SQ = $(subst ','\'',$(perf_examples_dir))
template_dir_SQ = $(subst ','\'',$(template_dir))
htmldir_SQ = $(subst ','\'',$(htmldir))
tipdir_SQ = $(subst ','\'',$(tipdir))
prefix_SQ = $(subst ','\'',$(prefix))
sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
libdir_SQ = $(subst ','\'',$(libdir))
srcdir_SQ = $(subst ','\'',$(srcdir))

ifneq ($(filter /%,$(firstword $(perfexecdir))),)
perfexec_instdir = $(perfexecdir)
perf_include_instdir = $(libbpf_include_dir)
perf_examples_instdir = $(perf_examples_dir)
STRACE_GROUPS_INSTDIR = $(STRACE_GROUPS_DIR)
tip_instdir = $(tipdir)
else
perfexec_instdir = $(prefix)/$(perfexecdir)
perf_include_instdir = $(prefix)/$(libbpf_include_dir)
perf_examples_instdir = $(prefix)/$(perf_examples_dir)
STRACE_GROUPS_INSTDIR = $(prefix)/$(STRACE_GROUPS_DIR)
tip_instdir = $(prefix)/$(tipdir)
endif
perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
perf_include_instdir_SQ = $(subst ','\'',$(perf_include_instdir))
perf_examples_instdir_SQ = $(subst ','\'',$(perf_examples_instdir))
STRACE_GROUPS_INSTDIR_SQ = $(subst ','\'',$(STRACE_GROUPS_INSTDIR))
tip_instdir_SQ = $(subst ','\'',$(tip_instdir))

export perfexec_instdir_SQ

print_var = $(eval $(print_var_code)) $(info $(MSG))
define print_var_code
    MSG = $(shell printf '...%40s: %s' $(1) $($(1)))
endef

ifeq ($(feature_display),1)
  $(call feature_display_entries)
endif

ifeq ($(VF),1)
  # Display EXTRA features which are detected manualy
  # from here with feature_check call and thus cannot
  # be partof global state output.
  $(foreach feat,$(FEATURE_TESTS_EXTRA),$(call feature_print_status,$(feat),) $(info $(MSG)))
  $(call print_var,prefix)
  $(call print_var,bindir)
  $(call print_var,libdir)
  $(call print_var,sysconfdir)
  $(call print_var,LIBUNWIND_DIR)
  $(call print_var,LIBDW_DIR)
  $(call print_var,JDIR)

  ifeq ($(dwarf-post-unwind),1)
    $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text)) $(info $(MSG))
  endif
endif

$(info )

$(call detected_var,bindir_SQ)
$(call detected_var,PYTHON_WORD)
ifneq ($(OUTPUT),)
$(call detected_var,OUTPUT)
endif
$(call detected_var,htmldir_SQ)
$(call detected_var,infodir_SQ)
$(call detected_var,mandir_SQ)
$(call detected_var,ETC_PERFCONFIG_SQ)
$(call detected_var,STRACE_GROUPS_DIR_SQ)
$(call detected_var,prefix_SQ)
$(call detected_var,perfexecdir_SQ)
$(call detected_var,libbpf_include_dir_SQ)
$(call detected_var,perf_examples_dir_SQ)
$(call detected_var,tipdir_SQ)
$(call detected_var,srcdir_SQ)
$(call detected_var,LIBDIR)
$(call detected_var,GTK_CFLAGS)
$(call detected_var,PERL_EMBED_CCOPTS)
$(call detected_var,PYTHON_EMBED_CCOPTS)
ifneq ($(BISON_FILE_PREFIX_MAP),)
$(call detected_var,BISON_FILE_PREFIX_MAP)
endif

# re-generate FEATURE-DUMP as we may have called feature_check, found out
# extra libraries to add to LDFLAGS of some other test and then redo those
# tests.
$(shell rm -f $(FEATURE_DUMP_FILENAME))
$(foreach feat,$(FEATURE_TESTS),$(shell echo "$(call feature_assign,$(feat))" >> $(FEATURE_DUMP_FILENAME)))
