# 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

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.cmd file,
	if not found we look for the linker file in
	arch/<arch>/soc/<family>/<series>

source "arch/*/Kconfig"

source "boards/Kconfig"
