build/cmake: Add toolchain C++ library linking for all platforms.

Extend CONFIG_LIBCXXTOOLCHAIN support to all remaining platforms
in CMake builds by explicitly locating and linking libstdc++.a
from the toolchain. This prevents build failures caused by STL
header/library mismatches where toolchain headers are included
without the corresponding library.
* Adds nuttx_find_toolchain_lib() calls for all platforms.
* Aligns CMake behavior with Make build system.

Signed-off-by: trns1997 <trns1997@gmail.com>
This commit is contained in:
trns1997
2026-01-16 09:40:49 +01:00
committed by GUIDINGLI
parent b82ad5c495
commit 9159f6e353
16 changed files with 85 additions and 90 deletions
+5 -4
View File
@@ -85,10 +85,11 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN)
nuttx_find_toolchain_lib(libsupc++.a) nuttx_find_toolchain_lib(libsupc++.a)
endif() endif()
if(CONFIG_LIBCXXTOOLCHAIN)
nuttx_find_toolchain_lib(libstdc++.a)
list(APPEND CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${NUTTX_DIR}/include/cxx)
endif()
if(CONFIG_COVERAGE_TOOLCHAIN) if(CONFIG_COVERAGE_TOOLCHAIN)
nuttx_find_toolchain_lib(libgcov.a) nuttx_find_toolchain_lib(libgcov.a)
endif() endif()
if(CONFIG_LIBCXXTOOLCHAIN)
nuttx_find_toolchain_lib(libstdc++.a)
endif()
+4
View File
@@ -274,6 +274,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif endif
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
endif
ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y) ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a))
endif endif
+5
View File
@@ -45,6 +45,11 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN)
nuttx_find_toolchain_lib(libsupc++.a) nuttx_find_toolchain_lib(libsupc++.a)
endif() endif()
if(CONFIG_LIBCXXTOOLCHAIN)
nuttx_find_toolchain_lib(libstdc++.a)
list(APPEND CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${NUTTX_DIR}/include/cxx)
endif()
if(CONFIG_COVERAGE_TOOLCHAIN) if(CONFIG_COVERAGE_TOOLCHAIN)
nuttx_find_toolchain_lib(libgcov.a) nuttx_find_toolchain_lib(libgcov.a)
endif() endif()
+4
View File
@@ -205,6 +205,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif endif
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
endif
# Loadable module definitions # Loadable module definitions
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden
+4
View File
@@ -101,6 +101,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif endif
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
endif
## Loadable module definitions ## Loadable module definitions
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden
+4
View File
@@ -316,6 +316,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif endif
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
endif
# Loadable module definitions # Loadable module definitions
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden
+4
View File
@@ -132,6 +132,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif endif
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
endif
# Loadable module definitions # Loadable module definitions
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden
+4
View File
@@ -80,6 +80,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif endif
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
endif
# Loadable module definitions # Loadable module definitions
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden
+4
View File
@@ -118,6 +118,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif endif
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
endif
# Loadable module definitions # Loadable module definitions
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden
+9 -27
View File
@@ -37,41 +37,23 @@ endforeach()
separate_arguments(CMAKE_C_FLAG_ARGS NATIVE_COMMAND ${CMAKE_C_FLAGS}) separate_arguments(CMAKE_C_FLAG_ARGS NATIVE_COMMAND ${CMAKE_C_FLAGS})
execute_process( nuttx_find_toolchain_lib()
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-libgcc-file-name
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
if(CONFIG_LIBM_TOOLCHAIN) if(CONFIG_LIBM_TOOLCHAIN)
execute_process( nuttx_find_toolchain_lib(libm.a)
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libm.a
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif() endif()
if(CONFIG_LIBSUPCXX_TOOLCHAIN) if(CONFIG_LIBSUPCXX_TOOLCHAIN)
execute_process( nuttx_find_toolchain_lib(libsupc++.a)
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS} endif()
--print-file-name=libsupc++.a
OUTPUT_STRIP_TRAILING_WHITESPACE if(CONFIG_LIBCXXTOOLCHAIN)
OUTPUT_VARIABLE extra_library) nuttx_find_toolchain_lib(libstdc++.a)
list(APPEND EXTRA_LIB ${extra_library}) list(APPEND CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${NUTTX_DIR}/include/cxx)
endif() endif()
if(CONFIG_COVERAGE_TOOLCHAIN) if(CONFIG_COVERAGE_TOOLCHAIN)
execute_process( nuttx_find_toolchain_lib(libgcov.a)
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libgcov.a
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif() endif()
nuttx_add_extra_library(${EXTRA_LIB})
set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c) set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c)
+4
View File
@@ -431,6 +431,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif endif
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
endif
ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y) ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a))
endif endif
+8 -26
View File
@@ -40,39 +40,21 @@ endforeach()
separate_arguments(CMAKE_C_FLAG_ARGS NATIVE_COMMAND ${CMAKE_C_FLAGS}) separate_arguments(CMAKE_C_FLAG_ARGS NATIVE_COMMAND ${CMAKE_C_FLAGS})
if(CONFIG_TRICORE_TOOLCHAIN_GNU) if(CONFIG_TRICORE_TOOLCHAIN_GNU)
execute_process( nuttx_find_toolchain_lib()
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-libgcc-file-name
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
if(CONFIG_LIBM_TOOLCHAIN) if(CONFIG_LIBM_TOOLCHAIN)
execute_process( nuttx_find_toolchain_lib(libm.a)
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libm.a
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif() endif()
if(CONFIG_LIBSUPCXX) if(CONFIG_LIBSUPCXX)
execute_process( nuttx_find_toolchain_lib(libsupc++.a)
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS} endif()
--print-file-name=libsupc++.a if(CONFIG_LIBCXXTOOLCHAIN)
OUTPUT_STRIP_TRAILING_WHITESPACE nuttx_find_toolchain_lib(libstdc++.a)
OUTPUT_VARIABLE extra_library) list(APPEND CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${NUTTX_DIR}/include/cxx)
list(APPEND EXTRA_LIB ${extra_library})
endif() endif()
if(CONFIG_COVERAGE_TOOLCHAIN) if(CONFIG_COVERAGE_TOOLCHAIN)
execute_process( nuttx_find_toolchain_lib(libgcov.a)
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libgcov.a
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif() endif()
nuttx_add_extra_library(${EXTRA_LIB})
set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c) set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c)
endif() endif()
+10 -33
View File
@@ -37,52 +37,29 @@ endforeach()
separate_arguments(CMAKE_C_FLAG_ARGS NATIVE_COMMAND ${CMAKE_C_FLAGS}) separate_arguments(CMAKE_C_FLAG_ARGS NATIVE_COMMAND ${CMAKE_C_FLAGS})
execute_process( nuttx_find_toolchain_lib()
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-libgcc-file-name
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
if(CONFIG_LIBM_TOOLCHAIN) if(CONFIG_LIBM_TOOLCHAIN)
execute_process( nuttx_find_toolchain_lib(libm.a)
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libm.a
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif() endif()
if(CONFIG_LIBSUPCXX_TOOLCHAIN) if(CONFIG_LIBSUPCXX_TOOLCHAIN)
execute_process( nuttx_find_toolchain_lib(libsupc++.a)
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS} endif()
--print-file-name=libsupc++.a
OUTPUT_STRIP_TRAILING_WHITESPACE if(CONFIG_LIBCXXTOOLCHAIN)
OUTPUT_VARIABLE extra_library) nuttx_find_toolchain_lib(libstdc++.a)
list(APPEND EXTRA_LIB ${extra_library}) list(APPEND CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${NUTTX_DIR}/include/cxx)
endif() endif()
if(CONFIG_COVERAGE_TOOLCHAIN) if(CONFIG_COVERAGE_TOOLCHAIN)
execute_process( nuttx_find_toolchain_lib(libgcov.a)
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libgcov.a
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif() endif()
if(CONFIG_CXX_EXCEPTION) if(CONFIG_CXX_EXCEPTION)
execute_process( nuttx_find_toolchain_lib(libgcc_eh.a)
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libgcc_eh.a
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif() endif()
nuttx_add_extra_library(${EXTRA_LIB})
set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c) set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c)
if(CONFIG_ARCH_MULTIBOOT1) if(CONFIG_ARCH_MULTIBOOT1)
+8
View File
@@ -58,6 +58,14 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN)
OUTPUT_VARIABLE extra_library) OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library}) list(APPEND EXTRA_LIB ${extra_library})
endif() endif()
if(CONFIG_LIBCXXTOOLCHAIN)
execute_process(
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
--print-file-name=libstdc++.a
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE extra_library)
list(APPEND EXTRA_LIB ${extra_library})
endif()
if(CONFIG_COVERAGE_TOOLCHAIN) if(CONFIG_COVERAGE_TOOLCHAIN)
execute_process( execute_process(
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS} COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
+4
View File
@@ -218,6 +218,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif endif
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
endif
ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y) ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a))
endif endif
+4
View File
@@ -222,6 +222,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
endif endif
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
endif
ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y) ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y)
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a))
endif endif