# C++ configuration options # Copyright (c) 2018 B. Leforestier # SPDX-License-Identifier: Apache-2.0 menu "C++ Language Support" config CPP bool "C++ support for the application" help This option enables the use of applications built with C++. if CPP choice STD_CPP prompt "C++ Standard" default STD_CPP11 help C++ Standards. config STD_CPP98 bool "C++ 98" help 1998 C++ standard as modified by the 2003 technical corrigendum and some later defect reports. config STD_CPP11 bool "C++ 11" help 2011 C++ standard, previously known as C++0x. config STD_CPP14 bool "C++ 14" help 2014 C++ standard. config STD_CPP17 bool "C++ 17" help 2017 C++ standard, previously known as C++0x. config STD_CPP2A bool "C++ 2a" help Next revision of the C++ standard, which is expected to be published in 2020. config STD_CPP20 bool "C++ 20" help 2020 C++ standard, previously known as C++2A. config STD_CPP2B bool "C++ 2b" help Next revision of the C++ standard, which is expected to be published in 2023. endchoice config REQUIRES_FULL_LIBCPP bool "Require complete C++ standard library" select REQUIRES_FULL_LIBC help Indicates that a full C++ standard library is required, either by a subsystem or an application. This will also include a full C library implementation. config FULL_LIBCPP_SUPPORTED bool help Selected when the target has at least one C++ library that offers a complete implementation and which would be selected when REQUIRES_FULL_LIBCPP is set. choice LIBCPP_IMPLEMENTATION prompt "C++ Standard Library Implementation" default EXTERNAL_LIBCPP if REQUIRES_FULL_LIBCPP && NATIVE_BUILD default LIBCXX_LIBCPP if REQUIRES_FULL_LIBCPP && "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "llvm" default GLIBCXX_LIBCPP if REQUIRES_FULL_LIBCPP default MINIMAL_LIBCPP config MINIMAL_LIBCPP bool "Minimal C++ Library" depends on !REQUIRES_FULL_LIBCPP help Build with the minimal C++ library provided by Zephyr. The Zephyr minimal C++ library only provides a very limited subset of the standard C++ library and is mainly intended for use with the applications that do not require the Standard Template Library (STL). config GLIBCXX_LIBCPP bool "GNU C++ Standard Library" depends on !NATIVE_APPLICATION depends on NEWLIB_LIBC || PICOLIBC select FULL_LIBCPP_SUPPORTED help Build with GNU C++ Standard Library (libstdc++) provided by the GNU Compiler Collection (GCC)-based toolchain. config LIBCXX_LIBCPP bool "LLVM C++ Standard Library" depends on !NATIVE_APPLICATION depends on NEWLIB_LIBC depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "llvm" select FULL_LIBCPP_SUPPORTED help Build with LLVM C++ Standard Library (libc++) provided by LLVM toolchain. Information about library can be found at https://libcxx.llvm.org config ARCMWDT_LIBCPP bool "ARC MWDT C++ Library" depends on !NATIVE_APPLICATION depends on ARCMWDT_LIBC help Build with ARC MetaWare C++ Standard Library provided by the ARC MetaWare Development Tools (MWDT) toolchain. config EXTERNAL_LIBCPP bool "External C++ standard library" help Build and link with an external/user-provided C++ standard library. config EXTERNAL_MODULE_LIBCPP bool "External C++ standard library module" help Build an external/user-provided C++ standard library. endchoice # LIBCPP_IMPLEMENTATION config CPP_MAIN bool "[DEPRECATED] C++ main() function definition" select DEPRECATED help This option used to be necessary to instruct the Zephyr kernel to call 'int main(void)' instead of the old Zephyr default, 'void main(void)'. As the Zephyr type now matches the C++ required type, this option is no longer necessary. if !MINIMAL_LIBCPP config CPP_EXCEPTIONS bool "C++ exceptions support" depends on !NEWLIB_LIBC_NANO help This option enables support of C++ exceptions. config CPP_RTTI bool "C++ RTTI support" help This option enables support of C++ RTTI. endif # !MINIMAL_LIBCPP config CPP_STATIC_INIT_GNU # As of today only ARC MWDT toolchain doesn't support GNU-compatible # initialization of CPP static objects, new toolchains can be added # here if required. def_bool "$(ZEPHYR_TOOLCHAIN_VARIANT)" != "arcmwdt" help GNU-compatible initialization of CPP static objects endif # CPP rsource "Kconfig.deprecated" endmenu