# arm cpu features
config BR2_ARM_CPU_HAS_NEON
	bool

# for some cores, NEON support is optional
config BR2_ARM_CPU_MAYBE_HAS_NEON
	bool

# For some cores, the FPU is optional
config BR2_ARM_CPU_MAYBE_HAS_FPU
	bool

config BR2_ARM_CPU_HAS_FPU
	bool

# for some cores, VFPv2 is optional
config BR2_ARM_CPU_MAYBE_HAS_VFPV2
	bool
	select BR2_ARM_CPU_MAYBE_HAS_FPU

config BR2_ARM_CPU_HAS_VFPV2
	bool
	select BR2_ARM_CPU_HAS_FPU

# for some cores, VFPv3 is optional
config BR2_ARM_CPU_MAYBE_HAS_VFPV3
	bool
	select BR2_ARM_CPU_MAYBE_HAS_VFPV2

config BR2_ARM_CPU_HAS_VFPV3
	bool
	select BR2_ARM_CPU_HAS_VFPV2

# for some cores, VFPv4 is optional
config BR2_ARM_CPU_MAYBE_HAS_VFPV4
	bool
	select BR2_ARM_CPU_MAYBE_HAS_VFPV3

config BR2_ARM_CPU_HAS_VFPV4
	bool
	select BR2_ARM_CPU_HAS_VFPV3

# FPv4 is always optional
config BR2_ARM_CPU_MAYBE_HAS_FPV4
	bool
	select BR2_ARM_CPU_MAYBE_HAS_FPU

config BR2_ARM_CPU_HAS_FPV4
	bool
	select BR2_ARM_CPU_HAS_FPU

# FPv5 is always optional
config BR2_ARM_CPU_MAYBE_HAS_FPV5
	bool
	select BR2_ARM_CPU_MAYBE_HAS_FPV4

config BR2_ARM_CPU_HAS_FPV5
	bool
	select BR2_ARM_CPU_HAS_FPV4

config BR2_ARM_CPU_HAS_FP_ARMV8
	bool
	select BR2_ARM_CPU_HAS_VFPV4

config BR2_ARM_CPU_HAS_ARM
	bool

config BR2_ARM_CPU_HAS_THUMB
	bool

config BR2_ARM_CPU_HAS_THUMB2
	bool

config BR2_ARM_CPU_ARMV4
	bool
	select BR2_USE_MMU

config BR2_ARM_CPU_ARMV5
	bool
	select BR2_USE_MMU

config BR2_ARM_CPU_ARMV6
	bool
	select BR2_USE_MMU

config BR2_ARM_CPU_ARMV7A
	bool
	select BR2_USE_MMU

config BR2_ARM_CPU_ARMV7M
	bool

config BR2_ARM_CPU_ARMV8A
	bool
	select BR2_USE_MMU

choice
	prompt "Target Architecture Variant"
	default BR2_cortex_a53 if BR2_ARCH_IS_64
	default BR2_arm926t
	help
	  Specific CPU variant to use

if !BR2_ARCH_IS_64
comment "armv4 cores"
config BR2_arm920t
	bool "arm920t"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_THUMB
	select BR2_ARM_CPU_ARMV4
config BR2_arm922t
	bool "arm922t"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_THUMB
	select BR2_ARM_CPU_ARMV4
config BR2_fa526
	bool "fa526/626"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_ARMV4
config BR2_strongarm
	bool "strongarm sa110/sa1100"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_ARMV4

comment "armv5 cores"
config BR2_arm926t
	bool "arm926t"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_MAYBE_HAS_VFPV2
	select BR2_ARM_CPU_HAS_THUMB
	select BR2_ARM_CPU_ARMV5
config BR2_xscale
	bool "xscale"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_THUMB
	select BR2_ARM_CPU_ARMV5

comment "armv6 cores"
config BR2_arm1136j_s
	bool "arm1136j-s"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_THUMB
	select BR2_ARM_CPU_ARMV6
config BR2_arm1136jf_s
	bool "arm1136jf-s"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_VFPV2
	select BR2_ARM_CPU_HAS_THUMB
	select BR2_ARM_CPU_ARMV6
config BR2_arm1176jz_s
	bool "arm1176jz-s"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_THUMB
	select BR2_ARM_CPU_ARMV6
