# Copyright (c) 2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

choice LOG_MODE
	prompt "Mode"
	default LOG_MODE_MINIMAL if LOG_DEFAULT_MINIMAL
	default LOG_MODE_IMMEDIATE if LOG2_MODE_IMMEDIATE
	default LOG_MODE_DEFERRED

config LOG_MODE_DEFERRED
	bool "Deferred logging"
	help
	  Log messages are buffered and processed later. This mode has the
	  least impact on the application. Time consuming processing is
	  deferred to the known context.

config LOG_MODE_IMMEDIATE
	bool "Synchronous"
	help
	  When enabled log is processed in the context of the call. It impacts
	  performance of the system since time consuming operations are
	  performed in the context of the log entry (e.g. high priority
	  interrupt).Logger backends must support exclusive access to work
	  flawlessly in that mode because one log operation can be interrupted
	  by another one in the higher priority context.

config LOG_MODE_MINIMAL
	bool "Minimal-footprint"
	imply PRINTK
	help
	  Enable minimal logging implementation. This has very little footprint
	  overhead on top of the printk() implementation for standard
	  logging macros. Hexdump macros are also supported, with a small
	  amount of code pulled in if used. Build time filtering is supported,
	  but not runtime filtering. There are no timestamps, prefixes,
	  colors, or asynchronous logging, and all messages are simply
	  sent to printk().

config LOG_FRONTEND
	bool "Frontend"
	help
	  When enabled, logs are redirected to a custom frontend instead
	  of being processed by the logger. In this mode runtime filtering and
	  multiple backends are not used.

endchoice

config LOG2_MODE_DEFERRED
	bool "Deferred v2 (DEPRECATED)"
	help
	  Option has been deprecated. Use LOG_MODE_DEFERRED which defaults now
	  to v2.

config LOG2_MODE_IMMEDIATE
	bool "Synchronous v2 (DEPRECATED)"
	help
	  Option has been deprecated. Use LOG_MODE_IMMEDIATE which defaults now
	  to v2.

config LOG1
	bool "Use v1 (DEPRECATED)"
	help
	  Deprecated.

config LOG2
	bool
	select MPSC_PBUF
	default y if !LOG1

config LOG1_IMMEDIATE
	bool
	default y if LOG1 && LOG_MODE_IMMEDIATE

config LOG1_DEFERRED
	bool
	default y if LOG1 && LOG_MODE_DEFERRED

config LOG2_IMMEDIATE
	bool
	default y if !LOG1 && LOG_MODE_IMMEDIATE

config LOG2_DEFERRED
	bool
	default y if !LOG1 && LOG_MODE_DEFERRED

config LOG_DEFAULT_MINIMAL
	bool
