From f3bf5abd52b9459b22fd0849b72029a58e7ea17a Mon Sep 17 00:00:00 2001 From: Juro Bystricky Date: Tue, 8 Nov 2016 10:35:49 -0800 Subject: [PATCH] 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 --- lib/Makefile | 9 +++++++++ misc/Kconfig | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/Makefile b/lib/Makefile index 1b02e98ea1f..287ff74ba45 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -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 diff --git a/misc/Kconfig b/misc/Kconfig index 14a80176fa0..320fb7e6b2a 100644 --- a/misc/Kconfig +++ b/misc/Kconfig @@ -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]"