config BR2_arm1176jzf_s
	bool "arm1176jzf-s"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_VFPV2
	select BR2_ARM_CPU_HAS_THUMB
	select BR2_ARM_CPU_ARMV6
config BR2_arm11mpcore
	bool "mpcore"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_MAYBE_HAS_VFPV2
	select BR2_ARM_CPU_HAS_THUMB
	select BR2_ARM_CPU_ARMV6

comment "armv7a cores"
config BR2_cortex_a5
	bool "cortex-A5"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_MAYBE_HAS_NEON
	select BR2_ARM_CPU_MAYBE_HAS_VFPV4
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_ARMV7A
config BR2_cortex_a7
	bool "cortex-A7"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_NEON
	select BR2_ARM_CPU_HAS_VFPV4
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_ARMV7A
config BR2_cortex_a8
	bool "cortex-A8"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_NEON
	select BR2_ARM_CPU_HAS_VFPV3
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_ARMV7A
config BR2_cortex_a9
	bool "cortex-A9"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_MAYBE_HAS_NEON
	select BR2_ARM_CPU_MAYBE_HAS_VFPV3
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_ARMV7A
config BR2_cortex_a12
	bool "cortex-A12"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_NEON
	select BR2_ARM_CPU_HAS_VFPV4
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_ARMV7A
config BR2_cortex_a15
	bool "cortex-A15"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_NEON
	select BR2_ARM_CPU_HAS_VFPV4
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_ARMV7A
config BR2_cortex_a15_a7
	bool "cortex-A15/A7 big.LITTLE"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_NEON
	select BR2_ARM_CPU_HAS_VFPV4
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_ARMV7A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_4_9
config BR2_cortex_a17
	bool "cortex-A17"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_NEON
	select BR2_ARM_CPU_HAS_VFPV4
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_ARMV7A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
config BR2_cortex_a17_a7
	bool "cortex-A17/A7 big.LITTLE"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_NEON
	select BR2_ARM_CPU_HAS_VFPV4
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_ARMV7A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
config BR2_pj4
	bool "pj4"
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_VFPV3
	select BR2_ARM_CPU_ARMV7A

# Cortex-M cores are only supported for little endian configurations
if BR2_arm
comment "armv7m cores"
config BR2_cortex_m3
	bool "cortex-M3"
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_ARMV7M
config BR2_cortex_m4
	bool "cortex-M4"
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_MAYBE_HAS_FPV4
	select BR2_ARM_CPU_ARMV7M
config BR2_cortex_m7
	bool "cortex-M7"
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_MAYBE_HAS_FPV5
	select BR2_ARM_CPU_ARMV7M
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
endif # BR2_arm
endif # !BR2_ARCH_IS_64

comment "armv8 cores"
config BR2_cortex_a32
	bool "cortex-A32"
	depends on !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_ARM
	select BR2_ARM_CPU_HAS_NEON
	select BR2_ARM_CPU_HAS_THUMB2
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_6
config BR2_cortex_a35
	bool "cortex-A35"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_6
config BR2_cortex_a53
	bool "cortex-A53"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
config BR2_cortex_a57
	bool "cortex-A57"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
config BR2_cortex_a57_a53
	bool "cortex-A57/A53 big.LITTLE"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_6
config BR2_cortex_a72
	bool "cortex-A72"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
config BR2_cortex_a72_a53
	bool "cortex-A72/A53 big.LITTLE"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_6
config BR2_cortex_a73
	bool "cortex-A73"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
config BR2_cortex_a73_a35
	bool "cortex-A73/A35 big.LITTLE"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
config BR2_cortex_a73_a53
	bool "cortex-A73/A53 big.LITTLE"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
config BR2_emag
	bool "emag"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_9
config BR2_exynos_m1
	bool "exynos-m1"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
config BR2_falkor
	bool "falkor"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
config BR2_phecda
	bool "phecda"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_9
config BR2_qdf24xx
	bool "qdf24xx"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_6
config BR2_thunderx
	bool "thunderx (aka octeontx)"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
config BR2_thunderxt81
	bool "thunderxt81 (aka octeontx81)"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
