# newlib options ## depends on BARE_METAL ## select LIBC_PROVIDES_CXA_ATEXIT ## select LIBC_SUPPORT_THREADS_NONE ## select CC_CORE_NEEDED ## help Newlib is a C library intended for use on embedded systems. It is a ## help conglomeration of several library parts, all under free software ## help licenses that make them easily usable on embedded products. Newlib ## help is only available in source form. It can be compiled for a wide ## help array of processors, and will usually work on any architecture with ## help the addition of a few low-level routines. config LIBC_NEWLIB_TARGET_CFLAGS string prompt "Target CFLAGS for newlib" default "" help Used to add specific options when compiling the target libraries (eg. -ffunction-sections -fdata-sections), which can't be defined in global TARGET_CFLAGS, because they shall be not used for the gcc target libraries. Note: Both TARGET_CFLAGS and LIBC_NEWLIB_TARGET_CFLAGS are used to compile the libraries. Leave blank if you don't know better. config LIBC_NEWLIB_IO_C99FMT bool prompt "Enable IOs on C99 formats" help Enable support for IOs on C99 formats. config LIBC_NEWLIB_IO_LL bool prompt "Enable IOs on long long" help Enable support for IOs on long long integers. config LIBC_NEWLIB_IO_FLOAT bool prompt "Enable IOs on floats and doubles" help Enable support for IOs on floating point values (float and double). config LIBC_NEWLIB_IO_LDBL bool prompt "Enable IOs on long doubles" depends on LIBC_NEWLIB_IO_FLOAT help Enable support for IOs on long doubles. config LIBC_NEWLIB_IO_POS_ARGS bool prompt "Enable printf-family positional arg support" depends on !LIBC_NEWLIB_NANO_FORMATTED_IO help Enable printf-family positional arg support. config LIBC_NEWLIB_FVWRITE_IN_STREAMIO bool prompt "Vector buffer mechanism to support stream IO buffering" default y help NEWLIB implements the vector buffer mechanism to support stream IO buffering required by C standard. This feature is possibly unnecessary for embedded systems which won't change file buffering with functions like `setbuf' or `setvbuf'. The buffering mechanism still acts as default for STDIN/STDOUT/STDERR even if this option is specified. config LIBC_NEWLIB_UNBUF_STREAM_OPT bool prompt "Optimize fprintf to unbuffered unix file" default y help NEWLIB does optimization when `fprintf to write only unbuffered unix file'. It creates a temorary buffer to do the optimization that increases stack consumption by about `BUFSIZ' bytes. Disabling this option disables the optimization and saves size of text and stack. config LIBC_NEWLIB_FSEEK_OPTIMIZATION bool prompt "Fseek optimisation" default y help Disabling fseek optimisation can decrease code size. config LIBC_NEWLIB_DISABLE_SUPPLIED_SYSCALLS bool prompt "Disable the syscalls supplied with newlib" help Disable the syscalls that come with newlib. You will have to implement your own _sbrk, _read, _write... If you plan to port newlib to a new platform/board, say Yes. config LIBC_NEWLIB_REGISTER_FINI bool prompt "Enable finalization function registration using atexit" help Enable finalization function registration using atexit. config LIBC_NEWLIB_ATEXIT_DYNAMIC_ALLOC bool prompt "Enable dynamic allocation of atexit entries" default y help Enable dynamic allocation of atexit entries. config LIBC_NEWLIB_GLOBAL_ATEXIT bool prompt "Enable atexit data structure as global variable" help Enable atexit data structure as global variable. By doing so it is move out of _reent structure, and can be garbage collected if atexit is not referenced. config LIBC_NEWLIB_LITE_EXIT bool prompt "Enable lite exit" help Enable lite exit, a size-reduced implementation of exit that doesn't invoke clean-up functions such as _fini or global destructors. config LIBC_NEWLIB_REENT_SMALL bool prompt "Enable small reentrant struct support" help Enable small reentrant struct support. config LIBC_NEWLIB_MULTITHREAD bool prompt "Enable support for multiple threads" default y help Enable support for multiple threads. config LIBC_NEWLIB_RETARGETABLE_LOCKING bool prompt "Enable retargetable locking" help Enable retargetable locking to allow the operating system to override the dummy lock functions defined within the newlib. config LIBC_NEWLIB_EXTRA_SECTIONS bool prompt "Place each function & data element in their own section" help Place each function & data symbol in their own section. This allows the linker to garbage collect unused symbols at link time. config LIBC_NEWLIB_WIDE_ORIENT bool prompt "Allow wide C99 stream orientation" default y help C99 states that each stream has an orientation, wide or byte. This feature is possibly unnecessary for embedded systems which only do byte input/output operations on stream. Disabling this feature can decrease code size. config LIBC_NEWLIB_ENABLE_TARGET_OPTSPACE bool prompt "Optimize newlib for size" default y help Pass --enable-target-optspace to newlib configure. This will compile newlib with -Os. config LIBC_NEWLIB_LTO bool prompt "Enable Link Time Optimization" depends on CC_GCC_USE_LTO help Builds the libraries with -flto to enable more aggressive link time optimization. You will need to add -flto-partition=one to your application's link line to keep the RETURN assembler macro together with it's consumers. config LIBC_NEWLIB_NANO_MALLOC bool prompt "Enable Nano Malloc" help NEWLIB has two implementations of malloc family's functions, one in `mallocr.c' and the other one in `nano-mallocr.c'. This options enables the nano-malloc implementation, which is for small systems with very limited memory. Note that this implementation does not support `--enable-malloc-debugging' any more. config LIBC_NEWLIB_NANO_FORMATTED_IO bool prompt "Enable Nano Formatted I/O" help This builds NEWLIB with a special implementation of formatted I/O functions, designed to lower the size of application on small systems with size constraint issues. This option does not affect wide-char formatted I/O functions. Some notes about this feature: 1) Floating-point support is split out of the formatted I/O code into weak functions which are not linked by default. Programs that need floating-point I/O support must explicitly request linking of one or both of the floating-point functions: _printf_float or _scanf_float. This can be done at link time using the -u option which can be passed to either gcc or ld. 2) The following configuration options are ignored for non-wide-char formatted I/O functions, and can be thought of as disabled. "Enable printf-family positional arg support" "Enable IOs on C99 formats" "Enable IOs on long long" "Enable IOs on long doubles" Additionally, "Enable IOs on floats and doubles" is supported in this specific implementation, one can disable it to further reduce code size. In this case, the floating-point specifiers will not be recognized or handled, and the -u option will not work either. Learn more: https://sourceware.org/newlib/README config LIBC_NEWLIB_EXTRA_CONFIG_ARRAY string prompt "Extra config for newlib" default "" help Extra flags to pass onto ./configure when configuring the newlib.