# Copyright 2019-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8
inherit cmake flag-o-matic xdg git-r3

DESCRIPTION="PS3 emulator and debugger."
HOMEPAGE="https://rpcs3.net/ https://github.com/RPCS3/rpcs3"
#ASMJIT_SHA="06d0badec53710a4f572cf5642881ce570c5d274"
#HIDAPI_SHA="a3ce1299312ee48c2c0db58ffc059c1438436ad8"
#ITTAPI_VERSION="3.18.12"
#LLVM_SHA="9b52b6c39ae9f0759fbce7dd0db4b3290d6ebc56"
#SOUNDTOUCH_SHA="83cfba67b6af80bb9bfafc0b324718c4841f2991"
#YAML_CPP_SHA="0b67821f307e8c6bf0eba9b6d3250e3cf1441450"
#SRC_URI="https://github.com/RPCS3/rpcs3/archive/v${PV}.tar.gz -> ${P}.tar.gz
#	https://github.com/RPCS3/llvm-mirror/archive/${LLVM_SHA}.tar.gz -> ${PN}-llvm-${LLVM_SHA:0:7}.tar.gz
#	https://github.com/asmjit/asmjit/archive/${ASMJIT_SHA}.tar.gz -> ${PN}-asmjit-${ASMJIT_SHA:0:7}.tar.gz
#	https://github.com/RPCS3/hidapi/archive/${HIDAPI_SHA}.tar.gz -> ${PN}-hidapi-${HIDAPI_SHA:0:7}.tar.gz
#	https://github.com/RPCS3/yaml-cpp/archive/${YAML_CPP_SHA}.tar.gz -> ${PN}-yaml-cpp-${YAML_CPP_SHA:0:7}.tar.gz
#	https://github.com/intel/ittapi/archive/refs/tags/v${ITTAPI_VERSION}.tar.gz -> ${PN}-ittapi-${ITTAPI_VERSION}.tar.gz
#	https://github.com/RPCS3/soundtouch/archive/${SOUNDTOUCH_SHA}.tar.gz -> ${PN}-${SOUNDTOUCH_SHA:0:7}.tar.gz"
EGIT_REPO_URI="https://github.com/RPCS3/rpcs3"
EGIT_SUBMODULES=( 'asmjit' 'llvm' '3rdparty/flatbuffers' '3rdparty/wolfssl'
	'3rdparty/SoundTouch/soundtouch' '3rdparty/hidapi' )
# Delete sources when ensuring yaml-cpp compiled with fexceptions
EGIT_SUBMODULES+=( '3rdparty/yaml-cpp' )

LICENSE="GPL-2"
SLOT="0"
KEYWORDS=""

IUSE="faudio joystick +llvm vulkan wayland"
REQUIRED_USE="wayland? ( vulkan )"
QA_PREBUILT="/usr/share/rpcs3/test/*.elf"


DEPEND=">=dev-libs/flatbuffers-2.0.6
	dev-libs/pugixml
	media-libs/cubeb
	dev-libs/xxhash
	dev-util/spirv-tools
	dev-qt/qtconcurrent
	dev-qt/qtcore:5
	dev-qt/qtdbus
	dev-qt/qtgui
	dev-qt/qtmultimedia:5[widgets]
	dev-qt/qtnetwork:5
	dev-qt/qtsvg
	dev-qt/qtwidgets:5
	media-libs/glew:0
	media-libs/libglvnd[X]
	media-libs/libpng:*
	media-libs/openal
	media-video/ffmpeg
	net-misc/curl
	net-libs/miniupnpc
	sys-libs/ncurses
	sys-libs/zlib
	media-libs/libjpeg-turbo
	virtual/libusb:1
	virtual/udev
	x11-libs/libX11
	faudio? ( app-emulation/faudio )
	joystick? ( dev-libs/libevdev )
	vulkan? (
		media-libs/vulkan-loader
		dev-util/glslang )
	wayland? ( dev-libs/wayland )"
#	>=dev-libs/wolfssl-4.7.0

RDEPEND="${DEPEND} sys-devel/gdb"
BDEPEND=">=sys-devel/gcc-9
	dev-util/spirv-headers"

PATCHES=(
	"${FILESDIR}/${PN}-0004-add-use_wayland.patch"
	"${FILESDIR}/${PN}-0006-vk.patch"
	"${FILESDIR}/${PN}-0007-allow-use-of-system-spirv-and-glslang.patch"
	"${FILESDIR}/${PN}-0008-system-cubeb.patch"
	"${FILESDIR}/${PN}-0009-ittapi-remove-git-co.patch"
	"${FILESDIR}/${PN}-0010-unbundle-miniupnpc.patch"
)
#	"${FILESDIR}/${PN}-0003-add-missing-include-fix-branch-names.patch"

