# SPDX-License-Identifier: Apache-2.0

choice
	prompt "SoC/CPU/Configuration Selection"

source "$(SOC_DIR)/$(ARCH)/*/Kconfig.soc"

endchoice

menu "Hardware Configuration"
osource "$(SOC_DIR)/$(ARCH)/Kconfig"
osource "$(SOC_DIR)/$(ARCH)/*/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
# nrf52_bsim board uses the POSIX arch, but is compatible with Nordic ARM
# boards

config SOC_COMPATIBLE_NRF
	bool

config SOC_COMPATIBLE_NRF52X
	bool

config SOC_COMPATIBLE_NRF52832
	bool

#
# SOC_*_LD: SoC specific Linker script additions
#

if ARC || ARM || X86 || NIOS2 || RISCV32

config SOC_NOINIT_LD
	bool
	help
	  Include an SoC specific linker script fragment named soc-noinit.ld
	  for inserting additional data and linker directives into
	  the noinit section.

	  This only has effect if the SoC uses the common linker script
	  under include/arch/.

config SOC_RODATA_LD
	bool
	help
	  Include an SoC specific linker script fragment named soc-rodata.ld
	  for inserting additional data and linker directives into
	  the rodata section.

	  This only has effect if the SoC uses the common linker script
	  under include/arch/.

config SOC_RWDATA_LD
	bool
	help
	  Include an SoC specific linker script fragment named soc-rwdata.ld
	  for inserting additional data and linker directives into
	  the data section.

	  This only has effect if the SoC uses the common linker script
	  under include/arch/.

endif # ARC || ARM || X86 || NIOS2 || RISCV32
