123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- # 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.
- config CBPRINTF_COMPLETE_BROM
- bool "All selected features use rom export function"
- help
- same as CBPRINTF_COMPLETE, but use rom export cbvprintf
- # 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
- select 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"
- help
- Build cbprintf with buffers sized to support converting the full
- range of all integral and pointer values.
- Selecting this has no effect on code size, but 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 represention 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 "Enable floating point formatting in cbprintf"
- default y if FPU
- depends on CBPRINTF_COMPLETE || CBPRINTF_COMPLETE_BROM
- 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 "Enable 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
- 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
- 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.
- # 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.
- 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.
|