# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

ROCM_VERSION=${PV}

inherit cmake flag-o-matic rocm

DESCRIPTION="AMD ROCm Performance Primitives (RPP) high-performance computer vision library"
HOMEPAGE="https://github.com/ROCm/rpp"
SRC_URI="https://github.com/ROCm/rpp/archive/refs/tags/rocm-${PV}.tar.gz -> rpp-${PV}.tar.gz"
S="${WORKDIR}/${PN}-rocm-${PV}"

LICENSE="BSD"
SLOT="0/$(ver_cut 1-2)"
KEYWORDS="~amd64"

# pkgcheck warning: RequiredUseDefaults
REQUIRED_USE="
	cpu_flags_x86_avx2 cpu_flags_x86_fma3 cpu_flags_x86_f16c
	${ROCM_REQUIRED_USE}
"

RDEPEND="
	dev-util/hip:${SLOT}
"
DEPEND="${RDEPEND}"
BDEPEND="
	>=dev-build/cmake-3.22
	>=dev-libs/half-1.12.0-r1
	test? (
		dev-cpp/gtest
		media-libs/opencv:=
	)
"

IUSE="cpu_flags_x86_avx2 cpu_flags_x86_fma3 cpu_flags_x86_f16c test"
RESTRICT="!test? ( test )"

PATCHES=(
	"${FILESDIR}"/${PN}-6.1.1-skip-install-license.patch
)

DOCS=( CHANGELOG.md LICENSE README.md )

rcc_test_wrapper() {
	local S="${WORKDIR}/${PN}-rocm-${PV}/utilities/rpp-unittests/HIP_NEW"
	local CMAKE_USE_DIR="${S}"
	local BUILD_DIR="${BUILD_DIR}/utilities/rpp-unittests/HIP_NEW"
	cd "${S}" || die
	$@
}

src_prepare() {
	sed -e "s:\${ROCM_PATH}/llvm/bin/clang++:hipcc:" \
		-i CMakeLists.txt || die

	cmake_src_prepare
	if use test; then
		local PATCHES=()
		rcc_test_wrapper cmake_src_prepare
	fi
}

src_configure() {
	local mycmakeargs=(
		-DCMAKE_SKIP_RPATH=ON
		-DAMDGPU_TARGETS="$(get_amdgpu_flags)"
		-DROCM_PATH=/usr
		-DBACKEND=HIP
		-DBUILD_WITH_AMD_ADVANCE=OFF
	)

	cmake_src_configure

	if use test; then
		append-cxxflags -I"${S}/include"
		append-ldflags -L"${BUILD_DIR}/lib64"
		local mycmakeargs=(-DROCM_PATH=/usr)
		use test && rcc_test_wrapper cmake_src_configure
	fi
}

src_compile() {
	cmake_src_compile
	use test && rcc_test_wrapper cmake_src_compile
}

src_test() {
	check_amdgpu

	cd "${BUILD_DIR}"/utilities/rpp-unittests/HIP_NEW || die
	for params in "0 0" "0 1" "1 1" "2 1" "5 1" "0 2" "0 3" "0 4" "0 5" "0 8"; do
		LD_LIBRARY_PATH="${BUILD_DIR}"/lib64 ./uniqueFunctionalities_hip $params || die
	done
}