# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

LLVM_COMPAT=( {22..23} )

inherit cmake flag-o-matic llvm-r2

MY_TAG="KytyPS5-2026-10-18-37df7f3"
IMGUI_SHA="f1cc2ae15e53a861a874c3034aae6798fde194ab"
LIBATRAC9_SHA="ec8899dadf393f655f2871a94e0fe4b3d6220c9a"
ZARCHIVE_SHA="d2c717730092c7bf8cbb033b12fd4001b7c4d932"

DESCRIPTION="PlayStation 5 translation layer based on Kyty"
HOMEPAGE="https://kytyps5.github.io/ https://github.com/KytyPS5/KytyPS5"
SRC_URI="https://github.com/KytyPS5/KytyPS5/archive/refs/tags/${MY_TAG}.tar.gz -> ${P}.tar.gz
	https://github.com/ocornut/imgui/archive/${IMGUI_SHA}.tar.gz -> ${PN}-imgui-${IMGUI_SHA}.tar.gz
	https://github.com/shadps4-emu/ext-LibAtrac9/archive/${LIBATRAC9_SHA}.tar.gz
		-> ${PN}-LibAtrac9-${LIBATRAC9_SHA}.tar.gz
	https://github.com/Exzap/ZArchive/archive/${ZARCHIVE_SHA}.tar.gz -> ${PN}-ZArchive-${ZARCHIVE_SHA}.tar.gz"
S="${WORKDIR}/KytyPS5-${MY_TAG}"

LICENSE="GPL-2 MIT MIT-0"
SLOT="0"
KEYWORDS="~amd64"

RDEPEND="app-arch/zstd:=
	>=dev-cpp/tracy-0.14.1-r1
	dev-libs/cpuinfo
	dev-libs/libfmt:=
	dev-libs/spdlog:=
	dev-libs/xxhash
	dev-libs/zydis:=
	dev-qt/qtbase:6[concurrent,dbus,gui,network,widgets]
	dev-util/spirv-tools
	media-libs/libsdl3
	media-libs/opus
	media-libs/vulkan-loader
	media-video/ffmpeg:="
DEPEND="${RDEPEND}
	dev-cpp/magic_enum
	dev-cpp/nlohmann_json
	dev-libs/xbyak
	dev-util/spirv-headers
	dev-util/vulkan-headers
	media-libs/VulkanMemoryAllocator"
# shellcheck disable=SC2016
BDEPEND="dev-util/glslang
	virtual/pkgconfig
	$(llvm_gen_dep '
		llvm-core/clang:${LLVM_SLOT}
		llvm-core/lld:${LLVM_SLOT}
	')"

PATCHES=( "${FILESDIR}/${PN}-system-libs.patch" )

src_prepare() {
	rmdir 3rdparty/{imgui,LibAtrac9} || die
	mv "${WORKDIR}/imgui-${IMGUI_SHA}" 3rdparty/imgui || die
	mv "${WORKDIR}/ext-LibAtrac9-${LIBATRAC9_SHA}" 3rdparty/LibAtrac9 || die
	# The ZArchive sources are CRLF; KytyPS5's hardening patch is LF.
	pushd "${WORKDIR}/ZArchive-${ZARCHIVE_SHA}" > /dev/null || die
	sed -e 's/\r$//' -i src/zarchivereader.cpp include/zarchive/zarchivecommon.h || die
	eapply "${S}/3rdparty/patches/zarchive-reader.patch"
	popd > /dev/null || die
	sed -e "s|set(KYTY_GIT_VERSION \"unknown\")|set(KYTY_GIT_VERSION \"${MY_TAG}\")|" \
		-e "s|set(KYTY_GIT_HASH \"unknown\")|set(KYTY_GIT_HASH \"${MY_TAG##*-}\")|" \
		-i src/generate_version.cmake || die
	cmake_src_prepare
}

src_configure() {
	# Upstream only builds with Clang and links with lld. Both must come from the
	# same slot so lld can read Clang's LTO bitcode.
	llvm_prepend_path "${LLVM_SLOT}"
	local -x CC="${CHOST}-clang" CXX="${CHOST}-clang++"
	strip-unsupported-flags
	local mycmakeargs=(
		-DCMAKE_C_COMPILER_LAUNCHER=
		-DCMAKE_CXX_COMPILER_LAUNCHER=
		-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/$(get_libdir)/${PN}"
		-DKYTY_ZARCHIVE_DIR="${WORKDIR}/ZArchive-${ZARCHIVE_SHA}"
	)
	cmake_src_configure
}

src_install() {
	cmake_src_install
	dosym -r "/usr/$(get_libdir)/${PN}/kyty_launcher" "/usr/bin/${PN}"
	einstalldocs
}