# 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 REQUIRES_FLOAT_PRINTF bool "Requires floating point support in printf" select CBPRINTF_FP_SUPPORT if MINIMAL_LIBC select NEWLIB_LIBC_FLOAT_PRINTF if NEWLIB_LIBC help Select a printf implementation that provides a complete implementation including floating point support. 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 depends on !NATIVE_APPLICATION 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" depends on !NATIVE_APPLICATION 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") || (ZEPHYR_PICOLIBC_MODULE && !REQUIRES_FULL_LIBCPP) default y select FULL_LIBC_SUPPORTED help Selected when the target has support for picolibc. config NATIVE_LIBC_INCOMPATIBLE bool help Other Kconfig options can select this, if they are not compatible with the native/host libC, and should only be compiled with an embedded libC menu "C Library" choice LIBC_IMPLEMENTATION prompt "C Library Implementation" default EXTERNAL_LIBC if NATIVE_BUILD && !(NATIVE_LIBRARY && NATIVE_LIBC_INCOMPATIBLE) default PICOLIBC default NEWLIB_LIBC if REQUIRES_FULL_LIBC default MINIMAL_LIBC config MINIMAL_LIBC bool "Minimal C library" depends on !REQUIRES_FULL_LIBC depends on MINIMAL_LIBC_SUPPORTED imply COMPILER_FREESTANDING select COMMON_LIBC_ABORT select COMMON_LIBC_STRNLEN imply COMMON_LIBC_MALLOC imply COMMON_LIBC_CALLOC imply COMMON_LIBC_REALLOCARRAY help Build with minimal C library. config PICOLIBC bool "Picolibc library" select COMMON_LIBC_ABORT imply 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 select TC_PROVIDES_POSIX_C_LANG_SUPPORT_R imply COMMON_LIBC_MALLOC 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 NEWLIB_LIBC_SUPPORTED select NEED_LIBC_MEM_PARTITION imply POSIX_DEVICE_IO_ALIAS_CLOSE imply POSIX_DEVICE_IO_ALIAS_OPEN imply POSIX_DEVICE_IO_ALIAS_READ imply POSIX_DEVICE_IO_ALIAS_WRITE imply POSIX_FD_MGMT_ALIAS_LSEEK imply POSIX_FILE_SYSTEM_ALIAS_FSTAT imply POSIX_MULTI_PROCESS_ALIAS_GETPID imply POSIX_SIGNALS_ALIAS_KILL 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