From acf025616476b79448aa6e371ecdf12553dc22af Mon Sep 17 00:00:00 2001 From: wangmingrong1 Date: Thu, 8 May 2025 17:27:32 +0800 Subject: [PATCH] arm64: Support change toolchain to clang Signed-off-by: wangmingrong1 --- arch/arm64/src/Toolchain.defs | 46 ++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/arch/arm64/src/Toolchain.defs b/arch/arm64/src/Toolchain.defs index 0db36aa0115..6ee1d26c8ec 100644 --- a/arch/arm64/src/Toolchain.defs +++ b/arch/arm64/src/Toolchain.defs @@ -198,21 +198,33 @@ CROSSDEV ?= aarch64-none-elf- # Default toolchain -CC = $(CROSSDEV)gcc -CXX = $(CROSSDEV)g++ -CPP = $(CROSSDEV)gcc -E -P -x c -STRIP = $(CROSSDEV)strip --strip-unneeded -OBJCOPY = $(CROSSDEV)objcopy -OBJDUMP = $(CROSSDEV)objdump -LD = $(CROSSDEV)ld -AR = $(CROSSDEV)ar rcs -NM = $(CROSSDEV)nm +ifeq ($(CONFIG_ARCH_TOOLCHAIN_GCC),y) + CC = $(CROSSDEV)gcc + CXX = $(CROSSDEV)g++ + CPP = $(CROSSDEV)gcc -E -P -x c + STRIP = $(CROSSDEV)strip --strip-unneeded + OBJCOPY = $(CROSSDEV)objcopy + OBJDUMP = $(CROSSDEV)objdump + LD = $(CROSSDEV)ld + AR = $(CROSSDEV)ar rcs + NM = $(CROSSDEV)nm +else ifeq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y) + CC = clang + CXX = clang++ + CPP = clang -E -P -x c + LD = ld.lld -m aarch64elf + STRIP = llvm-strip --strip-unneeded + AR = llvm-ar rcs + NM = llvm-nm + OBJCOPY = llvm-objcopy + OBJDUMP = llvm-objdump +endif # Link Time Optimization ifeq ($(CONFIG_LTO_FULL),y) ARCHOPTIMIZATION += -flto - ifeq ($(CONFIG_ARM64_TOOLCHAIN_GNU_EABI),y) + ifeq ($(CONFIG_ARCH_TOOLCHAIN_GCC),y) LD := $(CROSSDEV)gcc AR := $(CROSSDEV)gcc-ar rcs NM := $(CROSSDEV)gcc-nm @@ -221,18 +233,12 @@ ifeq ($(CONFIG_LTO_FULL),y) endif endif -ifeq ($(CONFIG_ARCH_TOOLCHAIN_GNU),y) - ifeq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),) - ifeq ($(GCCVER),) - export GCCVER := $(shell $(CC) --version | grep gcc | sed -E "s/.* ([0-9]+\.[0-9]+).*/\1/" | cut -d'.' -f1) - endif - ifeq ($(shell expr "$(GCCVER)" \>= 12), 1) - LDFLAGS += --no-warn-rwx-segments - endif - +ifeq ($(CONFIG_ARCH_TOOLCHAIN_GCC),y) + ifeq ($(GCCVER),) + export GCCVER := $(shell $(CC) --version | grep gcc | sed -E "s/.* ([0-9]+\.[0-9]+).*/\1/" | cut -d'.' -f1) endif ifeq ($(shell expr "$(GCCVER)" \>= 12), 1) - LDFLAGS += --print-memory-usage + LDFLAGS += --no-warn-rwx-segments --print-memory-usage endif endif