xref: /openbmc/linux/tools/perf/Makefile.config (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1ec8f24b7SThomas Gleixner# SPDX-License-Identifier: GPL-2.0-only
24842576cSJiri Olsa
34842576cSJiri Olsaifeq ($(src-perf),)
44842576cSJiri Olsasrc-perf := $(srctree)/tools/perf
54842576cSJiri Olsaendif
64842576cSJiri Olsa
74842576cSJiri Olsaifeq ($(obj-perf),)
84842576cSJiri Olsaobj-perf := $(OUTPUT)
94842576cSJiri Olsaendif
104842576cSJiri Olsa
114842576cSJiri Olsaifneq ($(obj-perf),)
124842576cSJiri Olsaobj-perf := $(abspath $(obj-perf))/
134842576cSJiri Olsaendif
144842576cSJiri Olsa
154842576cSJiri Olsa$(shell printf "" > $(OUTPUT).config-detected)
164842576cSJiri Olsadetected     = $(shell echo "$(1)=y"       >> $(OUTPUT).config-detected)
174842576cSJiri Olsadetected_var = $(shell echo "$(1)=$($(1))" >> $(OUTPUT).config-detected)
184842576cSJiri Olsa
19ab0a40eaSVasily GorbikCFLAGS := $(EXTRA_CFLAGS) $(filter-out -Wnested-externs,$(EXTRA_WARNINGS))
20c77a78c2SJohn GarryHOSTCFLAGS := $(filter-out -Wnested-externs,$(EXTRA_WARNINGS))
214842576cSJiri Olsa
22dca571edSIan Rogers# Enabled Wthread-safety analysis for clang builds.
23dca571edSIan Rogersifeq ($(CC_NO_CLANG), 0)
24dca571edSIan Rogers  CFLAGS += -Wthread-safety
25dca571edSIan Rogersendif
26dca571edSIan Rogers
274842576cSJiri Olsainclude $(srctree)/tools/scripts/Makefile.arch
284842576cSJiri Olsa
297a759cd8SJiada Wang$(call detected_var,SRCARCH)
304842576cSJiri Olsa
314842576cSJiri OlsaNO_PERF_REGS := 1
329b90d973SArnaldo Carvalho de Melo
3343de3869SArnaldo Carvalho de Meloifneq ($(NO_SYSCALL_TABLE),1)
34901bb028SHendrik Brueckner  NO_SYSCALL_TABLE := 1
354842576cSJiri Olsa
369b90d973SArnaldo Carvalho de Melo  ifeq ($(SRCARCH),x86)
379b90d973SArnaldo Carvalho de Melo    ifeq (${IS_64_BIT}, 1)
389b90d973SArnaldo Carvalho de Melo      NO_SYSCALL_TABLE := 0
399b90d973SArnaldo Carvalho de Melo    endif
409b90d973SArnaldo Carvalho de Melo  else
412fa5ebe3SHuacai Chen    ifeq ($(SRCARCH),$(filter $(SRCARCH),powerpc arm64 s390 mips loongarch))
429b90d973SArnaldo Carvalho de Melo      NO_SYSCALL_TABLE := 0
439b90d973SArnaldo Carvalho de Melo    endif
449b90d973SArnaldo Carvalho de Melo  endif
459b90d973SArnaldo Carvalho de Melo
469b90d973SArnaldo Carvalho de Melo  ifneq ($(NO_SYSCALL_TABLE),1)
479b90d973SArnaldo Carvalho de Melo    CFLAGS += -DHAVE_SYSCALL_TABLE_SUPPORT
489b90d973SArnaldo Carvalho de Melo  endif
4943de3869SArnaldo Carvalho de Meloendif
509b90d973SArnaldo Carvalho de Melo
514842576cSJiri Olsa# Additional ARCH settings for ppc
527a759cd8SJiada Wangifeq ($(SRCARCH),powerpc)
534842576cSJiri Olsa  NO_PERF_REGS := 0
544281da23SRavi Bangoria  CFLAGS += -I$(OUTPUT)arch/powerpc/include/generated
554842576cSJiri Olsa  LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
564842576cSJiri Olsaendif
574842576cSJiri Olsa
584842576cSJiri Olsa# Additional ARCH settings for x86
597a759cd8SJiada Wangifeq ($(SRCARCH),x86)
604842576cSJiri Olsa  $(call detected,CONFIG_X86)
614842576cSJiri Olsa  ifeq (${IS_64_BIT}, 1)
62901bb028SHendrik Brueckner    CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT -I$(OUTPUT)arch/x86/include/generated
634842576cSJiri Olsa    ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
6460913e00SKonstantin Khlebnikov    LIBUNWIND_LIBS = -lunwind-x86_64 -lunwind -llzma
654842576cSJiri Olsa    $(call detected,CONFIG_X86_64)
664842576cSJiri Olsa  else
674842576cSJiri Olsa    LIBUNWIND_LIBS = -lunwind-x86 -llzma -lunwind
684842576cSJiri Olsa  endif
694842576cSJiri Olsa  NO_PERF_REGS := 0
704842576cSJiri Olsaendif
714842576cSJiri Olsa
727a759cd8SJiada Wangifeq ($(SRCARCH),arm)
734842576cSJiri Olsa  NO_PERF_REGS := 0
744842576cSJiri Olsa  LIBUNWIND_LIBS = -lunwind -lunwind-arm
754842576cSJiri Olsaendif
764842576cSJiri Olsa
777a759cd8SJiada Wangifeq ($(SRCARCH),arm64)
784842576cSJiri Olsa  NO_PERF_REGS := 0
79a7f660d6SKim Phillips  CFLAGS += -I$(OUTPUT)arch/arm64/include/generated
804842576cSJiri Olsa  LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
814842576cSJiri Olsaendif
824842576cSJiri Olsa
832fa5ebe3SHuacai Chenifeq ($(SRCARCH),loongarch)
842fa5ebe3SHuacai Chen  NO_PERF_REGS := 0
852fa5ebe3SHuacai Chen  CFLAGS += -I$(OUTPUT)arch/loongarch/include/generated
862fa5ebe3SHuacai Chen  LIBUNWIND_LIBS = -lunwind -lunwind-loongarch64
872fa5ebe3SHuacai Chenendif
882fa5ebe3SHuacai Chen
8951bc620bSMao Hanifeq ($(SRCARCH),riscv)
9051bc620bSMao Han  NO_PERF_REGS := 0
9151bc620bSMao Hanendif
9251bc620bSMao Han
933213486fSMao Hanifeq ($(SRCARCH),csky)
943213486fSMao Han  NO_PERF_REGS := 0
953213486fSMao Hanendif
963213486fSMao Han
97f704ef44SHeiko Carstensifeq ($(ARCH),s390)
98f704ef44SHeiko Carstens  NO_PERF_REGS := 0
99a9a3f1d1SHendrik Brueckner  CFLAGS += -fPIC -I$(OUTPUT)arch/s390/include/generated
100f704ef44SHeiko Carstensendif
101f704ef44SHeiko Carstens
102b5f184fbSTiezhu Yangifeq ($(ARCH),mips)
103b5f184fbSTiezhu Yang  NO_PERF_REGS := 0
104d9fd5a71STiezhu Yang  CFLAGS += -I$(OUTPUT)arch/mips/include/generated
105b5f184fbSTiezhu Yang  LIBUNWIND_LIBS = -lunwind -lunwind-mips
106b5f184fbSTiezhu Yangendif
107b5f184fbSTiezhu Yang
1084842576cSJiri Olsaifeq ($(NO_PERF_REGS),0)
1094842576cSJiri Olsa  $(call detected,CONFIG_PERF_REGS)
1104842576cSJiri Olsaendif
1114842576cSJiri Olsa
1124842576cSJiri Olsa# So far there's only x86 and arm libdw unwind support merged in perf.
1134842576cSJiri Olsa# Disable it on all other architectures in case libdw unwind
1144842576cSJiri Olsa# support is detected in system. Add supported architectures
1154842576cSJiri Olsa# to the check.
1162fa5ebe3SHuacai Chenifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc s390 csky riscv loongarch))
1174842576cSJiri Olsa  NO_LIBDW_DWARF_UNWIND := 1
1184842576cSJiri Olsaendif
1194842576cSJiri Olsa
1204842576cSJiri Olsaifeq ($(LIBUNWIND_LIBS),)
1214842576cSJiri Olsa  NO_LIBUNWIND := 1
1224842576cSJiri Olsaendif
1234842576cSJiri Olsa#
1244842576cSJiri Olsa# For linking with debug library, run like:
1254842576cSJiri Olsa#
1264842576cSJiri Olsa#   make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
1274842576cSJiri Olsa#
1284842576cSJiri Olsa
1294842576cSJiri Olsalibunwind_arch_set_flags = $(eval $(libunwind_arch_set_flags_code))
1304842576cSJiri Olsadefine libunwind_arch_set_flags_code
1314842576cSJiri Olsa  FEATURE_CHECK_CFLAGS-libunwind-$(1)  = -I$(LIBUNWIND_DIR)/include
1324842576cSJiri Olsa  FEATURE_CHECK_LDFLAGS-libunwind-$(1) = -L$(LIBUNWIND_DIR)/lib
1334842576cSJiri Olsaendef
1344842576cSJiri Olsa
1354842576cSJiri Olsaifdef LIBUNWIND_DIR
1364842576cSJiri Olsa  LIBUNWIND_CFLAGS  = -I$(LIBUNWIND_DIR)/include
1374842576cSJiri Olsa  LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib
1382fa5ebe3SHuacai Chen  LIBUNWIND_ARCHS = x86 x86_64 arm aarch64 debug-frame-arm debug-frame-aarch64 loongarch
1394842576cSJiri Olsa  $(foreach libunwind_arch,$(LIBUNWIND_ARCHS),$(call libunwind_arch_set_flags,$(libunwind_arch)))
1404842576cSJiri Olsaendif
1414842576cSJiri Olsa
1424842576cSJiri Olsa# Set per-feature check compilation flags
1434842576cSJiri OlsaFEATURE_CHECK_CFLAGS-libunwind = $(LIBUNWIND_CFLAGS)
1444842576cSJiri OlsaFEATURE_CHECK_LDFLAGS-libunwind = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
1454842576cSJiri OlsaFEATURE_CHECK_CFLAGS-libunwind-debug-frame = $(LIBUNWIND_CFLAGS)
1464842576cSJiri OlsaFEATURE_CHECK_LDFLAGS-libunwind-debug-frame = $(LIBUNWIND_LDFLAGS) $(LIBUNWIND_LIBS)
1474842576cSJiri Olsa
148cdf32b44SLi HuafeiFEATURE_CHECK_LDFLAGS-libunwind-arm += -lunwind -lunwind-arm
149cdf32b44SLi HuafeiFEATURE_CHECK_LDFLAGS-libunwind-aarch64 += -lunwind -lunwind-aarch64
150cdf32b44SLi HuafeiFEATURE_CHECK_LDFLAGS-libunwind-x86 += -lunwind -llzma -lunwind-x86
151cdf32b44SLi HuafeiFEATURE_CHECK_LDFLAGS-libunwind-x86_64 += -lunwind -llzma -lunwind-x86_64
1525c4d7c82SArnaldo Carvalho de Melo
153271402a3SArnaldo Carvalho de MeloFEATURE_CHECK_LDFLAGS-libcrypto = -lcrypto
154271402a3SArnaldo Carvalho de Melo
155aa6292f4SMathieu Poirierifdef CSINCLUDES
156aa6292f4SMathieu Poirier  LIBOPENCSD_CFLAGS := -I$(CSINCLUDES)
157aa6292f4SMathieu Poirierendif
1581feece27SJames ClarkOPENCSDLIBS := -lopencsd_c_api -lopencsd
159ed17b191SUwe Kleine-Königifeq ($(findstring -static,${LDFLAGS}),-static)
1601feece27SJames Clark  OPENCSDLIBS += -lstdc++
161ed17b191SUwe Kleine-Königendif
162aa6292f4SMathieu Poirierifdef CSLIBS
163aa6292f4SMathieu Poirier  LIBOPENCSD_LDFLAGS := -L$(CSLIBS)
164aa6292f4SMathieu Poirierendif
165aa6292f4SMathieu PoirierFEATURE_CHECK_CFLAGS-libopencsd := $(LIBOPENCSD_CFLAGS)
166aa6292f4SMathieu PoirierFEATURE_CHECK_LDFLAGS-libopencsd := $(LIBOPENCSD_LDFLAGS) $(OPENCSDLIBS)
167aa6292f4SMathieu Poirier
1684842576cSJiri Olsaifeq ($(NO_PERF_REGS),0)
1694842576cSJiri Olsa  CFLAGS += -DHAVE_PERF_REGS_SUPPORT
1704842576cSJiri Olsaendif
1714842576cSJiri Olsa
1724842576cSJiri Olsa# for linking with debug library, run like:
1734842576cSJiri Olsa# make DEBUG=1 LIBDW_DIR=/opt/libdw/
1744842576cSJiri Olsaifdef LIBDW_DIR
1754842576cSJiri Olsa  LIBDW_CFLAGS  := -I$(LIBDW_DIR)/include
1764842576cSJiri Olsa  LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
1774842576cSJiri Olsaendif
178ba335df4SKonstantin KhlebnikovDWARFLIBS := -ldw
179ba335df4SKonstantin Khlebnikovifeq ($(findstring -static,${LDFLAGS}),-static)
180ba335df4SKonstantin Khlebnikov  DWARFLIBS += -lelf -lebl -ldl -lz -llzma -lbz2
181ba335df4SKonstantin Khlebnikovendif
1824842576cSJiri OlsaFEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
183ba335df4SKonstantin KhlebnikovFEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) $(DWARFLIBS)
1844842576cSJiri Olsa
1854842576cSJiri Olsa# for linking with debug library, run like:
1864842576cSJiri Olsa# make DEBUG=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/
1874842576cSJiri Olsaifdef LIBBABELTRACE_DIR
1884842576cSJiri Olsa  LIBBABELTRACE_CFLAGS  := -I$(LIBBABELTRACE_DIR)/include
1894842576cSJiri Olsa  LIBBABELTRACE_LDFLAGS := -L$(LIBBABELTRACE_DIR)/lib
1904842576cSJiri Olsaendif
1914842576cSJiri OlsaFEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS)
1924842576cSJiri OlsaFEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
1934842576cSJiri Olsa
1943b1c5d96SAlexey Budankovifdef LIBZSTD_DIR
1953b1c5d96SAlexey Budankov  LIBZSTD_CFLAGS  := -I$(LIBZSTD_DIR)/lib
1963b1c5d96SAlexey Budankov  LIBZSTD_LDFLAGS := -L$(LIBZSTD_DIR)/lib
1973b1c5d96SAlexey Budankovendif
1983b1c5d96SAlexey BudankovFEATURE_CHECK_CFLAGS-libzstd := $(LIBZSTD_CFLAGS)
1993b1c5d96SAlexey BudankovFEATURE_CHECK_LDFLAGS-libzstd := $(LIBZSTD_LDFLAGS)
2003b1c5d96SAlexey Budankov
2017a759cd8SJiada WangFEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi -I$(srctree)/tools/include/uapi
2024842576cSJiri Olsa# include ARCH specific config
2037a759cd8SJiada Wang-include $(src-perf)/arch/$(SRCARCH)/Makefile
2044842576cSJiri Olsa
2054842576cSJiri Olsaifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
2064842576cSJiri Olsa  CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
2074842576cSJiri Olsaendif
2084842576cSJiri Olsa
2094842576cSJiri Olsainclude $(srctree)/tools/scripts/utilities.mak
2104842576cSJiri Olsa
2114842576cSJiri Olsaifeq ($(call get-executable,$(FLEX)),)
2124842576cSJiri Olsa  dummy := $(error Error: $(FLEX) is missing on this system, please install it)
2134842576cSJiri Olsaendif
2144842576cSJiri Olsa
2154842576cSJiri Olsaifeq ($(call get-executable,$(BISON)),)
2164842576cSJiri Olsa  dummy := $(error Error: $(BISON) is missing on this system, please install it)
2174842576cSJiri Olsaendif
2184842576cSJiri Olsa
219b0618f38SArnaldo Carvalho de Meloifeq ($(BUILD_BPF_SKEL),1)
220b0618f38SArnaldo Carvalho de Melo  ifeq ($(call get-executable,$(CLANG)),)
221b0618f38SArnaldo Carvalho de Melo    dummy := $(error $(CLANG) is missing on this system, please install it to be able to build with BUILD_BPF_SKEL=1)
222b0618f38SArnaldo Carvalho de Melo  endif
223b0618f38SArnaldo Carvalho de Meloendif
224b0618f38SArnaldo Carvalho de Melo
2256793672aSDenys Zagoruiifneq ($(OUTPUT),)
2266793672aSDenys Zagorui  ifeq ($(shell expr $(shell $(BISON) --version | grep bison | sed -e 's/.\+ \([0-9]\+\).\([0-9]\+\).\([0-9]\+\)/\1\2\3/g') \>\= 371), 1)
2276793672aSDenys Zagorui    BISON_FILE_PREFIX_MAP := --file-prefix-map=$(OUTPUT)=
2286793672aSDenys Zagorui  endif
2296793672aSDenys Zagoruiendif
2306793672aSDenys Zagorui
2314842576cSJiri Olsa# Treat warnings as errors unless directed not to
2324842576cSJiri Olsaifneq ($(WERROR),0)
23355542113SJiri Olsa  CORE_CFLAGS += -Werror
234d58ac0bfSWang Nan  CXXFLAGS += -Werror
235c77a78c2SJohn Garry  HOSTCFLAGS += -Werror
2364842576cSJiri Olsaendif
2374842576cSJiri Olsa
2384842576cSJiri Olsaifndef DEBUG
2394842576cSJiri Olsa  DEBUG := 0
2404842576cSJiri Olsaendif
2414842576cSJiri Olsa
2424842576cSJiri Olsaifeq ($(DEBUG),0)
243616b14b4SIan RogersCORE_CFLAGS += -DNDEBUG=1
2443866058eSDavid Carrillo-Cisnerosifeq ($(CC_NO_CLANG), 0)
24555542113SJiri Olsa  CORE_CFLAGS += -O3
24649b3cd30SArnaldo Carvalho de Meloelse
24755542113SJiri Olsa  CORE_CFLAGS += -O6
2484842576cSJiri Olsaendif
249435bea0aSIan Rogerselse
250435bea0aSIan Rogers  CORE_CFLAGS += -g
251435bea0aSIan Rogers  CXXFLAGS += -g
25249b3cd30SArnaldo Carvalho de Meloendif
2534842576cSJiri Olsa
2544842576cSJiri Olsaifdef PARSER_DEBUG
2554842576cSJiri Olsa  PARSER_DEBUG_BISON := -t
2564842576cSJiri Olsa  PARSER_DEBUG_FLEX  := -d
2574842576cSJiri Olsa  CFLAGS             += -DPARSER_DEBUG
2584842576cSJiri Olsa  $(call detected_var,PARSER_DEBUG_BISON)
2594842576cSJiri Olsa  $(call detected_var,PARSER_DEBUG_FLEX)
2604842576cSJiri Olsaendif
2614842576cSJiri Olsa
262c126ac4aSIan Rogersifdef LTO
263c126ac4aSIan Rogers  CORE_CFLAGS += -flto
264c126ac4aSIan Rogers  CXXFLAGS += -flto
265c126ac4aSIan Rogersendif
266c126ac4aSIan Rogers
2674842576cSJiri Olsa# Try different combinations to accommodate systems that only have
268630af16eSJames Clark# python[2][3]-config in weird combinations in the following order of
269630af16eSJames Clark# priority from lowest to highest:
270630af16eSJames Clark#   * python2-config as per pep-0394.
2714c41cb46SIan Rogers#   * python-config
2724c41cb46SIan Rogers#   * python3-config
273630af16eSJames Clark#   * $(PYTHON)-config (If PYTHON is user supplied but PYTHON_CONFIG isn't)
274630af16eSJames Clark#
275630af16eSJames ClarkPYTHON_AUTO := python-config
276630af16eSJames ClarkPYTHON_AUTO := $(if $(call get-executable,python2-config),python2-config,$(PYTHON_AUTO))
2774c41cb46SIan RogersPYTHON_AUTO := $(if $(call get-executable,python-config),python-config,$(PYTHON_AUTO))
2784c41cb46SIan RogersPYTHON_AUTO := $(if $(call get-executable,python3-config),python3-config,$(PYTHON_AUTO))
279630af16eSJames Clark
280630af16eSJames Clark# If PYTHON is defined but PYTHON_CONFIG isn't, then take $(PYTHON)-config as if it was the user
281630af16eSJames Clark# supplied value for PYTHON_CONFIG. Because it's "user supplied", error out if it doesn't exist.
282630af16eSJames Clarkifdef PYTHON
283630af16eSJames Clark  ifndef PYTHON_CONFIG
284630af16eSJames Clark    PYTHON_CONFIG_AUTO := $(call get-executable,$(PYTHON)-config)
285630af16eSJames Clark    PYTHON_CONFIG := $(if $(PYTHON_CONFIG_AUTO),$(PYTHON_CONFIG_AUTO),\
286630af16eSJames Clark                          $(call $(error $(PYTHON)-config not found)))
287630af16eSJames Clark  endif
288630af16eSJames Clarkendif
289630af16eSJames Clark
290630af16eSJames Clark# Select either auto detected python and python-config or use user supplied values if they are
291630af16eSJames Clark# defined. get-executable-or-default fails with an error if the first argument is supplied but
292630af16eSJames Clark# doesn't exist.
293630af16eSJames Clarkoverride PYTHON_CONFIG := $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON_AUTO))
294bc9e7fe3SJames Clarkoverride PYTHON := $(call get-executable-or-default,PYTHON,$(subst -config,,$(PYTHON_CONFIG)))
2954842576cSJiri Olsa
2967be6b316SDavid Carrillo-Cisnerosgrep-libs  = $(filter -l%,$(1))
2977be6b316SDavid Carrillo-Cisnerosstrip-libs  = $(filter-out -l%,$(1))
2987be6b316SDavid Carrillo-Cisneros
2994842576cSJiri OlsaPYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
3004842576cSJiri Olsa
301b9c9ce4eSSam Lunt# Python 3.8 changed the output of `python-config --ldflags` to not include the
302b9c9ce4eSSam Lunt# '-lpythonX.Y' flag unless '--embed' is also passed. The feature check for
303b9c9ce4eSSam Lunt# libpython fails if that flag is not included in LDFLAGS
304b9c9ce4eSSam Luntifeq ($(shell $(PYTHON_CONFIG_SQ) --ldflags --embed 2>&1 1>/dev/null; echo $$?), 0)
305b9c9ce4eSSam Lunt  PYTHON_CONFIG_LDFLAGS := --ldflags --embed
306b9c9ce4eSSam Luntelse
307b9c9ce4eSSam Lunt  PYTHON_CONFIG_LDFLAGS := --ldflags
308b9c9ce4eSSam Luntendif
309b9c9ce4eSSam Lunt
3107be6b316SDavid Carrillo-Cisnerosifdef PYTHON_CONFIG
311b9c9ce4eSSam Lunt  PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) $(PYTHON_CONFIG_LDFLAGS) 2>/dev/null)
3127be6b316SDavid Carrillo-Cisneros  PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
3137be6b316SDavid Carrillo-Cisneros  PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS)) -lutil
31432aa928aSJeremy Cline  PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --includes 2>/dev/null)
3157be6b316SDavid Carrillo-Cisneros  FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
3163a8a0475SArnaldo Carvalho de Melo  ifeq ($(CC_NO_CLANG), 0)
3173a8a0475SArnaldo Carvalho de Melo    PYTHON_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PYTHON_EMBED_CCOPTS))
3183a8a0475SArnaldo Carvalho de Melo  endif
3197be6b316SDavid Carrillo-Cisnerosendif
3208bd8c653SArnaldo Carvalho de Melo
3214842576cSJiri OlsaFEATURE_CHECK_CFLAGS-libpython := $(PYTHON_EMBED_CCOPTS)
3224842576cSJiri OlsaFEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
3234842576cSJiri Olsa
324aa8f9c51SArnaldo Carvalho de MeloFEATURE_CHECK_LDFLAGS-libaio = -lrt
325aa8f9c51SArnaldo Carvalho de Melo
326ad5f604eSNamhyung KimFEATURE_CHECK_LDFLAGS-disassembler-four-args = -lbfd -lopcodes -ldl
327ad5f604eSNamhyung KimFEATURE_CHECK_LDFLAGS-disassembler-init-styled = -lbfd -lopcodes -ldl
328ad5f604eSNamhyung Kim
32955542113SJiri OlsaCORE_CFLAGS += -fno-omit-frame-pointer
33055542113SJiri OlsaCORE_CFLAGS += -Wall
33155542113SJiri OlsaCORE_CFLAGS += -Wextra
332f3c9bd4eSIan RogersCORE_CFLAGS += -std=gnu11
3334842576cSJiri Olsa
334*8fcaea9fSThomas RichterCXXFLAGS += -std=gnu++17 -fno-exceptions -fno-rtti
335d58ac0bfSWang NanCXXFLAGS += -Wall
336e5764ae4SIan RogersCXXFLAGS += -Wextra
337d58ac0bfSWang NanCXXFLAGS += -fno-omit-frame-pointer
338d58ac0bfSWang Nan
339c77a78c2SJohn GarryHOSTCFLAGS += -Wall
340c77a78c2SJohn GarryHOSTCFLAGS += -Wextra
341c77a78c2SJohn Garry
3424842576cSJiri Olsa# Enforce a non-executable stack, as we may regress (again) in the future by
3434842576cSJiri Olsa# adding assembler files missing the .GNU-stack linker note.
3444842576cSJiri OlsaLDFLAGS += -Wl,-z,noexecstack
3454842576cSJiri Olsa
3464842576cSJiri OlsaEXTLIBS = -lpthread -lrt -lm -ldl
3474842576cSJiri Olsa
348bb91a073SJiri Olsaifneq ($(TCMALLOC),)
349bb91a073SJiri Olsa  CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
350bb91a073SJiri Olsa  EXTLIBS += -ltcmalloc
351bb91a073SJiri Olsaendif
352bb91a073SJiri Olsa
3534842576cSJiri Olsaifeq ($(FEATURES_DUMP),)
354ad5f604eSNamhyung Kim# We will display at the end of this Makefile.config, using $(call feature_display_entries)
355ad5f604eSNamhyung Kim# As we may retry some feature detection here, see the disassembler-four-args case, for instance
356c6e3bf43SArnaldo Carvalho de Melo  FEATURE_DISPLAY_DEFERRED := 1
3574842576cSJiri Olsainclude $(srctree)/tools/build/Makefile.feature
3584842576cSJiri Olsaelse
3594842576cSJiri Olsainclude $(FEATURES_DUMP)
3604842576cSJiri Olsaendif
3614842576cSJiri Olsa
3624842576cSJiri Olsaifeq ($(feature-stackprotector-all), 1)
36355542113SJiri Olsa  CORE_CFLAGS += -fstack-protector-all
3644842576cSJiri Olsaendif
3654842576cSJiri Olsa
3664842576cSJiri Olsaifeq ($(DEBUG),0)
3674842576cSJiri Olsa  ifeq ($(feature-fortify-source), 1)
368f077c776SArnaldo Carvalho de Melo    CORE_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
3694842576cSJiri Olsa  endif
3704842576cSJiri Olsaendif
3714842576cSJiri Olsa
372e67d52d4SWang NanINC_FLAGS += -I$(src-perf)/util/include
3737a759cd8SJiada WangINC_FLAGS += -I$(src-perf)/arch/$(SRCARCH)/include
374e67d52d4SWang NanINC_FLAGS += -I$(srctree)/tools/include/
3757a759cd8SJiada WangINC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi
376146dc303SArnaldo Carvalho de MeloINC_FLAGS += -I$(srctree)/tools/include/uapi
3777a759cd8SJiada WangINC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/
3787a759cd8SJiada WangINC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/
3794842576cSJiri Olsa
3804842576cSJiri Olsa# $(obj-perf)      for generated common-cmds.h
3814842576cSJiri Olsa# $(obj-perf)/util for generated bison/flex headers
3824842576cSJiri Olsaifneq ($(OUTPUT),)
383e67d52d4SWang NanINC_FLAGS += -I$(obj-perf)/util
384e67d52d4SWang NanINC_FLAGS += -I$(obj-perf)
3854842576cSJiri Olsaendif
3864842576cSJiri Olsa
387e67d52d4SWang NanINC_FLAGS += -I$(src-perf)/util
388e67d52d4SWang NanINC_FLAGS += -I$(src-perf)
389e67d52d4SWang Nan
39055542113SJiri OlsaCORE_CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE
39155542113SJiri Olsa
39255542113SJiri OlsaCFLAGS   += $(CORE_CFLAGS) $(INC_FLAGS)
393e67d52d4SWang NanCXXFLAGS += $(INC_FLAGS)
3944842576cSJiri Olsa
39555542113SJiri OlsaLIBPERF_CFLAGS := $(CORE_CFLAGS) $(EXTRA_CFLAGS)
3964842576cSJiri Olsa
3974842576cSJiri Olsaifeq ($(feature-pthread-attr-setaffinity-np), 1)
3984842576cSJiri Olsa  CFLAGS += -DHAVE_PTHREAD_ATTR_SETAFFINITY_NP
3994842576cSJiri Olsaendif
4004842576cSJiri Olsa
40125ab5abfSArnaldo Carvalho de Meloifeq ($(feature-pthread-barrier), 1)
40225ab5abfSArnaldo Carvalho de Melo  CFLAGS += -DHAVE_PTHREAD_BARRIER
40325ab5abfSArnaldo Carvalho de Meloendif
40425ab5abfSArnaldo Carvalho de Melo
4054842576cSJiri Olsaifndef NO_BIONIC
4064842576cSJiri Olsa  $(call feature_check,bionic)
4074842576cSJiri Olsa  ifeq ($(feature-bionic), 1)
4084842576cSJiri Olsa    BIONIC := 1
409748fe088SArnaldo Carvalho de Melo    CFLAGS += -DLACKS_SIGQUEUE_PROTOTYPE
410d7a8c4a6SArnaldo Carvalho de Melo    CFLAGS += -DLACKS_OPEN_MEMSTREAM_PROTOTYPE
4114842576cSJiri Olsa    EXTLIBS := $(filter-out -lrt,$(EXTLIBS))
4124842576cSJiri Olsa    EXTLIBS := $(filter-out -lpthread,$(EXTLIBS))
4134842576cSJiri Olsa  endif
4144842576cSJiri Olsaendif
4154842576cSJiri Olsa
41611c6cbe7SArnaldo Carvalho de Meloifeq ($(feature-eventfd), 1)
417ba35fe93SArnaldo Carvalho de Melo  CFLAGS += -DHAVE_EVENTFD_SUPPORT
41811c6cbe7SArnaldo Carvalho de Meloendif
41911c6cbe7SArnaldo Carvalho de Melo
4208feb8efeSArnaldo Carvalho de Meloifeq ($(feature-get_current_dir_name), 1)
4218feb8efeSArnaldo Carvalho de Melo  CFLAGS += -DHAVE_GET_CURRENT_DIR_NAME
4228feb8efeSArnaldo Carvalho de Meloendif
4238feb8efeSArnaldo Carvalho de Melo
4244541a8bbSArnaldo Carvalho de Meloifeq ($(feature-gettid), 1)
4254541a8bbSArnaldo Carvalho de Melo  CFLAGS += -DHAVE_GETTID
4264541a8bbSArnaldo Carvalho de Meloendif
4274541a8bbSArnaldo Carvalho de Melo
42849f550eaSNamhyung Kimifeq ($(feature-file-handle), 1)
42949f550eaSNamhyung Kim  CFLAGS += -DHAVE_FILE_HANDLE
43049f550eaSNamhyung Kimendif
43149f550eaSNamhyung Kim
4324842576cSJiri Olsaifdef NO_LIBELF
4334842576cSJiri Olsa  NO_DWARF := 1
4344842576cSJiri Olsa  NO_LIBUNWIND := 1
4354842576cSJiri Olsa  NO_LIBDW_DWARF_UNWIND := 1
4364842576cSJiri Olsa  NO_LIBBPF := 1
437e5e992a7SDavid Carrillo-Cisneros  NO_JVMTI := 1
4384842576cSJiri Olsaelse
4394842576cSJiri Olsa  ifeq ($(feature-libelf), 0)
4404842576cSJiri Olsa    ifeq ($(feature-glibc), 1)
4414842576cSJiri Olsa      LIBC_SUPPORT := 1
4424842576cSJiri Olsa    endif
4434842576cSJiri Olsa    ifeq ($(BIONIC),1)
4444842576cSJiri Olsa      LIBC_SUPPORT := 1
4454842576cSJiri Olsa    endif
4464842576cSJiri Olsa    ifeq ($(LIBC_SUPPORT),1)
4478d98ca5cSIan Rogers      msg := $(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.)
4484842576cSJiri Olsa    else
4496a1515c9STiezhu Yang      ifneq ($(filter s% -fsanitize=address%,$(EXTRA_CFLAGS),),)
4506a1515c9STiezhu Yang        ifneq ($(shell ldconfig -p | grep libasan >/dev/null 2>&1; echo $$?), 0)
4516a1515c9STiezhu Yang          msg := $(error No libasan found, please install libasan);
4526a1515c9STiezhu Yang        endif
4536a1515c9STiezhu Yang      endif
4546a1515c9STiezhu Yang
4556a1515c9STiezhu Yang      ifneq ($(filter s% -fsanitize=undefined%,$(EXTRA_CFLAGS),),)
4566a1515c9STiezhu Yang        ifneq ($(shell ldconfig -p | grep libubsan >/dev/null 2>&1; echo $$?), 0)
4576a1515c9STiezhu Yang          msg := $(error No libubsan found, please install libubsan);
4586a1515c9STiezhu Yang        endif
4596a1515c9STiezhu Yang      endif
4606a1515c9STiezhu Yang
4614842576cSJiri Olsa      ifneq ($(filter s% -static%,$(LDFLAGS),),)
4624842576cSJiri Olsa        msg := $(error No static glibc found, please install glibc-static);
4634842576cSJiri Olsa      else
4644842576cSJiri Olsa        msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]);
4654842576cSJiri Olsa      endif
4664842576cSJiri Olsa    endif
4674842576cSJiri Olsa  else
4684842576cSJiri Olsa    ifndef NO_LIBDW_DWARF_UNWIND
4694842576cSJiri Olsa      ifneq ($(feature-libdw-dwarf-unwind),1)
4704842576cSJiri Olsa        NO_LIBDW_DWARF_UNWIND := 1
4714842576cSJiri Olsa        msg := $(warning No libdw DWARF unwind found, Please install elfutils-devel/libdw-dev >= 0.158 and/or set LIBDW_DIR);
4724842576cSJiri Olsa      endif
4734842576cSJiri Olsa    endif
4744842576cSJiri Olsa    ifneq ($(feature-dwarf), 1)
4752484c4c5SDavid Carrillo-Cisneros      ifndef NO_DWARF
4764842576cSJiri Olsa        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);
4774842576cSJiri Olsa        NO_DWARF := 1
4782484c4c5SDavid Carrillo-Cisneros      endif
4794842576cSJiri Olsa    else
4804842576cSJiri Olsa      ifneq ($(feature-dwarf_getlocations), 1)
4814842576cSJiri Olsa        msg := $(warning Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157);
4824842576cSJiri Olsa      else
483a36ebe4eSJin Yao        CFLAGS += -DHAVE_DWARF_GETLOCATIONS_SUPPORT
4844842576cSJiri Olsa      endif # dwarf_getlocations
4854842576cSJiri Olsa    endif # Dwarf support
4864842576cSJiri Olsa  endif # libelf support
4874842576cSJiri Olsaendif # NO_LIBELF
4884842576cSJiri Olsa
4892a07d814SAlexey Budankovifeq ($(feature-libaio), 1)
4902a07d814SAlexey Budankov  ifndef NO_AIO
4912a07d814SAlexey Budankov    CFLAGS += -DHAVE_AIO_SUPPORT
4922a07d814SAlexey Budankov  endif
4932a07d814SAlexey Budankovendif
4942a07d814SAlexey Budankov
4954842576cSJiri Olsaifdef NO_DWARF
4964842576cSJiri Olsa  NO_LIBDW_DWARF_UNWIND := 1
4974842576cSJiri Olsaendif
4984842576cSJiri Olsa
4999e03608eSArnaldo Carvalho de Meloifeq ($(feature-scandirat), 1)
5009e03608eSArnaldo Carvalho de Melo  CFLAGS += -DHAVE_SCANDIRAT_SUPPORT
5019e03608eSArnaldo Carvalho de Meloendif
5029e03608eSArnaldo Carvalho de Melo
503120010cbSArnaldo Carvalho de Meloifeq ($(feature-sched_getcpu), 1)
504120010cbSArnaldo Carvalho de Melo  CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORT
505120010cbSArnaldo Carvalho de Meloendif
506120010cbSArnaldo Carvalho de Melo
50786bcdb5aSArnaldo Carvalho de Meloifeq ($(feature-setns), 1)
50886bcdb5aSArnaldo Carvalho de Melo  CFLAGS += -DHAVE_SETNS_SUPPORT
50986bcdb5aSArnaldo Carvalho de Melo  $(call detected,CONFIG_SETNS)
51086bcdb5aSArnaldo Carvalho de Meloendif
51186bcdb5aSArnaldo Carvalho de Melo
5121c3b28fdSArnaldo Carvalho de Meloifdef CORESIGHT
5131c3b28fdSArnaldo Carvalho de Melo  $(call feature_check,libopencsd)
514aa6292f4SMathieu Poirier  ifeq ($(feature-libopencsd), 1)
515aa6292f4SMathieu Poirier    CFLAGS += -DHAVE_CSTRACE_SUPPORT $(LIBOPENCSD_CFLAGS)
516c152d4d4SMathieu Poirier    ifeq ($(feature-reallocarray), 0)
517c152d4d4SMathieu Poirier      CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
518c152d4d4SMathieu Poirier    endif
519aa6292f4SMathieu Poirier    LDFLAGS += $(LIBOPENCSD_LDFLAGS)
520aa6292f4SMathieu Poirier    EXTLIBS += $(OPENCSDLIBS)
521aa6292f4SMathieu Poirier    $(call detected,CONFIG_LIBOPENCSD)
522aa6292f4SMathieu Poirier    ifdef CSTRACE_RAW
523aa6292f4SMathieu Poirier      CFLAGS += -DCS_DEBUG_RAW
524aa6292f4SMathieu Poirier      ifeq (${CSTRACE_RAW}, packed)
525aa6292f4SMathieu Poirier        CFLAGS += -DCS_RAW_PACKED
526aa6292f4SMathieu Poirier      endif
527aa6292f4SMathieu Poirier    endif
52871f7f897SLeo Yan  else
52971f7f897SLeo Yan    dummy := $(error Error: No libopencsd library found or the version is not up-to-date. Please install recent libopencsd to build with CORESIGHT=1)
530aa6292f4SMathieu Poirier  endif
531aa6292f4SMathieu Poirierendif
532aa6292f4SMathieu Poirier
5334842576cSJiri Olsaifndef NO_LIBELF
5344842576cSJiri Olsa  CFLAGS += -DHAVE_LIBELF_SUPPORT
5354842576cSJiri Olsa  EXTLIBS += -lelf
5364842576cSJiri Olsa  $(call detected,CONFIG_LIBELF)
5374842576cSJiri Olsa
5384842576cSJiri Olsa  ifeq ($(feature-libelf-getphdrnum), 1)
5394842576cSJiri Olsa    CFLAGS += -DHAVE_ELF_GETPHDRNUM_SUPPORT
5404842576cSJiri Olsa  endif
5414842576cSJiri Olsa
5424842576cSJiri Olsa  ifeq ($(feature-libelf-gelf_getnote), 1)
5434842576cSJiri Olsa    CFLAGS += -DHAVE_GELF_GETNOTE_SUPPORT
5444842576cSJiri Olsa  else
5454842576cSJiri Olsa    msg := $(warning gelf_getnote() not found on libelf, SDT support disabled);
5464842576cSJiri Olsa  endif
5474842576cSJiri Olsa
5484842576cSJiri Olsa  ifeq ($(feature-libelf-getshdrstrndx), 1)
5494842576cSJiri Olsa    CFLAGS += -DHAVE_ELF_GETSHDRSTRNDX_SUPPORT
5504842576cSJiri Olsa  endif
5514842576cSJiri Olsa
552c7a14fdcSFrank Ch. Eigler  ifndef NO_LIBDEBUGINFOD
553c7a14fdcSFrank Ch. Eigler    $(call feature_check,libdebuginfod)
554c7a14fdcSFrank Ch. Eigler    ifeq ($(feature-libdebuginfod), 1)
555c7a14fdcSFrank Ch. Eigler      CFLAGS += -DHAVE_DEBUGINFOD_SUPPORT
556c7a14fdcSFrank Ch. Eigler      EXTLIBS += -ldebuginfod
557c7a14fdcSFrank Ch. Eigler    endif
558c7a14fdcSFrank Ch. Eigler  endif
559c7a14fdcSFrank Ch. Eigler
5604842576cSJiri Olsa  ifndef NO_DWARF
5614842576cSJiri Olsa    ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
5627a759cd8SJiada Wang      msg := $(warning DWARF register mappings have not been defined for architecture $(SRCARCH), DWARF support disabled);
5634842576cSJiri Olsa      NO_DWARF := 1
5644842576cSJiri Olsa    else
5654842576cSJiri Olsa      CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
5664842576cSJiri Olsa      LDFLAGS += $(LIBDW_LDFLAGS)
5674842576cSJiri Olsa      EXTLIBS += ${DWARFLIBS}
5684842576cSJiri Olsa      $(call detected,CONFIG_DWARF)
5694842576cSJiri Olsa    endif # PERF_HAVE_DWARF_REGS
5704842576cSJiri Olsa  endif # NO_DWARF
5714842576cSJiri Olsa
5724842576cSJiri Olsa  ifndef NO_LIBBPF
5734842576cSJiri Olsa    ifeq ($(feature-bpf), 1)
5744842576cSJiri Olsa      CFLAGS += -DHAVE_LIBBPF_SUPPORT
5754842576cSJiri Olsa      $(call detected,CONFIG_LIBBPF)
5767b65e203SJiri Olsa
5777b65e203SJiri Olsa      # detecting libbpf without LIBBPF_DYNAMIC, so make VF=1 shows libbpf detection status
5787b65e203SJiri Olsa      $(call feature_check,libbpf)
57976a97cf2SIan Rogers
5807b65e203SJiri Olsa      ifdef LIBBPF_DYNAMIC
5817b65e203SJiri Olsa        ifeq ($(feature-libbpf), 1)
5827b65e203SJiri Olsa          EXTLIBS += -lbpf
583ad1237c3SJiri Olsa          $(call detected,CONFIG_LIBBPF_DYNAMIC)
58414292a4aSArnaldo Carvalho de Melo        else
58576a97cf2SIan Rogers          dummy := $(error Error: No libbpf devel library found or older than v1.0, please install/update libbpf-devel);
5867b65e203SJiri Olsa        endif
5870ae065a5SArnaldo Carvalho de Melo      else
588f00eccb4SIan Rogers        # Libbpf will be built as a static library from tools/lib/bpf.
589f00eccb4SIan Rogers	LIBBPF_STATIC := 1
5907b65e203SJiri Olsa      endif
5914842576cSJiri Olsa    endif
5924842576cSJiri Olsa  endif # NO_LIBBPF
5934842576cSJiri Olsaendif # NO_LIBELF
5944842576cSJiri Olsa
5954842576cSJiri Olsaifndef NO_SDT
5964842576cSJiri Olsa  ifneq ($(feature-sdt), 1)
5974842576cSJiri Olsa    msg := $(warning No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev);
5984842576cSJiri Olsa    NO_SDT := 1;
5994842576cSJiri Olsa  else
6004842576cSJiri Olsa    CFLAGS += -DHAVE_SDT_EVENT
6014842576cSJiri Olsa    $(call detected,CONFIG_SDT_EVENT)
6024842576cSJiri Olsa  endif
6034842576cSJiri Olsaendif
6044842576cSJiri Olsa
6054842576cSJiri Olsaifdef PERF_HAVE_JITDUMP
606621cb4e7SMaciej Debski  ifndef NO_LIBELF
6074842576cSJiri Olsa    $(call detected,CONFIG_JITDUMP)
6084842576cSJiri Olsa    CFLAGS += -DHAVE_JITDUMP
6094842576cSJiri Olsa  endif
6104842576cSJiri Olsaendif
6114842576cSJiri Olsa
6127a759cd8SJiada Wangifeq ($(SRCARCH),powerpc)
6134842576cSJiri Olsa  ifndef NO_DWARF
6144842576cSJiri Olsa    CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
6154842576cSJiri Olsa  endif
6164842576cSJiri Olsaendif
6174842576cSJiri Olsa
6184842576cSJiri Olsaifndef NO_LIBUNWIND
6194842576cSJiri Olsa  have_libunwind :=
6204842576cSJiri Olsa
6215c4d7c82SArnaldo Carvalho de Melo  $(call feature_check,libunwind-x86)
6224842576cSJiri Olsa  ifeq ($(feature-libunwind-x86), 1)
6234842576cSJiri Olsa    $(call detected,CONFIG_LIBUNWIND_X86)
6244842576cSJiri Olsa    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
6254842576cSJiri Olsa    LDFLAGS += -lunwind-x86
6264842576cSJiri Olsa    EXTLIBS_LIBUNWIND += -lunwind-x86
6274842576cSJiri Olsa    have_libunwind = 1
6284842576cSJiri Olsa  endif
6294842576cSJiri Olsa
6305c4d7c82SArnaldo Carvalho de Melo  $(call feature_check,libunwind-aarch64)
6314842576cSJiri Olsa  ifeq ($(feature-libunwind-aarch64), 1)
6324842576cSJiri Olsa    $(call detected,CONFIG_LIBUNWIND_AARCH64)
6334842576cSJiri Olsa    CFLAGS += -DHAVE_LIBUNWIND_AARCH64_SUPPORT
6344842576cSJiri Olsa    LDFLAGS += -lunwind-aarch64
6354842576cSJiri Olsa    EXTLIBS_LIBUNWIND += -lunwind-aarch64
6364842576cSJiri Olsa    have_libunwind = 1
6374842576cSJiri Olsa    $(call feature_check,libunwind-debug-frame-aarch64)
6384842576cSJiri Olsa    ifneq ($(feature-libunwind-debug-frame-aarch64), 1)
6394842576cSJiri Olsa      msg := $(warning No debug_frame support found in libunwind-aarch64);
6404842576cSJiri Olsa      CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME_AARCH64
6414842576cSJiri Olsa    endif
6424842576cSJiri Olsa  endif
6434842576cSJiri Olsa
6444842576cSJiri Olsa  ifneq ($(feature-libunwind), 1)
6454842576cSJiri Olsa    msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
6464842576cSJiri Olsa    NO_LOCAL_LIBUNWIND := 1
6474842576cSJiri Olsa  else
6484842576cSJiri Olsa    have_libunwind := 1
6494842576cSJiri Olsa    $(call detected,CONFIG_LOCAL_LIBUNWIND)
6504842576cSJiri Olsa  endif
6514842576cSJiri Olsa
6524842576cSJiri Olsa  ifneq ($(have_libunwind), 1)
6534842576cSJiri Olsa    NO_LIBUNWIND := 1
6544842576cSJiri Olsa  endif
6554842576cSJiri Olsaelse
6564842576cSJiri Olsa  NO_LOCAL_LIBUNWIND := 1
6574842576cSJiri Olsaendif
6584842576cSJiri Olsa
6594842576cSJiri Olsaifndef NO_LIBBPF
6604842576cSJiri Olsa  ifneq ($(feature-bpf), 1)
6614842576cSJiri Olsa    msg := $(warning BPF API too old. Please install recent kernel headers. BPF support in 'perf record' is disabled.)
6624842576cSJiri Olsa    NO_LIBBPF := 1
6634842576cSJiri Olsa  endif
6644842576cSJiri Olsaendif
6654842576cSJiri Olsa
666fbcdaa19SSong Liuifdef BUILD_BPF_SKEL
667fbcdaa19SSong Liu  $(call feature_check,clang-bpf-co-re)
668fbcdaa19SSong Liu  ifeq ($(feature-clang-bpf-co-re), 0)
669efb0b232SSong Liu    dummy := $(error Error: clang too old/not installed. Please install recent clang to build with BUILD_BPF_SKEL)
670fbcdaa19SSong Liu  endif
671508c9fbcSIan Rogers  ifeq ($(filter -DHAVE_LIBBPF_SUPPORT, $(CFLAGS)),)
672508c9fbcSIan Rogers    dummy := $(error Error: BPF skeleton support requires libbpf)
673508c9fbcSIan Rogers  endif
674fbcdaa19SSong Liu  $(call detected,CONFIG_PERF_BPF_SKEL)
675fbcdaa19SSong Liu  CFLAGS += -DHAVE_BPF_SKEL
676fbcdaa19SSong Liuendif
677fbcdaa19SSong Liu
678b7a2d774SIan Rogersifndef GEN_VMLINUX_H
679b7a2d774SIan Rogers  VMLINUX_H=$(src-perf)/util/bpf_skel/vmlinux/vmlinux.h
680b7a2d774SIan Rogersendif
681b7a2d774SIan Rogers
6824842576cSJiri Olsadwarf-post-unwind := 1
6834842576cSJiri Olsadwarf-post-unwind-text := BUG
6844842576cSJiri Olsa
6854842576cSJiri Olsa# setup DWARF post unwinder
6864842576cSJiri Olsaifdef NO_LIBUNWIND
6874842576cSJiri Olsa  ifdef NO_LIBDW_DWARF_UNWIND
6884842576cSJiri Olsa    msg := $(warning Disabling post unwind, no support found.);
6894842576cSJiri Olsa    dwarf-post-unwind := 0
6904842576cSJiri Olsa  else
6914842576cSJiri Olsa    dwarf-post-unwind-text := libdw
6924842576cSJiri Olsa    $(call detected,CONFIG_LIBDW_DWARF_UNWIND)
6934842576cSJiri Olsa  endif
6944842576cSJiri Olsaelse
6954842576cSJiri Olsa  dwarf-post-unwind-text := libunwind
6964842576cSJiri Olsa  $(call detected,CONFIG_LIBUNWIND)
6974842576cSJiri Olsa  # Enable libunwind support by default.
6984842576cSJiri Olsa  ifndef NO_LIBDW_DWARF_UNWIND
6994842576cSJiri Olsa    NO_LIBDW_DWARF_UNWIND := 1
7004842576cSJiri Olsa  endif
7014842576cSJiri Olsaendif
7024842576cSJiri Olsa
7034842576cSJiri Olsaifeq ($(dwarf-post-unwind),1)
7044842576cSJiri Olsa  CFLAGS += -DHAVE_DWARF_UNWIND_SUPPORT
7054842576cSJiri Olsa  $(call detected,CONFIG_DWARF_UNWIND)
7064842576cSJiri Olsaelse
7074842576cSJiri Olsa  NO_DWARF_UNWIND := 1
7084842576cSJiri Olsaendif
7094842576cSJiri Olsa
7104842576cSJiri Olsaifndef NO_LOCAL_LIBUNWIND
7117a759cd8SJiada Wang  ifeq ($(SRCARCH),$(filter $(SRCARCH),arm arm64))
7124842576cSJiri Olsa    $(call feature_check,libunwind-debug-frame)
7134842576cSJiri Olsa    ifneq ($(feature-libunwind-debug-frame), 1)
7144842576cSJiri Olsa      msg := $(warning No debug_frame support found in libunwind);
7154842576cSJiri Olsa      CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
7164842576cSJiri Olsa    endif
7174842576cSJiri Olsa  else
7184842576cSJiri Olsa    # non-ARM has no dwarf_find_debug_frame() function:
7194842576cSJiri Olsa    CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
7204842576cSJiri Olsa  endif
7214842576cSJiri Olsa  EXTLIBS += $(LIBUNWIND_LIBS)
7224842576cSJiri Olsa  LDFLAGS += $(LIBUNWIND_LIBS)
7234842576cSJiri Olsaendif
72460913e00SKonstantin Khlebnikovifeq ($(findstring -static,${LDFLAGS}),-static)
72560913e00SKonstantin Khlebnikov  # gcc -static links libgcc_eh which contans piece of libunwind
72660913e00SKonstantin Khlebnikov  LIBUNWIND_LDFLAGS += -Wl,--allow-multiple-definition
72760913e00SKonstantin Khlebnikovendif
7284842576cSJiri Olsa
7294842576cSJiri Olsaifndef NO_LIBUNWIND
7304842576cSJiri Olsa  CFLAGS  += -DHAVE_LIBUNWIND_SUPPORT
7314842576cSJiri Olsa  CFLAGS  += $(LIBUNWIND_CFLAGS)
7324842576cSJiri Olsa  LDFLAGS += $(LIBUNWIND_LDFLAGS)
7334842576cSJiri Olsa  EXTLIBS += $(EXTLIBS_LIBUNWIND)
7344842576cSJiri Olsaendif
7354842576cSJiri Olsa
736378ef0f5SIan Rogersifneq ($(NO_LIBTRACEEVENT),1)
737b3fa3896SHendrik Brueckner  ifeq ($(NO_SYSCALL_TABLE),0)
738b3fa3896SHendrik Brueckner    $(call detected,CONFIG_TRACE)
739b3fa3896SHendrik Brueckner  else
7404842576cSJiri Olsa    ifndef NO_LIBAUDIT
741a88f70deSArnaldo Carvalho de Melo      $(call feature_check,libaudit)
7424842576cSJiri Olsa      ifneq ($(feature-libaudit), 1)
7434842576cSJiri Olsa        msg := $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev);
7444842576cSJiri Olsa        NO_LIBAUDIT := 1
7454842576cSJiri Olsa      else
7464842576cSJiri Olsa        CFLAGS += -DHAVE_LIBAUDIT_SUPPORT
7474842576cSJiri Olsa        EXTLIBS += -laudit
748b3fa3896SHendrik Brueckner        $(call detected,CONFIG_TRACE)
749b3fa3896SHendrik Brueckner      endif
7504842576cSJiri Olsa    endif
7514842576cSJiri Olsa  endif
752378ef0f5SIan Rogersendif
7534842576cSJiri Olsa
7544842576cSJiri Olsaifndef NO_LIBCRYPTO
7554842576cSJiri Olsa  ifneq ($(feature-libcrypto), 1)
75654fceb0bSArnaldo Carvalho de Melo    msg := $(warning No libcrypto.h found, disables jitted code injection, please install openssl-devel or libssl-dev);
7574842576cSJiri Olsa    NO_LIBCRYPTO := 1
7584842576cSJiri Olsa  else
7594842576cSJiri Olsa    CFLAGS += -DHAVE_LIBCRYPTO_SUPPORT
7604842576cSJiri Olsa    EXTLIBS += -lcrypto
7614842576cSJiri Olsa    $(call detected,CONFIG_CRYPTO)
7624842576cSJiri Olsa  endif
7634842576cSJiri Olsaendif
7644842576cSJiri Olsa
7654842576cSJiri Olsaifndef NO_SLANG
7664842576cSJiri Olsa  ifneq ($(feature-libslang), 1)
76778d6ccceSArnaldo Carvalho de Melo    ifneq ($(feature-libslang-include-subdir), 1)
7684842576cSJiri Olsa      msg := $(warning slang not found, disables TUI support. Please install slang-devel, libslang-dev or libslang2-dev);
7694842576cSJiri Olsa      NO_SLANG := 1
7704842576cSJiri Olsa    else
77178d6ccceSArnaldo Carvalho de Melo      CFLAGS += -DHAVE_SLANG_INCLUDE_SUBDIR
77278d6ccceSArnaldo Carvalho de Melo    endif
77378d6ccceSArnaldo Carvalho de Melo  endif
77478d6ccceSArnaldo Carvalho de Melo  ifndef NO_SLANG
7754842576cSJiri Olsa    # Fedora has /usr/include/slang/slang.h, but ubuntu /usr/include/slang.h
7764842576cSJiri Olsa    CFLAGS += -DHAVE_SLANG_SUPPORT
7774842576cSJiri Olsa    EXTLIBS += -lslang
7784842576cSJiri Olsa    $(call detected,CONFIG_SLANG)
7794842576cSJiri Olsa  endif
7804842576cSJiri Olsaendif
7814842576cSJiri Olsa
7824751bdddSArnaldo Carvalho de Meloifdef GTK2
7834842576cSJiri Olsa  FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)
7844751bdddSArnaldo Carvalho de Melo  $(call feature_check,gtk2)
7854842576cSJiri Olsa  ifneq ($(feature-gtk2), 1)
7864842576cSJiri Olsa    msg := $(warning GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev);
7874842576cSJiri Olsa    NO_GTK2 := 1
7884842576cSJiri Olsa  else
7894751bdddSArnaldo Carvalho de Melo    $(call feature_check,gtk2-infobar)
7904842576cSJiri Olsa    ifeq ($(feature-gtk2-infobar), 1)
7914842576cSJiri Olsa      GTK_CFLAGS := -DHAVE_GTK_INFO_BAR_SUPPORT
7924842576cSJiri Olsa    endif
7934842576cSJiri Olsa    CFLAGS += -DHAVE_GTK2_SUPPORT
7944842576cSJiri Olsa    GTK_CFLAGS += $(shell $(PKG_CONFIG) --cflags gtk+-2.0 2>/dev/null)
7954842576cSJiri Olsa    GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-2.0 2>/dev/null)
7964842576cSJiri Olsa    EXTLIBS += -ldl
7974842576cSJiri Olsa  endif
7984842576cSJiri Olsaendif
7994842576cSJiri Olsa
8004842576cSJiri Olsaifdef NO_LIBPERL
8014842576cSJiri Olsa  CFLAGS += -DNO_LIBPERL
8024842576cSJiri Olsaelse
8034842576cSJiri Olsa  PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
8044842576cSJiri Olsa  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
8054842576cSJiri Olsa  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
80686f5fe01SJiri Olsa  PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
807c6707fdeSJiri Olsa  PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
808b773ea65SJustin M. Forbes  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
809c6707fdeSJiri Olsa  PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
8104842576cSJiri Olsa  FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
8114842576cSJiri Olsa
8124842576cSJiri Olsa  ifneq ($(feature-libperl), 1)
8134842576cSJiri Olsa    CFLAGS += -DNO_LIBPERL
8144842576cSJiri Olsa    NO_LIBPERL := 1
8154842576cSJiri Olsa    msg := $(warning Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev);
8164842576cSJiri Olsa  else
8174842576cSJiri Olsa    LDFLAGS += $(PERL_EMBED_LDFLAGS)
8184842576cSJiri Olsa    EXTLIBS += $(PERL_EMBED_LIBADD)
8198e2c241fSJin Yao    CFLAGS += -DHAVE_LIBPERL_SUPPORT
82041caff45SArnaldo Carvalho de Melo    ifeq ($(CC_NO_CLANG), 0)
82141caff45SArnaldo Carvalho de Melo      CFLAGS += -Wno-compound-token-split-by-macro
82241caff45SArnaldo Carvalho de Melo    endif
8234842576cSJiri Olsa    $(call detected,CONFIG_LIBPERL)
8244842576cSJiri Olsa  endif
8254842576cSJiri Olsaendif
8264842576cSJiri Olsa
8274842576cSJiri Olsaifeq ($(feature-timerfd), 1)
8284842576cSJiri Olsa  CFLAGS += -DHAVE_TIMERFD_SUPPORT
8294842576cSJiri Olsaelse
8304842576cSJiri Olsa  msg := $(warning No timerfd support. Disables 'perf kvm stat live');
8314842576cSJiri Olsaendif
8324842576cSJiri Olsa
8334842576cSJiri Olsadisable-python = $(eval $(disable-python_code))
8344842576cSJiri Olsadefine disable-python_code
8354842576cSJiri Olsa  CFLAGS += -DNO_LIBPYTHON
8364842576cSJiri Olsa  $(warning $1)
8374842576cSJiri Olsa  NO_LIBPYTHON := 1
8384842576cSJiri Olsaendef
8394842576cSJiri Olsa
840caec5470SIan RogersPYTHON_EXTENSION_SUFFIX := '.so'
8414842576cSJiri Olsaifdef NO_LIBPYTHON
8424842576cSJiri Olsa  $(call disable-python,Python support disabled by user)
8434842576cSJiri Olsaelse
8444842576cSJiri Olsa
8454842576cSJiri Olsa  ifndef PYTHON
8464842576cSJiri Olsa    $(call disable-python,No python interpreter was found: disables Python support - please install python-devel/python-dev)
8474842576cSJiri Olsa  else
8484842576cSJiri Olsa    PYTHON_WORD := $(call shell-wordify,$(PYTHON))
8494842576cSJiri Olsa
8504842576cSJiri Olsa    ifndef PYTHON_CONFIG
8514842576cSJiri Olsa      $(call disable-python,No 'python-config' tool was found: disables Python support - please install python-devel/python-dev)
8524842576cSJiri Olsa    else
8534842576cSJiri Olsa
8544842576cSJiri Olsa      ifneq ($(feature-libpython), 1)
855c3c2e8ebSArnaldo Carvalho de Melo        $(call disable-python,No 'Python.h' was found: disables Python support - please install python-devel/python-dev)
8564842576cSJiri Olsa      else
8574842576cSJiri Olsa         LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
8584842576cSJiri Olsa         EXTLIBS += $(PYTHON_EMBED_LIBADD)
85966dfc517SArnaldo Carvalho de Melo         PYTHON_SETUPTOOLS_INSTALLED := $(shell $(PYTHON) -c 'import setuptools;' 2> /dev/null && echo "yes" || echo "no")
86066dfc517SArnaldo Carvalho de Melo         ifeq ($(PYTHON_SETUPTOOLS_INSTALLED), yes)
861caec5470SIan Rogers           PYTHON_EXTENSION_SUFFIX := $(shell $(PYTHON) -c 'from importlib import machinery; print(machinery.EXTENSION_SUFFIXES[0])')
862caec5470SIan Rogers           LANG_BINDINGS += $(obj-perf)python/perf$(PYTHON_EXTENSION_SUFFIX)
86366dfc517SArnaldo Carvalho de Melo	 else
86466dfc517SArnaldo Carvalho de Melo           msg := $(warning Missing python setuptools, the python binding won't be built, please install python3-setuptools or equivalent);
86566dfc517SArnaldo Carvalho de Melo         endif
8668e2c241fSJin Yao         CFLAGS += -DHAVE_LIBPYTHON_SUPPORT
8674842576cSJiri Olsa         $(call detected,CONFIG_LIBPYTHON)
8684842576cSJiri Olsa      endif
8694842576cSJiri Olsa    endif
8704842576cSJiri Olsa  endif
8714842576cSJiri Olsaendif
8724842576cSJiri Olsa
87300facc76SIan Rogersifneq ($(NO_JEVENTS),1)
87400facc76SIan Rogers  ifeq ($(wildcard pmu-events/arch/$(SRCARCH)/mapfile.csv),)
87500facc76SIan Rogers    NO_JEVENTS := 1
87600facc76SIan Rogers  endif
87700facc76SIan Rogersendif
87800facc76SIan Rogersifneq ($(NO_JEVENTS),1)
87900facc76SIan Rogers  NO_JEVENTS := 0
88000facc76SIan Rogers  ifndef PYTHON
881175f9315SIan Rogers    $(error ERROR: No python interpreter needed for jevents generation. Install python or build with NO_JEVENTS=1.)
88200facc76SIan Rogers  else
88300facc76SIan Rogers    # jevents.py uses f-strings present in Python 3.6 released in Dec. 2016.
88400facc76SIan Rogers    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)
88500facc76SIan Rogers    ifneq ($(JEVENTS_PYTHON_GOOD), 1)
886175f9315SIan Rogers      $(error ERROR: Python interpreter needed for jevents generation too old (older than 3.6). Install a newer python or build with NO_JEVENTS=1.)
88700facc76SIan Rogers    endif
88800facc76SIan Rogers  endif
88900facc76SIan Rogersendif
8900d1c50acSIan Rogers
891dd317df0SIan Rogersifdef BUILD_NONDISTRO
8924842576cSJiri Olsa  ifeq ($(feature-libbfd), 1)
89331be9478SSong Liu    EXTLIBS += -lbfd -lopcodes
89414541b1eSStanislav Fomichev  else
89514541b1eSStanislav Fomichev    # we are on a system that requires -liberty and (maybe) -lz
89614541b1eSStanislav Fomichev    # to link against -lbfd; test each case individually here
8974842576cSJiri Olsa
8984842576cSJiri Olsa    # call all detections now so we get correct
8994842576cSJiri Olsa    # status in VF output
90014541b1eSStanislav Fomichev    $(call feature_check,libbfd-liberty)
90114541b1eSStanislav Fomichev    $(call feature_check,libbfd-liberty-z)
9024842576cSJiri Olsa
90314541b1eSStanislav Fomichev    ifeq ($(feature-libbfd-liberty), 1)
90431be9478SSong Liu      EXTLIBS += -lbfd -lopcodes -liberty
905ad5f604eSNamhyung Kim      FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -ldl
906ad5f604eSNamhyung Kim      FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -ldl
9074842576cSJiri Olsa    else
90814541b1eSStanislav Fomichev      ifeq ($(feature-libbfd-liberty-z), 1)
90931be9478SSong Liu        EXTLIBS += -lbfd -lopcodes -liberty -lz
910ad5f604eSNamhyung Kim        FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -lz -ldl
911ad5f604eSNamhyung Kim        FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -lz -ldl
9124842576cSJiri Olsa      endif
9134842576cSJiri Olsa    endif
9148a1b1718SSong Liu    $(call feature_check,disassembler-four-args)
91583aa0120SAndres Freund    $(call feature_check,disassembler-init-styled)
9164842576cSJiri Olsa  endif
9174842576cSJiri Olsa
918dd317df0SIan Rogers  CFLAGS += -DHAVE_LIBBFD_SUPPORT
9193b4e4efeSIan Rogers  CXXFLAGS += -DHAVE_LIBBFD_SUPPORT
920e71e19a9SArnaldo Carvalho de Melo  ifeq ($(feature-libbfd-buildid), 1)
921e71e19a9SArnaldo Carvalho de Melo    CFLAGS += -DHAVE_LIBBFD_BUILDID_SUPPORT
922e71e19a9SArnaldo Carvalho de Melo  else
923e71e19a9SArnaldo Carvalho de Melo    msg := $(warning Old version of libbfd/binutils things like PE executable profiling will not be available);
924e71e19a9SArnaldo Carvalho de Melo  endif
9250d1c50acSIan Rogersendif
926e71e19a9SArnaldo Carvalho de Melo
9273b4e4efeSIan Rogersifndef NO_DEMANGLE
9283b4e4efeSIan Rogers  $(call feature_check,cxa-demangle)
9293b4e4efeSIan Rogers  ifeq ($(feature-cxa-demangle), 1)
9303b4e4efeSIan Rogers    EXTLIBS += -lstdc++
9313b4e4efeSIan Rogers    CFLAGS += -DHAVE_CXA_DEMANGLE_SUPPORT
9323b4e4efeSIan Rogers    CXXFLAGS += -DHAVE_CXA_DEMANGLE_SUPPORT
93365cd8e55SIan Rogers    $(call detected,CONFIG_CXX_DEMANGLE)
9343b4e4efeSIan Rogers  endif
935dd317df0SIan Rogers  ifdef BUILD_NONDISTRO
93614541b1eSStanislav Fomichev    ifeq ($(filter -liberty,$(EXTLIBS)),)
93714541b1eSStanislav Fomichev      $(call feature_check,cplus-demangle)
9384842576cSJiri Olsa      ifeq ($(feature-cplus-demangle), 1)
9394842576cSJiri Olsa        EXTLIBS += -liberty
9404842576cSJiri Olsa      endif
9414842576cSJiri Olsa    endif
94214541b1eSStanislav Fomichev    ifneq ($(filter -liberty,$(EXTLIBS)),)
94314541b1eSStanislav Fomichev      CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
9443b4e4efeSIan Rogers      CXXFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
9454842576cSJiri Olsa    endif
9464842576cSJiri Olsa  endif
9474842576cSJiri Olsaendif
9484842576cSJiri Olsa
9494842576cSJiri Olsaifndef NO_ZLIB
9504842576cSJiri Olsa  ifeq ($(feature-zlib), 1)
9514842576cSJiri Olsa    CFLAGS += -DHAVE_ZLIB_SUPPORT
9524842576cSJiri Olsa    EXTLIBS += -lz
9534842576cSJiri Olsa    $(call detected,CONFIG_ZLIB)
9544842576cSJiri Olsa  else
9554842576cSJiri Olsa    NO_ZLIB := 1
9564842576cSJiri Olsa  endif
9574842576cSJiri Olsaendif
9584842576cSJiri Olsa
9594842576cSJiri Olsaifndef NO_LZMA
9604842576cSJiri Olsa  ifeq ($(feature-lzma), 1)
9614842576cSJiri Olsa    CFLAGS += -DHAVE_LZMA_SUPPORT
9624842576cSJiri Olsa    EXTLIBS += -llzma
9634842576cSJiri Olsa    $(call detected,CONFIG_LZMA)
9644842576cSJiri Olsa  else
9654842576cSJiri Olsa    msg := $(warning No liblzma found, disables xz kernel module decompression, please install xz-devel/liblzma-dev);
9664842576cSJiri Olsa    NO_LZMA := 1
9674842576cSJiri Olsa  endif
9684842576cSJiri Olsaendif
9694842576cSJiri Olsa
9703b1c5d96SAlexey Budankovifndef NO_LIBZSTD
9713b1c5d96SAlexey Budankov  ifeq ($(feature-libzstd), 1)
9723b1c5d96SAlexey Budankov    CFLAGS += -DHAVE_ZSTD_SUPPORT
9733b1c5d96SAlexey Budankov    CFLAGS += $(LIBZSTD_CFLAGS)
9743b1c5d96SAlexey Budankov    LDFLAGS += $(LIBZSTD_LDFLAGS)
9753b1c5d96SAlexey Budankov    EXTLIBS += -lzstd
9763b1c5d96SAlexey Budankov    $(call detected,CONFIG_ZSTD)
9773b1c5d96SAlexey Budankov  else
9783b1c5d96SAlexey Budankov    msg := $(warning No libzstd found, disables trace compression, please install libzstd-dev[el] and/or set LIBZSTD_DIR);
9793b1c5d96SAlexey Budankov    NO_LIBZSTD := 1
9803b1c5d96SAlexey Budankov  endif
9813b1c5d96SAlexey Budankovendif
9823b1c5d96SAlexey Budankov
98374d5f3d0SIgor Lubashevifndef NO_LIBCAP
98474d5f3d0SIgor Lubashev  ifeq ($(feature-libcap), 1)
98574d5f3d0SIgor Lubashev    CFLAGS += -DHAVE_LIBCAP_SUPPORT
98674d5f3d0SIgor Lubashev    EXTLIBS += -lcap
98774d5f3d0SIgor Lubashev    $(call detected,CONFIG_LIBCAP)
98874d5f3d0SIgor Lubashev  else
98974d5f3d0SIgor Lubashev    msg := $(warning No libcap found, disables capability support, please install libcap-devel/libcap-dev);
99074d5f3d0SIgor Lubashev    NO_LIBCAP := 1
99174d5f3d0SIgor Lubashev  endif
99274d5f3d0SIgor Lubashevendif
99374d5f3d0SIgor Lubashev
9944842576cSJiri Olsaifndef NO_BACKTRACE
9954842576cSJiri Olsa  ifeq ($(feature-backtrace), 1)
9964842576cSJiri Olsa    CFLAGS += -DHAVE_BACKTRACE_SUPPORT
9974842576cSJiri Olsa  endif
9984842576cSJiri Olsaendif
9994842576cSJiri Olsa
10004842576cSJiri Olsaifndef NO_LIBNUMA
10014842576cSJiri Olsa  ifeq ($(feature-libnuma), 0)
10024842576cSJiri Olsa    msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev);
10034842576cSJiri Olsa    NO_LIBNUMA := 1
10044842576cSJiri Olsa  else
10054842576cSJiri Olsa    ifeq ($(feature-numa_num_possible_cpus), 0)
10064842576cSJiri Olsa      msg := $(warning Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8);
10074842576cSJiri Olsa      NO_LIBNUMA := 1
10084842576cSJiri Olsa    else
10094842576cSJiri Olsa      CFLAGS += -DHAVE_LIBNUMA_SUPPORT
10104842576cSJiri Olsa      EXTLIBS += -lnuma
10114842576cSJiri Olsa      $(call detected,CONFIG_NUMA)
10124842576cSJiri Olsa    endif
10134842576cSJiri Olsa  endif
10144842576cSJiri Olsaendif
10154842576cSJiri Olsa
10164842576cSJiri Olsaifdef HAVE_KVM_STAT_SUPPORT
10174842576cSJiri Olsa    CFLAGS += -DHAVE_KVM_STAT_SUPPORT
10184842576cSJiri Olsaendif
10194842576cSJiri Olsa
10208a1b1718SSong Liuifeq ($(feature-disassembler-four-args), 1)
10218a1b1718SSong Liu    CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
10228a1b1718SSong Liuendif
10238a1b1718SSong Liu
102483aa0120SAndres Freundifeq ($(feature-disassembler-init-styled), 1)
102583aa0120SAndres Freund    CFLAGS += -DDISASM_INIT_STYLED
102683aa0120SAndres Freundendif
102783aa0120SAndres Freund
10284842576cSJiri Olsaifeq (${IS_64_BIT}, 1)
10294842576cSJiri Olsa  ifndef NO_PERF_READ_VDSO32
10304842576cSJiri Olsa    $(call feature_check,compile-32)
10314842576cSJiri Olsa    ifeq ($(feature-compile-32), 1)
10324842576cSJiri Olsa      CFLAGS += -DHAVE_PERF_READ_VDSO32
10334842576cSJiri Olsa    else
10344842576cSJiri Olsa      NO_PERF_READ_VDSO32 := 1
10354842576cSJiri Olsa    endif
10364842576cSJiri Olsa  endif
10377a759cd8SJiada Wang  ifneq ($(SRCARCH), x86)
10384842576cSJiri Olsa    NO_PERF_READ_VDSOX32 := 1
10394842576cSJiri Olsa  endif
10404842576cSJiri Olsa  ifndef NO_PERF_READ_VDSOX32
10414842576cSJiri Olsa    $(call feature_check,compile-x32)
10424842576cSJiri Olsa    ifeq ($(feature-compile-x32), 1)
10434842576cSJiri Olsa      CFLAGS += -DHAVE_PERF_READ_VDSOX32
10444842576cSJiri Olsa    else
10454842576cSJiri Olsa      NO_PERF_READ_VDSOX32 := 1
10464842576cSJiri Olsa    endif
10474842576cSJiri Olsa  endif
10484842576cSJiri Olsaelse
10494842576cSJiri Olsa  NO_PERF_READ_VDSO32 := 1
10504842576cSJiri Olsa  NO_PERF_READ_VDSOX32 := 1
10514842576cSJiri Olsaendif
10524842576cSJiri Olsa
105324787afbSJiri Olsaifndef NO_LIBBABELTRACE
10544842576cSJiri Olsa  $(call feature_check,libbabeltrace)
10554842576cSJiri Olsa  ifeq ($(feature-libbabeltrace), 1)
10564842576cSJiri Olsa    CFLAGS += -DHAVE_LIBBABELTRACE_SUPPORT $(LIBBABELTRACE_CFLAGS)
10574842576cSJiri Olsa    LDFLAGS += $(LIBBABELTRACE_LDFLAGS)
10584842576cSJiri Olsa    EXTLIBS += -lbabeltrace-ctf
10594842576cSJiri Olsa    $(call detected,CONFIG_LIBBABELTRACE)
10604842576cSJiri Olsa  else
10614842576cSJiri Olsa    msg := $(warning No libbabeltrace found, disables 'perf data' CTF format support, please install libbabeltrace-dev[el]/libbabeltrace-ctf-dev);
10624842576cSJiri Olsa  endif
10634842576cSJiri Olsaendif
10644842576cSJiri Olsa
10654842576cSJiri Olsaifndef NO_AUXTRACE
10667a759cd8SJiada Wang  ifeq ($(SRCARCH),x86)
10674842576cSJiri Olsa    ifeq ($(feature-get_cpuid), 0)
10684842576cSJiri Olsa      msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc);
10694842576cSJiri Olsa      NO_AUXTRACE := 1
107008d5204aSMathieu Poirier    endif
107108d5204aSMathieu Poirier  endif
107208d5204aSMathieu Poirier  ifndef NO_AUXTRACE
10734842576cSJiri Olsa    $(call detected,CONFIG_AUXTRACE)
10744842576cSJiri Olsa    CFLAGS += -DHAVE_AUXTRACE_SUPPORT
107570f9c9b2SArnaldo Carvalho de Melo    ifeq ($(feature-reallocarray), 0)
107670f9c9b2SArnaldo Carvalho de Melo      CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
107770f9c9b2SArnaldo Carvalho de Melo    endif
10784842576cSJiri Olsa  endif
10794842576cSJiri Olsaendif
10804842576cSJiri Olsa
1081d436373aSAdrian Hunterifdef EXTRA_TESTS
1082d436373aSAdrian Hunter    $(call detected,CONFIG_EXTRA_TESTS)
1083d436373aSAdrian Hunter    CFLAGS += -DHAVE_EXTRA_TESTS
1084d436373aSAdrian Hunterendif
1085d436373aSAdrian Hunter
1086d4dfdf00SJiri Olsaifndef NO_JVMTI
1087d4dfdf00SJiri Olsa  ifneq (,$(wildcard /usr/sbin/update-java-alternatives))
1088d4dfdf00SJiri Olsa    JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}')
1089d4dfdf00SJiri Olsa  else
1090d4dfdf00SJiri Olsa    ifneq (,$(wildcard /usr/sbin/alternatives))
1091815c1560SThomas Richter      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')
1092d4dfdf00SJiri Olsa    endif
1093d4dfdf00SJiri Olsa  endif
1094d4dfdf00SJiri Olsa  ifndef JDIR
1095d4dfdf00SJiri Olsa    $(warning No alternatives command found, you need to set JDIR= to point to the root of your Java directory)
1096d4dfdf00SJiri Olsa    NO_JVMTI := 1
1097d4dfdf00SJiri Olsa  endif
1098d4dfdf00SJiri Olsaendif
1099d4dfdf00SJiri Olsa
1100d4dfdf00SJiri Olsaifndef NO_JVMTI
1101d4dfdf00SJiri Olsa  FEATURE_CHECK_CFLAGS-jvmti := -I$(JDIR)/include -I$(JDIR)/include/linux
1102d4dfdf00SJiri Olsa  $(call feature_check,jvmti)
1103d4dfdf00SJiri Olsa  ifeq ($(feature-jvmti), 1)
1104d4dfdf00SJiri Olsa    $(call detected_var,JDIR)
1105dd1d0044SJiri Olsa    ifndef NO_JVMTI_CMLR
1106dd1d0044SJiri Olsa      FEATURE_CHECK_CFLAGS-jvmti-cmlr := $(FEATURE_CHECK_CFLAGS-jvmti)
1107dd1d0044SJiri Olsa      $(call feature_check,jvmti-cmlr)
1108dd1d0044SJiri Olsa      ifeq ($(feature-jvmti-cmlr), 1)
1109dd1d0044SJiri Olsa        CFLAGS += -DHAVE_JVMTI_CMLR
1110dd1d0044SJiri Olsa      endif
1111dd1d0044SJiri Olsa    endif # NO_JVMTI_CMLR
1112d4dfdf00SJiri Olsa  else
1113e14b733cSArnaldo Carvalho de Melo    $(warning No openjdk development package found, please install JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel)
1114d4dfdf00SJiri Olsa    NO_JVMTI := 1
1115d4dfdf00SJiri Olsa  endif
1116d4dfdf00SJiri Olsaendif
1117d4dfdf00SJiri Olsa
1118d7c4f89aSIan Rogersifndef NO_LIBPFM4
111970943490SStephane Eranian  $(call feature_check,libpfm4)
112070943490SStephane Eranian  ifeq ($(feature-libpfm4), 1)
112170943490SStephane Eranian    CFLAGS += -DHAVE_LIBPFM
112270943490SStephane Eranian    EXTLIBS += -lpfm
112370943490SStephane Eranian    ASCIIDOC_EXTRA = -aHAVE_LIBPFM=1
112470943490SStephane Eranian    $(call detected,CONFIG_LIBPFM4)
112570943490SStephane Eranian  else
112670943490SStephane Eranian    msg := $(warning libpfm4 not found, disables libpfm4 support. Please install libpfm4-dev);
112770943490SStephane Eranian  endif
112870943490SStephane Eranianendif
112970943490SStephane Eranian
1130378ef0f5SIan Rogers# libtraceevent is a recommended dependency picked up from the system.
1131378ef0f5SIan Rogersifneq ($(NO_LIBTRACEEVENT),1)
113256d32d4cSMichael Petlan  $(call feature_check,libtraceevent)
113356d32d4cSMichael Petlan  ifeq ($(feature-libtraceevent), 1)
1134378ef0f5SIan Rogers    CFLAGS += -DHAVE_LIBTRACEEVENT
113556d32d4cSMichael Petlan    EXTLIBS += -ltraceevent
113656971516SIan Rogers    LIBTRACEEVENT_VERSION := $(shell $(PKG_CONFIG) --modversion libtraceevent)
113756971516SIan Rogers    LIBTRACEEVENT_VERSION_1 := $(word 1, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
113856971516SIan Rogers    LIBTRACEEVENT_VERSION_2 := $(word 2, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
113956971516SIan Rogers    LIBTRACEEVENT_VERSION_3 := $(word 3, $(subst ., ,$(LIBTRACEEVENT_VERSION)))
114056971516SIan Rogers    LIBTRACEEVENT_VERSION_CPP := $(shell expr $(LIBTRACEEVENT_VERSION_1) \* 255 \* 255 + $(LIBTRACEEVENT_VERSION_2) \* 255 + $(LIBTRACEEVENT_VERSION_3))
114156971516SIan Rogers    CFLAGS += -DLIBTRACEEVENT_VERSION=$(LIBTRACEEVENT_VERSION_CPP)
1142378ef0f5SIan Rogers    $(call detected,CONFIG_LIBTRACEEVENT)
114356d32d4cSMichael Petlan  else
11446898e60fSIan Rogers    dummy := $(error ERROR: libtraceevent is missing. Please install libtraceevent-dev/libtraceevent-devel or build with NO_LIBTRACEEVENT=1)
114556d32d4cSMichael Petlan  endif
114656d32d4cSMichael Petlan
1147b758a61bSIan Rogers  $(call feature_check,libtracefs)
1148b758a61bSIan Rogers  ifeq ($(feature-libtracefs), 1)
1149b758a61bSIan Rogers    EXTLIBS += -ltracefs
1150359cad09SIan Rogers    LIBTRACEFS_VERSION := $(shell $(PKG_CONFIG) --modversion libtracefs)
1151359cad09SIan Rogers    LIBTRACEFS_VERSION_1 := $(word 1, $(subst ., ,$(LIBTRACEFS_VERSION)))
1152359cad09SIan Rogers    LIBTRACEFS_VERSION_2 := $(word 2, $(subst ., ,$(LIBTRACEFS_VERSION)))
1153359cad09SIan Rogers    LIBTRACEFS_VERSION_3 := $(word 3, $(subst ., ,$(LIBTRACEFS_VERSION)))
1154359cad09SIan Rogers    LIBTRACEFS_VERSION_CPP := $(shell expr $(LIBTRACEFS_VERSION_1) \* 255 \* 255 + $(LIBTRACEFS_VERSION_2) \* 255 + $(LIBTRACEFS_VERSION_3))
1155359cad09SIan Rogers    CFLAGS += -DLIBTRACEFS_VERSION=$(LIBTRACEFS_VERSION_CPP)
1156b758a61bSIan Rogers  endif
1157b758a61bSIan Rogersendif
1158b758a61bSIan Rogers
11594842576cSJiri Olsa# Among the variables below, these:
11604842576cSJiri Olsa#   perfexecdir
1161b018899eSArnaldo Carvalho de Melo#   libbpf_include_dir
11628f12a2ffSArnaldo Carvalho de Melo#   perf_examples_dir
11634842576cSJiri Olsa#   template_dir
11644842576cSJiri Olsa#   mandir
11654842576cSJiri Olsa#   infodir
11664842576cSJiri Olsa#   htmldir
11674842576cSJiri Olsa#   ETC_PERFCONFIG (but not sysconfdir)
11684842576cSJiri Olsa# can be specified as a relative path some/where/else;
11694842576cSJiri Olsa# this is interpreted as relative to $(prefix) and "perf" at
11704842576cSJiri Olsa# runtime figures out where they are based on the path to the executable.
11714842576cSJiri Olsa# This can help installing the suite in a relocatable way.
11724842576cSJiri Olsa
11734842576cSJiri Olsa# Make the path relative to DESTDIR, not to prefix
11744842576cSJiri Olsaifndef DESTDIR
11754842576cSJiri Olsaprefix ?= $(HOME)
11764842576cSJiri Olsaendif
11774842576cSJiri Olsabindir_relative = bin
11784842576cSJiri Olsabindir = $(abspath $(prefix)/$(bindir_relative))
11790beb2183SAdrian Hunterincludedir_relative = include
11800beb2183SAdrian Hunterincludedir = $(abspath $(prefix)/$(includedir_relative))
11814842576cSJiri Olsamandir = share/man
11824842576cSJiri Olsainfodir = share/info
11834842576cSJiri Olsaperfexecdir = libexec/perf-core
118414e4b9f4SIan Rogers# FIXME: system's libbpf header directory, where we expect to find bpf/bpf_helpers.h, for instance
1185b018899eSArnaldo Carvalho de Melolibbpf_include_dir = /usr/include
118683868bf7SThomas Richterperf_examples_dir = lib/perf/examples
11874842576cSJiri Olsasharedir = $(prefix)/share
11884842576cSJiri Olsatemplate_dir = share/perf-core/templates
11894842576cSJiri OlsaSTRACE_GROUPS_DIR = share/perf-core/strace/groups
11904842576cSJiri Olsahtmldir = share/doc/perf-doc
11914842576cSJiri Olsatipdir = share/doc/perf-tip
11924842576cSJiri Olsasrcdir = $(srctree)/tools/perf
11934842576cSJiri Olsaifeq ($(prefix),/usr)
11944842576cSJiri Olsasysconfdir = /etc
11954842576cSJiri OlsaETC_PERFCONFIG = $(sysconfdir)/perfconfig
11964842576cSJiri Olsaelse
11974842576cSJiri Olsasysconfdir = $(prefix)/etc
11984842576cSJiri OlsaETC_PERFCONFIG = etc/perfconfig
11994842576cSJiri Olsaendif
12004842576cSJiri Olsaifndef lib
12017a759cd8SJiada Wangifeq ($(SRCARCH)$(IS_64_BIT), x861)
12024842576cSJiri Olsalib = lib64
12034842576cSJiri Olsaelse
12044842576cSJiri Olsalib = lib
12054842576cSJiri Olsaendif
12064842576cSJiri Olsaendif # lib
12074842576cSJiri Olsalibdir = $(prefix)/$(lib)
12084842576cSJiri Olsa
12094842576cSJiri Olsa# Shell quote (do not use $(call) to accommodate ancient setups);
12104842576cSJiri OlsaETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
12114842576cSJiri OlsaSTRACE_GROUPS_DIR_SQ = $(subst ','\'',$(STRACE_GROUPS_DIR))
12124842576cSJiri OlsaDESTDIR_SQ = $(subst ','\'',$(DESTDIR))
12134842576cSJiri Olsabindir_SQ = $(subst ','\'',$(bindir))
12140beb2183SAdrian Hunterincludedir_SQ = $(subst ','\'',$(includedir))
12154842576cSJiri Olsamandir_SQ = $(subst ','\'',$(mandir))
12164842576cSJiri Olsainfodir_SQ = $(subst ','\'',$(infodir))
12174842576cSJiri Olsaperfexecdir_SQ = $(subst ','\'',$(perfexecdir))
1218b018899eSArnaldo Carvalho de Melolibbpf_include_dir_SQ = $(subst ','\'',$(libbpf_include_dir))
12198f12a2ffSArnaldo Carvalho de Meloperf_examples_dir_SQ = $(subst ','\'',$(perf_examples_dir))
12204842576cSJiri Olsatemplate_dir_SQ = $(subst ','\'',$(template_dir))
12214842576cSJiri Olsahtmldir_SQ = $(subst ','\'',$(htmldir))
12224842576cSJiri Olsatipdir_SQ = $(subst ','\'',$(tipdir))
12234842576cSJiri Olsaprefix_SQ = $(subst ','\'',$(prefix))
12244842576cSJiri Olsasysconfdir_SQ = $(subst ','\'',$(sysconfdir))
12254842576cSJiri Olsalibdir_SQ = $(subst ','\'',$(libdir))
12264842576cSJiri Olsasrcdir_SQ = $(subst ','\'',$(srcdir))
12274842576cSJiri Olsa
12284842576cSJiri Olsaifneq ($(filter /%,$(firstword $(perfexecdir))),)
12294842576cSJiri Olsaperfexec_instdir = $(perfexecdir)
1230b018899eSArnaldo Carvalho de Meloperf_include_instdir = $(libbpf_include_dir)
12318f12a2ffSArnaldo Carvalho de Meloperf_examples_instdir = $(perf_examples_dir)
12324842576cSJiri OlsaSTRACE_GROUPS_INSTDIR = $(STRACE_GROUPS_DIR)
12334842576cSJiri Olsatip_instdir = $(tipdir)
12344842576cSJiri Olsaelse
12354842576cSJiri Olsaperfexec_instdir = $(prefix)/$(perfexecdir)
1236b018899eSArnaldo Carvalho de Meloperf_include_instdir = $(prefix)/$(libbpf_include_dir)
12378f12a2ffSArnaldo Carvalho de Meloperf_examples_instdir = $(prefix)/$(perf_examples_dir)
12384842576cSJiri OlsaSTRACE_GROUPS_INSTDIR = $(prefix)/$(STRACE_GROUPS_DIR)
12394842576cSJiri Olsatip_instdir = $(prefix)/$(tipdir)
12404842576cSJiri Olsaendif
12414842576cSJiri Olsaperfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir))
12421b16fffaSArnaldo Carvalho de Meloperf_include_instdir_SQ = $(subst ','\'',$(perf_include_instdir))
12438f12a2ffSArnaldo Carvalho de Meloperf_examples_instdir_SQ = $(subst ','\'',$(perf_examples_instdir))
12444842576cSJiri OlsaSTRACE_GROUPS_INSTDIR_SQ = $(subst ','\'',$(STRACE_GROUPS_INSTDIR))
12454842576cSJiri Olsatip_instdir_SQ = $(subst ','\'',$(tip_instdir))
12464842576cSJiri Olsa
124734bec35cSCarsten Haitzlerexport perfexec_instdir_SQ
124834bec35cSCarsten Haitzler
12494842576cSJiri Olsaprint_var = $(eval $(print_var_code)) $(info $(MSG))
12504842576cSJiri Olsadefine print_var_code
125174da7697SRoberto Sassu    MSG = $(shell printf '...%40s: %s' $(1) $($(1)))
12524842576cSJiri Olsaendef
12534842576cSJiri Olsa
1254709533e5SRoberto Sassuifeq ($(feature_display),1)
1255709533e5SRoberto Sassu  $(call feature_display_entries)
1256709533e5SRoberto Sassuendif
1257709533e5SRoberto Sassu
12584842576cSJiri Olsaifeq ($(VF),1)
125999402e06SJiri Olsa  # Display EXTRA features which are detected manualy
126099402e06SJiri Olsa  # from here with feature_check call and thus cannot
126199402e06SJiri Olsa  # be partof global state output.
1262709533e5SRoberto Sassu  $(foreach feat,$(FEATURE_TESTS_EXTRA),$(call feature_print_status,$(feat),) $(info $(MSG)))
12634842576cSJiri Olsa  $(call print_var,prefix)
12644842576cSJiri Olsa  $(call print_var,bindir)
12654842576cSJiri Olsa  $(call print_var,libdir)
12664842576cSJiri Olsa  $(call print_var,sysconfdir)
12674842576cSJiri Olsa  $(call print_var,LIBUNWIND_DIR)
12684842576cSJiri Olsa  $(call print_var,LIBDW_DIR)
1269d4dfdf00SJiri Olsa  $(call print_var,JDIR)
12704842576cSJiri Olsa
12714842576cSJiri Olsa  ifeq ($(dwarf-post-unwind),1)
1272709533e5SRoberto Sassu    $(call feature_print_text,"DWARF post unwind library", $(dwarf-post-unwind-text)) $(info $(MSG))
12734842576cSJiri Olsa  endif
1274709533e5SRoberto Sassuendif
1275709533e5SRoberto Sassu
12764842576cSJiri Olsa$(info )
12774842576cSJiri Olsa
12784842576cSJiri Olsa$(call detected_var,bindir_SQ)
12794842576cSJiri Olsa$(call detected_var,PYTHON_WORD)
12804842576cSJiri Olsaifneq ($(OUTPUT),)
12814842576cSJiri Olsa$(call detected_var,OUTPUT)
12824842576cSJiri Olsaendif
12834842576cSJiri Olsa$(call detected_var,htmldir_SQ)
12844842576cSJiri Olsa$(call detected_var,infodir_SQ)
12854842576cSJiri Olsa$(call detected_var,mandir_SQ)
12864842576cSJiri Olsa$(call detected_var,ETC_PERFCONFIG_SQ)
12874842576cSJiri Olsa$(call detected_var,STRACE_GROUPS_DIR_SQ)
12884842576cSJiri Olsa$(call detected_var,prefix_SQ)
12894842576cSJiri Olsa$(call detected_var,perfexecdir_SQ)
1290b018899eSArnaldo Carvalho de Melo$(call detected_var,libbpf_include_dir_SQ)
12918f12a2ffSArnaldo Carvalho de Melo$(call detected_var,perf_examples_dir_SQ)
12924842576cSJiri Olsa$(call detected_var,tipdir_SQ)
12934842576cSJiri Olsa$(call detected_var,srcdir_SQ)
12944842576cSJiri Olsa$(call detected_var,LIBDIR)
12954842576cSJiri Olsa$(call detected_var,GTK_CFLAGS)
12964842576cSJiri Olsa$(call detected_var,PERL_EMBED_CCOPTS)
12974842576cSJiri Olsa$(call detected_var,PYTHON_EMBED_CCOPTS)
12986793672aSDenys Zagoruiifneq ($(BISON_FILE_PREFIX_MAP),)
12996793672aSDenys Zagorui$(call detected_var,BISON_FILE_PREFIX_MAP)
13006793672aSDenys Zagoruiendif
1301fbed59f8SJiri Olsa
1302fbed59f8SJiri Olsa# re-generate FEATURE-DUMP as we may have called feature_check, found out
1303fbed59f8SJiri Olsa# extra libraries to add to LDFLAGS of some other test and then redo those
1304ad5f604eSNamhyung Kim# tests, see the block about libbfd, disassembler-four-args, for instance.
1305fbed59f8SJiri Olsa$(shell rm -f $(FEATURE_DUMP_FILENAME))
1306fbed59f8SJiri Olsa$(foreach feat,$(FEATURE_TESTS),$(shell echo "$(call feature_assign,$(feat))" >> $(FEATURE_DUMP_FILENAME)))
1307