# Kconfig - C library

#
# Copyright (c) 2016 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

menu "C Library"
depends on !NATIVE_APPLICATION

config NEWLIB_LIBC
	bool "Build with newlib c library"
	help
	  Build with newlib library. The newlib library is expected to be
	  part of the SDK in this case.

if "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "gnuarmemb"
config NEWLIB_LIBC_NANO
	bool "Build with newlib-nano c library"
	depends on NEWLIB_LIBC
	default y
	help
	  Build with newlib-nano library, for small embedded apps.
	  The newlib-nano library for ARM embedded processors is a part of the
	  GNU Tools for ARM Embedded Processors.
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
	  If user mode is enabled, and MPU hardware has requirements that
	  regions be sized to a power of two and aligned to their size,
	  and user mode threads need to access this heap, then this is necessary
	  to properly define an MPU region for the heap.

	  If this is left at 0, then remaining system RAM will be used for this
	  area and it may not be possible to program it as an MPU region.

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.

# Minimal libc options

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
	  malloc() implementation. This size value must be compatible with
	  a sys_mem_pool definition with nmax of 1 and minsz of 16.

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.

endmenu
