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

menu "OS Support Library"

config JSON_LIBRARY
	bool "Build JSON library"
	help
	  Build a minimal JSON parsing/encoding library. Used by sample
	  applications such as the NATS client.

config RING_BUFFER
	bool "Enable ring buffers"
	help
	  Enable usage of ring buffers. This is similar to kernel FIFOs but ring
	  buffers manage their own buffer memory and can store arbitrary data.
	  For optimal performance, use buffer sizes that are a power of 2.

config BASE64
	bool "Enable base64 encoding and decoding"
	help
	  Enable base64 encoding and decoding functionality

config PRINTK_SYNC
	bool "Serialize printk() calls"
	default y if SMP && MP_NUM_CPUS > 1
	help
	  When true, a spinlock will be taken around the output from a
	  single printk() call, preventing the output data from
	  interleaving with concurrent usage from another CPU or an
	  preempting interrupt.

config MPSC_PBUF
	bool "Multi producer, single consumer packet buffer"
	select TIMEOUT_64BIT
	help
	  Enable usage of mpsc packet buffer. Packet buffer is capable of
	  storing variable length packets in a circular way and operate directly
	  on the buffer memory.

config SHARED_MULTI_HEAP
	bool "Shared multi-heap manager"
	help
	  Enable support for a shared multi-heap manager that uses the
	  multi-heap allocator to manage a set of reserved memory regions with
	  different capabilities / attributes (cacheable, non-cacheable,
	  etc...) defined in the DT.

config WINSTREAM
	bool "Lockless shared memory window byte stream"
	help
	  Winstream is a byte stream IPC for use in shared memory
	  "windows", generally for transmit to non-Zephyr contexts that
	  can't share Zephyr APIs or data structures.

if WINSTREAM
config WINSTREAM_STDLIB_MEMCOPY
	bool "Use standard memcpy() in winstream"
	help
	  The sys_winstream utility is sometimes used in early boot
	  environments before the standard library is usable.  By
	  default it uses a simple internal bytewise memcpy().  Set
	  this to use the one from the standard library.
endif

if MPSC_PBUF
config MPSC_CLEAR_ALLOCATED
	bool "Clear allocated packet"
	help
	  When enabled packet space is zeroed before returning from allocation.
endif

config REBOOT
	bool "Reboot functionality"
	help
	  Enable the sys_reboot() API. Enabling this can drag in other subsystems
	  needed to perform a "safe" reboot (e.g. to stop the system clock before
	  issuing a reset).

config UTF8
	bool "UTF-8 string operation supported"
	help
	  Enable the utf8 API. The API implements functions to specifically
	  handle UTF-8 encoded strings.

rsource "Kconfig.cbprintf"

rsource "Kconfig.heap"

endmenu
