From 9159f6e353e5a0ee4f069aa0b0683cae065a68e3 Mon Sep 17 00:00:00 2001 From: trns1997 Date: Fri, 16 Jan 2026 09:40:49 +0100 Subject: [PATCH] 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 --- arch/arm/src/cmake/platform.cmake | 9 +++--- arch/arm64/src/Toolchain.defs | 4 +++ arch/arm64/src/cmake/platform.cmake | 5 ++++ arch/avr/src/avr/Toolchain.defs | 4 +++ arch/avr/src/avr32/Toolchain.defs | 4 +++ arch/mips/src/mips32/Toolchain.defs | 4 +++ arch/misoc/src/lm32/Toolchain.defs | 4 +++ arch/misoc/src/minerva/Toolchain.defs | 4 +++ arch/or1k/src/mor1kx/Toolchain.defs | 4 +++ arch/risc-v/src/cmake/platform.cmake | 36 ++++++---------------- arch/risc-v/src/common/Toolchain.defs | 4 +++ arch/tricore/src/cmake/platform.cmake | 34 +++++---------------- arch/x86_64/src/cmake/platform.cmake | 43 +++++++-------------------- arch/xtensa/src/cmake/platform.cmake | 8 +++++ arch/xtensa/src/lx6/Toolchain.defs | 4 +++ arch/xtensa/src/lx7/Toolchain.defs | 4 +++ 16 files changed, 85 insertions(+), 90 deletions(-) diff --git a/arch/arm/src/cmake/platform.cmake b/arch/arm/src/cmake/platform.cmake index 18166e381cf..802dc41562b 100644 --- a/arch/arm/src/cmake/platform.cmake +++ b/arch/arm/src/cmake/platform.cmake @@ -85,10 +85,11 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN) nuttx_find_toolchain_lib(libsupc++.a) 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) nuttx_find_toolchain_lib(libgcov.a) endif() - -if(CONFIG_LIBCXXTOOLCHAIN) - nuttx_find_toolchain_lib(libstdc++.a) -endif() diff --git a/arch/arm64/src/Toolchain.defs b/arch/arm64/src/Toolchain.defs index cb704ce85d8..c01ce0d7486 100644 --- a/arch/arm64/src/Toolchain.defs +++ b/arch/arm64/src/Toolchain.defs @@ -274,6 +274,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif +ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y) + EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a)) +endif + ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) endif diff --git a/arch/arm64/src/cmake/platform.cmake b/arch/arm64/src/cmake/platform.cmake index 1f5ec30d44b..63a21e00097 100644 --- a/arch/arm64/src/cmake/platform.cmake +++ b/arch/arm64/src/cmake/platform.cmake @@ -45,6 +45,11 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN) nuttx_find_toolchain_lib(libsupc++.a) 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) nuttx_find_toolchain_lib(libgcov.a) endif() diff --git a/arch/avr/src/avr/Toolchain.defs b/arch/avr/src/avr/Toolchain.defs index 994e1fd46fd..fc74397c170 100644 --- a/arch/avr/src/avr/Toolchain.defs +++ b/arch/avr/src/avr/Toolchain.defs @@ -205,6 +205,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif +ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y) + EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a)) +endif + # Loadable module definitions CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden diff --git a/arch/avr/src/avr32/Toolchain.defs b/arch/avr/src/avr32/Toolchain.defs index 7388b8ea4e7..de75445721b 100644 --- a/arch/avr/src/avr32/Toolchain.defs +++ b/arch/avr/src/avr32/Toolchain.defs @@ -101,6 +101,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif +ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y) + EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a)) +endif + ## Loadable module definitions CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden diff --git a/arch/mips/src/mips32/Toolchain.defs b/arch/mips/src/mips32/Toolchain.defs index b103d66f013..e1a844cc367 100644 --- a/arch/mips/src/mips32/Toolchain.defs +++ b/arch/mips/src/mips32/Toolchain.defs @@ -316,6 +316,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif +ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y) + EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a)) +endif + # Loadable module definitions CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden diff --git a/arch/misoc/src/lm32/Toolchain.defs b/arch/misoc/src/lm32/Toolchain.defs index c81a98bd125..a0d5b368cd3 100644 --- a/arch/misoc/src/lm32/Toolchain.defs +++ b/arch/misoc/src/lm32/Toolchain.defs @@ -132,6 +132,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif +ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y) + EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a)) +endif + # Loadable module definitions CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden diff --git a/arch/misoc/src/minerva/Toolchain.defs b/arch/misoc/src/minerva/Toolchain.defs index 2ea9bb13b62..b4daf29b330 100644 --- a/arch/misoc/src/minerva/Toolchain.defs +++ b/arch/misoc/src/minerva/Toolchain.defs @@ -80,6 +80,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif +ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y) + EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a)) +endif + # Loadable module definitions CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden diff --git a/arch/or1k/src/mor1kx/Toolchain.defs b/arch/or1k/src/mor1kx/Toolchain.defs index ffc8adbb6f5..ee5d116e2bf 100644 --- a/arch/or1k/src/mor1kx/Toolchain.defs +++ b/arch/or1k/src/mor1kx/Toolchain.defs @@ -118,6 +118,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif +ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y) + EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a)) +endif + # Loadable module definitions CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden diff --git a/arch/risc-v/src/cmake/platform.cmake b/arch/risc-v/src/cmake/platform.cmake index 70e7335f11a..44cb48675ff 100644 --- a/arch/risc-v/src/cmake/platform.cmake +++ b/arch/risc-v/src/cmake/platform.cmake @@ -37,41 +37,23 @@ endforeach() separate_arguments(CMAKE_C_FLAG_ARGS NATIVE_COMMAND ${CMAKE_C_FLAGS}) -execute_process( - 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}) +nuttx_find_toolchain_lib() if(CONFIG_LIBM_TOOLCHAIN) - execute_process( - 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}) + nuttx_find_toolchain_lib(libm.a) endif() if(CONFIG_LIBSUPCXX_TOOLCHAIN) - execute_process( - COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS} - --print-file-name=libsupc++.a - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE extra_library) - list(APPEND EXTRA_LIB ${extra_library}) + nuttx_find_toolchain_lib(libsupc++.a) +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) - execute_process( - 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}) + nuttx_find_toolchain_lib(libgcov.a) endif() -nuttx_add_extra_library(${EXTRA_LIB}) - set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c) diff --git a/arch/risc-v/src/common/Toolchain.defs b/arch/risc-v/src/common/Toolchain.defs index 760874413e4..084bb327582 100644 --- a/arch/risc-v/src/common/Toolchain.defs +++ b/arch/risc-v/src/common/Toolchain.defs @@ -431,6 +431,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif +ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y) + EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a)) +endif + ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) endif diff --git a/arch/tricore/src/cmake/platform.cmake b/arch/tricore/src/cmake/platform.cmake index 1441c069f45..9707020658d 100644 --- a/arch/tricore/src/cmake/platform.cmake +++ b/arch/tricore/src/cmake/platform.cmake @@ -40,39 +40,21 @@ endforeach() separate_arguments(CMAKE_C_FLAG_ARGS NATIVE_COMMAND ${CMAKE_C_FLAGS}) if(CONFIG_TRICORE_TOOLCHAIN_GNU) - execute_process( - 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}) + nuttx_find_toolchain_lib() if(CONFIG_LIBM_TOOLCHAIN) - execute_process( - 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}) + nuttx_find_toolchain_lib(libm.a) endif() if(CONFIG_LIBSUPCXX) - execute_process( - COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS} - --print-file-name=libsupc++.a - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE extra_library) - list(APPEND EXTRA_LIB ${extra_library}) + nuttx_find_toolchain_lib(libsupc++.a) + 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) - execute_process( - 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}) + nuttx_find_toolchain_lib(libgcov.a) endif() - nuttx_add_extra_library(${EXTRA_LIB}) - set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c) endif() diff --git a/arch/x86_64/src/cmake/platform.cmake b/arch/x86_64/src/cmake/platform.cmake index 705f0613edd..7a670b1c066 100644 --- a/arch/x86_64/src/cmake/platform.cmake +++ b/arch/x86_64/src/cmake/platform.cmake @@ -37,52 +37,29 @@ endforeach() separate_arguments(CMAKE_C_FLAG_ARGS NATIVE_COMMAND ${CMAKE_C_FLAGS}) -execute_process( - 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}) +nuttx_find_toolchain_lib() if(CONFIG_LIBM_TOOLCHAIN) - execute_process( - 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}) + nuttx_find_toolchain_lib(libm.a) endif() if(CONFIG_LIBSUPCXX_TOOLCHAIN) - execute_process( - COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS} - --print-file-name=libsupc++.a - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE extra_library) - list(APPEND EXTRA_LIB ${extra_library}) + nuttx_find_toolchain_lib(libsupc++.a) +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) - execute_process( - 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}) + nuttx_find_toolchain_lib(libgcov.a) endif() if(CONFIG_CXX_EXCEPTION) - execute_process( - 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}) + nuttx_find_toolchain_lib(libgcc_eh.a) endif() -nuttx_add_extra_library(${EXTRA_LIB}) - set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c) if(CONFIG_ARCH_MULTIBOOT1) diff --git a/arch/xtensa/src/cmake/platform.cmake b/arch/xtensa/src/cmake/platform.cmake index f9991c71af7..b62a5c75523 100644 --- a/arch/xtensa/src/cmake/platform.cmake +++ b/arch/xtensa/src/cmake/platform.cmake @@ -58,6 +58,14 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN) OUTPUT_VARIABLE extra_library) list(APPEND EXTRA_LIB ${extra_library}) 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) execute_process( COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS} diff --git a/arch/xtensa/src/lx6/Toolchain.defs b/arch/xtensa/src/lx6/Toolchain.defs index fa860849944..f986019d2a7 100644 --- a/arch/xtensa/src/lx6/Toolchain.defs +++ b/arch/xtensa/src/lx6/Toolchain.defs @@ -218,6 +218,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif +ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y) + EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a)) +endif + ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) endif diff --git a/arch/xtensa/src/lx7/Toolchain.defs b/arch/xtensa/src/lx7/Toolchain.defs index 16e5c93971c..a7241b69523 100644 --- a/arch/xtensa/src/lx7/Toolchain.defs +++ b/arch/xtensa/src/lx7/Toolchain.defs @@ -222,6 +222,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a)) endif +ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y) + EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a)) +endif + ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y) EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a)) endif