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

config NATIVE_SIMULATOR_MCU_N
	int "CPU Number this image targets"
	range 0 15
	default 0
	depends on NATIVE_LIBRARY
	help
	  Which native simulator microcontroller/CPU number is this image targeting.
	  This option is only applicable for targets which use the
	  native simulator as their runner.

config NATIVE_SIMULATOR_NUMBER_MCUS
	int "Total number of MCUs this target has"
	range 1 16
	default 1
	depends on NATIVE_LIBRARY
	help
	  How many AMP MCUs does this target have in total.

config NATIVE_SIMULATOR_PRIMARY_MCU_INDEX
	int "Which CPU is the primary/preferred"
	default 0
	depends on NATIVE_LIBRARY
	help
	  On a multi MCU device, which MCU is the preferred one.
	  This MCU will for example have its tests command line parameters presented
	  without any prefix. Note that an MCU being primary does not imply it will be
	  the first one to boot, or even that it will boot automatically.

config NATIVE_SIMULATOR_EXTRA_IMAGE_PATHS
	string "Other cores images to include"
	depends on NATIVE_LIBRARY
	help
	  This option can be used to provide the native simulator with other MCUs/Cores images which have
	  been produced by either other Zephyr builds or different OS builds.
	  So you can, for ex., use this application build to produce one core image, and at the same time
	  have it produce the final link with the native simulator runner and the other MCU images.

config NATIVE_SIMULATOR_AUTOSTART_MCU
	bool "Auto-start this MCU"
	depends on NATIVE_LIBRARY
	help
	  Automatically start the MCU this Zephyr image is built for during HW boot,
	  even if in other circumstances this MCU would not start automatically (for ex. because
	  another core is meant to release its reset).
	  If that MCU was, by HW design, going to start at HW boot anyhow, this option does nothing.
	  This option is meant to facilitate development.