config BR2_thunderxt83
	bool "thunderxt83 (aka octeontx83)"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
config BR2_thunderxt88
	bool "thunderxt88"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
config BR2_thunderxt88p1
	bool "thunderxt88p1"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
config BR2_xgene1
	bool "xgene1"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5

comment "armv8.1a cores"
config BR2_thunderx2t99
	bool "thunderx2t99"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
config BR2_thunderx2t99p1
	bool "thunderx2t99p1"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
config BR2_vulcan
	bool "vulcan"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_7

comment "armv8.2a cores"
config BR2_cortex_a55
	bool "cortex-A55"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_8
config BR2_cortex_a75
	bool "cortex-A75"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_8
config BR2_cortex_a75_a55
	bool "cortex-A75/A55 big.LITTLE"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_8
config BR2_cortex_a76
	bool "cortex-A76"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_9
config BR2_cortex_a76_a55
	bool "cortex-A76/A55 big.LITTLE"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_9
config BR2_neoverse_n1
	bool "neoverse-N1 (aka ares)"
	select BR2_ARM_CPU_HAS_ARM if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_NEON if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_THUMB2 if !BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_9
config BR2_tsv110
	bool "tsv110"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_9

comment "armv8.4a cores"
config BR2_saphira
	bool "saphira"
	depends on BR2_ARCH_IS_64
	select BR2_ARM_CPU_HAS_FP_ARMV8
	select BR2_ARM_CPU_ARMV8A
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_8
endchoice

config BR2_ARM_ENABLE_NEON
	bool "Enable NEON SIMD extension support"
	depends on BR2_ARM_CPU_MAYBE_HAS_NEON
	select BR2_ARM_CPU_HAS_NEON
	help
	  For some CPU cores, the NEON SIMD extension is optional.
	  Select this option if you are certain your particular
	  implementation has NEON support and you want to use it.

config BR2_ARM_ENABLE_VFP
	bool "Enable VFP extension support"
	depends on BR2_ARM_CPU_MAYBE_HAS_FPU
	select BR2_ARM_CPU_HAS_FPV5 if BR2_ARM_CPU_MAYBE_HAS_FPV5
	select BR2_ARM_CPU_HAS_FPV4 if BR2_ARM_CPU_MAYBE_HAS_FPV4
	select BR2_ARM_CPU_HAS_VFPV4 if BR2_ARM_CPU_MAYBE_HAS_VFPV4
	select BR2_ARM_CPU_HAS_VFPV3 if BR2_ARM_CPU_MAYBE_HAS_VFPV3
	select BR2_ARM_CPU_HAS_VFPV2 if BR2_ARM_CPU_MAYBE_HAS_VFPV2
	help
	  For some CPU cores, the VFP extension is optional. Select
	  this option if you are certain your particular
	  implementation has VFP support and you want to use it.

choice
	prompt "Target ABI"
	default BR2_ARM_EABIHF if BR2_ARM_CPU_HAS_FPU
	default BR2_ARM_EABI
	depends on BR2_arm || BR2_armeb
	help
	  Application Binary Interface to use. The Application Binary
	  Interface describes the calling conventions (how arguments
	  are passed to functions, how the return value is passed, how
	  system calls are made, etc.).

config BR2_ARM_EABI
	bool "EABI"
	help
	  The EABI is currently the standard ARM ABI, which is used in
	  most projects. It supports both the 'soft' floating point
	  model (in which floating point instructions are emulated in
	  software) and the 'softfp' floating point model (in which
	  floating point instructions are executed using an hardware
	  floating point unit, but floating point arguments to
	  functions are passed in integer registers).

	  The 'softfp' floating point model is link-compatible with
	  the 'soft' floating point model, i.e you can link a library
	  built 'soft' with some other code built 'softfp'.

	  However, passing the floating point arguments in integer
	  registers is a bit inefficient, so if your ARM processor has
	  a floating point unit, and you don't have pre-compiled
	  'soft' or 'softfp' code, using the EABIhf ABI will provide
	  better floating point performances.

	  If your processor does not have a floating point unit, then
	  you must use this ABI.

