summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2021-01-09 08:06:43 (GMT)
committerKeith Packard <keithp@keithp.com>2021-01-14 23:05:10 (GMT)
commit945b4c64368b895c190a9b7592d6514bd1ee1d5d (patch)
tree0099e21c47870aeb4cf7c9f5d9f58ff67254473c /config
parentfcf323336eab38aa8d0fffe75c11062d3e049caa (diff)
Add newlib-nano as companion lib
This allows building newlib-nano in addition to newlib and picolibc, allowing users to select between C libraries within the same toolchain. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'config')
-rw-r--r--config/comp_libs/newlib-nano.in224
1 files changed, 224 insertions, 0 deletions
diff --git a/config/comp_libs/newlib-nano.in b/config/comp_libs/newlib-nano.in
new file mode 100644
index 0000000..ee05b92
--- /dev/null
+++ b/config/comp_libs/newlib-nano.in
@@ -0,0 +1,224 @@
+# newlib-nano options
+
+## depends on BARE_METAL
+
+## help Newlib-nano 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-nano
+## 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.
+
+# maybe older versions of newlib will support it too, but this
+# needs to be checked
+config NEWLIB_NANO_CXA_ATEXIT
+ def_bool y
+ depends on NEWLIB_NANO_2_0_or_later
+ select LIBC_PROVIDES_CXA_ATEXIT
+
+config NEWLIB_NANO_HAS_NANO_MALLOC
+ def_bool y
+ depends on NEWLIB_NANO_2_1_or_later
+
+config NEWLIB_NANO_HAS_NANO_FORMATTED_IO
+ def_bool y
+ depends on NEWLIB_NANO_2_2_or_later
+
+config LIBC_NEWLIB_NANO_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_NANO_TARGET_CFLAGS are used
+ to compile the libraries.
+
+ Leave blank if you don't know better.
+
+config LIBC_NEWLIB_NANO_IO_C99FMT
+ bool
+ prompt "Enable IOs on C99 formats"
+ help
+ Enable support for IOs on C99 formats.
+
+config LIBC_NEWLIB_NANO_IO_LL
+ bool
+ prompt "Enable IOs on long long"
+ help
+ Enable support for IOs on long long integers.
+
+config LIBC_NEWLIB_NANO_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_NANO_IO_LDBL
+ bool
+ prompt "Enable IOs on long doubles"
+ depends on LIBC_NEWLIB_NANO_IO_FLOAT
+ help
+ Enable support for IOs on long doubles.
+
+config LIBC_NEWLIB_NANO_IO_POS_ARGS
+ bool
+ prompt "Enable printf-family positional arg support"
+ help
+ Enable printf-family positional arg support.
+
+config LIBC_NEWLIB_NANO_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_NANO_UNBUF_STREAM_OPT
+ bool
+ prompt "Optimize fprintf to unbuffered unix file"
+ 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_NANO_FSEEK_OPTIMIZATION
+ bool
+ prompt "Fseek optimisation"
+ help
+ Disabling fseek optimisation can decrease code size.
+
+config LIBC_NEWLIB_NANO_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_NANO_REGISTER_FINI
+ bool
+ prompt "Enable finalization function registration using atexit"
+ help
+ Enable finalization function registration using atexit.
+
+config LIBC_NEWLIB_NANO_ATEXIT_DYNAMIC_ALLOC
+ bool
+ prompt "Enable dynamic allocation of atexit entries"
+ default y
+ help
+ Enable dynamic allocation of atexit entries.
+
+config LIBC_NEWLIB_NANO_GLOBAL_ATEXIT
+ bool
+ prompt "Enable atexit data structure as global variable"
+ default y
+ 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_NANO_LITE_EXIT
+ bool
+ prompt "Enable lite exit"
+ default y
+ 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_NANO_REENT_SMALL
+ bool
+ prompt "Enable small reentrant struct support"
+ default y
+ help
+ Enable small reentrant struct support.
+
+config LIBC_NEWLIB_NANO_MULTITHREAD
+ bool
+ prompt "Enable support for multiple threads"
+ default y
+ help
+ Enable support for multiple threads.
+
+config LIBC_NEWLIB_NANO_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_NANO_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_NANO_WIDE_ORIENT
+ bool
+ prompt "Allow wide C99 stream orientation"
+ default n
+ 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_NANO_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_NANO_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_NANO_MALLOC
+ bool
+ prompt "Enable Nano Malloc"
+ default y
+ depends on NEWLIB_NANO_HAS_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_NANO_FORMATTED_IO
+ bool
+ prompt "Enable Nano Formatted I/O"
+ default y
+ depends on NEWLIB_NANO_HAS_NANO_FORMATTED_IO
+ 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.
+
+config LIBC_NEWLIB_NANO_EXTRA_CONFIG_ARRAY
+ string
+ prompt "Extra config for newlib"
+ default ""
+ help
+ Extra flags to pass onto ./configure when configuring the newlib.