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)

Reply via email to