#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

comment "Basic CXX Support"

config HAVE_CXX
	bool "Have C++ compiler"
	default n
	---help---
		Toolchain supports C++ and CXX, CXXFLAGS, and COMPILEXX have been
		defined in the configurations Make.defs file.

config HAVE_CXXINITIALIZE
	bool "Have C++ initialization"
	default n
	---help---
		The platform-specific logic includes support for initialization
		of static C++ instances for this architecture and for the selected
		toolchain.

if HAVE_CXX

choice
	prompt "C++ Library"
	default LIBCXXMINI

config LIBCXXTOOLCHAIN
	bool "Toolchain C++ support"
	select HAVE_CXXINITIALIZE
	select LIBC_LOCALE
	---help---
		Use Standard C++ library from toolchain.

config LIBCXXMINI
	bool "Basic C++ support"
	---help---
		A fragmentary C++ library that will allow to build only
		the simplest of C++ applications. Only contain basic C++
		runtime support function.

config LIBCXX
	bool "LLVM libc++ C++ Standard Library"
	select HAVE_CXXINITIALIZE
	select PTHREAD_MUTEX_TYPES
	depends on TLS_NELEM > 0
	---help---
		LLVM "libc++" C++ Standard Library
		https://libcxx.llvm.org/

config UCLIBCXX
	bool "uClibc++ Standard C++ Library"
	select HAVE_CXXINITIALIZE
	depends on ALLOW_GPL_COMPONENTS
	---help---
		uClibc++ C++ library
		https://cxx.uclibc.org/

endchoice

config ETL
	bool "Embedded Template Library (ETL)"
	depends on LIBCXXMINI && ALLOW_MIT_COMPONENTS
	---help---
		ETL A C++ Template library for Embedded applications
		Implements C++ templates such as containers, string
		singleton math without C++ STL libraries

if !LIBCXXMINI

choice
	prompt "C++ low level library select"
	default LIBSUPCXX_TOOLCHAIN

config LIBCXXABI
	bool "LLVM low level C++ Library"
	---help---
		LLVM "libc++abi" C++ Standard Library
		https://libcxxabi.llvm.org/
		Select if your use libc++abi as lower level c++ library

config LIBSUPCXX
	bool "GNU compile low level libsupc++"
	---help---
		Select if your compile libsupc++ and use libsupc++ as lower
		level c++ library.

config LIBSUPCXX_TOOLCHAIN
	bool "GNU low level libsupc++"
	---help---
		Select if your toolchain provides libsupc++ and use toolchain libsupc++ as lower
		level c++ library.

endchoice

endif

config LIBCXXABI_VERSION
	string "Select libcxxabi version"
	depends on LIBCXXABI
	default LIBCXX_VERSION if LIBCXX
	default "17.0.6" if !LIBCXX

config CXX_STANDARD
	string "Language standard"
	default "gnu++20" if LIBCXX
	default "gnu++17" if !LIBCXX
	---help---
		Possible values:
		gnu++98/c++98, gnu++11/c++11, gnu++14/c++14, gnu++17/c++17 and gnu++20/c++20

config CXX_EXCEPTION
	bool "Enable Exception Support"

config CXX_RTTI
	bool "Enable RTTI Support"

config CXX_WCHAR
	bool "Enable Wide Character Support"

config CXX_LOCALIZATION
	bool "Enable Locale and Stream Support"
	depends on LIBC_LOCALE

if UCLIBCXX

config UCLIBCXX_BUFSIZE
	int "IO Stream/Container Buffer Size"
	default 32

endif

config LIBCXX_VERSION
	string "Select libcxx version"
	depends on LIBCXX
	default "17.0.6"

endif
