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

menu "Utility 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 JSON_LIBRARY_FP_SUPPORT
	bool "Floating point support in JSON library"
	depends on JSON_LIBRARY
	select CBPRINTF_FP_SUPPORT
	select REQUIRES_FULL_LIBC
	help
	  Build the JSON library with support for floating point types.

	  Requires a libc implementation with support for floating point
	  functions: strtof(), strtod(), isnan() and isinf().

config RING_BUFFER
	bool "Ring buffers"
	help
	  Provide highly efficient ring buffer management for arbitrary data.
	  Some facilities such as kernel pipes are built on top of this.
	  May be used directly e.g. when the pipe overhead is unnecessary.

config RING_BUFFER_LARGE
	bool "Allow large ring buffer sizes"
	depends on RING_BUFFER
	help
	  Increase maximum buffer size from 32KB to 2GB. When this is enabled,
	  all struct ring_buf instances become 12 bytes bigger.

config NOTIFY
	bool "Asynchronous Notifications"
	help
	  Use this API to support async transactions.

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

config ONOFF
	bool "On-Off Manager"
	select NOTIFY
	help
	  An on-off manager supports an arbitrary number of clients of a
	  service which has a binary state.  Example applications are power
	  rails, clocks, and binary device power management.

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

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

config COBS
	bool "Consistent overhead byte stuffing"
	select NET_BUF
	help
	  Enable consistent overhead byte stuffing

config GETOPT
	bool "Getopt library support"
	help
	  This option adds support of the sys_getopt API.

config GETOPT_LONG
	bool "Getopt long library support"
	depends on GETOPT
	help
	  This option adds support of the getopt long.
	  Different shell backends are using their own instance of getopt to
	  not interfere with each other.
	  All not shell threads share one global instance of getopt state, hence
	  apart from shell this library is not thread safe. User can add support
	  for other threads by extending function sys_getopt_state_get in
	  getopt_common.c file.

config TIMEUTIL_APPLY_SKEW
	bool "Support applying clock skew corrections in conversion functions"
	default y
	help
	  Accurately applying clock skew correction in timeutil_sync_ref_from_local
	  and timeutil_sync_local_from_ref requires double-precision floating point
	  operations. If this is the only usage of double precision logic in the
	  build, but clocks skews are not used, this can be a significant ROM
	  overhead. Disabling this option can save ~2.4 kB of ROM.

endmenu
