| # 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 | 
 |  | 
 | config PICOLIBC_SUPPORTED | 
 | 	bool | 
 | 	depends on ARC || ARM || ARM64 || MIPS || RISCV | 
 | 	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 | 
 | 	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 | 
 |  | 
 | if PICOLIBC | 
 |  | 
 | source "lib/libc/picolibc/Kconfig" | 
 |  | 
 | endif # PICOLIBC | 
 |  | 
 | if NEWLIB_LIBC | 
 |  | 
 | config NEWLIB_LIBC_NANO | 
 | 	bool "Build with newlib-nano C library" | 
 | 	depends on HAS_NEWLIB_LIBC_NANO | 
 | 	default y | 
 | 	help | 
 | 	  Build with newlib-nano library, for small embedded apps. | 
 | 	  The newlib-nano library for ARM embedded processors is a part of the | 
 | 	  GNU Tools for ARM Embedded Processors. | 
 |  | 
 | config NEWLIB_LIBC_MAX_MAPPED_REGION_SIZE | 
 | 	int "Maximum memory mapped for newlib heap" | 
 | 	depends on MMU | 
 | 	default 1048576 | 
 | 	help | 
 | 	  On MMU-based systems, indicates the maximum amount of memory which | 
 | 	  will be used for the newlib malloc() heap. The actual amount of | 
 | 	  memory used will be the minimum of this value and the amount of | 
 | 	  free physical memory at kernel boot. | 
 |  | 
 | config NEWLIB_LIBC_MIN_REQUIRED_HEAP_SIZE | 
 | 	int "Newlib minimum required heap size" | 
 | 	default 2048 if NEWLIB_LIBC_NANO | 
 | 	default 8192 if !NEWLIB_LIBC_NANO | 
 | 	help | 
 | 	  Specifies the amount of memory space that must be available for the | 
 | 	  newlib heap. An assertion failure message will be displayed during | 
 | 	  initialization if the memory space available for the newlib heap is | 
 | 	  smaller than this value. | 
 |  | 
 | config NEWLIB_LIBC_ALIGNED_HEAP_SIZE | 
 | 	int "Newlib aligned heap size" | 
 | 	depends on MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT | 
 | 	depends on USERSPACE | 
 | 	default 0 | 
 | 	help | 
 | 	  If user mode is enabled, and MPU hardware has requirements that | 
 | 	  regions be sized to a power of two and aligned to their size, | 
 | 	  and user mode threads need to access this heap, then this is necessary | 
 | 	  to properly define an MPU region for the heap. | 
 |  | 
 | 	  If this is left at 0, then remaining system RAM will be used for this | 
 | 	  area and it may not be possible to program it as an MPU region. | 
 |  | 
 | config NEWLIB_LIBC_FLOAT_PRINTF | 
 | 	bool "Build with newlib float printf" | 
 | 	help | 
 | 	  Build with floating point printf enabled. This will increase the size of | 
 | 	  the image. | 
 |  | 
 | config NEWLIB_LIBC_FLOAT_SCANF | 
 | 	bool "Build with newlib float scanf" | 
 | 	help | 
 | 	  Build with floating point scanf enabled. This will increase the size of | 
 | 	  the image. | 
 |  | 
 | config NEWLIB_LIBC_HEAP_LISTENER | 
 | 	bool "Notify heap listeners of newlib libc heap events" | 
 | 	select HEAP_LISTENER | 
 | 	help | 
 | 	  Notify registered heap listeners upon certain events related to the newlib | 
 | 	  libc heap usage, such as the heap resize. | 
 |  | 
 | endif # NEWLIB_LIBC | 
 |  | 
 | if MINIMAL_LIBC | 
 |  | 
 | config MINIMAL_LIBC_NON_REENTRANT_FUNCTIONS | 
 | 	bool "Non-reentrant functions" | 
 | 	default y if !USERSPACE | 
 | 	select NEED_LIBC_MEM_PARTITION | 
 | 	help | 
 | 	  Enable non-reentrant functions that make use of the globals; e.g. | 
 | 	  rand() and gmtime(). The globals must be put into a dedicated C | 
 | 	  library memory partition when CONFIG_USERSPACE=y, and enabling this | 
 | 	  option may require an additional memory protection region. | 
 |  | 
 | config MINIMAL_LIBC_MALLOC | 
 | 	bool "Minimal libc malloc implementation" | 
 | 	default y | 
 | 	help | 
 | 	  Enable the minimal libc's implementation of malloc, free, and realloc. | 
 | 	  Disable if you wish to provide your own implementations of these functions. | 
 |  | 
 | config MINIMAL_LIBC_MALLOC_ARENA_SIZE | 
 | 	int "Size of the minimal libc malloc arena" | 
 | 	default 0 | 
 | 	depends on MINIMAL_LIBC_MALLOC | 
 | 	help | 
 | 	  Indicate the size in bytes of the memory arena used for | 
 | 	  minimal libc's malloc() implementation. | 
 |  | 
 | config MINIMAL_LIBC_CALLOC | 
 | 	bool "Minimal libc trivial calloc implementation" | 
 | 	default y | 
 | 	help | 
 | 	  Enable the minimal libc's trivial implementation of calloc, which | 
 | 	  forwards to malloc and memset. | 
 |  | 
 | config MINIMAL_LIBC_REALLOCARRAY | 
 | 	bool "Minimal libc trivial reallocarray implementation" | 
 | 	default y | 
 | 	help | 
 | 	  Enable the minimal libc's trivial implementation of reallocarray, which | 
 | 	  forwards to realloc. | 
 |  | 
 | config MINIMAL_LIBC_LL_PRINTF | 
 | 	bool "Build with minimal libc long long printf" if !64BIT | 
 | 	default y if 64BIT | 
 | 	help | 
 | 	  Build with long long printf enabled. This will increase the size of | 
 | 	  the image. | 
 |  | 
 | config MINIMAL_LIBC_OPTIMIZE_STRING_FOR_SIZE | 
 | 	bool "Use size optimized string functions" | 
 | 	default y if SIZE_OPTIMIZATIONS | 
 | 	help | 
 | 	  Enable smaller but potentially slower implementations of memcpy and | 
 | 	  memset. On the Cortex-M0+ this reduces the total code size by 120 bytes. | 
 |  | 
 | config MINIMAL_LIBC_RAND | 
 | 	bool "Rand and srand functions" | 
 | 	help | 
 | 	  Enable rand_r() for the minimal libc. | 
 |  | 
 | 	  In order to make use of the non-reentrant rand() and srand(), it is | 
 | 	  necessary to set CONFIG_MINIMAL_LIBC_NON_REENTRANT_FUNCTIONS=y. | 
 |  | 
 | config MINIMAL_LIBC_TIME | 
 | 	bool "Time functions" | 
 | 	default y | 
 | 	help | 
 | 	  Enable time() and gmtime_r() for the minimal libc. | 
 |  | 
 | 	  time() requires CONFIG_POSIX_CLOCK=y because it relies on the POSIX | 
 | 	  clock_gettime() function. | 
 |  | 
 | 	  In order to make use of the non-reentrant gmtime(), it is necessary | 
 | 	  to set CONFIG_MINIMAL_LIBC_NON_REENTRANT_FUNCTIONS=y. | 
 |  | 
 | config MINIMAL_LIBC_STRING_ERROR_TABLE | 
 | 	bool "String error table for strerror() and strerror_r()" | 
 | 	help | 
 | 	  Select this option to ensure that streror(), strerror_r() | 
 | 	  produce strings corresponding to the descriptions in errno.h. | 
 |  | 
 | 	  The string error table can add ~2kiB to ROM. As such, it is | 
 | 	  disabled by default. In this case, strerror() and strerror_r() | 
 | 	  symbols are still present, but the functions produce an empty | 
 | 	  string. | 
 |  | 
 | endif # MINIMAL_LIBC | 
 |  | 
 | 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 |