# SPDX-License-Identifier: Apache-2.0

# Only v1 model has choice for SoC selection, therefore the optional source
# Sourced here and not in Kconfig.v1 to keep current SoC/CPU selection menu
# side-by-side with "Hardware Configuration" in the menu structure.
menu "Hardware Configuration"

rsource "Kconfig.v2"

# Source Zephyr Kconfig specifics from SoC roots.
osource "$(KCONFIG_BINARY_DIR)/soc/Kconfig"

# Source common Kconfig file
osource "soc/common/Kconfig"

module = SOC
module-str = SOC
source "subsys/logging/Kconfig.template.log_config"

endmenu

# The helper symbols below are put here due to an unusual setup: The simulated
# nrf5x_bsim boards use the POSIX arch, but are compatible with Nordic ARM boards

config SOC_COMPATIBLE_NRF
	bool

config SOC_COMPATIBLE_NRF52X
	bool

config SOC_COMPATIBLE_NRF53X
	bool

config SOC_COMPATIBLE_NRF54LX
	bool

config SOC_COMPATIBLE_NRF52833
	bool

config SOC_COMPATIBLE_NRF5340_CPUNET
	bool

config SOC_COMPATIBLE_NRF5340_CPUAPP
	bool

config SOC_COMPATIBLE_NRF54L15
	bool

config SOC_COMPATIBLE_NRF54L15_CPUAPP
	bool

config SOC_DEPRECATED_RELEASE
	string
	help
	  This hidden option is set in the SoC configuration and indicates
	  the Zephyr release that the SoC configuration will be removed.
	  When set, any build for that SoC will generate a clearly visible
	  deprecation warning.
	  When adding this to a SOC, remember to follow the instructions in
	  https://docs.zephyrproject.org/latest/develop/api/api_lifecycle.html#deprecated

config SOC_HAS_TIMING_FUNCTIONS
	bool
	help
	  Should be selected if SoC provides custom method for retrieving
	  timestamps and cycle count.

config SOC_HAS_RUNTIME_NUM_CPUS
	bool
	help
	  Should be selected if SoC handles determining the number of CPUs
	  at runtime.
