blob: 62f5f33415137db0b31108c8d67e5f709b08533a [file] [log] [blame] [edit]
# 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