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

config BOARD_NATIVE_SIM
	bool "Native simulator (Single Core)"
	select POSIX_ARCH_CONSOLE
	select NATIVE_LIBRARY
	select NATIVE_POSIX_TIMER
	depends on SOC_POSIX
	imply BOARD_NATIVE_POSIX if NATIVE_SIM_NATIVE_POSIX_COMPAT

if BOARD_NATIVE_SIM

comment "Native Simular (Single Core) options"

config NATIVE_SIM_NATIVE_POSIX_COMPAT
	bool "Pretend to be a native_posix board"
	default y
	help
	  When this option is set the native_sim board will pretend to be
	  a native_posix board from kconfig point of view, to allow using it directly with
	  code which was meant for the native_posix board and checks for the macro
	  CONFIG_BOARD_NATIVE_POSIX, or requires other kconfig options which depend on it.

config NATIVE_SIM_SLOWDOWN_TO_REAL_TIME
	bool "Slow down execution to real time"
	default n if ARCH_POSIX_LIBFUZZER
	default y if BT_USERCHAN || !TEST
	help
	  When selected the execution of the process will be slowed down to real time.
	  (if there is a lot of load it may be slower than real time)
	  If deselected, the process will run as fast as possible.
	  Note that this only decouples simulated time from real/wall time. In either
	  case the zephyr kernel and application cannot tell the difference unless they
	  interact with some other driver/device which runs at real time.

# This option definition exists only to enable NATIVE_SIM_NATIVE_POSIX_COMPAT
config BOARD_NATIVE_POSIX
	bool

config NATIVE_POSIX_SLOWDOWN_TO_REAL_TIME
	bool "Slow down execution to real time (native_posix compat)"
	select NATIVE_SIM_SLOWDOWN_TO_REAL_TIME
	help
	  Transitional option which allows applications which targeted native_posix
	  to set the correct native_sim option (CONFIG_NATIVE_SIM_SLOWDOWN_TO_REAL_TIME)

source "boards/$(ARCH)/common/sdl/Kconfig"
source "boards/$(ARCH)/common/extra_args/Kconfig"

endif # BOARD_NATIVE_SIM
