|  | # 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. |