# Copyright © 2021 Amazon.com, Inc. or its affiliates. # SPDX-License-Identifier: Apache-2.0 if PICOLIBC config PICOLIBC_USE_MODULE bool "Picolibc as module" if "$(TOOLCHAIN_HAS_PICOLIBC)" = "y" default y if "$(TOOLCHAIN_HAS_PICOLIBC)" != "y" 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 default y if PICOLIBC && !PICOLIBC_USE_MODULE select THREAD_LOCAL_STORAGE if ARCH_HAS_THREAD_LOCAL_STORAGE && TOOLCHAIN_SUPPORTS_THREAD_LOCAL_STORAGE 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