libc: rework libc selection and reduce Kconfigs

Moved all libc Kconfigs to where the code is and remove the default
Kconfig for selecting the minimal libc. Minimal libc is now the default
if nothing else is configured in.

Removed the options for extended libc, this obviously was restricting
features in the minimal libc without a good reason, most of the
functions are available directly when using newlib, so there is no
reason why we need to restrict those in minimal libc.

Jira: ZEP-1440
Change-Id: If0a3adf4314e2ebdf0e139dee3eb4f47ce07aa89
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
Anas Nashif 2016-12-15 11:16:55 -05:00 committed by Anas Nashif
commit fe958df4dd
36 changed files with 57 additions and 93 deletions

View file

@ -20,3 +20,5 @@ source "lib/crypto/tinycrypt/Kconfig"
endmenu endmenu
source "lib/iot/Kconfig" source "lib/iot/Kconfig"
source "lib/libc/Kconfig"

View file

@ -1,7 +1,3 @@
ifdef CONFIG_MINIMAL_LIBC
ZEPHYRINCLUDE += -I$(srctree)/lib/libc/minimal/include
endif
ifdef CONFIG_NEWLIB_LIBC ifdef CONFIG_NEWLIB_LIBC
ZEPHYRINCLUDE += $(TOOLCHAIN_CFLAGS) ZEPHYRINCLUDE += $(TOOLCHAIN_CFLAGS)
ALL_LIBS += m c ALL_LIBS += m c
@ -14,6 +10,8 @@ ifdef CONFIG_NEWLIB_LIBC_FLOAT_SCANF
LDFLAGS += -u _scanf_float LDFLAGS += -u _scanf_float
endif endif
else
ZEPHYRINCLUDE += -I$(srctree)/lib/libc/minimal/include
endif endif
include $(srctree)/lib/iot/Makefile include $(srctree)/lib/iot/Makefile

View file

@ -20,8 +20,7 @@ config HTTP_PARSER
help help
This option enables the http_parser library from nodejs. This option enables the http_parser library from nodejs.
This parser requires some string-related routines commonly This parser requires some string-related routines commonly
provided by a libc implementation. So, MINIMAL_LIBC_EXTENDED provided by a libc implementation.
can be used here to resolve all the required dependencies.
config HTTP_PARSER_STRICT config HTTP_PARSER_STRICT
bool bool

44
lib/libc/Kconfig Normal file
View file

@ -0,0 +1,44 @@
# Kconfig - C library
#
# Copyright (c) 2016 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
menu "C Library"
config NEWLIB_LIBC
bool
prompt "Build with newlib c library"
help
Build with newlib library. The newlib library is expected to be
part of the SDK in this case.
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.
endmenu

View file

@ -1,2 +1,5 @@
obj-$(CONFIG_MINIMAL_LIBC) += minimal/ ifeq ($(CONFIG_NEWLIB_LIBC),y)
obj-$(CONFIG_NEWLIB_LIBC) += newlib/ obj-y += newlib/
else
obj-y += minimal/
endif

View file

@ -1 +1 @@
obj-$(CONFIG_MINIMAL_LIBC_EXTENDED) += strtol.o strtoul.o atoi.o obj-y += strtol.o strtoul.o atoi.o

View file

@ -1,2 +1,2 @@
obj-y := string.o obj-y += string.o
obj-$(CONFIG_MINIMAL_LIBC_EXTENDED) += strncasecmp.o strstr.o obj-y += strncasecmp.o strstr.o

View file

