# Target go packages should depend on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
config BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
	bool
	default y
	depends on !BR2_TOOLCHAIN_HAS_BINUTILS_BUG_20006
	depends on BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS
	depends on (BR2_arm && BR2_TOOLCHAIN_SUPPORTS_PIE) || BR2_aarch64 \
		|| BR2_i386 || BR2_x86_64 || BR2_powerpc64le \
		|| BR2_mips64 || BR2_mips64el || BR2_s390x
	depends on !BR2_ARM_CPU_ARMV4
	# MIPS R6 support in Go has not yet been developed.
	depends on !BR2_MIPS_CPU_MIPS64R6

config BR2_PACKAGE_HOST_GO_TARGET_CGO_LINKING_SUPPORTS
	bool
	default y
	depends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS
	# Go doesn't support CGO linking on MIPS64x platforms
	# See: https://github.com/karalabe/xgo/issues/46
	depends on !BR2_mips64 && !BR2_mips64el

# Host go packages should depend on BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS
config BR2_PACKAGE_HOST_GO_HOST_ARCH_SUPPORTS
	bool
	default y
	depends on BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS
