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

EAPI=8
LIBRETRO_REPO_NAME="libretro/dolphin"
LIBRETRO_COMMIT_SHA="df2b1a754bba4f0595d3ed07ccd0711019e014b8"
LIBRETRO_CORE_NAME="dolphin"
inherit libretro-core cmake

DESCRIPTION="A Gamecube/Wii emulator core for libretro"
HOMEPAGE="https://github.com/libretro/dolphin"
IMPLOT_SHA="3da8bd34299965d3b0ab124df743fe3e076fa222"
TINYGLTF_SHA="c5641f2c22d117da7971504591a8f6a41ece488b"
VULKAN_HEADERS_SHA="39f924b810e561fd86b2558b6711ca68d4363f68"
VULKANMEMORYALLOCATOR_SHA="3bab6924988e5f19bf36586a496156cf72f70d9f"
WATCHER_SHA="b03bdcfc11549df595b77239cefe2643943a3e2f"
CPP_IPC_SHA="a0c7725a1441d18bc768d748a93e512a0fa7ab52"
CPP_OPTPARSE_SHA="2265d647232249a53a03b411099863ceca35f0d3"
IMGUI_SHA="45acd5e0e82f4c954432533ae9985ff0e1aad6d5"
SFML_SHA="016bea9491ccafc3529019fe1d403885a8b3a6ae"
SRC_URI="https://github.com/${LIBRETRO_REPO_NAME}/archive/${LIBRETRO_COMMIT_SHA}.tar.gz -> ${P}-${LIBRETRO_COMMIT_SHA:0:7}.tar.gz
	https://github.com/syoyo/tinygltf/archive/${TINYGLTF_SHA}.tar.gz -> tinygltf-${TINYGLTF_SHA:0:7}.tar.gz
	https://github.com/epezent/implot/archive/${IMPLOT_SHA}.tar.gz -> implot-${IMPLOT_SHA:0:7}.tar.gz
	https://github.com/KhronosGroup/Vulkan-Headers/archive/${VULKAN_HEADERS_SHA}.tar.gz -> Vulkan-Headers-${VULKAN_HEADERS_SHA:0:7}.tar.gz
	https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/archive/${VULKANMEMORYALLOCATOR_SHA}.tar.gz -> VulkanMemoryAllocator-${VULKANMEMORYALLOCATOR_SHA:0:7}.tar.gz
	https://github.com/e-dant/watcher/archive/${WATCHER_SHA}.tar.gz -> watcher-${WATCHER_SHA:0:7}.tar.gz
	https://github.com/mutouyun/cpp-ipc/archive/${CPP_IPC_SHA}.tar.gz -> cpp-ipc-${CPP_IPC_SHA:0:7}.tar.gz
	https://github.com/weisslj/cpp-optparse/archive/${CPP_OPTPARSE_SHA}.tar.gz -> cpp-optparse-${CPP_OPTPARSE_SHA:0:7}.tar.gz
	https://github.com/ocornut/imgui/archive/${IMGUI_SHA}.tar.gz -> imgui-${IMGUI_SHA:0:7}.tar.gz
	https://github.com/SFML/SFML/archive/${SFML_SHA}.tar.gz -> SFML-${SFML_SHA:0:7}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~arm64"
IUSE="+opengl vulkan +X"

DEPEND="
	>=sys-libs/zlib-ng-1.3.1:=
	>=sys-libs/minizip-ng-4.0.4:=
	dev-libs/hidapi
	>=dev-libs/libfmt-10.1
	dev-libs/lzo:2
	dev-libs/pugixml
	media-libs/libspng
	>=net-libs/enet-1.3.18:1.3=
	media-libs/mesa
	net-libs/mbedtls
	net-misc/curl
	sys-libs/readline
	X? (
		x11-libs/libXext
		x11-libs/libXi
		x11-libs/libXrandr
		dev-qt/qtconcurrent
	)
	opengl? (
		virtual/opengl
		>=media-libs/libsfml-3.0:=
	)
	vulkan? ( media-libs/vulkan-loader )
	virtual/libusb
"
RDEPEND="${DEPEND}
	games-emulation/libretro-info"

src_prepare() {
	mv -T "${WORKDIR}/tinygltf-${TINYGLTF_SHA}" Externals/tinygltf/tinygltf || die
	mv -T "${WORKDIR}/implot-${IMPLOT_SHA}" Externals/implot/implot || die
	mv -T "${WORKDIR}/watcher-${WATCHER_SHA}" Externals/watcher/watcher || die
	mv -T "${WORKDIR}/cpp-ipc-${CPP_IPC_SHA}" Externals/cpp-ipc/cpp-ipc || die
	mv -T "${WORKDIR}/cpp-optparse-${CPP_OPTPARSE_SHA}" Externals/cpp-optparse/cpp-optparse || die
	mv -T "${WORKDIR}/imgui-${IMGUI_SHA}" Externals/imgui/imgui || die
	mv -T "${WORKDIR}/Vulkan-Headers-${VULKAN_HEADERS_SHA}" Externals/Vulkan-Headers || die
	mv -T "${WORKDIR}/VulkanMemoryAllocator-${VULKANMEMORYALLOCATOR_SHA}" Externals/VulkanMemoryAllocator || die
	if ! use opengl;
	then
		mv -T "${WORKDIR}/SFML-${SFML_SHA}" Externals/SFML/SFML || die
	fi
	sed -re 's|dolphin_find_optional_system_library\(glslang Externals/glslang 15\.0\)|dolphin_find_optional_system_library(glslang Externals/glslang)|' -i CMakeLists.txt || die
	libretro-core_src_prepare
	cmake_src_prepare
}

src_configure() {
	local mycmakeargs=(
		-DCCACHE_BIN=CCACHE_BIN-NOTFOUND
		-DENABLE_LLVM=OFF
		-DBUILD_SHARED_LIBS=OFF
		-DLIBRETRO=ON
		-DLIBRETRO_STATIC=1
		-DENABLE_QT=0
		-DUSE_SYSTEM_GLSLANG=ON
		-DCMAKE_BUILD_TYPE=Release
		-DCMAKE_INSTALL_PREFIX=/usr
		-DENABLE_X11="$(usex X)"
	)
	cmake_src_configure
}

src_install() {
	LIBRETRO_CORE_LIB_FILE="${BUILD_DIR}/${LIBRETRO_CORE_NAME}_libretro.so"
	libretro-core_src_install
}