config BR2_ARM_EABIHF
	bool "EABIhf"
	depends on BR2_ARM_CPU_HAS_FPU
	help
	  The EABIhf is an extension of EABI which supports the 'hard'
	  floating point model. This model uses the floating point
	  unit to execute floating point instructions, and passes
	  floating point arguments in floating point registers.

	  It is more efficient than EABI for floating point related
	  workload. However, it does not allow to link against code
	  that has been pre-built for the 'soft' or 'softfp' floating
	  point models.

	  If your processor has a floating point unit, and you don't
	  depend on existing pre-compiled code, this option is most
	  likely the best choice.

endchoice

choice
	prompt "Floating point strategy"
	default BR2_ARM_FPU_FP_ARMV8 if BR2_ARM_CPU_HAS_FP_ARMV8
	default BR2_ARM_FPU_FPV5D16 if BR2_ARM_CPU_HAS_FPV5
	default BR2_ARM_FPU_FPV4D16 if BR2_ARM_CPU_HAS_FPV4
	default BR2_ARM_FPU_VFPV4D16 if BR2_ARM_CPU_HAS_VFPV4
	default BR2_ARM_FPU_VFPV3D16 if BR2_ARM_CPU_HAS_VFPV3
	default BR2_ARM_FPU_VFPV2 if BR2_ARM_CPU_HAS_VFPV2
	default BR2_ARM_SOFT_FLOAT if !BR2_ARM_CPU_HAS_FPU

config BR2_ARM_SOFT_FLOAT
	bool "Soft float"
	depends on BR2_ARM_EABI
	select BR2_SOFT_FLOAT
	help
	  This option allows to use software emulated floating
	  point. It should be used for ARM cores that do not include a
	  Vector Floating Point unit, such as ARMv5 cores (ARM926 for
	  example) or certain ARMv6 cores.

config BR2_ARM_FPU_VFPV2
	bool "VFPv2"
	depends on BR2_ARM_CPU_HAS_VFPV2
	help
	  This option allows to use the VFPv2 floating point unit, as
	  available in some ARMv5 processors (ARM926EJ-S) and some
	  ARMv6 processors (ARM1136JF-S, ARM1176JZF-S and ARM11
	  MPCore).

	  Note that this option is also safe to use for newer cores
	  such as Cortex-A, because the VFPv3 and VFPv4 units are
	  backward compatible with VFPv2.

config BR2_ARM_FPU_VFPV3
	bool "VFPv3"
	depends on BR2_ARM_CPU_HAS_VFPV3
	help
	  This option allows to use the VFPv3 floating point unit, as
	  available in some ARMv7 processors (Cortex-A{8, 9}). This
	  option requires a VFPv3 unit that has 32 double-precision
	  registers, which is not necessarily the case in all SOCs
	  based on Cortex-A{8, 9}. If you're unsure, use VFPv3-D16
	  instead, which is guaranteed to work on all Cortex-A{8, 9}.

	  Note that this option is also safe to use for newer cores
	  that have a VFPv4 unit, because VFPv4 is backward compatible
	  with VFPv3. They must of course also have 32
	  double-precision registers.

config BR2_ARM_FPU_VFPV3D16
	bool "VFPv3-D16"
	depends on BR2_ARM_CPU_HAS_VFPV3
	help
	  This option allows to use the VFPv3 floating point unit, as
	  available in some ARMv7 processors (Cortex-A{8, 9}). This
	  option requires a VFPv3 unit that has 16 double-precision
	  registers, which is generally the case in all SOCs based on
	  Cortex-A{8, 9}, even though VFPv3 is technically optional on
	  Cortex-A9. This is the safest option for those cores.

	  Note that this option is also safe to use for newer cores
	  such that have a VFPv4 unit, because the VFPv4 is backward
	  compatible with VFPv3.

config BR2_ARM_FPU_VFPV4
	bool "VFPv4"
	depends on BR2_ARM_CPU_HAS_VFPV4
	help
	  This option allows to use the VFPv4 floating point unit, as
	  available in some ARMv7 processors (Cortex-A{5, 7, 12,
	  15}). This option requires a VFPv4 unit that has 32
	  double-precision registers, which is not necessarily the
	  case in all SOCs based on Cortex-A{5, 7, 12, 15}. If you're
	  unsure, you should probably use VFPv4-D16 instead.

	  Note that if you want binary code that works on all ARMv7
	  cores, including the earlier Cortex-A{8, 9}, you should
	  instead select VFPv3.

