This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 9614e1fed5 Add GCCVER define to Toolchain.cmake 9614e1fed5 is described below commit 9614e1fed5edfa5343f6f7ab2725b426fa4a0376 Author: cuiziwei <cuizi...@xiaomi.com> AuthorDate: Fri Oct 11 23:48:31 2024 +0800 Add GCCVER define to Toolchain.cmake Since GCCVER will also be used in the toolchain, it needs to be defined in advance. Signed-off-by: cuiziwei <cuizi...@xiaomi.com> --- arch/arm/src/cmake/gcc.cmake | 22 ++++++++++++---------- arch/arm/src/common/Toolchain.defs | 23 ++++++++++++++--------- arch/arm64/src/Toolchain.defs | 7 ++++++- arch/arm64/src/cmake/Toolchain.cmake | 11 ++++++++++- arch/risc-v/Kconfig | 2 +- arch/risc-v/src/cmake/Toolchain.cmake | 12 +++++++++++- arch/risc-v/src/common/Toolchain.defs | 11 ++++++++++- arch/xtensa/src/lx6/Toolchain.defs | 6 ++++++ arch/xtensa/src/lx7/Toolchain.defs | 6 ++++++ tools/Config.mk | 5 ----- 10 files changed, 76 insertions(+), 29 deletions(-) diff --git a/arch/arm/src/cmake/gcc.cmake b/arch/arm/src/cmake/gcc.cmake index e4e91e3198..1ebc6a2dfe 100644 --- a/arch/arm/src/cmake/gcc.cmake +++ b/arch/arm/src/cmake/gcc.cmake @@ -62,16 +62,18 @@ endif() # array subscript [0] is outside array bounds: # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105523 -execute_process(COMMAND ${CMAKE_C_COMPILER} --version - OUTPUT_VARIABLE GCC_VERSION_OUTPUT) -string(REGEX MATCH "\\+\\+.* ([0-9]+)\\.[0-9]+" GCC_VERSION_REGEX - "${GCC_VERSION_OUTPUT}") -set(GCCVER ${CMAKE_MATCH_1}) - -if(GCCVER GREATER_EQUAL 12) - add_compile_options(--param=min-pagesize=0) - if(CONFIG_ARCH_RAMFUNCS) - add_link_options(-Wl,--no-warn-rwx-segments) +if(CONFIG_ARCH_TOOLCHAIN_GNU) + execute_process(COMMAND ${CMAKE_C_COMPILER} --version + OUTPUT_VARIABLE GCC_VERSION_OUTPUT) + string(REGEX MATCH "\\+\\+.* ([0-9]+)\\.[0-9]+" GCC_VERSION_REGEX + "${GCC_VERSION_OUTPUT}") + set(GCCVER ${CMAKE_MATCH_1}) + + if(GCCVER GREATER_EQUAL 12) + add_compile_options(--param=min-pagesize=0) + if(CONFIG_ARCH_RAMFUNCS) + add_link_options(-Wl,--no-warn-rwx-segments) + endif() endif() endif() diff --git a/arch/arm/src/common/Toolchain.defs b/arch/arm/src/common/Toolchain.defs index 5548aec7e7..202d989051 100644 --- a/arch/arm/src/common/Toolchain.defs +++ b/arch/arm/src/common/Toolchain.defs @@ -306,15 +306,20 @@ else endif # Workaround to skip -Warray-bounds check due to bug of GCC-12: - # Wrong warning array subscript [0] is outside array bounds: - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105523 - - ifeq ($(shell expr "$(GCCVER)" \>= 12), 1) - ARCHOPTIMIZATION += --param=min-pagesize=0 - ifeq ($(CONFIG_ARCH_RAMFUNCS),y) - LDFLAGS += --no-warn-rwx-segments - endif - endif + # Wrong warning array subscript [0] is outside array bounds: + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105523 + + ifeq ($(CONFIG_ARCH_TOOLCHAIN_GNU),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) + ARCHOPTIMIZATION += --param=min-pagesize=0 + ifeq ($(CONFIG_ARCH_RAMFUNCS),y) + LDFLAGS += --no-warn-rwx-segments + endif + endif + endif LDFLAGS += --entry=__start diff --git a/arch/arm64/src/Toolchain.defs b/arch/arm64/src/Toolchain.defs index 3cfc20ab5d..1efd0d479c 100644 --- a/arch/arm64/src/Toolchain.defs +++ b/arch/arm64/src/Toolchain.defs @@ -181,7 +181,12 @@ ifeq ($(CONFIG_LTO_FULL),y) endif ifeq ($(CONFIG_ARCH_TOOLCHAIN_GNU),y) - LDFLAGS += --no-warn-rwx-segments + 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 endif # Add the builtin library diff --git a/arch/arm64/src/cmake/Toolchain.cmake b/arch/arm64/src/cmake/Toolchain.cmake index a8f9838ed1..0da4b19fbb 100644 --- a/arch/arm64/src/cmake/Toolchain.cmake +++ b/arch/arm64/src/cmake/Toolchain.cmake @@ -190,5 +190,14 @@ if(CONFIG_DEBUG_SYMBOLS) endif() if(CONFIG_ARCH_TOOLCHAIN_GNU) - add_link_options(-Wl,--no-warn-rwx-segments) + if(NOT GCCVER) + execute_process(COMMAND ${CMAKE_C_COMPILER} --version + OUTPUT_VARIABLE GCC_VERSION_INFO) + string(REGEX MATCH "[0-9]+\\.[0-9]+" GCC_VERSION ${GCC_VERSION_INFO}) + string(REGEX REPLACE "\\..*" "" GCCVER ${GCC_VERSION}) + set(GCCVER ${CMAKE_MATCH_1}) + endif() + if(GCCVER GREATER_EQUAL 12) + add_link_options(-Wl,--no-warn-rwx-segments) + endif() endif() diff --git a/arch/risc-v/Kconfig b/arch/risc-v/Kconfig index 538e90a133..2105e680a5 100644 --- a/arch/risc-v/Kconfig +++ b/arch/risc-v/Kconfig @@ -413,7 +413,7 @@ config ARCH_RV_MACHINE_ISA_1_13 which extend the range of exception codes from 0 ~ 15 to 0 ~ 19. config ARCH_RV_ISA_ZICSR_ZIFENCEI - bool + bool "Enable Zicsr and Zifencei extensions (GCC >= 12.1.0.)" default y ---help--- https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=aed44286efa8ae8717a77d94b51ac3614e2ca6dc diff --git a/arch/risc-v/src/cmake/Toolchain.cmake b/arch/risc-v/src/cmake/Toolchain.cmake index caac1972ae..f953f2746b 100644 --- a/arch/risc-v/src/cmake/Toolchain.cmake +++ b/arch/risc-v/src/cmake/Toolchain.cmake @@ -258,8 +258,18 @@ if(CONFIG_RISCV_TOOLCHAIN STREQUAL GNU_RVG) set(ARCHCPUEXTFLAGS ${ARCHCPUEXTFLAGS}v) endif() + if(NOT GCCVER) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version + OUTPUT_VARIABLE GCC_VERSION_OUTPUT) + string(REGEX MATCH "\\+\\+.* ([0-9]+)\\.[0-9]+" GCC_VERSION_REGEX + "${GCC_VERSION_OUTPUT}") + set(GCCVER ${CMAKE_MATCH_1}) + endif() + if(CONFIG_ARCH_RV_ISA_ZICSR_ZIFENCEI) - set(ARCHCPUEXTFLAGS ${ARCHCPUEXTFLAGS}_zicsr_zifencei) + if(GCCVER GREATER_EQUAL 12 OR CONFIG_ARCH_TOOLCHAIN_CLANG) + set(ARCHCPUEXTFLAGS ${ARCHCPUEXTFLAGS}_zicsr_zifencei) + endif() endif() if(CONFIG_ARCH_RV_EXPERIMENTAL_EXTENSIONS) diff --git a/arch/risc-v/src/common/Toolchain.defs b/arch/risc-v/src/common/Toolchain.defs index 4de10db89c..ddf814dec3 100644 --- a/arch/risc-v/src/common/Toolchain.defs +++ b/arch/risc-v/src/common/Toolchain.defs @@ -209,8 +209,17 @@ ifeq ($(CONFIG_RISCV_TOOLCHAIN),GNU_RVG) ARCHCPUEXTFLAGS := $(ARCHCPUEXTFLAGS)v endif + ifeq ($(GCCVER),) + export GCCVER = ${shell $(CROSSDEV)gcc --version | grep gcc | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | tail -n 1 | cut -d"." -f1 } + endif + ifeq ($(CONFIG_ARCH_RV_ISA_ZICSR_ZIFENCEI),y) - ARCHCPUEXTFLAGS := $(ARCHCPUEXTFLAGS)_zicsr_zifencei + ifeq ($(shell expr "$(GCCVER)" \>= 12), 1) + ARCHCPUEXTFLAGS := $(ARCHCPUEXTFLAGS)_zicsr_zifencei + endif + ifeq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y) + ARCHCPUEXTFLAGS := $(ARCHCPUEXTFLAGS)_zicsr_zifencei + endif endif ARCH_RV_EXPERIMENTAL_EXTENSIONS = $(strip $(subst ",,$(CONFIG_ARCH_RV_EXPERIMENTAL_EXTENSIONS))) diff --git a/arch/xtensa/src/lx6/Toolchain.defs b/arch/xtensa/src/lx6/Toolchain.defs index c70eeb8edc..37faf06370 100644 --- a/arch/xtensa/src/lx6/Toolchain.defs +++ b/arch/xtensa/src/lx6/Toolchain.defs @@ -111,6 +111,12 @@ ifneq ($(CONFIG_LIBCXXTOOLCHAIN),y) ARCHCXXFLAGS += -nostdinc++ endif +ifeq ($(CONFIG_ARCH_TOOLCHAIN_GNU),y) + ifeq ($(GCCVER),) + export GCCVER = $(shell $(CXX) --version | grep ++ | sed -E 's/.* ([0-9]+\.[0-9]+).*/\1/' | cut -d'.' -f1) + endif +endif + ifneq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y) ARCHCFLAGS += -Wno-psabi ARCHCXXFLAGS += -Wno-psabi diff --git a/arch/xtensa/src/lx7/Toolchain.defs b/arch/xtensa/src/lx7/Toolchain.defs index 5ad3e768a2..7cf31413af 100644 --- a/arch/xtensa/src/lx7/Toolchain.defs +++ b/arch/xtensa/src/lx7/Toolchain.defs @@ -115,6 +115,12 @@ ifneq ($(CONFIG_LIBCXXTOOLCHAIN),y) ARCHCXXFLAGS += -nostdinc++ endif +ifeq ($(CONFIG_ARCH_TOOLCHAIN_GNU),y) + ifeq ($(GCCVER),) + export GCCVER = $(shell $(CXX) --version | grep ++ | sed -E 's/.* ([0-9]+\.[0-9]+).*/\1/' | cut -d'.' -f1) + endif +endif + ifneq ($(CONFIG_ARCH_TOOLCHAIN_CLANG),y) ARCHCFLAGS += -Wno-psabi ARCHCXXFLAGS += -Wno-psabi diff --git a/tools/Config.mk b/tools/Config.mk index 244f853066..2637786f0e 100644 --- a/tools/Config.mk +++ b/tools/Config.mk @@ -732,11 +732,6 @@ export DEFINE_PREFIX ?= $(subst X,,${shell $(DEFINE) "$(CC)" X 2> ${EMPTYFILE}}) export INCDIR_PREFIX ?= $(subst "X",,${shell $(INCDIR) "$(CC)" X 2> ${EMPTYFILE}}) export INCSYSDIR_PREFIX ?= $(subst "X",,${shell $(INCDIR) -s "$(CC)" X 2> ${EMPTYFILE}}) -# Get the GCC version number -ifeq ($(CONFIG_ARCH_TOOLCHAIN_GNU), y) - export GCCVER = $(shell $(CXX) --version | grep ++ | sed -E 's/.* ([0-9]+\.[0-9]+).*/\1/' | cut -d'.' -f1) -endif - # ARCHxxx means the predefined setting(either toolchain, arch, or system specific) ARCHDEFINES += ${DEFINE_PREFIX}__NuttX__ ifeq ($(CONFIG_NDEBUG),y)