@ -122,58 +122,6 @@ config CPLUSPLUS
help help
This option enables the use of applications built with C++. This option enables the use of applications built with C++.
choice
prompt "C Library"
default MINIMAL_LIBC
config MINIMAL_LIBC
bool
prompt "Build minimal c library"
help
Build integrated minimal c library. This integrated library is available
to support kernel functionality and test cases. It is not designed to be
used with applications. For applications, please use an external C
library such as newlib.
config NEWLIB_LIBC
bool
prompt "Build with newlib c library"
help
Build with newlib library. The newlib library is expected to be
part of the SDK in this case.
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]"
default n
depends on MINIMAL_LIBC
help
This option enables building some optional libc functions that
are not used directly by the kernel but can be used in applications.
The option adds the following functions: strtoul, strtol, atoi,
strncasecmp.
Warning: Use the above functions only for testing, if you need to
use any of the functions in an application you probably should be
linking against a full lib c implementation instead.
endmenu endmenu
menu "Debugging Options" menu "Debugging Options"

View file

@ -1,4 +1,3 @@
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_BLUETOOTH=y CONFIG_BLUETOOTH=y
CONFIG_BLUETOOTH_BREDR=y CONFIG_BLUETOOTH_BREDR=y
CONFIG_BLUETOOTH_RFCOMM=y CONFIG_BLUETOOTH_RFCOMM=y

View file

@ -1,4 +1,3 @@
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_RANDOM_GENERATOR=y CONFIG_RANDOM_GENERATOR=y
CONFIG_TEST_RANDOM_GENERATOR=y CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_BLUETOOTH=y CONFIG_BLUETOOTH=y

View file

@ -3,5 +3,4 @@ CONFIG_GROVE_LIGHT_SENSOR=y
CONFIG_GROVE=y CONFIG_GROVE=y
CONFIG_SENSOR=y CONFIG_SENSOR=y
CONFIG_NEWLIB_LIBC=y CONFIG_NEWLIB_LIBC=y
CONFIG_MINIMAL_LIBC=n
CONFIG_STDOUT_CONSOLE=y CONFIG_STDOUT_CONSOLE=y

View file

@ -4,7 +4,6 @@ CONFIG_I2C=y
CONFIG_GROVE=y CONFIG_GROVE=y
CONFIG_ADC=y CONFIG_ADC=y
CONFIG_NEWLIB_LIBC=y CONFIG_NEWLIB_LIBC=y
CONFIG_MINIMAL_LIBC=n
CONFIG_GROVE_TEMPERATURE_SENSOR_ADC_CHANNEL=10 CONFIG_GROVE_TEMPERATURE_SENSOR_ADC_CHANNEL=10
CONFIG_GROVE_TEMPERATURE_SENSOR=y CONFIG_GROVE_TEMPERATURE_SENSOR=y
CONFIG_GROVE_TEMPERATURE_SENSOR_V1_1=y CONFIG_GROVE_TEMPERATURE_SENSOR_V1_1=y

View file

@ -231,10 +231,8 @@ For that purpose, following flags must be enabled in project configuration file
CONFIG_KERNEL_EVENT_LOGGER_DYNAMIC=y CONFIG_KERNEL_EVENT_LOGGER_DYNAMIC=y
CONFIG_CONSOLE_HANDLER=y CONFIG_CONSOLE_HANDLER=y
CONFIG_CONSOLE_HANDLER_SHELL=y CONFIG_CONSOLE_HANDLER_SHELL=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
--> -->
CONFIG_MINIMAL_LIBC_EXTENDED is required for atoi() function used in profiler shell
command implementation. command implementation.
If done, the profiler will automatically enable a shell over UART allowing to If done, the profiler will automatically enable a shell over UART allowing to

View file

@ -2,7 +2,6 @@ CONFIG_STDOUT_CONSOLE=y
CONFIG_CONSOLE_HANDLER=y CONFIG_CONSOLE_HANDLER=y
CONFIG_CONSOLE_HANDLER_SHELL=y CONFIG_CONSOLE_HANDLER_SHELL=y
CONFIG_ENABLE_SHELL=y CONFIG_ENABLE_SHELL=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_TASK_MONITOR=y CONFIG_TASK_MONITOR=y
CONFIG_TASK_MONITOR_MASK=6 CONFIG_TASK_MONITOR_MASK=6
CONFIG_RING_BUFFER=y CONFIG_RING_BUFFER=y

