# C library

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

config REQUIRES_FULL_LIBC
	prompt "Require complete C library"
	bool
	help
	  Select a C library implementation that provides a complete C library
	  implementation, rather than the subset provided by MINIMAL_LIBC.

config FULL_LIBC_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_LIBC is set.

config MINIMAL_LIBC_SUPPORTED
	bool
	default y
	help
	  Selected when the target has support for the minimal C library

config NEWLIB_LIBC_SUPPORTED
	bool
	default y
	depends on "$(TOOLCHAIN_HAS_NEWLIB)" = "y"
	select FULL_LIBC_SUPPORTED
	help
	  Selected when the target has support for the newlib C library

# 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 ("$(TOOLCHAIN_HAS_PICOLIBC)" = "y") || (NATIVE_LIBRARY)
	depends on !REQUIRES_FULL_LIBCPP || ("$(TOOLCHAIN_HAS_PICOLIBC)" = "y")
	default y
	select FULL_LIBC_SUPPORTED
	help
	  Selected when the target has support for picolibc.

config SUPPORT_MINIMAL_LIBC
	bool
	select MINIMAL_LIBC_SUPPORTED
	select DEPRECATED
	help
	  Legacy symbol that selects MINIMAL_LIBC_SUPPORTED

menu "C Library"

choice LIBC_IMPLEMENTATION
	prompt "C Library Implementation"
	default EXTERNAL_LIBC if NATIVE_BUILD
	default PICOLIBC
	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 MINIMAL_LIBC_SUPPORTED
	imply COMPILER_FREESTANDING
	select COMMON_LIBC_ABORT
	select COMMON_LIBC_STRNLEN
	help
	  Build with minimal C library.

config PICOLIBC
	bool "Picolibc library"
	select COMMON_LIBC_ABORT
	select THREAD_LOCAL_STORAGE if ARCH_HAS_THREAD_LOCAL_STORAGE && TOOLCHAIN_SUPPORTS_THREAD_LOCAL_STORAGE
	select LIBC_ERRNO if THREAD_LOCAL_STORAGE
	select NEED_LIBC_MEM_PARTITION
	imply COMMON_LIBC_MALLOC
	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"
	select COMMON_LIBC_ABORT
	depends on !NATIVE_APPLICATION
	depends on NEWLIB_LIBC_SUPPORTED
	select NEED_LIBC_MEM_PARTITION
	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 "common/Kconfig"
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 || (NATIVE_LIBRARY && EXTERNAL_LIBC))
	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
