mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-24 17:23:29 -04:00
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:
committed by
Arnaldo Carvalho de Melo
parent
6d13d53be9
commit
444508cd7c
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user