newlib: add support for nano-formatted-io

If newlib is configured with --enable-newlib-nano-formatted-io,
floating-point support is split out of the formatted I/O code into
weak functions which are not linked by default. This leads to a smaller
code by about 16~20k when using newlib "printf" and/or "sscanf" but not
using floating point I/O.

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.

Implemented via new configuration options:
    CONFIG_NEWLIB_LIBC_FLOAT_PRINTF
    CONFIG_NEWLIB_LIBC_FLOAT_SCANF

Change-Id: I57f9d9f02e6d21d6011d14de7153b1d3ba6f6e32
Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
This commit is contained in:
Juro Bystricky 2016-11-08 10:35:49 -08:00 committed by Anas Nashif
commit f3bf5abd52
2 changed files with 24 additions and 0 deletions

View file

@ -5,6 +5,15 @@ endif
ifdef CONFIG_NEWLIB_LIBC
ZEPHYRINCLUDE += $(TOOLCHAIN_CFLAGS)
ALL_LIBS += m c
ifdef CONFIG_NEWLIB_LIBC_FLOAT_PRINTF
LDFLAGS += -u _printf_float
endif
ifdef CONFIG_NEWLIB_LIBC_FLOAT_SCANF
LDFLAGS += -u _scanf_float
endif
endif
include $(srctree)/lib/iot/Makefile

View file

@ -123,6 +123,21 @@ config NEWLIB_LIBC
endchoice
config NEWLIB_LIBC_FLOAT_PRINTF
bool "Build with newlib float printf"
default n
depends on NEWLIB_LIBC
help
Build with floating point printf enabled. This will increase the size of
the image.
config NEWLIB_LIBC_FLOAT_SCANF
bool "Build with newlib float scanf"
default n
depends on NEWLIB_LIBC
help
Build with floating point scanf enabled. This will increase the size of
the image.
config MINIMAL_LIBC_EXTENDED
bool "Build additional libc functions [EXPERIMENTAL]"