config BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET
	string
	default "P2"           if BR2_x86_pentium2
	default "KATMAI"       if BR2_x86_pentium3
	default "NORTHWOOD"    if BR2_x86_pentium4
	default "PRESCOTT"     if BR2_x86_prescott || BR2_x86_nocona
	default "BANIAS"       if BR2_x86_pentium_m
	default "CORE2"        if BR2_x86_core2
	default "NEHALEM"      if BR2_x86_corei7 || BR2_x86_silvermont || BR2_x86_westmere
	default "SANDYBRIDGE"  if BR2_x86_corei7_avx
	default "HASWELL"      if BR2_x86_core_avx2
	default "ATOM"         if BR2_x86_atom
	default "ATHLON"       if BR2_x86_athlon || BR2_x86_athlon_4
	default "OPTERON"      if BR2_x86_opteron
	default "OPTERON_SSE3" if BR2_x86_opteron_sse3
	default "BARCELONA"    if BR2_x86_barcelona
	default "BOBCAT"       if BR2_x86_jaguar
	default "STEAMROLLER"  if BR2_x86_steamroller
	default "VIAC3"        if BR2_x86_c3 || BR2_x86_c32
	default "POWER4"       if BR2_powerpc_power4
	default "POWER5"       if BR2_powerpc_power5
	default "POWER6"       if BR2_powerpc_power6
	default "POWER7"       if BR2_powerpc_power7
	default "POWER8"       if BR2_powerpc_power8
	default "PPCG4"        if BR2_powerpc_7400 || BR2_powerpc_7450
	default "PPC970"       if BR2_powerpc_970
	default "PPC440"       if BR2_powerpc_440
	default "PPC440FP2"    if BR2_powerpc_440fp
	# P5600 is built with MSA support which is only available in Codescape toolchains
	default "P5600"        if BR2_mips_p5600 && BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS
	default "SICORTEX"     if BR2_MIPS_CPU_MIPS64
	# I6400 is built with MSA support which is only available in Codescape toolchains
	default "I6400"        if BR2_mips_i6400 && BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS
	# OpenBLAS assumes SPARC=Sparc v9
	default "SPARC"        if BR2_sparc_v9
	# Cortex-A15 always have a VFPv4
	default "CORTEXA15"    if (BR2_cortex_a15 && BR2_ARM_EABIHF)
	# Cortex-A9 have an optional VFPv3, so we need to make sure it
	# is available
	default "CORTEXA9"     if (BR2_cortex_a9 && BR2_ARM_EABIHF && \
				   BR2_ARM_CPU_HAS_VFPV3)
	default "ARMV5"        if BR2_ARM_CPU_ARMV5
	# On ARMv6, OpenBLAS assumes that a VFP is available, and
	# EABIhf is used
	default "ARMV6"        if (BR2_ARM_CPU_ARMV6 && BR2_ARM_EABIHF && \
				   BR2_ARM_CPU_HAS_VFPV2)
	# On ARMv7, OpenBLAS assumes that a full VFPv3+ is available
	# (and not the more limited D16 variant), and that EABIhf is
	# used.
	default "ARMV7"        if (BR2_ARM_CPU_ARMV7A && BR2_ARM_EABIHF && \
				   BR2_ARM_CPU_HAS_VFPV3)
	default "ARMV8"        if BR2_aarch64 || BR2_aarch64_be
	help
	  OpenBLAS target CPU. See TargetList.txt in the source tree for
	  the possible target strings. A possible value is set
	  automatically based on your Target Architecture Variant.

config BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS
	bool
	default y if BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET != ""

config BR2_PACKAGE_OPENBLAS
	bool "openblas"
	depends on BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS
	help
	  An optimized BLAS library based on GotoBLAS2 1.13 BSD version.

	  https://www.openblas.net/

if BR2_PACKAGE_OPENBLAS

config BR2_PACKAGE_OPENBLAS_TARGET
	string "OpenBLAS target CPU"
	default BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET

endif
