|  | # 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 LIBC_ALLOW_LESS_THAN_64BIT_TIME | 
|  | bool "Don't require that time_t be at least 64-bits" | 
|  | default y if NATIVE_LIBC | 
|  | help | 
|  | When selected, time_t will not be required to be at least 64 | 
|  | bits. Background: To avoid Y2038 issues time_t needs to be | 
|  | bigger than 32bits. But some C libraries do not provide or | 
|  | default to a type for time_t which is at least | 
|  | 64bits. Enable this option if your C library defined time_t | 
|  | is more than 32bits (e.g. 48 bits) or are sure your project | 
|  | is not subject to Y2038 issues. | 
|  |  | 
|  | 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 ("$(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 IAR_LIBC_SUPPORTED | 
|  | bool | 
|  | default n | 
|  | select FULL_LIBC_SUPPORTED | 
|  | help | 
|  | Selected if the target is an IAR Systems compiler | 
|  |  | 
|  | 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_LIBC_INCOMPATIBLE | 
|  | default PICOLIBC | 
|  | default NEWLIB_LIBC if REQUIRES_FULL_LIBC | 
|  | default MINIMAL_LIBC | 
|  | default IAR_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 | 
|  | imply COMMON_LIBC_TIME | 
|  | 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 | 
|  | imply COMMON_LIBC_ABORT | 
|  | imply COMMON_LIBC_TIME | 
|  | 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 | 
|  | select TC_PROVIDES_POSIX_C_LANG_SUPPORT_R | 
|  | 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 | 
|  | imply COMMON_LIBC_TIME | 
|  | 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 "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "arcmwdt" | 
|  | select STATIC_INIT_GNU | 
|  | select LIBC_ALLOW_LESS_THAN_64BIT_TIME | 
|  | help | 
|  | C library provided by ARC MWDT toolchain. | 
|  |  | 
|  | config EXTERNAL_LIBC | 
|  | bool "External C library" | 
|  | help | 
|  | Build with external/user provided C library. | 
|  |  | 
|  | config IAR_LIBC | 
|  | bool "IAR C Runtime Library" | 
|  | depends on IAR_LIBC_SUPPORTED | 
|  | depends on "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "iar" | 
|  | select COMMON_LIBC_STRNLEN | 
|  | select COMMON_LIBC_TIME | 
|  | help | 
|  | Use the full IAR Compiler runtime libraries. | 
|  | A reduced Zephyr minimal libc will be used for library functionality | 
|  | not provided by the IAR C Runtime 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_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 |