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

menu "Misc"

config LOG_DOMAIN_ID
	int "Domain ID"
	depends on !LOG_MODE_MINIMAL
	default 0
	range 0 7
	help
	  In multicore system each application/core must have unique domain ID.

config LOG_CMDS
	bool "Shell commands"
	depends on SHELL
	depends on !LOG_FRONTEND_ONLY && !LOG_MODE_MINIMAL
	default y if SHELL

config LOG_TEST_CLEAR_MESSAGE_SPACE
	bool "Clear message after allocation"
	default y
	depends on ZTEST
	help
	  Used in testing to simplify message comparision if message contains
	  paddings.

config LOG_USE_VLA
	bool "Using variable length arrays"
	default y if !MISRA_SANE
	help
	  Using VLA slightly decreases stack usage in some cases it may not be
	  supported. Note that VLA are used for arrays which size is resolved at
	  compile time so at runtime arrays have fixed size.

config LOG_ALWAYS_RUNTIME
	bool "Always use runtime message creation (v2)"
	default y if NO_OPTIMIZATIONS
	default y if LOG_MODE_IMMEDIATE
	default y if "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "xcc"
	help
	  If enabled, runtime method is always used for message creation. Static
	  creation relies on compiler being able to optimize and remove code
	  based on information known at compile time. Runtime only approach must
	  be used when optimization is disabled because some compilers
	  (seen on arm_cortex_m and x86) were using unrealistic amount of stack
	  for dead code. It is also required in immediate mode since it requires
	  less stack than static message creation and speed has lower priority
	  in that mode.

config LOG_FMT_SECTION
	bool "Keep log strings in dedicated section"
	help
	  When enabled, logs are kept in dedicated memory section. It allows
	  removing strings from final binary and should be used for dictionary
	  logging.

config LOG_USE_TAGGED_ARGUMENTS
	bool "Using tagged arguments for packaging"
	depends on !PICOLIBC
	select CBPRINTF_PACKAGE_SUPPORT_TAGGED_ARGUMENTS
	select LOG_ALWAYS_RUNTIME
	help
	  If enabled, packaging uses tagged arguments.

config LOG_MEM_UTILIZATION
	bool "Tracking maximum memory utilization"
	depends on LOG_MODE_DEFERRED
	default y if LOG_CMDS
	help
	  When enabled, maximum usage of memory used for log messages in deferred
	  mode is tracked. It can be used to trim LOG_BUFFER_SIZE.

config LOG_DICTIONARY_DB
	bool

endmenu
