# Kconfig - general architecture configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
# Copyright (c) 2015 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#


choice
	prompt "Architecture"
	default X86

config ARC
	bool "ARC architecture"

config ARM
	bool "ARM architecture"

config X86
	bool "x86 architecture"
	select NANOKERNEL_TICKLESS_IDLE_SUPPORTED
	select ATOMIC_OPERATIONS_BUILTIN

config NIOS2
	bool "Nios II Gen 2 architecture"
	select ATOMIC_OPERATIONS_C

endchoice

#
# Hidden PM feature configs which are to be selected by
# individual SoC.
#
config SYS_POWER_LOW_POWER_STATE_SUPPORTED
	# Hidden
	bool
	default n
	help
	This option signifies that the target supports the SYS_POWER_LOW_POWER_STATE
	configuration option.

config SYS_POWER_DEEP_SLEEP_SUPPORTED
	# Hidden
	bool
	default n
	help
	This option signifies that the target supports the SYS_POWER_DEEP_SLEEP
	configuration option.

config BOOTLOADER_CONTEXT_RESTORE_SUPPORTED
	# Hidden
	bool
	default n
	help
	This option signifies that the target has options of bootloaders
	that support context restore upon resume from deep sleep

#
# End hidden PM feature configs
#

config ARCH
	string
	help
	System architecture string.

config SOC
	string
	help
	SoC name which can be found under arch/<arch>/soc/<soc name>.
	This option holds the directory name used by the build system to locate
	the correct linker and header files for the SoC. This option will go away
	once all SoCs are using family/series structure.

config SOC_SERIES
	string
	help
	SoC series name which can be found under arch/<arch>/soc/<family>/<series>.
	This option holds the directory name used by the build system to locate
	the correct linker and header files.

config SOC_FAMILY
	string
	help
	SoC family name which can be found under arch/<arch>/soc/<family>.
	This option holds the directory name used by the build system to locate
	the correct linker and header files.

config BOARD
	string
	help
	This option holds the name of the board and is used to located the files
	related to the board in the source tree (under boards/).
	The Board is the first location where we search for a linker.ld file,
	if not found we look for the linker file in
	arch/<arch>/soc/<family>/<series>

source "arch/*/Kconfig"

source "boards/Kconfig"
