perf build: Be more programmatic when setting up libunwind variables

Iterate LIBUNWIND_ARCHS when setting up CONFIG_ and HAVE_ definitions
rather than treating each architecture individually. This sets up the
libunwind build variables and C definitions beyond x86 and
arm/aarch64. The existing naming convention is followed for
compatibility.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexandre Ghiti <alex@ghiti.fr>
Cc: Andrew Jones <andrew.jones@oss.qualcomm.com>
Cc: Athira Rajeev <atrajeev@linux.ibm.com>
Cc: Dapeng Mi <dapeng1.mi@linux.intel.com>
Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
Cc: Florian Fainelli <florian.fainelli@broadcom.com>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Leo Yan <leo.yan@linux.dev>
Cc: Li Guan <guanli.oerv@isrc.iscas.ac.cn>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Paul Walmsley <pjw@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Shimin Guo <shimin.guo@skydio.com>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Tomas Glozar <tglozar@redhat.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Ian Rogers
2026-05-13 16:31:47 -07:00
committed by Arnaldo Carvalho de Melo
parent 6d13d53be9
commit 444508cd7c

View File

@@ -65,45 +65,13 @@ $(call detected_var,SRCARCH)
CFLAGS += -I$(OUTPUT)arch/$(SRCARCH)/include/generated
# Additional ARCH settings for ppc
ifeq ($(SRCARCH),powerpc)
ifndef NO_LIBUNWIND
LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
endif
endif
# Additional ARCH settings for x86
ifeq ($(SRCARCH),x86)
$(call detected,CONFIG_X86)
ifeq (${IS_64_BIT}, 1)
CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT
ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
ifndef NO_LIBUNWIND
LIBUNWIND_LIBS = -lunwind-x86_64 -lunwind -llzma
endif
$(call detected,CONFIG_X86_64)
else
ifndef NO_LIBUNWIND
LIBUNWIND_LIBS = -lunwind-x86 -llzma -lunwind
endif
endif
endif
ifeq ($(SRCARCH),arm)
ifndef NO_LIBUNWIND
LIBUNWIND_LIBS = -lunwind -lunwind-arm
endif
endif
ifeq ($(SRCARCH),arm64)
ifndef NO_LIBUNWIND
LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
endif
endif
ifeq ($(SRCARCH),loongarch)
ifndef NO_LIBUNWIND
LIBUNWIND_LIBS = -lunwind -lunwind-loongarch64
endif
endif
@@ -111,49 +79,69 @@ ifeq ($(ARCH),s390)
CFLAGS += -fPIC
endif
ifeq ($(ARCH),mips)
ifndef NO_LIBUNWIND
LIBUNWIND_LIBS = -lunwind -lunwind-mips
endif
endif
ifneq ($(LIBUNWIND),1)
NO_LIBUNWIND := 1
endif
ifeq ($(LIBUNWIND_LIBS),)
NO_LIBUNWIND := 1
ifndef NO_LIBUNWIND
ifeq ($(SRCARCH),arm)
LIBUNWIND_LIBS = -lunwind -lunwind-arm
endif
ifeq ($(SRCARCH),arm64)
LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
endif
ifeq ($(SRCARCH),loongarch)
LIBUNWIND_LIBS = -lunwind -lunwind-loongarch64
endif
ifeq ($(ARCH),mips)
LIBUNWIND_LIBS = -lunwind -lunwind-mips
endif
ifeq ($(SRCARCH),powerpc)
LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
endif
ifeq ($(SRCARCH),riscv)
LIBUNWIND_LIBS := -lunwind -lunwind-riscv
endif
ifeq ($(SRCARCH),s390)
LIBUNWIND_LIBS := -lunwind -lunwind-s390x
endif
ifeq ($(SRCARCH),x86)
ifeq (${IS_64_BIT}, 1)
LIBUNWIND_LIBS = -lunwind-x86_64 -lunwind -llzma
else
LIBUNWIND_LIBS = -lunwind-x86 -lunwind -llzma
endif
endif
ifeq ($(LIBUNWIND_LIBS),)
NO_LIBUNWIND := 1
endif
endif
#
# For linking with debug library, run like:
#
# make DEBUG=1 LIBUNWIND_DIR=/opt/libunwind/
#
libunwind_arch_set_flags = $(eval $(libunwind_arch_set_flags_code))
define libunwind_arch_set_flags_code
FEATURE_CHECK_CFLAGS-libunwind-$(1) = -I$(LIBUNWIND_DIR)/include
FEATURE_CHECK_LDFLAGS-libunwind-$(1) = -L$(LIBUNWIND_DIR)/lib
endef
ifdef LIBUNWIND_DIR
LIBUNWIND_CFLAGS = -I$(LIBUNWIND_DIR)/include
LIBUNWIND_LDFLAGS = -L$(LIBUNWIND_DIR)/lib
LIBUNWIND_ARCHS = x86 x86_64 arm aarch64 debug-frame-arm debug-frame-aarch64 loongarch
$(foreach libunwind_arch,$(LIBUNWIND_ARCHS),$(call libunwind_arch_set_flags,$(libunwind_arch)))
endif
LIBUNWIND_ARCHS:=aarch64 arm loongarch64 mips ppc32 ppc64 riscv s390x x86 x86_64
ifndef NO_LIBUNWIND
# Set per-feature check compilation 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)
FEATURE_CHECK_LDFLAGS-libunwind-arm += -lunwind -lunwind-arm
FEATURE_CHECK_LDFLAGS-libunwind-aarch64 += -lunwind -lunwind-aarch64
FEATURE_CHECK_LDFLAGS-libunwind-x86 += -lunwind -llzma -lunwind-x86
FEATURE_CHECK_LDFLAGS-libunwind-x86_64 += -lunwind -llzma -lunwind-x86_64
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
endif
ifdef CSINCLUDES
@@ -638,49 +626,6 @@ ifeq ($(SRCARCH),powerpc)
endif
endif
ifndef NO_LIBUNWIND
have_libunwind :=
$(call feature_check,libunwind)
$(call feature_check,libunwind-x86)
ifeq ($(feature-libunwind-x86), 1)
$(call detected,CONFIG_LIBUNWIND_X86)
CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
LDFLAGS += -lunwind-x86
EXTLIBS_LIBUNWIND += -lunwind-x86
have_libunwind = 1
endif
$(call feature_check,libunwind-aarch64)
ifeq ($(feature-libunwind-aarch64), 1)
$(call detected,CONFIG_LIBUNWIND_AARCH64)
CFLAGS += -DHAVE_LIBUNWIND_AARCH64_SUPPORT
LDFLAGS += -lunwind-aarch64
EXTLIBS_LIBUNWIND += -lunwind-aarch64
have_libunwind = 1
$(call feature_check,libunwind-debug-frame-aarch64)
ifneq ($(feature-libunwind-debug-frame-aarch64), 1)
$(warning No debug_frame support found in libunwind-aarch64)
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME_AARCH64
endif
endif
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)
endif
ifneq ($(have_libunwind), 1)
NO_LIBUNWIND := 1
endif
else
NO_LOCAL_LIBUNWIND := 1
endif
ifndef NO_LIBBPF
ifneq ($(feature-bpf), 1)
$(warning BPF API too old. Please install recent kernel headers. BPF support in 'perf record' is disabled.)
@@ -739,6 +684,60 @@ ifndef GEN_VMLINUX_H
VMLINUX_H=$(src-perf)/util/bpf_skel/vmlinux/vmlinux.h
endif
ifndef NO_LIBUNWIND
have_libunwind :=
$(call feature_check,libunwind)
ifneq ($(feature-libunwind), 1)
$(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR and set LIBUNWIND=1 in the make command line as it is opt-in now)
NO_LOCAL_LIBUNWIND := 1
else
have_libunwind := 1
$(call detected,CONFIG_LOCAL_LIBUNWIND)
CFLAGS += -DHAVE_LIBUNWIND_SUPPORT
CFLAGS += $(LIBUNWIND_CFLAGS)
LDFLAGS += $(LIBUNWIND_LDFLAGS)
EXTLIBS_LIBUNWIND := $(LIBUNWIND_LIBS)
$(call feature_check,libunwind-debug-frame)
ifneq ($(feature-libunwind-debug-frame), 1)
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
endif
endif
define PROCESS_REMOTE_LIBUNWIND_ARCH
$(call feature_check,libunwind-$(1))
ifeq ($$(feature-libunwind-$(1)), 1)
upper_arch := $$(shell echo $(1) | tr '[:lower:]' '[:upper:]')
$$(call detected,CONFIG_LIBUNWIND_$$(upper_arch))
CFLAGS += -DHAVE_LIBUNWIND_$$(upper_arch)_SUPPORT
LDFLAGS += -lunwind-$(1)
EXTLIBS_LIBUNWIND += -lunwind-$(1)
have_libunwind := 1
$$(call feature_check,libunwind-debug-frame-$(1))
ifneq ($$(feature-libunwind-debug-frame-$(1)), 1)
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME_$$(upper_arch)
endif
endif
endef
$(foreach arch,$(LIBUNWIND_ARCHS), \
$(eval $(call PROCESS_REMOTE_LIBUNWIND_ARCH,$(arch))) \
)
EXTLIBS += $(EXTLIBS_LIBUNWIND)
ifeq ($(findstring -static,${LDFLAGS}),-static)
# gcc -static links libgcc_eh which contains piece of libunwind
LIBUNWIND_LDFLAGS += -Wl,--allow-multiple-definition
endif
ifneq ($(have_libunwind), 1)
NO_LIBUNWIND := 1
endif
endif
dwarf-post-unwind := 1
dwarf-post-unwind-text := BUG
@@ -761,31 +760,6 @@ ifeq ($(dwarf-post-unwind),1)
$(call detected,CONFIG_DWARF_UNWIND)
endif
ifndef NO_LIBUNWIND
ifndef NO_LOCAL_LIBUNWIND
ifeq ($(SRCARCH),$(filter $(SRCARCH),arm arm64))
$(call feature_check,libunwind-debug-frame)
ifneq ($(feature-libunwind-debug-frame), 1)
$(warning No debug_frame support found in libunwind)
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
endif
else
# non-ARM has no dwarf_find_debug_frame() function:
CFLAGS += -DNO_LIBUNWIND_DEBUG_FRAME
endif
EXTLIBS += $(LIBUNWIND_LIBS)
LDFLAGS += $(LIBUNWIND_LIBS)
endif
ifeq ($(findstring -static,${LDFLAGS}),-static)
# gcc -static links libgcc_eh which contans piece of libunwind
LIBUNWIND_LDFLAGS += -Wl,--allow-multiple-definition
endif
CFLAGS += -DHAVE_LIBUNWIND_SUPPORT
CFLAGS += $(LIBUNWIND_CFLAGS)
LDFLAGS += $(LIBUNWIND_LDFLAGS)
EXTLIBS += $(EXTLIBS_LIBUNWIND)
endif
ifneq ($(NO_LIBTRACEEVENT),1)
$(call detected,CONFIG_TRACE)
endif