# All host rust packages should depend on this option
config BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS
	bool
	default y if BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"

# All target rust packages should depend on this option
config BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
	bool
	# The pre-built Rust standard library is only available for the
	# following architectures/ABIs, and is built against glibc.
	default y if BR2_i386
	default y if BR2_x86_64
	default y if BR2_aarch64
	default y if BR2_arm && !BR2_ARM_CPU_ARMV4 && !BR2_ARM_CPU_ARMV5 \
	        && !(BR2_ARM_CPU_ARMV7A && BR2_ARM_EABI)
	default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
	default y if (BR2_mips || BR2_mipsel) && !BR2_MIPS_CPU_MIPS32R6
	default y if (BR2_mips64 || BR2_mips64el) && !BR2_MIPS_CPU_MIPS64R6 \
		&& BR2_MIPS_NABI64
	depends on BR2_TOOLCHAIN_USES_GLIBC
	depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS

config BR2_PACKAGE_HOST_RUSTC_ARCH
	string
	default "armv7"  if BR2_ARM_CPU_ARMV7A
	default BR2_ARCH if !BR2_ARM_CPU_ARMV7A

config BR2_PACKAGE_HOST_RUSTC_ABI
	string
	default "eabi"   if BR2_ARM_EABI
	default "eabihf" if BR2_ARM_EABIHF
	default "abi64"  if BR2_MIPS_NABI64

config BR2_PACKAGE_HOST_RUSTC
	bool "host rustc"
	depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS
	help
	  Compiler for the Rust language

	  http://www.rust-lang.org

if BR2_PACKAGE_HOST_RUSTC

choice
	prompt "Rust compiler variant"
	default BR2_PACKAGE_HOST_RUST_BIN
	help
	  Select a Rust compiler

config BR2_PACKAGE_HOST_RUST
	bool "host rust"
	# RUSTC_TARGET_NAME must be set for building host-rust
	# otherwise config.toml is broken.
	depends on BR2_PACKAGE_HOST_RUSTC_TARGET_ARCH_SUPPORTS
	# triggers ICE on trunc_int_for_mode, at explow.c:56
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 || !BR2_aarch64
	help
	  This package will build the compiler for the host as well as
	  two flavors of the standard library: one for the host, another
	  for the target. Both are installed in the host directory.

comment "host-rust needs a toolchain w/ gcc >= 5"
	depends on BR2_aarch64
	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_5

config BR2_PACKAGE_HOST_RUST_BIN
	bool "host rust (pre-built)"
	help
	  This package will install pre-built versions of the compiler
	  for the host and the Rust standard library for the target.

endchoice

endif

config BR2_PACKAGE_PROVIDES_HOST_RUSTC
	string
	default "host-rust" if BR2_PACKAGE_HOST_RUST
	# Default to host-rust-bin as long as host arch supports it
	default "host-rust-bin" if !BR2_PACKAGE_HOST_RUST
	depends on BR2_PACKAGE_HOST_RUSTC_ARCH_SUPPORTS
