Currently, the cross compilation is not supported in crash-utility, let's add this feature. Tested(ubuntu-24.04) on: X86_64, X86, aarch64, s390x, powerpc64, alpha, sparc64, mips, riscv64 E.g: cross build crash-utility for aarch64 on X86_64 make CROSS_COMPILE=aarch64-linux-gnu- -j`nproc` or make CROSS_COMPILE=aarch64-linux-gnu- -j`nproc` warn Note: there are still some limitations for cross compilation because some dependency libs that are not cross-compiled, for example: snappy, lzo, zstd Link: https://lists.crash-utility.osci.io/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx/thread/Y27LRU3D2PA7OZ2N3A3EJNQGFEY4A7NS/ Signed-off-by: Lianbo Jiang <lijiang@xxxxxxxxxx> --- Makefile | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-- README | 5 +++++ configure.c | 6 ++++++ help.c | 5 +++++ 4 files changed, 64 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 60dad1870a92..3e7853ad94a0 100644 --- a/Makefile +++ b/Makefile @@ -27,11 +27,57 @@ PROGRAM=crash TARGET= GDB_CONF_FLAGS= -ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) +# Supported arches for cross compilation: x86_64, x86, aarch64, s390x, +# powerpc64, alpha, sparc64, mips, riscv64 +# E.g: cross compile crash-utility for aarch64 on X86_64 +# make CROSS_COMPILE=aarch64-linux-gnu- -j`nproc` +# or +# make CROSS_COMPILE=aarch64-linux-gnu- -j`nproc` warn +# +ifneq ($(CROSS_COMPILE),) +ARCH := $(shell echo $(CROSS_COMPILE) | sed 's:^.*/::g' | cut -d- -f1) +else +ARCH := $(shell uname -m) +endif + +ARCH := $(shell echo $(ARCH) | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) + +CC = $(CROSS_COMPILE)gcc +CXX = $(CROSS_COMPILE)g++ +HOSTCC = gcc + ifeq (${ARCH}, ppc64) CONF_FLAGS = -m64 endif +ifneq ($(CROSS_COMPILE),) +ifeq (${ARCH}, x86_64) +CONF_TARGET_ARCH := X86_64 +else ifeq (${ARCH}, aarch64) +CONF_TARGET_ARCH := ARM64 +else ifeq (${ARCH}, s390x) +CONF_TARGET_ARCH := S390X +else ifeq (${ARCH}, powerpc64) +CONF_TARGET_ARCH := PPC64 +else ifeq (${ARCH}, ppc64le) +CONF_TARGET_ARCH := PPC64 +else ifeq (${ARCH}, alpha) +CONF_TARGET_ARCH := ALPHA +else ifeq (${ARCH}, i386) +CONF_TARGET_ARCH := X86 +else ifeq (${ARCH}, mips) +CONF_TARGET_ARCH := MIPS +else ifeq (${ARCH}, sparc64) +CONF_TARGET_ARCH := SPARC64 +else ifeq (${ARCH}, riscv64) +CONF_TARGET_ARCH := RISCV64 +else +$(error The current Arch(${ARCH}) does not support cross compilation) +endif +CONF_FLAGS += -DCONF_TARGET_ARCH=${CONF_TARGET_ARCH} +CONF_FLAGS += -DGDB_TARGET_DEFAULT="\"GDB_CONF_FLAGS=--host=$(shell echo $(CROSS_COMPILE) | sed -e 's:^.*/::g' -e 's/-$$//')\"" +endif + # # GDB, GDB_FILES, GDB_OFILES and GDB_PATCH_FILES will be configured automatically by configure # @@ -310,7 +356,7 @@ force: make_configure: force @rm -f configure - @${CC} ${CONF_FLAGS} -o configure configure.c ${WARNING_ERROR} ${WARNING_OPTIONS} + @${HOSTCC} ${CONF_FLAGS} -o configure configure.c ${WARNING_ERROR} ${WARNING_OPTIONS} clean: make_configure @./configure ${CONF_TARGET_FLAG} -q -b diff --git a/README b/README index d7e7d9b97899..4ce55626e501 100644 --- a/README +++ b/README @@ -84,6 +84,11 @@ $ cd crash-8.0.6 $ make + To cross compile the crash utility for aarch64 on x86_64: + $ make CROSS_COMPILE=aarch64-linux-gnu- -j`nproc` + + Supported arches for cross compilation: x86_64, x86, aarch64, s390x, powerpc64, alpha, sparc64, mips, riscv64 + The initial build will take several minutes because the embedded gdb module must be configured and built. Alternatively, the crash source RPM file may be installed and built, and the resultant crash binary RPM file installed. diff --git a/configure.c b/configure.c index 4668c9a4e20b..7303ebb5c483 100644 --- a/configure.c +++ b/configure.c @@ -169,7 +169,9 @@ void add_extra_lib(char *); #define TARGET_CFLAGS_LOONGARCH64 "TARGET_CFLAGS=" #define TARGET_CFLAGS_LOONGARCH64_ON_X86_64 "TARGET_CFLAGS=" +#ifndef GDB_TARGET_DEFAULT #define GDB_TARGET_DEFAULT "GDB_CONF_FLAGS=" +#endif #define GDB_TARGET_ARM_ON_X86 "GDB_CONF_FLAGS=--target=arm-elf-linux" #define GDB_TARGET_ARM_ON_X86_64 "GDB_CONF_FLAGS=--target=arm-elf-linux CFLAGS=-m32 CXXFLAGS=-m32" #define GDB_TARGET_X86_ON_X86_64 "GDB_CONF_FLAGS=--target=i686-pc-linux-gnu CFLAGS=-m32 CXXFLAGS=-m32" @@ -376,6 +378,7 @@ get_current_configuration(struct supported_gdb_version *sp) static char buf[512]; char *p; +#ifndef CONF_TARGET_ARCH #ifdef __alpha__ target_data.target = ALPHA; #endif @@ -422,6 +425,9 @@ get_current_configuration(struct supported_gdb_version *sp) #ifdef __loongarch64 target_data.target = LOONGARCH64; #endif +#else + target_data.target = CONF_TARGET_ARCH; +#endif set_initial_target(sp); diff --git a/help.c b/help.c index 87eb9eed2eef..c1d8eca44f22 100644 --- a/help.c +++ b/help.c @@ -9618,6 +9618,11 @@ char *README[] = { README_ENTER_DIRECTORY, " $ make", "", +" To cross compile the crash utility for aarch64 on x86_64: ", +" $ make CROSS_COMPILE=aarch64-linux-gnu- -j`nproc`", +"", +" Supported arches for cross compilation: x86_64, x86, aarch64, s390x, powerpc64, alpha, sparc64, mips, riscv64", +"", " The initial build will take several minutes because the embedded gdb module", " must be configured and built. Alternatively, the crash source RPM file", " may be installed and built, and the resultant crash binary RPM file installed.", -- 2.47.1 -- Crash-utility mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxxxxxx https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/ Contribution Guidelines: https://github.com/crash-utility/crash/wiki