# 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"
	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
