Skip to content

Commit 7f14832

Browse files
committed
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>
1 parent 148f0ce commit 7f14832

16 files changed

Lines changed: 80 additions & 90 deletions

File tree

arch/arm/src/cmake/platform.cmake

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN)
8585
nuttx_find_toolchain_lib(libsupc++.a)
8686
endif()
8787

88-
if(CONFIG_COVERAGE_TOOLCHAIN)
89-
nuttx_find_toolchain_lib(libgcov.a)
90-
endif()
91-
9288
if(CONFIG_LIBCXXTOOLCHAIN)
9389
nuttx_find_toolchain_lib(libstdc++.a)
9490
endif()
91+
92+
if(CONFIG_COVERAGE_TOOLCHAIN)
93+
nuttx_find_toolchain_lib(libgcov.a)
94+
endif()

arch/arm64/src/Toolchain.defs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
274274
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
275275
endif
276276

277+
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
278+
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
279+
endif
280+
277281
ifeq ($(CONFIG_COVERAGE_TOOLCHAIN),y)
278282
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libgcov.a))
279283
endif

arch/arm64/src/cmake/platform.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ if(CONFIG_LIBSUPCXX_TOOLCHAIN)
4545
nuttx_find_toolchain_lib(libsupc++.a)
4646
endif()
4747

48+
if(CONFIG_LIBCXXTOOLCHAIN)
49+
nuttx_find_toolchain_lib(libstdc++.a)
50+
endif()
51+
4852
if(CONFIG_COVERAGE_TOOLCHAIN)
4953
nuttx_find_toolchain_lib(libgcov.a)
5054
endif()

arch/avr/src/avr/Toolchain.defs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
205205
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
206206
endif
207207

208+
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
209+
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
210+
endif
211+
208212
# Loadable module definitions
209213

210214
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden

arch/avr/src/avr32/Toolchain.defs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
101101
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
102102
endif
103103

104+
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
105+
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
106+
endif
107+
104108
## Loadable module definitions
105109

106110
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden

arch/mips/src/mips32/Toolchain.defs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
316316
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
317317
endif
318318

319+
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
320+
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
321+
endif
322+
319323
# Loadable module definitions
320324

321325
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden

arch/misoc/src/lm32/Toolchain.defs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
132132
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
133133
endif
134134

135+
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
136+
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
137+
endif
138+
135139
# Loadable module definitions
136140

137141
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden

arch/misoc/src/minerva/Toolchain.defs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
8080
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
8181
endif
8282

83+
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
84+
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
85+
endif
86+
8387
# Loadable module definitions
8488

8589
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden

arch/or1k/src/mor1kx/Toolchain.defs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ ifeq ($(CONFIG_LIBSUPCXX_TOOLCHAIN),y)
118118
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libsupc++.a))
119119
endif
120120

121+
ifeq ($(CONFIG_LIBCXXTOOLCHAIN),y)
122+
EXTRA_LIBS += $(wildcard $(shell $(CC) $(ARCHCPUFLAGS) --print-file-name=libstdc++.a))
123+
endif
124+
121125
# Loadable module definitions
122126

123127
CMODULEFLAGS = $(CFLAGS) -fvisibility=hidden

arch/risc-v/src/cmake/platform.cmake

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -37,41 +37,22 @@ endforeach()
3737

3838
separate_arguments(CMAKE_C_FLAG_ARGS NATIVE_COMMAND ${CMAKE_C_FLAGS})
3939

40-
execute_process(
41-
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
42-
--print-libgcc-file-name
43-
OUTPUT_STRIP_TRAILING_WHITESPACE
44-
OUTPUT_VARIABLE extra_library)
45-
46-
list(APPEND EXTRA_LIB ${extra_library})
40+
nuttx_find_toolchain_lib()
4741

4842
if(CONFIG_LIBM_TOOLCHAIN)
49-
execute_process(
50-
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
51-
--print-file-name=libm.a
52-
OUTPUT_STRIP_TRAILING_WHITESPACE
53-
OUTPUT_VARIABLE extra_library)
54-
list(APPEND EXTRA_LIB ${extra_library})
43+
nuttx_find_toolchain_lib(libm.a)
5544
endif()
5645

5746
if(CONFIG_LIBSUPCXX_TOOLCHAIN)
58-
execute_process(
59-
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
60-
--print-file-name=libsupc++.a
61-
OUTPUT_STRIP_TRAILING_WHITESPACE
62-
OUTPUT_VARIABLE extra_library)
63-
list(APPEND EXTRA_LIB ${extra_library})
47+
nuttx_find_toolchain_lib(libsupc++.a)
6448
endif()
6549

66-
if(CONFIG_COVERAGE_TOOLCHAIN)
67-
execute_process(
68-
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
69-
--print-file-name=libgcov.a
70-
OUTPUT_STRIP_TRAILING_WHITESPACE
71-
OUTPUT_VARIABLE extra_library)
72-
list(APPEND EXTRA_LIB ${extra_library})
50+
if(CONFIG_LIBCXXTOOLCHAIN)
51+
nuttx_find_toolchain_lib(libstdc++.a)
7352
endif()
7453

75-
nuttx_add_extra_library(${EXTRA_LIB})
54+
if(CONFIG_COVERAGE_TOOLCHAIN)
55+
nuttx_find_toolchain_lib(libgcov.a)
56+
endif()
7657

7758
set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c)

0 commit comments

Comments
 (0)