# 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"
	select ATOMIC_OPERATIONS_BUILTIN

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.
#
# 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"
