# Kconfig - ARM core configuration options

#
# Copyright (c) 2015 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

config CPU_CORTEX
	bool
	# Omit prompt to signify "hidden" option
	default n
	help
	This option signifies the use of a CPU of the Cortex family.

config CPU_CORTEX_M
	bool
	# Omit prompt to signify "hidden" option
	default n
	select CPU_CORTEX
	select ARCH_HAS_CUSTOM_SWAP_TO_MAIN
	select HAS_CMSIS
	help
	This option signifies the use of a CPU of the Cortex-M family.

config CPU_HAS_SYSTICK
	bool
	# Omit prompt to signify "hidden" option
	default n
	help
	This option is enabled when the CPU has systick timer implemented.

config CPU_HAS_FPU
	# Hidden config selected by CPU family
	bool
	default n
	help
	This option is enabled when the CPU has a hardware floating point
	unit.

menu "Floating Point Options"
depends on CPU_HAS_FPU

config	FLOAT
	bool
	prompt "Floating point registers"
	default n
	help
	This option allows tasks and fibers to use the floating point registers.
	By default, only a single task or fiber may use the registers.

	Disabling this option means that any task or fiber that uses a
	floating point register will get a fatal exception.

config	FP_SHARING
	bool
	prompt "Floating point register sharing"
	depends on FLOAT
	default n
	help
	This option allows multiple tasks and fibers to use the floating point
	registers.

choice
	prompt "Floating point ABI"
	default FP_HARDABI
	depends on FLOAT

config FP_HARDABI
	bool "Floating point Hard ABI"
	depends on FLOAT
	help
	This option selects the Floating point ABI in which hardware floating
	point instructions are generated and uses FPU-specific calling
	conventions

config FP_SOFTABI
	bool "Floating point Soft ABI"
	depends on FLOAT
	help
	This option selects the Floating point ABI in which hardware floating
	point instructions are generated but soft-float calling conventions.

endchoice

endmenu

if CPU_CORTEX_M
source "arch/arm/core/cortex_m/Kconfig"
endif
