Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309# SPDX-License-Identifier: GPL-2.0-only
ifeq ($(src-perf),)src-perf := $(srctree)/tools/perfendif
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_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-safetyendif
include $(srctree)/tools/scripts/Makefile.arch
$(call detected_var,SRCARCH)
CFLAGS += -I$(OUTPUT)arch/$(SRCARCH)/include/generated
# Additional ARCH settings for x86ifeq ($(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) endifendif
ifeq ($(ARCH),s390) CFLAGS += -fPIC CXXFLAGS += -fPICendif
# 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-armendififeq ($(SRCARCH),arm64) LIBUNWIND_LIBS = -lunwind -lunwind-aarch64endififeq ($(SRCARCH),loongarch) LIBUNWIND_LIBS = -lunwind -lunwind-loongarch64endififeq ($(ARCH),mips) LIBUNWIND_LIBS = -lunwind -lunwind-mipsendififeq ($(SRCARCH),powerpc) LIBUNWIND_LIBS := -lunwind -lunwind-ppc64endififeq ($(SRCARCH),riscv) LIBUNWIND_LIBS := -lunwind -lunwind-riscvendififeq ($(SRCARCH),s390) LIBUNWIND_LIBS := -lunwind -lunwind-s390xendififeq ($(SRCARCH),x86) ifeq (${IS_64_BIT}, 1) LIBUNWIND_LIBS = -lunwind-x86_64 -lunwind -llzma else LIBUNWIND_LIBS = -lunwind-x86 -lunwind -llzma endifendififneq ($(LIBUNWIND),1) NO_LIBUNWIND := 1endififeq ($(LIBUNWIND_LIBS),) NO_LIBUNWIND := 1endif
## 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)endifOPENCSDLIBS := -lopencsd_c_api -lopencsdifeq ($(findstring -static,${LDFLAGS}),-static) OPENCSDLIBS += -lstdc++endififdef CSLIBS LIBOPENCSD_LDFLAGS := -L$(CSLIBS)endifFEATURE_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)/libendifDWARFLIBS := -ldwifeq ($(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 += -ldlendifFEATURE_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) endifendif
# 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)/endifFEATURE_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)/libendifFEATURE_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) endifendif
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)= endifendif
# Treat warnings as errors unless directed not toifneq ($(WERROR),0) CORE_CFLAGS += -Werror CXXFLAGS += -Werror HOSTCFLAGS += -Werrorendif
ifndef DEBUG DEBUG := 0endif
ifeq ($(DEBUG),0)CORE_CFLAGS += -DNDEBUG=1CORE_CFLAGS += -O3else CORE_CFLAGS += -g CXXFLAGS += -gendif
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 += -fltoendif
# 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-configPYTHON_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))) endifendif
# 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 LDFLAGSifeq ($(shell $(PYTHON_CONFIG_SQ) --ldflags --embed 2>&1 1>/dev/null; echo $$?), 0) PYTHON_CONFIG_LDFLAGS := --ldflags --embedelse PYTHON_CONFIG_LDFLAGS := --ldflagsendif
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)) endifendif
FEATURE_CHECK_CFLAGS-libpython := $(PYTHON_EMBED_CCOPTS)FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
FEATURE_CHECK_LDFLAGS-libaio = -lrt
CORE_CFLAGS += -fno-omit-frame-pointerCORE_CFLAGS += -WallCORE_CFLAGS += -WextraCORE_CFLAGS += -std=gnu11CORE_CFLAGS += -funsigned-char
CXXFLAGS += -std=gnu++17 -fno-exceptions -fno-rttiCXXFLAGS += -WallCXXFLAGS += -WextraCXXFLAGS += -fno-omit-frame-pointer
HOSTCFLAGS += -WallHOSTCFLAGS += -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 += -ltcmallocendif
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 := 1include $(srctree)/tools/build/Makefile.featureelseinclude $(FEATURES_DUMP)endif
ifeq ($(feature-stackprotector-all), 1) CORE_CFLAGS += -fstack-protector-allendif
ifeq ($(DEBUG),0) ifeq ($(feature-fortify-source), 1) CORE_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 endifendif
INC_FLAGS += -I$(src-perf)/util/includeINC_FLAGS += -I$(src-perf)/arch/$(SRCARCH)/includeINC_FLAGS += -I$(srctree)/tools/include/INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapiINC_FLAGS += -I$(srctree)/tools/include/uapiINC_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 headersifneq ($(OUTPUT),)INC_FLAGS += -I$(obj-perf)/utilINC_FLAGS += -I$(obj-perf)endif
INC_FLAGS += -I$(src-perf)/utilINC_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_NPendif
ifeq ($(feature-pthread-barrier), 1) CFLAGS += -DHAVE_PTHREAD_BARRIERendif
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)) endifendif
ifeq ($(feature-eventfd), 1) CFLAGS += -DHAVE_EVENTFD_SUPPORTendif
ifeq ($(feature-gettid), 1) CFLAGS += -DHAVE_GETTIDendif
ifeq ($(feature-file-handle), 1) CFLAGS += -DHAVE_FILE_HANDLEendif
ifdef NO_LIBELF NO_LIBDW := 1 NO_LIBUNWIND := 1 NO_LIBBPF := 1 NO_JVMTI := 1else 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 supportendif # NO_LIBELF
ifeq ($(feature-libaio), 1) ifndef NO_AIO CFLAGS += -DHAVE_AIO_SUPPORT endifendif
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 endifendif
ifeq ($(feature-sched_getcpu), 1) CFLAGS += -DHAVE_SCHED_GETCPU_SUPPORTendif
ifeq ($(feature-setns), 1) CFLAGS += -DHAVE_SETNS_SUPPORT $(call detected,CONFIG_SETNS)endif
ifeq ($(feature-reallocarray), 0) CFLAGS += -DCOMPAT_NEED_REALLOCARRAYendif
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) endifendif
ifndef NO_ZLIB ifeq ($(feature-zlib), 1) CFLAGS += -DHAVE_ZLIB_SUPPORT EXTLIBS += -lz $(call detected,CONFIG_ZLIB) else NO_ZLIB := 1 endifendif
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_LIBBPFendif # 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) endifendif
ifdef PERF_HAVE_JITDUMP ifndef NO_LIBELF $(call detected,CONFIG_JITDUMP) CFLAGS += -DHAVE_JITDUMP endifendif
ifeq ($(SRCARCH),powerpc) ifndef NO_LIBDW CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX endifendif
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 endifendif
ifeq ($(feature-libopenssl), 1) $(call detected,CONFIG_LIBOPENSSL) CFLAGS += -DHAVE_LIBOPENSSL_SUPPORTendif
ifndef BUILD_BPF_SKEL # BPF skeletons control a large number of perf features, by default # they are enabled. BUILD_BPF_SKEL := 1endif
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 endifendif
ifndef GEN_VMLINUX_H VMLINUX_H_FILE=$(src-perf)/util/bpf_skel/vmlinux/vmlinux.hendif
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 endifendif
dwarf-post-unwind := 1dwarf-post-unwind-text := BUG
# setup DWARF post unwinderifdef 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) endifelse 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) endifendif
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 endifendif
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) endifendif
ifeq ($(feature-timerfd), 1) CFLAGS += -DHAVE_TIMERFD_SUPPORTelse $(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 := 1endef
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 endifendif
ifneq ($(NO_JEVENTS),1) ifeq ($(wildcard pmu-events/arch/$(SRCARCH)/mapfile.csv),) NO_JEVENTS := 1 endifendififneq ($(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 endifendif
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 endifendif
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 endifendif
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 endifendif
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 endifendif
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 endifendif
ifndef NO_BACKTRACE ifeq ($(feature-backtrace), 1) CFLAGS += -DHAVE_BACKTRACE_SUPPORT endifendif
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 endifendif
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 endifelse NO_PERF_READ_VDSO32 := 1 NO_PERF_READ_VDSOX32 := 1endif
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]) endifendif
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); endifendif
ifdef EXTRA_TESTS $(call detected,CONFIG_EXTRA_TESTS) CFLAGS += -DHAVE_EXTRA_TESTSendif
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 endifendif
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 endifendif
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) endifendif
# 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) endifendif
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_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)) endifendif
# 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 prefixifndef DESTDIRprefix ?= $(HOME)endifbindir_relative = binbindir = $(abspath $(prefix)/$(bindir_relative))includedir_relative = includeincludedir = $(abspath $(prefix)/$(includedir_relative))mandir = share/maninfodir = share/infoperfexecdir = libexec/perf-core# FIXME: system's libbpf header directory, where we expect to find bpf/bpf_helpers.h, for instancelibbpf_include_dir = /usr/includeperf_examples_dir = lib/perf/examplessharedir = $(prefix)/sharetemplate_dir = share/perf-core/templatesSTRACE_GROUPS_DIR = share/perf-core/strace/groupshtmldir = share/doc/perf-doctipdir = share/doc/perf-tipsrcdir = $(srctree)/tools/perfifeq ($(prefix),/usr)sysconfdir = /etcETC_PERFCONFIG = $(sysconfdir)/perfconfigelsesysconfdir = $(prefix)/etcETC_PERFCONFIG = etc/perfconfigendififndef libifeq ($(SRCARCH)$(IS_64_BIT), x861)lib = lib64elselib = libendifendif # liblibdir = $(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)elseperfexec_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)endifperfexec_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)) endifendif
$(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)))