config BR2_ARM_FPU_VFPV4D16
	bool "VFPv4-D16"
	depends on BR2_ARM_CPU_HAS_VFPV4
	help
	  This option allows to use the VFPv4 floating point unit, as
	  available in some ARMv7 processors (Cortex-A{5, 7, 12,
	  15}). This option requires a VFPv4 unit that has 16
	  double-precision registers, which is always available on
	  Cortex-A12 and Cortex-A15, but optional on Cortex-A5 and
	  Cortex-A7.

	  Note that if you want binary code that works on all ARMv7
	  cores, including the earlier Cortex-A{8, 9}, you should
	  instead select VFPv3-D16.

config BR2_ARM_FPU_NEON
	bool "NEON"
	depends on BR2_ARM_CPU_HAS_NEON
	help
	  This option allows to use the NEON SIMD unit, as available
	  in some ARMv7 processors, as a floating-point unit. It
	  should however be noted that using NEON for floating point
	  operations doesn't provide a complete compatibility with the
	  IEEE 754.

config BR2_ARM_FPU_NEON_VFPV4
	bool "NEON/VFPv4"
	depends on BR2_ARM_CPU_HAS_VFPV4
	depends on BR2_ARM_CPU_HAS_NEON
	help
	  This option allows to use both the VFPv4 and the NEON SIMD
	  units for floating point operations. Note that some ARMv7
	  cores do not necessarily have VFPv4 and/or NEON support, for
	  example on Cortex-A5 and Cortex-A7, support for VFPv4 and
	  NEON is optional.

config BR2_ARM_FPU_FPV4D16
	bool "FPv4-D16"
	depends on BR2_ARM_CPU_HAS_FPV4
	help
	  This option allows to use the FPv4-SP (single precision)
	  floating point unit, as available in some ARMv7m processors
	  (Cortex-M4).

config BR2_ARM_FPU_FPV5D16
	bool "FPv5-D16"
	depends on BR2_ARM_CPU_HAS_FPV5
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
	help
	  This option allows to use the FPv5-SP (single precision)
	  floating point unit, as available in some ARMv7m processors
	  (Cortex-M7).

	  Note that if you want binary code that works on the earlier
	  Cortex-M4, you should instead select FPv4-D16.

config BR2_ARM_FPU_FPV5DPD16
	bool "FPv5-DP-D16"
	depends on BR2_ARM_CPU_HAS_FPV5
	select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
	help
	  This option allows to use the FPv5-DP (double precision)
	  floating point unit, as available in some ARMv7m processors
	  (Cortex-M7).

	  Note that if you want binary code that works on the earlier
	  Cortex-M4, you should instead select FPv4-D16.

config BR2_ARM_FPU_FP_ARMV8
	bool "FP-ARMv8"
	depends on BR2_ARM_CPU_HAS_FP_ARMV8
	help
	  This option allows to use the ARMv8 floating point unit.

config BR2_ARM_FPU_NEON_FP_ARMV8
	bool "NEON/FP-ARMv8"
	depends on BR2_ARM_CPU_HAS_FP_ARMV8
	depends on BR2_ARM_CPU_HAS_NEON
	help
	  This option allows to use both the ARMv8 floating point unit
	  and the NEON SIMD unit for floating point operations.

endchoice

choice
	prompt "ARM instruction set"
	depends on BR2_arm || BR2_armeb

config BR2_ARM_INSTRUCTIONS_ARM
	bool "ARM"
	depends on BR2_ARM_CPU_HAS_ARM
	help
	  This option instructs the compiler to generate regular ARM
	  instructions, that are all 32 bits wide.

config BR2_ARM_INSTRUCTIONS_THUMB
	bool "Thumb"
	depends on BR2_ARM_CPU_HAS_THUMB
	# Thumb-1 and VFP are not compatible
	depends on BR2_ARM_SOFT_FLOAT
	help
	  This option instructions the compiler to generate Thumb
	  instructions, which allows to mix 16 bits instructions and
	  32 bits instructions. This generally provides a much smaller
	  compiled binary size.