pkg_setup() {
	if tc-is-clang; then
		ewarn "Caution, I had trouble with clang-15 failing to build this"
		ewarn "Continuing anyway in 3 seconds"
		sleep 3
	fi
	ewarn "Ebuild is work in progress in addition to being a live ebuild, ymmv"
}
src_unpack() {
		git clone https://github.com/intel/ittapi "${WORKDIR}"/ittapi
		git-r3_src_unpack
}
src_prepare() {
	filter-lto
#	rmdir "${S}/llvm" || die
#	mv "${WORKDIR}/llvm-mirror-${LLVM_SHA}" "${S}/llvm" || die
#	rmdir "${S}/3rdparty/hidapi/hidapi" || die

#	mv "${WORKDIR}/hidapi-${HIDAPI_SHA}" "${S}/3rdparty/hidapi/hidapi" || die
#	rmdir "${S}/3rdparty/yaml-cpp/yaml-cpp" || die
#	mv "${WORKDIR}/yaml-cpp-${YAML_CPP_SHA}" "${S}/3rdparty/yaml-cpp/yaml-cpp" || die
#	rmdir "${S}/3rdparty/asmjit/asmjit" || die
#	mv "${WORKDIR}/asmjit-${ASMJIT_SHA}" "${S}/3rdparty/asmjit/asmjit" || die
#	echo "#define RPCS3_GIT_VERSION \"0000-v${PV}\"" > rpcs3/git-version.h
#	echo '#define RPCS3_GIT_BRANCH "master"' >> rpcs3/git-version.h
#	echo '#define RPCS3_GIT_FULL_BRANCH "RPCS3/rpcs3/master"' >> rpcs3/git-version.h
#	echo '#define RPCS3_GIT_VERSION_NO_UPDATE 1' >> rpcs3/git-version.h
#	sed -re 's/MATCHES "\^\(DEBUG\|RELEASE\|RELWITHDEBINFO\|MINSIZEREL\)\$/MATCHES "^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL|GENTOO)/' \
#		-i "${S}/llvm/CMakeLists.txt" || die
#	sed -e '/find_program(CCACHE_FOUND/d' -i CMakeLists.txt || die
#	sed -e 's|FAudio.h|FAudio/FAudio.h|' -i rpcs3/Emu/Audio/FAudio/FAudioBackend.h rpcs3/Emu/Audio/FAudio/faudio_enumerator.h || die
	sed -re '/\s+add_compile_options\(-Werror=missing-noreturn\).*/d' \
		-e '/\s+add_compile_options\(-Werror=old-style-cast\).*/d' \
		-i buildfiles/cmake/ConfigureCompiler.cmake || die
#	mv "${WORKDIR}/ittapi-${ITTAPI_VERSION}" "${WORKDIR}/ittapi"
#	rmdir "${S}/3rdparty/SoundTouch/soundtouch" || die
#	mv "${WORKDIR}/soundtouch-${SOUNDTOUCH_SHA}" "${S}/3rdparty/SoundTouch/soundtouch" || die
	cmake_src_prepare
}

src_configure() {
	append-cflags -DNDEBUG
	append-cxxflags -DNDEBUG
	mycmakeargs=(
		-DBUILD_SHARED_LIBS=OFF
		-DBUILD_LLVM_SUBMODULE=ON
		"-DITTAPI_SOURCE_DIR=${WORKDIR}"
		-DLLVM_COMPILE_DEFINITIONS=NDEBUG
		-DUSE_PRECOMPILED_HEADERS=OFF
		-DUSE_DISCORD_RPC=OFF
		-DUSE_FAUDIO=$(usex faudio)
		-DUSE_SYSTEM_FAUDIO=$(usex faudio)
		-DUSE_LIBEVDEV=$(usex joystick)
		-DUSE_NATIVE_INSTRUCTIONS=OFF
		-DUSE_SYSTEM_CUBEB=ON
		-DUSE_SYSTEM_CURL=ON
		-DUSE_SYSTEM_FFMPEG=ON
		-DUSE_SYSTEM_FLATBUFFERS=ON
		-DUSE_SYSTEM_GLSLANG=ON
		-DUSE_SYSTEM_LIBPNG=ON
		-DUSE_SYSTEM_LIBUSB=ON
		-DUSE_SYSTEM_PUGIXML=ON
		-DUSE_SYSTEM_MINIUPNPC=ON
		-DUSE_SYSTEM_SPIRV_HEADERS_TOOLS=ON
		-DUSE_SYSTEM_WOLFSSL=false
		-DUSE_SYSTEM_XXHASH=ON
		-DUSE_SYSTEM_ZLIB=ON
		-DUSE_VULKAN=$(usex vulkan)
		-DUSE_WAYLAND=$(usex wayland)
		-DWITH_LLVM=$(usex llvm)
		-Wno-dev
	)
	cmake_src_configure
}
pkg_postinst() {
		ewarn "Ebuild is work in progress in addition to being a live ebuild, ymmv"
}