Skip to content

Commit

Permalink
Add GCCVER define to Toolchain.cmake
Browse files Browse the repository at this point in the history
Since GCCVER will also be used in the toolchain, it needs to be defined in advance.

Signed-off-by: cuiziwei <[email protected]>
  • Loading branch information
cuiziweizw committed Oct 18, 2024
1 parent d762427 commit 64f03df
Show file tree
Hide file tree
Showing 10 changed files with 76 additions and 29 deletions.
22 changes: 12 additions & 10 deletions arch/arm/src/cmake/gcc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
23 changes: 14 additions & 9 deletions arch/arm/src/common/Toolchain.defs
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
7 changes: 6 additions & 1 deletion arch/arm64/src/Toolchain.defs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
11 changes: 10 additions & 1 deletion arch/arm64/src/cmake/Toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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()
2 changes: 1 addition & 1 deletion arch/risc-v/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,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
Expand Down
12 changes: 11 additions & 1 deletion arch/risc-v/src/cmake/Toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
11 changes: 10 additions & 1 deletion arch/risc-v/src/common/Toolchain.defs
Original file line number Diff line number Diff line change
Expand Up @@ -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)))
Expand Down
6 changes: 6 additions & 0 deletions arch/xtensa/src/lx6/Toolchain.defs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions arch/xtensa/src/lx7/Toolchain.defs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 0 additions & 5 deletions tools/Config.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 64f03df

Please sign in to comment.