View file

@ -2,7 +2,6 @@ CONFIG_STDOUT_CONSOLE=y
CONFIG_CONSOLE_HANDLER=y CONFIG_CONSOLE_HANDLER=y
CONFIG_CONSOLE_HANDLER_SHELL=y CONFIG_CONSOLE_HANDLER_SHELL=y
CONFIG_ENABLE_SHELL=y CONFIG_ENABLE_SHELL=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_TASK_MONITOR=y CONFIG_TASK_MONITOR=y
CONFIG_TASK_MONITOR_MASK=6 CONFIG_TASK_MONITOR_MASK=6
CONFIG_RING_BUFFER=y CONFIG_RING_BUFFER=y

View file

@ -2,7 +2,6 @@ CONFIG_STDOUT_CONSOLE=y
CONFIG_CONSOLE_HANDLER=y CONFIG_CONSOLE_HANDLER=y
CONFIG_CONSOLE_HANDLER_SHELL=y CONFIG_CONSOLE_HANDLER_SHELL=y
CONFIG_ENABLE_SHELL=y CONFIG_ENABLE_SHELL=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_RING_BUFFER=y CONFIG_RING_BUFFER=y
CONFIG_KERNEL_EVENT_LOGGER=y CONFIG_KERNEL_EVENT_LOGGER=y
CONFIG_KERNEL_EVENT_LOGGER_DYNAMIC=y CONFIG_KERNEL_EVENT_LOGGER_DYNAMIC=y

View file

@ -2,7 +2,6 @@ CONFIG_STDOUT_CONSOLE=y
CONFIG_CONSOLE_HANDLER=y CONFIG_CONSOLE_HANDLER=y
CONFIG_CONSOLE_HANDLER_SHELL=y CONFIG_CONSOLE_HANDLER_SHELL=y
CONFIG_ENABLE_SHELL=y CONFIG_ENABLE_SHELL=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_RING_BUFFER=y CONFIG_RING_BUFFER=y
CONFIG_KERNEL_EVENT_LOGGER=y CONFIG_KERNEL_EVENT_LOGGER=y
CONFIG_KERNEL_EVENT_LOGGER_DYNAMIC=y CONFIG_KERNEL_EVENT_LOGGER_DYNAMIC=y

View file

@ -1,5 +1,4 @@
CONFIG_STDOUT_CONSOLE=y CONFIG_STDOUT_CONSOLE=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_SYS_LOG=y CONFIG_SYS_LOG=y
CONFIG_NET_LOG=y CONFIG_NET_LOG=y

View file

@ -1,5 +1,4 @@
CONFIG_STDOUT_CONSOLE=y CONFIG_STDOUT_CONSOLE=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_NETWORKING=y CONFIG_NETWORKING=y
CONFIG_NET_IPV6=n CONFIG_NET_IPV6=n

View file

@ -1,5 +1,4 @@
CONFIG_STDOUT_CONSOLE=y CONFIG_STDOUT_CONSOLE=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_TEST_RANDOM_GENERATOR=y CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_NETWORKING=y CONFIG_NETWORKING=y

View file

@ -39,7 +39,6 @@ CONFIG_CONSOLE_HANDLER=y
CONFIG_CONSOLE_HANDLER_SHELL=y CONFIG_CONSOLE_HANDLER_SHELL=y
CONFIG_ENABLE_SHELL=y CONFIG_ENABLE_SHELL=y
CONFIG_PRINTK=y CONFIG_PRINTK=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_NET_SAMPLES_IP_ADDRESSES=y CONFIG_NET_SAMPLES_IP_ADDRESSES=y
CONFIG_NET_SAMPLES_MY_IPV6_ADDR="2001:db8::1" CONFIG_NET_SAMPLES_MY_IPV6_ADDR="2001:db8::1"

