# 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 SYS_HEAP_VALIDATE
	bool "Enable internal heap validity checking"
	help
	  The sys_heap implementation is instrumented for extensive
	  internal validation.  Leave this off by default, unless
	  modifying the heap code or (maybe) when running in
	  environments that require sensitive detection of memory
	  corruption.

config SYS_HEAP_ALLOC_LOOPS
	int "Number of tries in the inner heap allocation loop"
	default 3
	help
	  The sys_heap allocator bounds the number of tries from the
	  smallest chunk level (the one that might not fit the
	  requested allocation) to maintain constant time performance.
	  Setting this to a high level will cause the heap to return
	  more successful allocations in situations of high
	  fragmentation, at the cost of potentially significant
	  (linear time) searching of the free list.  The default is
	  three, which results in an allocator with good statistical
	  properties ("most" allocations that fit will succeed) but
	  keeps the maximum runtime at a tight bound so that the heap
	  is useful in locked or ISR contexts.

config PRINTK64
	bool
	prompt "Enable 64 bit printk conversions" if !64BIT
	default y
	help
	  When true, 64 bit values will be printable on 32 bit systems
	  using the "ll" flag to the %d, %i, %u, %x and %X specifiers.
	  When false, these values will be correctly parsed from the
	  function arguments, but will print "ERR" if their value is
	  unrepresentable in 32 bits.  This setting is always true on
	  64 bit systems.  Note that setting this =n does not produce
	  significant code savings within the printk library code
	  itself.  Instead, it suppresses the use of the
	  toolchain-provided 64 bit division implementation, which may
	  reduce code size if it is unused elsewhere in the
	  application.  Most apps should leave this set to y.

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.

endmenu
