diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 46c0f1cfc1e..4a17c7b32b2 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,6 +1,6 @@ # SPDX-License-Identifier: Apache-2.0 -if(NOT CONFIG_NATIVE_APPLICATION) +if(NOT CONFIG_EXTERNAL_LIBC) add_subdirectory(libc) add_subdirectory(posix) endif() diff --git a/lib/libc/Kconfig b/lib/libc/Kconfig index 1ad6cde26b0..73e00582015 100644 --- a/lib/libc/Kconfig +++ b/lib/libc/Kconfig @@ -7,18 +7,44 @@ # menu "C Library" -depends on !NATIVE_APPLICATION + +config REQUIRES_FULL_LIBC + bool + help + Helper symbol to indicate some feature requires a C library implementation + with more functionality than what MINIMAL_LIBC provides + +choice LIBC_IMPLEMENTATION + prompt "C Library Implementation" + default EXTERNAL_LIBC if NATIVE_APPLICATION + default NEWLIB_LIBC if REQUIRES_FULL_LIBC + default MINIMAL_LIBC + +config MINIMAL_LIBC + bool "Minimal C library" + depends on !NATIVE_APPLICATION + help + Build with minimal C library. config NEWLIB_LIBC - bool "Build with newlib c library" + bool "Newlib C library" + depends on !NATIVE_APPLICATION help Build with newlib library. The newlib library is expected to be part of the SDK in this case. +config EXTERNAL_LIBC + bool "External C library" + help + Build with external/user provided C library. + +endchoice #LIBC_IMPLEMENTATION + +if NEWLIB_LIBC + if "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "gnuarmemb" config NEWLIB_LIBC_NANO - bool "Build with newlib-nano c library" - depends on NEWLIB_LIBC + bool "Build with newlib-nano C library" default y help Build with newlib-nano library, for small embedded apps. @@ -29,7 +55,6 @@ endif config NEWLIB_LIBC_ALIGNED_HEAP_SIZE int "Newlib aligned heap size" depends on MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT - depends on NEWLIB_LIBC depends on USERSPACE default 0 help @@ -43,32 +68,22 @@ config NEWLIB_LIBC_ALIGNED_HEAP_SIZE config NEWLIB_LIBC_FLOAT_PRINTF bool "Build with newlib float printf" - 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" - depends on NEWLIB_LIBC help Build with floating point scanf enabled. This will increase the size of the image. -config STDOUT_CONSOLE - bool "Send stdout to console" - depends on CONSOLE_HAS_DRIVER - default y - help - This option directs standard output (e.g. printf) to the console - device, rather than suppressing it entirely. See also EARLY_CONSOLE - option. +endif #NEWLIB_LIBC -# Minimal libc options +if MINIMAL_LIBC config MINIMAL_LIBC_MALLOC_ARENA_SIZE int "Size of the minimal libc malloc arena" - depends on !NEWLIB_LIBC default 0 help Indicate the size of the memory arena used for minimal libc's @@ -77,10 +92,21 @@ config MINIMAL_LIBC_MALLOC_ARENA_SIZE config MINIMAL_LIBC_LL_PRINTF bool "Build with minimal libc long long printf" if !64BIT - depends on !NEWLIB_LIBC default y if 64BIT help Build with long long printf enabled. This will increase the size of the image. +endif #MINIMAL_LIBC + +config STDOUT_CONSOLE + bool "Send stdout to console" + depends on CONSOLE_HAS_DRIVER + depends on !NATIVE_APPLICATION + default y + help + This option directs standard output (e.g. printf) to the console + device, rather than suppressing it entirely. See also EARLY_CONSOLE + option. + endmenu