# archs officially supported by upstream
config BR2_PACKAGE_XMRIG_ARCH_SUPPORTS
	bool
	default y if BR2_ARM_CPU_ARMV7A
	default y if BR2_aarch64
	default y if BR2_x86_64
	default y if BR2_i386

config BR2_PACKAGE_XMRIG
	bool "xmrig"
	depends on BR2_PACKAGE_XMRIG_ARCH_SUPPORTS
	depends on BR2_USE_MMU # libuv
	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # libuv
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # libuv
	# xmrig needs fenv.h which is not provided by uclibc
	depends on !BR2_TOOLCHAIN_USES_UCLIBC
	depends on !BR2_STATIC_LIBS # libuv
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # libuv
	depends on BR2_INSTALL_LIBSTDCPP
	select BR2_PACKAGE_LIBUV
	help
	  RandomX, CryptoNight, AstroBWT and Argon2 CPU/GPU miner.

	  https://xmrig.com

comment "xmrig needs a glibc or musl toolchain w/ NPTL, dynamic library, C++, gcc >= 4.9"
	depends on BR2_PACKAGE_XMRIG_ARCH_SUPPORTS
	depends on BR2_USE_MMU
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || \
		BR2_TOOLCHAIN_USES_UCLIBC || BR2_STATIC_LIBS || \
		!BR2_INSTALL_LIBSTDCPP || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