comment "Thumb1 is not compatible with VFP"
	depends on BR2_ARM_CPU_HAS_THUMB
	depends on !BR2_ARM_SOFT_FLOAT

config BR2_ARM_INSTRUCTIONS_THUMB2
	bool "Thumb2"
	depends on BR2_ARM_CPU_HAS_THUMB2
	help
	  This option instructions the compiler to generate Thumb2
	  instructions, which allows to mix 16 bits instructions and
	  32 bits instructions. This generally provides a much smaller
	  compiled binary size.

endchoice

choice
	prompt "MMU Page Size"
	default BR2_ARM64_PAGE_SIZE_4K
	depends on BR2_aarch64 || BR2_aarch64_be
	help
	  The default is 4KB, and you should probably keep this unless
	  you know what you are doing. In particular, the kernel
	  configuration must match this choice. If your kernel is
	  built by Buildroot, the kernel configuration is
	  automatically adjusted, but not if you built your kernel
	  outside of Buildroot.

config BR2_ARM64_PAGE_SIZE_4K
	bool "4KB"

config BR2_ARM64_PAGE_SIZE_16K
	bool "16KB"

config BR2_ARM64_PAGE_SIZE_64K
	bool "64KB"

endchoice

config BR2_ARM64_PAGE_SIZE
	string
	default "4K" if BR2_ARM64_PAGE_SIZE_4K
	default "16K" if BR2_ARM64_PAGE_SIZE_16K
	default "64K" if BR2_ARM64_PAGE_SIZE_64K

config BR2_ARCH
	default "arm"		if BR2_arm
	default "armeb"		if BR2_armeb
	default "aarch64"	if BR2_aarch64
	default "aarch64_be"	if BR2_aarch64_be

config BR2_NORMALIZED_ARCH
	default "arm"		if BR2_arm || BR2_armeb
	default "arm64"		if BR2_aarch64 || BR2_aarch64_be

config BR2_ENDIAN
	default "LITTLE" if (BR2_arm || BR2_aarch64)
	default "BIG"	 if (BR2_armeb || BR2_aarch64_be)

config BR2_GCC_TARGET_CPU
	# armv4
	default "arm920t"	if BR2_arm920t
	default "arm922t"	if BR2_arm922t
	default "fa526"		if BR2_fa526
	default "strongarm"	if BR2_strongarm
	# armv5
	default "arm926ej-s"	if BR2_arm926t
	default "xscale"	if BR2_xscale
	# armv6
	default "arm1136j-s"	if BR2_arm1136j_s
	default "arm1136jf-s"	if BR2_arm1136jf_s
	default "arm1176jz-s"	if BR2_arm1176jz_s
	default "arm1176jzf-s"	if BR2_arm1176jzf_s
	default "mpcore"	if BR2_arm11mpcore && BR2_ARM_CPU_HAS_VFPV2
	default "mpcorenovfp"	if BR2_arm11mpcore
	# armv7a
	default "cortex-a5"	if BR2_cortex_a5
	default "cortex-a7"	if BR2_cortex_a7
	default "cortex-a8"	if BR2_cortex_a8
	default "cortex-a9"	if BR2_cortex_a9
	default "cortex-a12"	if BR2_cortex_a12
	default "cortex-a15"	if BR2_cortex_a15
	default "cortex-a15.cortex-a7"	if BR2_cortex_a15_a7
	default "cortex-a17"	if BR2_cortex_a17
	default "cortex-a17.cortex-a7"	if BR2_cortex_a17_a7
	default "marvell-pj4"	if BR2_pj4
	# armv7m
	default "cortex-m3"	if BR2_cortex_m3
	default "cortex-m4"	if BR2_cortex_m4
	default "cortex-m7"	if BR2_cortex_m7
	# armv8a
	default "cortex-a32"	if BR2_cortex_a32
	default "cortex-a35"	if BR2_cortex_a35
	default "cortex-a53"	if BR2_cortex_a53
	default "cortex-a57"	if BR2_cortex_a57
	default "cortex-a57.cortex-a53"	if BR2_cortex_a57_a53
	default "cortex-a72"	if BR2_cortex_a72
	default "cortex-a72.cortex-a53"	if BR2_cortex_a72_a53
	default "cortex-a73"	if BR2_cortex_a73
	default "cortex-a73.cortex-a35"	if BR2_cortex_a73_a35
	default "cortex-a73.cortex-a53"	if BR2_cortex_a73_a53
	default "emag"		if BR2_emag
	default "exynos-m1"	if BR2_exynos_m1
	default "falkor"	if BR2_falkor
	default "phecda"	if BR2_phecda
	default "qdf24xx"	if BR2_qdf24xx
	default "thunderx"	if BR2_thunderx && !BR2_TOOLCHAIN_GCC_AT_LEAST_9
	default "octeontx"	if BR2_thunderx && BR2_TOOLCHAIN_GCC_AT_LEAST_9
	default "thunderxt81"	if BR2_thunderxt81 && !BR2_TOOLCHAIN_GCC_AT_LEAST_9
	default "octeontx81"	if BR2_thunderxt81 && BR2_TOOLCHAIN_GCC_AT_LEAST_9
	default "thunderxt83"	if BR2_thunderxt83 && !BR2_TOOLCHAIN_GCC_AT_LEAST_9
	default "octeontx83"	if BR2_thunderxt83 && BR2_TOOLCHAIN_GCC_AT_LEAST_9
	default "thunderxt88"	if BR2_thunderxt88
	default "thunderxt88p1"	if BR2_thunderxt88p1
	default "xgene1"	if BR2_xgene1
	# armv8.1a
	default "thunderx2t99"	if BR2_thunderx2t99
	default "thunderx2t99p1"	if BR2_thunderx2t99p1
	default "vulcan"	if BR2_vulcan
	# armv8.2a
	default "cortex-a55"	if BR2_cortex_a55
	default "cortex-a75"	if BR2_cortex_a75
	default "cortex-a75.cortex-a55"	if BR2_cortex_a75_a55
	default "cortex-a76"	if BR2_cortex_a76
	default "cortex-a76.cortex-a55"	if BR2_cortex_a76_a55
	default "neoverse-n1"	if BR2_neoverse_n1
	default "tsv110"	if BR2_tsv110
	# armv8.4a
	default "saphira"	if BR2_saphira

