# C library

# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menu "C Library"

config REQUIRES_FULL_LIBC
	bool
	help
	  Helper symbol to indicate some feature requires a C library implementation
	  with more functionality than what MINIMAL_LIBC provides

config SUPPORT_MINIMAL_LIBC
	bool
	default y

# Picolibc with C++ support in Zephyr SDK is handled by Zephyr SDK's own Kconfig.
config PICOLIBC_SUPPORTED
	bool
	depends on !NATIVE_APPLICATION
	depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "zephyr"
	depends on !(CPP && "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "zephyr")
	# picolibc text is outside .pinned.text on this board. #54148
	default y
	help
	  Selected when the target has support for picolibc.

choice LIBC_IMPLEMENTATION
	prompt "C Library Implementation"
	default EXTERNAL_LIBC if NATIVE_APPLICATION
	default NEWLIB_LIBC if REQUIRES_FULL_LIBC
	default MINIMAL_LIBC

config MINIMAL_LIBC
	bool "Minimal C library"
	depends on !NATIVE_APPLICATION
	depends on !REQUIRES_FULL_LIBC
	depends on SUPPORT_MINIMAL_LIBC
	help
	  Build with minimal C library.

config PICOLIBC
	bool "Picolibc library"
	select THREAD_LOCAL_STORAGE if ARCH_HAS_THREAD_LOCAL_STORAGE && TOOLCHAIN_SUPPORTS_THREAD_LOCAL_STORAGE
	select LIBC_ERRNO if THREAD_LOCAL_STORAGE
	depends on !NATIVE_APPLICATION
	depends on PICOLIBC_SUPPORTED
	help
	  Build with picolibc library. The picolibc library is built as
	  a module if PICOLIBC_MODULE is set, otherwise picolibc is
	  expected to be provided by the toolchain.

config NEWLIB_LIBC
	bool "Newlib C library"
	depends on !NATIVE_APPLICATION
	help
	  Build with newlib library. The newlib library is expected to be
	  part of the SDK in this case.

config ARCMWDT_LIBC
	bool "ARC MWDT C library"
	depends on !NATIVE_APPLICATION
	depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "arcmwdt"
	help
	  C library provided by ARC MWDT toolchain.

config EXTERNAL_LIBC
	bool "External C library"
	help
	  Build with external/user provided C library.

endchoice # LIBC_IMPLEMENTATION

config HAS_NEWLIB_LIBC_NANO
	bool

rsource "minimal/Kconfig"
rsource "newlib/Kconfig"
rsource "picolibc/Kconfig"

config STDOUT_CONSOLE
	bool "Send stdout to console"
	depends on CONSOLE_HAS_DRIVER
	depends on !NATIVE_APPLICATION
	default y
	help
	  This option directs standard output (e.g. printf) to the console
	  device, rather than suppressing it entirely. See also EARLY_CONSOLE
	  option.

config NEED_LIBC_MEM_PARTITION
	bool
	help
	  Hidden option to signal that a memory partition is needed for
	  the C library even though it would not have been enabled
	  otherwise.

endmenu
