Skip to content

Commit b4a3aa4

Browse files
stephanosiotpambor
authored andcommitted
cmake: toolchain: Introduce TOOLCHAIN_HAS_LIBCXX
This commit introduces `TOOLCHAIN_HAS_LIBCXX` CMake variable, which is set to `y` when LLVM C++ Standard Library aka. libc++ is available. This helps filter libc++-specific Kconfig and tests in a more refined manner. Signed-off-by: Stephanos Ioannidis <[email protected]>
1 parent cbceeb4 commit b4a3aa4

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

cmake/modules/kconfig.cmake

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@ else()
135135
set(_local_TOOLCHAIN_HAS_GLIBCXX n)
136136
endif()
137137

138+
if(TOOLCHAIN_HAS_LIBCXX)
139+
set(_local_TOOLCHAIN_HAS_LIBCXX y)
140+
else()
141+
set(_local_TOOLCHAIN_HAS_LIBCXX n)
142+
endif()
143+
138144
# APP_DIR: Path to the main image (sysbuild) or synonym for APPLICATION_SOURCE_DIR (non-sysbuild)
139145
zephyr_get(APP_DIR VAR APP_DIR APPLICATION_SOURCE_DIR)
140146

@@ -164,6 +170,7 @@ set(COMMON_KCONFIG_ENV_SETTINGS
164170
TOOLCHAIN_HAS_NEWLIB=${_local_TOOLCHAIN_HAS_NEWLIB}
165171
TOOLCHAIN_HAS_PICOLIBC=${_local_TOOLCHAIN_HAS_PICOLIBC}
166172
TOOLCHAIN_HAS_GLIBCXX=${_local_TOOLCHAIN_HAS_GLIBCXX}
173+
TOOLCHAIN_HAS_LIBCXX=${_local_TOOLCHAIN_HAS_LIBCXX}
167174
EDT_PICKLE=${EDT_PICKLE}
168175
# Export all Zephyr modules to Kconfig
169176
${ZEPHYR_KCONFIG_MODULES_DIR}

cmake/toolchain/llvm/generic.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,6 @@ if(NOT LLVM_TOOLCHAIN_PATH STREQUAL "")
4141
endif()
4242
endif()
4343

44+
set(TOOLCHAIN_HAS_LIBCXX ON CACHE BOOL "True if toolchain supports libc++")
45+
4446
message(STATUS "Found toolchain: llvm (clang/ld)")

cmake/toolchain/xt-clang/generic.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ set(LINKER xt-ld)
1616
# obtain license information from remote licensing servers. So here
1717
# forces the assembler ID to be GNU to speed things up a bit.
1818
set(CMAKE_ASM_COMPILER_ID "GNU")
19+
set(TOOLCHAIN_HAS_LIBCXX ON CACHE BOOL "True if toolchain supports libc++")
1920

2021
message(STATUS "Found toolchain: xt-clang (${XTENSA_TOOLCHAIN_PATH})")

lib/cpp/Kconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ config FULL_LIBCPP_SUPPORTED
101101
choice LIBCPP_IMPLEMENTATION
102102
prompt "C++ Standard Library Implementation"
103103
default EXTERNAL_LIBCPP if REQUIRES_FULL_LIBCPP && NATIVE_BUILD
104-
default LIBCXX_LIBCPP if REQUIRES_FULL_LIBCPP && "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "llvm"
104+
default LIBCXX_LIBCPP if REQUIRES_FULL_LIBCPP && "$(TOOLCHAIN_HAS_LIBCXX)" = "y"
105105
default GLIBCXX_LIBCPP if REQUIRES_FULL_LIBCPP && "$(TOOLCHAIN_HAS_GLIBCXX)" = "y"
106106
default MINIMAL_LIBCPP
107107

@@ -126,8 +126,8 @@ config GLIBCXX_LIBCPP
126126

127127
config LIBCXX_LIBCPP
128128
bool "LLVM C++ Standard Library"
129+
depends on "$(TOOLCHAIN_HAS_LIBCXX)" = "y"
129130
depends on NEWLIB_LIBC
130-
depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "llvm"
131131
select FULL_LIBCPP_SUPPORTED
132132
help
133133
Build with LLVM C++ Standard Library (libc++) provided by LLVM

0 commit comments

Comments
 (0)