config BR2_GCC_TARGET_ABI
	default "aapcs-linux"	if BR2_arm || BR2_armeb
	default "lp64"		if BR2_aarch64 || BR2_aarch64_be

config BR2_GCC_TARGET_FPU
	default "vfp"		if BR2_ARM_FPU_VFPV2
	default "vfpv3"		if BR2_ARM_FPU_VFPV3
	default "vfpv3-d16"	if BR2_ARM_FPU_VFPV3D16
	default "vfpv4"		if BR2_ARM_FPU_VFPV4
	default "vfpv4-d16"	if BR2_ARM_FPU_VFPV4D16
	default "neon"		if BR2_ARM_FPU_NEON
	default "neon-vfpv4"	if BR2_ARM_FPU_NEON_VFPV4
	default "fpv4-sp-d16"   if BR2_ARM_FPU_FPV4D16
	default "fpv5-sp-d16"	if BR2_ARM_FPU_FPV5D16
	default "fpv5-d16"	if BR2_ARM_FPU_FPV5DPD16
	default "fp-armv8"	if BR2_ARM_FPU_FP_ARMV8
	default "neon-fp-armv8"	if BR2_ARM_FPU_NEON_FP_ARMV8
	depends on BR2_arm || BR2_armeb

config BR2_GCC_TARGET_FLOAT_ABI
	default "soft"		if BR2_ARM_SOFT_FLOAT
	default "softfp"	if !BR2_ARM_SOFT_FLOAT && BR2_ARM_EABI
	default "hard"		if !BR2_ARM_SOFT_FLOAT && BR2_ARM_EABIHF

config BR2_GCC_TARGET_MODE
	default "arm"		if BR2_ARM_INSTRUCTIONS_ARM
	default "thumb"		if BR2_ARM_INSTRUCTIONS_THUMB || BR2_ARM_INSTRUCTIONS_THUMB2

config BR2_READELF_ARCH_NAME
	default "ARM"		if BR2_arm || BR2_armeb
	default "AArch64"	if BR2_aarch64 || BR2_aarch64_be

# vim: ft=kconfig
# -*- mode:kconfig; -*-
