# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2

EAPI=7

CROS_WORKON_COMMIT="b1ed0beba584345490400f9e82b43ee32d48f792"
CROS_WORKON_TREE=("0544f91c96de739a518c34933c282036d34b81d7" "a920b8bc18a923d5cfa6abfb5390bc903526beef")
CROS_WORKON_LOCALNAME="../platform/crosvm"
CROS_WORKON_PROJECT="chromiumos/platform/crosvm"
CROS_WORKON_INCREMENTAL_BUILD=1
CROS_RUST_SUBDIR="common/cros_async"
CROS_WORKON_SUBTREE="${CROS_RUST_SUBDIR} .cargo"
CROS_WORKON_SUBDIRS_TO_COPY=(${CROS_WORKON_SUTREE})

# The version of this crate is pinned. See b/229016539 for details.
CROS_WORKON_MANUAL_UPREV="1"

inherit cros-workon cros-rust

DESCRIPTION="Rust async tools for Chrome OS"
HOMEPAGE="https://chromium.googlesource.com/chromiumos/platform/crosvm/+/HEAD/cros_async"
LICENSE="BSD-Google"
KEYWORDS="*"

DEPEND="
	=dev-rust/async-task-4*:=
	>=dev-rust/async-trait-0.1.36 <dev-rust/async-trait-0.2:=
	dev-rust/data_model:=
	=dev-rust/futures-0.3*:=
	dev-rust/intrusive-collections:=
	dev-rust/io_uring:=
	>=dev-rust/libc-0.2.93 <dev-rust/libc-0.3:=
	>=dev-rust/once_cell-1.7.2 <dev-rust/once_cell-2:=
	=dev-rust/paste-1*:=
	=dev-rust/pin-utils-0.1*:=
	=dev-rust/remain-0.2*:=
	=dev-rust/slab-0.4*:=
	dev-rust/sync:=
	dev-rust/sys_util:=
	dev-rust/tempfile:=
	>=dev-rust/thiserror-1.0.20 <dev-rust/thiserror-2:=
	media-sound/audio_streams:=
"
RDEPEND="${DEPEND}
	!<=dev-rust/cros_async-0.1.0-r38"

src_test() {
	# The io_uring implementation on kernels older than 5.10 was buggy so skip
	# them if we're running on one of those kernels.
	local cut_version="$(ver_cut 1-2 "$(uname -r)")"
	if ver_test "${cut_version}" -lt 5.10; then
		einfo "Skipping io_uring tests on kernel version < 5.10"
	# TODO: Enable tests on ARM once the emulator supports io_uring.
	elif ! cros_rust_is_direct_exec; then
		einfo "Skipping uring tests on non-x86 platform"
		local skip_tests=(
			ring
			io_ext
			timer::tests::one_shot
		)

		local args=($(printf -- "--skip %s\n" "${skip_tests[@]}"))
		cros-rust_src_test -- "${args[@]}"
	else
		cros-rust_src_test
	fi
}
