# criu only builds on certain architectures
config BR2_PACKAGE_CRIU_ARCH_SUPPORTS
	bool
	default y if BR2_ARM_CPU_ARMV6
	default y if BR2_ARM_CPU_ARMV7A
	default y if BR2_ARM_CPU_ARMV7M
	default y if BR2_ARM_CPU_ARMV8A && !BR2_aarch64_be
	default y if BR2_aarch64
	default y if BR2_x86_64
	default y if BR2_powerpc64le # Only support powerpc64 with LE
	# CRIU has "some" support for s390 but it is not included due to
	# BE/LE endian issues.
	depends on BR2_USE_MMU # libcap
	depends on BR2_PACKAGE_HOST_PROTOBUF_ARCH_SUPPORTS # protobuf-c
	depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
	depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS

config BR2_PACKAGE_CRIU
	bool "criu"
	depends on BR2_PACKAGE_CRIU_ARCH_SUPPORTS
	depends on BR2_HOST_GCC_AT_LEAST_7 # protobuf-c
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8 # -march=armv7-a+fp
	depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18 # rseq.h
	depends on !BR2_TOOLCHAIN_USES_UCLIBC # no aio.h
	depends on !BR2_STATIC_LIBS # protobuf, libbsd
	depends on BR2_INSTALL_LIBSTDCPP # protobuf
	depends on BR2_TOOLCHAIN_HAS_THREADS # protobuf, libnl
	depends on BR2_USE_WCHAR # libbsd
	select BR2_PACKAGE_HOST_PYTHON3
	select BR2_PACKAGE_HOST_PYTHON3_SSL
	select BR2_PACKAGE_PROTOBUF
	select BR2_PACKAGE_PROTOBUF_C
	select BR2_PACKAGE_LIBAIO
	select BR2_PACKAGE_LIBBSD
	select BR2_PACKAGE_LIBCAP
	select BR2_PACKAGE_LIBNET
	select BR2_PACKAGE_LIBNL
	select BR2_PACKAGE_PYTHON3
	help
	  Checkpoint/Restore In Userspace (CRIU), is a software
	  tool for the Linux operating system to make it possible
	  to freeze a running application and checkpoint it to
	  persistent storage as a collection of files.

	  https://criu.org/Main_Page

comment "criu needs a glibc or musl toolchain w/ threads, host gcc >= 7, gcc >= 8, headers >= 4.18, C++, dynamic library, wchar"
	depends on BR2_PACKAGE_CRIU_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_8 || !BR2_TOOLCHAIN_HAS_THREADS \
		|| !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18 \
		|| BR2_TOOLCHAIN_USES_UCLIBC || !BR2_INSTALL_LIBSTDCPP \
		|| BR2_STATIC_LIBS || !BR2_USE_WCHAR \
		|| BR2_HOST_GCC_AT_LEAST_7