View file

@ -46,4 +46,3 @@ CONFIG_KERNEL_EVENT_LOGGER_BUFFER_SIZE=10000
CONFIG_KERNEL_EVENT_LOGGER_CONTEXT_SWITCH=y CONFIG_KERNEL_EVENT_LOGGER_CONTEXT_SWITCH=y
CONFIG_KERNEL_EVENT_LOGGER_INTERRUPT=y CONFIG_KERNEL_EVENT_LOGGER_INTERRUPT=y
CONFIG_KERNEL_EVENT_LOGGER_DYNAMIC=y CONFIG_KERNEL_EVENT_LOGGER_DYNAMIC=y
CONFIG_MINIMAL_LIBC_EXTENDED=y

View file

@ -6,7 +6,6 @@ CONFIG_CONSOLE_HANDLER=y
CONFIG_CONSOLE_HANDLER_SHELL=y CONFIG_CONSOLE_HANDLER_SHELL=y
CONFIG_ENABLE_SHELL=y CONFIG_ENABLE_SHELL=y
CONFIG_PRINTK=y CONFIG_PRINTK=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
# #
# networking # networking
# #

View file

@ -6,7 +6,6 @@ CONFIG_CONSOLE_HANDLER=y
CONFIG_CONSOLE_HANDLER_SHELL=y CONFIG_CONSOLE_HANDLER_SHELL=y
CONFIG_ENABLE_SHELL=y CONFIG_ENABLE_SHELL=y
CONFIG_PRINTK=y CONFIG_PRINTK=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
# #
# networking # networking
# #
@ -43,4 +42,3 @@ CONFIG_KERNEL_EVENT_LOGGER_INTERRUPT=y
CONFIG_UART_NS16550_PORT_1_BAUD_RATE=921600 CONFIG_UART_NS16550_PORT_1_BAUD_RATE=921600
CONFIG_UART_NS16550_PORT_0=n CONFIG_UART_NS16550_PORT_0=n
CONFIG_KERNEL_EVENT_LOGGER_DYNAMIC=y CONFIG_KERNEL_EVENT_LOGGER_DYNAMIC=y
CONFIG_MINIMAL_LIBC_EXTENDED=y

View file

@ -32,7 +32,6 @@ CONFIG_CONSOLE_HANDLER=y
CONFIG_CONSOLE_HANDLER_SHELL=y CONFIG_CONSOLE_HANDLER_SHELL=y
CONFIG_ENABLE_SHELL=y CONFIG_ENABLE_SHELL=y
CONFIG_PRINTK=y CONFIG_PRINTK=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_NET_SAMPLES_IP_ADDRESSES=y CONFIG_NET_SAMPLES_IP_ADDRESSES=y
CONFIG_NET_SAMPLES_MY_IPV6_ADDR="2001:db8::1" CONFIG_NET_SAMPLES_MY_IPV6_ADDR="2001:db8::1"

View file

@ -37,7 +37,6 @@ CONFIG_CONSOLE_HANDLER=y
CONFIG_CONSOLE_HANDLER_SHELL=y CONFIG_CONSOLE_HANDLER_SHELL=y
CONFIG_ENABLE_SHELL=y CONFIG_ENABLE_SHELL=y
CONFIG_PRINTK=y CONFIG_PRINTK=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_NET_SAMPLES_IP_ADDRESSES=y CONFIG_NET_SAMPLES_IP_ADDRESSES=y
CONFIG_NET_SAMPLES_MY_IPV6_ADDR="2001:db8::1" CONFIG_NET_SAMPLES_MY_IPV6_ADDR="2001:db8::1"

View file

