204 lines
6.3 KiB
Plaintext
204 lines
6.3 KiB
Plaintext
# Copyright © 2021 Amazon.com, Inc. or its affiliates.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
if PICOLIBC
|
|
|
|
choice PICOLIBC_SOURCE
|
|
prompt "Source of Picolibc"
|
|
default PICOLIBC_USE_TOOLCHAIN if REQUIRES_FULL_LIBCPP || "$(TOOLCHAIN_HAS_PICOLIBC)" = "y"
|
|
default PICOLIBC_USE_MODULE
|
|
|
|
config PICOLIBC_USE_MODULE
|
|
bool "Picolibc from module"
|
|
depends on ZEPHYR_PICOLIBC_MODULE
|
|
depends on !GLIBCXX_LIBCPP
|
|
help
|
|
Use picolibc module instead of picolibc included with toolchain.
|
|
This is enabled by default for toolchains other than the Zephyr
|
|
SDK.
|
|
|
|
# force TLS when using toolchain with TLS support
|
|
config PICOLIBC_USE_TOOLCHAIN
|
|
bool "Picolibc from toolchain"
|
|
depends on "$(TOOLCHAIN_HAS_PICOLIBC)" = "y"
|
|
select THREAD_LOCAL_STORAGE if ARCH_HAS_THREAD_LOCAL_STORAGE && TOOLCHAIN_SUPPORTS_THREAD_LOCAL_STORAGE
|
|
help
|
|
Use picolibc included with the toolchain.
|
|
This is required when using a full C++ standard library (`REQUIRES_FULL_LIBCPP=y`).
|
|
|
|
endchoice # PICOLIBC_SOURCE
|
|
|
|
choice PICOLIBC_IO_LEVEL
|
|
prompt "Picolibc printf/scanf level"
|
|
default PICOLIBC_IO_MINIMAL if CBPRINTF_NANO
|
|
default PICOLIBC_IO_LONG_LONG if CBPRINTF_FULL_INTEGRAL
|
|
default PICOLIBC_IO_INTEGER
|
|
help
|
|
Selects the level of printf and scanf support
|
|
|
|
config PICOLIBC_IO_FLOAT
|
|
bool "full support for integer/floating point values in printf/scanf"
|
|
help
|
|
Include full floating point and integer support in printf/scanf
|
|
functions.
|
|
|
|
config PICOLIBC_IO_LONG_LONG
|
|
bool "full support for integer values, including long long, in printf/scanf"
|
|
depends on !REQUIRES_FLOAT_PRINTF && (!CBPRINTF_FP_SUPPORT || CBPRINTF_NANO)
|
|
help
|
|
Includes full integer with long long, but no floating
|
|
point in printf/scanf.
|
|
|
|
config PICOLIBC_IO_INTEGER
|
|
bool "full support for integer values, other than long long, in printf/scanf"
|
|
depends on !REQUIRES_FLOAT_PRINTF && ((!CBPRINTF_FP_SUPPORT && !CBPRINTF_FULL_INTEGRAL) || CBPRINTF_NANO)
|
|
help
|
|
Include full integer other than long long, but no floating point
|
|
in printf/scanf.
|
|
|
|
config PICOLIBC_IO_MINIMAL
|
|
bool "limited support for integer values in printf/scanf"
|
|
depends on !REQUIRES_FLOAT_PRINTF && CBPRINTF_NANO
|
|
help
|
|
Include limited integer and no floating point support in
|
|
printf/scanf.
|
|
|
|
endchoice
|
|
|
|
if PICOLIBC_USE_MODULE
|
|
|
|
choice PICOLIBC_OPTIMIZATIONS
|
|
prompt "Optimization level"
|
|
default PICOLIBC_SIZE_OPTIMIZATIONS if SIZE_OPTIMIZATIONS
|
|
default PICOLIBC_SPEED_OPTIMIZATIONS if SPEED_OPTIMIZATIONS
|
|
default PICOLIBC_DEBUG_OPTIMIZATIONS if DEBUG_OPTIMIZATIONS
|
|
default PICOLIBC_NO_OPTIMIZATIONS if NO_OPTIMIZATIONS
|
|
help
|
|
Note that these flags shall only control the compiler
|
|
optimization level for picolibc, not the level for the
|
|
rest of Zephyr
|
|
|
|
config PICOLIBC_SIZE_OPTIMIZATIONS
|
|
bool "Optimize for size"
|
|
help
|
|
Compiler optimizations will be set to -Os independently of other
|
|
options.
|
|
|
|
config PICOLIBC_SPEED_OPTIMIZATIONS
|
|
bool "Optimize for speed"
|
|
help
|
|
Compiler optimizations will be set to -O2 independently of other
|
|
options.
|
|
|
|
config PICOLIBC_DEBUG_OPTIMIZATIONS
|
|
bool "Optimize debugging experience"
|
|
help
|
|
Compiler optimizations will be set to -Og independently of other
|
|
options.
|
|
|
|
config PICOLIBC_NO_OPTIMIZATIONS
|
|
bool "Optimize nothing"
|
|
help
|
|
Compiler optimizations will be set to -O0 independently of other
|
|
options.
|
|
|
|
endchoice
|
|
|
|
config PICOLIBC_FAST_STRCMP
|
|
bool "always use fast strcmp paths"
|
|
default y
|
|
help
|
|
This provides a faster strcmp version even when libc is
|
|
built in space-optimized mode
|
|
|
|
config PICOLIBC_ASSERT_VERBOSE
|
|
bool "assert provides verbose information"
|
|
help
|
|
The usual picolibc assert helper, __assert_func, takes file, line,
|
|
function and expression information to make the presented message
|
|
more helpful. These all require storage in the image. Unselecting
|
|
this option eliminates all of that information, making the results
|
|
less helpful but also making them consume less memory.
|
|
|
|
config PICOLIBC_IO_C99_FORMATS
|
|
bool "support C99 format additions in printf/scanf"
|
|
default y
|
|
help
|
|
Includes C99 printf and scanf support for j, z, t size
|
|
modifiers. C99 support is always included in the floating-point
|
|
variant
|
|
|
|
config PICOLIBC_IO_POS_ARGS
|
|
bool "Support POSIX positional args (e.g. %$1d) in printf/scanf"
|
|
default y
|
|
depends on !PICOLIBC_IO_MINIMAL
|
|
help
|
|
Includes support for positional args (e.g. $1) in integer-only
|
|
printf and scanf. Positional args are always supported in the
|
|
floating-point variant.
|
|
|
|
config PICOLIBC_IO_FLOAT_EXACT
|
|
bool "support for exact float/string conversion"
|
|
default y
|
|
help
|
|
Uses Ryu algorithm for exact binary/decimal float conversions.
|
|
This ensures that printf values with enough digits can be
|
|
fed to scanf and generate exactly the same binary value.
|
|
|
|
config PICOLIBC_IO_SMALL_ULTOA
|
|
bool "avoid soft division in printf"
|
|
default y
|
|
help
|
|
Replaces division and modulus by 10 with shifts and adds when
|
|
doing binary to decimal conversion in printf for 64-bit
|
|
values on 32-bit targets.
|
|
|
|
config PICOLIBC_IO_MINIMAL_LONG_LONG
|
|
bool "Include long long support in minimal printf"
|
|
depends on PICOLIBC_IO_MINIMAL
|
|
default y if CBPRINTF_FULL_INTEGRAL
|
|
help
|
|
Include long long support in the minimal picolibc printf code
|
|
|
|
config PICOLIBC_LOCALE_INFO
|
|
bool "support locales in libc functions"
|
|
help
|
|
Includes code for basic locale support
|
|
|
|
config PICOLIBC_LOCALE_EXTENDED_INFO
|
|
bool "support extended locales in libc functions"
|
|
help
|
|
Includes code for extended locale support
|
|
|
|
config PICOLIBC_MULTIBYTE
|
|
bool "support multibyte functions in libc"
|
|
help
|
|
Includes code for multi-byte characters
|
|
|
|
config PICOLIBC_PICOEXIT
|
|
bool "use smaller atexit/onexit implementation"
|
|
default y
|
|
help
|
|
Provides a simpler atexit/onexit implementation that doesn't use
|
|
malloc, but only supports a small number (32) of exit handlers.
|
|
|
|
config PICOLIBC_MULTITHREAD
|
|
bool "support multiple threads using retargetable locking API"
|
|
default y
|
|
help
|
|
Protects shared data structures in libc with mutexes that use
|
|
an API which can be retargeted to OS provided routines.
|
|
|
|
config PICOLIBC_GLOBAL_ERRNO
|
|
bool "use a single global variable for errno"
|
|
help
|
|
Picolibc usually uses a TLS variable for errno, ensuring that
|
|
multiple threads have a reliable mechanism for detecting libc
|
|
exceptions. This option switches to a single global errno variable,
|
|
which can be used to avoid TLS variable usage by the library if
|
|
necessary.
|
|
|
|
endif # PICOLIBC_USE_MODULE
|
|
|
|
endif # PICOLIBC
|