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

choice "LOG_BACKEND_$(backend)_OUTPUT"
	prompt "Backend Output Mode"
	default LOG_BACKEND_$(backend)_OUTPUT_TEXT

config LOG_BACKEND_$(backend)_OUTPUT_TEXT
	bool "Text"
	help
	  Output in text.

config LOG_BACKEND_$(backend)_OUTPUT_SYST
	bool "MIPI SyS-T"
	depends on LOG_MIPI_SYST_ENABLE
	help
	  When enabled backend is used to output syst format logs.

config LOG_BACKEND_$(backend)_OUTPUT_DICTIONARY
	bool "Dictionary"
	select LOG_DICTIONARY_SUPPORT
	help
	  Backend is in dictionary-based logging output mode.

endchoice

# The numbering of the format types should be consistent across
# all the backends in the Kconfig and their values must match
# LOG_OUTPUT_XXX type in C files.
# Example : LOG_BACKEND_XXX_OUTPUT_TEXT should be numbered 0 across all backends
# and should match the value of LOG_OUTPUT_TEXT defined in log_output.h
config LOG_BACKEND_$(backend)_OUTPUT_DEFAULT
	int
	default 0 if LOG_BACKEND_$(backend)_OUTPUT_TEXT
	default 1 if LOG_BACKEND_$(backend)_OUTPUT_SYST
	default 2 if LOG_BACKEND_$(backend)_OUTPUT_DICTIONARY