@ -34,7 +34,6 @@ config NET_SHELL
select ENABLE_SHELL select ENABLE_SHELL
select CONSOLE_HANDLER select CONSOLE_HANDLER
select CONSOLE_HANDLER_SHELL select CONSOLE_HANDLER_SHELL
select MINIMAL_LIBC_EXTENDED
help help
Activate shell module that provides network commands like Activate shell module that provides network commands like
ping to the console. ping to the console.

View file

@ -19,7 +19,6 @@
menuconfig NET_SAMPLES_IP_ADDRESSES menuconfig NET_SAMPLES_IP_ADDRESSES
bool "Set IP addresses for sample applications" bool "Set IP addresses for sample applications"
default n default n
select MINIMAL_LIBC_EXTENDED
help help
Allow IP addresses to be set in config file for Allow IP addresses to be set in config file for
networking client/server sample applications. networking client/server sample applications.

View file

@ -1,4 +1,3 @@
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_BLUETOOTH=y CONFIG_BLUETOOTH=y
CONFIG_CONSOLE_HANDLER=y CONFIG_CONSOLE_HANDLER=y
CONFIG_BLUETOOTH_DEBUG_LOG=y CONFIG_BLUETOOTH_DEBUG_LOG=y

View file

@ -1,4 +1,3 @@
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_BLUETOOTH=y CONFIG_BLUETOOTH=y
CONFIG_CONSOLE_HANDLER=y CONFIG_CONSOLE_HANDLER=y
CONFIG_BLUETOOTH_DEBUG_LOG=y CONFIG_BLUETOOTH_DEBUG_LOG=y

View file

@ -1,4 +1,3 @@
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_BLUETOOTH=y CONFIG_BLUETOOTH=y
CONFIG_BLUETOOTH_BREDR=y CONFIG_BLUETOOTH_BREDR=y
CONFIG_BLUETOOTH_RFCOMM=y CONFIG_BLUETOOTH_RFCOMM=y

View file

@ -1,4 +1,3 @@
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_TEST_RANDOM_GENERATOR=y CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_BLUETOOTH=y CONFIG_BLUETOOTH=y
CONFIG_BLUETOOTH_CUSTOM=y CONFIG_BLUETOOTH_CUSTOM=y

View file

@ -1,4 +1,3 @@
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_BLUETOOTH=y CONFIG_BLUETOOTH=y
CONFIG_CONSOLE_HANDLER=y CONFIG_CONSOLE_HANDLER=y
CONFIG_BLUETOOTH_DEBUG_LOG=y CONFIG_BLUETOOTH_DEBUG_LOG=y

View file

@ -2,7 +2,6 @@
CONFIG_MAIN_STACK_SIZE=4096 CONFIG_MAIN_STACK_SIZE=4096
CONFIG_ARC_INIT=n CONFIG_ARC_INIT=n
CONFIG_STDOUT_CONSOLE=y CONFIG_STDOUT_CONSOLE=y
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_MBEDTLS=y CONFIG_MBEDTLS=y
CONFIG_MBEDTLS_BUILTIN=y CONFIG_MBEDTLS_BUILTIN=y
CONFIG_MBEDTLS_TEST=y CONFIG_MBEDTLS_TEST=y

View file

@ -1,5 +1,4 @@
# Comment the following line if you want to try another libc # Comment the following line if you want to try another libc
CONFIG_MINIMAL_LIBC_EXTENDED=y
CONFIG_HTTP_PARSER=y CONFIG_HTTP_PARSER=y
# Enable strict parser by uncommenting the following line # Enable strict parser by uncommenting the following line
# CONFIG_HTTP_PARSER_STRICT=y # CONFIG_HTTP_PARSER_STRICT=y

View file

@ -1,5 +1,4 @@
CONFIG_DEBUG=y CONFIG_DEBUG=y
CONFIG_STDOUT_CONSOLE=y CONFIG_STDOUT_CONSOLE=y
CONFIG_NEWLIB_LIBC=y CONFIG_NEWLIB_LIBC=y
CONFIG_MINIMAL_LIBC=n