You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
6.1 KiB
174 lines
6.1 KiB
# Copyright (c) 2020 Nordic Semiconductor ASA |
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
choice CBPRINTF_IMPLEMENTATION |
|
prompt "Capabilities of cbprintf implementation" |
|
default CBPRINTF_COMPLETE |
|
|
|
config CBPRINTF_COMPLETE |
|
bool "All selected features" |
|
help |
|
Select this for an implementation that supports all potential |
|
conversions, with Kconfig options to control availability at build |
|
time. |
|
|
|
# 80: -53% / 982 B (80 / 00) |
|
config CBPRINTF_NANO |
|
bool "Space-optimized but feature-limited" |
|
# nano needs to count characters if it's the formatter for libc |
|
imply CBPRINTF_LIBC_SUBSTS if MINIMAL_LIBC |
|
help |
|
If selected a completely different implementation of the core |
|
formatting capability is substituted. This has a much smaller code |
|
footprint, but provides fewer capabilities. |
|
|
|
endchoice # CBPRINTF_IMPLEMENTATION |
|
|
|
choice CBPRINTF_INTEGRAL_CONV |
|
prompt "Control range of convertible integer values" |
|
default CBPRINTF_FULL_INTEGRAL |
|
|
|
# 01: 0% / 0 B (01 / 00) |
|
config CBPRINTF_FULL_INTEGRAL |
|
bool "Convert the full range of integer values" |
|
select PICOLIBC_IO_MINIMAL_LONG_LONG if PICOLIBC_IO_MINIMAL && PICOLIBC_USE_MODULE |
|
help |
|
Build cbprintf with buffers sized to support converting the full |
|
range of all integral and pointer values. |
|
|
|
Selecting this may increase code size on 32-bit systems as |
|
GCC's __udivdi3 helper could end up being pulled into the |
|
final binary. In any case, this will increase call stack size |
|
by a few words. |
|
|
|
# 00: |
|
config CBPRINTF_REDUCED_INTEGRAL |
|
bool "Convert only integer values that fit in 32 bits" |
|
help |
|
Build cbprintf with buffers sized to support converting integer |
|
values with no more than 32 bits. |
|
|
|
This will decrease stack space, but affects conversion of any type |
|
with more than 32 bits. This includes not only intmax_t but any |
|
type that can be converted to an integral representation including |
|
size_t and pointers. |
|
|
|
With CBPRINTF_COMPLETE conversions that may result in value-specific |
|
truncation are not supported, and the generated text will be the |
|
specification (e.g. %jd). |
|
|
|
With CBPRINTF_NANO all conversions will be attempted but values that |
|
cannot fit will be silently truncated. |
|
|
|
endchoice |
|
|
|
# 02: 82% / 1530 B (02 / 00) |
|
config CBPRINTF_FP_SUPPORT |
|
bool "Floating point formatting in cbprintf" |
|
default y if FPU |
|
depends on CBPRINTF_COMPLETE |
|
help |
|
Build the cbprintf utility function with support for floating |
|
point format specifiers. Selecting this increases stack size |
|
requirements slightly, but increases code size significantly. |
|
|
|
# 04: 13% / 456 B (07 / 03) |
|
config CBPRINTF_FP_A_SUPPORT |
|
bool "Floating point %a conversions" |
|
depends on CBPRINTF_FULL_INTEGRAL |
|
select CBPRINTF_FP_SUPPORT |
|
help |
|
The %a hexadecimal format for floating point value conversion was |
|
added in C99, but the output is not easily understood so it rarely |
|
appears in application code. |
|
|
|
Selecting this adds support for the conversion, but increases the |
|
overall code size related to FP support. |
|
|
|
# 40: -15% / -508 B (46 / 06) |
|
config CBPRINTF_FP_ALWAYS_A |
|
bool "Select %a format for all floating point specifications" |
|
select CBPRINTF_FP_A_SUPPORT |
|
depends on !PICOLIBC |
|
help |
|
The %a format for floats requires significantly less code than the |
|
standard decimal representations (%f, %e, %g). Selecting this |
|
option implicitly uses %a (or %A) for all decimal floating |
|
conversions. The precision of the original specification is |
|
ignored. |
|
|
|
Selecting this decreases code size when FP_SUPPORT is enabled. |
|
|
|
# 08: 3% / 60 B (08 / 00) |
|
config CBPRINTF_N_SPECIFIER |
|
bool "Support %n specifications" |
|
depends on CBPRINTF_COMPLETE |
|
depends on !PICOLIBC |
|
default y |
|
help |
|
If selected %n can be used to determine the number of characters |
|
emitted. If enabled there is a small increase in code size. |
|
Picolibc does not support this feature for security reasons. |
|
|
|
# 180: 18% / 138 B (180 / 80) [NANO] |
|
config CBPRINTF_LIBC_SUBSTS |
|
bool "Generate C-library compatible functions using cbprintf" |
|
help |
|
If selected wrappers are generated for various C library functions |
|
using the cbprintf formatter underneath. The wrappers use the C |
|
library function name with a cb suffix; e.g. printfcb() or |
|
vsnprintfcb(). |
|
|
|
When used with CBPRINTF_NANO this increases the implementation code |
|
size by a small amount. |
|
|
|
When used with picolibc, this option generates cbprintf-compatible |
|
functions using stdio, effectively inverting the sense above. |
|
|
|
module = CBPRINTF_PACKAGE |
|
module-str = cbprintf_package |
|
source "subsys/logging/Kconfig.template.log_config" |
|
|
|
config CBPRINTF_PACKAGE_LONGDOUBLE |
|
bool "Support packaging of long doubles" |
|
help |
|
Option impact required alignment for buffers used for packaging |
|
(CBPRINTF_PACKAGE_ALIGNMENT). On most platforms long doubles |
|
requires buffer to be 16 bytes aligned. Long doubles are rarely used |
|
so such alignment is an unnecessary waste. If option is disabled, |
|
then compilation fails if long double is used. |
|
|
|
config CBPRINTF_STATIC_PACKAGE_CHECK_ALIGNMENT |
|
bool "Validate alignment of a static package buffer" |
|
# To avoid self referential macro when printk is redirected to logging |
|
depends on !LOG_PRINTK |
|
help |
|
When enabled, CBPRINTF_STATIC_PACKAGE asserts when buffer is not |
|
properly aligned. If macro is widely used then assert may impact |
|
memory footprint. |
|
|
|
config CBPRINTF_PACKAGE_HEADER_STORE_CREATION_FLAGS |
|
bool |
|
help |
|
Enable this option to store the flags used to create the package |
|
into the package itself. |
|
|
|
config CBPRINTF_PACKAGE_SUPPORT_TAGGED_ARGUMENTS |
|
bool |
|
depends on !PICOLIBC |
|
select CBPRINTF_PACKAGE_HEADER_STORE_CREATION_FLAGS |
|
help |
|
Hidden option to support tagged arguments in cbvprint_package(). |
|
If enabled and cbvprint_package() is called with the corresponding |
|
flag, the packaging function no longer looks at the format strings |
|
to determine the types of arguments, but instead, each argument is |
|
tagged with a type by preceding it with another argument as type |
|
(integer). |
|
|
|
config CBPRINTF_CONVERT_CHECK_PTR |
|
bool |
|
default y if !LOG_FMT_SECTION_STRIP |
|
help |
|
If enabled, cbprintf_package_convert() supports checking if string |
|
candidate is used for %p format specifier. Check cannot be performed |
|
if string is not present in the memory.
|
|
|