# C++ configuration options

# Copyright (c) 2018 B. Leforestier
# SPDX-License-Identifier: Apache-2.0

menuconfig CPLUSPLUS
	bool "C++ support for the application"
	help
	  This option enables the use of applications built with C++.

if CPLUSPLUS

choice
	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 CPP_MAIN
	bool "C++ main() function definition"
	help
	  This option instructs the Zephyr kernel to call the 'int main(void)'
	  instead of the 'void main(void)', which is the default main() type
	  for Zephyr.

	  C++ does not allow the main() to be defined with 'void' return type,
	  and any applications defining its main() in a C++ source file must
	  enable this option.

config LIB_CPLUSPLUS
	bool "Link with STD C++ library"
	select REQUIRES_FULL_LIBC
	help
	  Link with STD C++ Library.

if LIB_CPLUSPLUS

config EXCEPTIONS
	bool "C++ exceptions support"
	depends on !NEWLIB_LIBC_NANO
	help
	  This option enables support of C++ exceptions.

config RTTI
	bool "C++ RTTI support"
	help
	  This option enables support of C++ RTTI.

endif # LIB_CPLUSPLUS

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 # CPLUSPLUS
