diff --git a/games-emulation/rpcs3/Manifest b/games-emulation/rpcs3/Manifest new file mode 100644 index 0000000000..447fc554f0 --- /dev/null +++ b/games-emulation/rpcs3/Manifest @@ -0,0 +1,8 @@ +DIST rpcs3-0.0.34.tar.gz 7834256 BLAKE2B 62bfc4751e4f77bc20899222520a5b902b7bd263f6a0265e35189c85a8e4ce068dbe38c8b4cd7c61634b69f81c7aa2f7c2d9f894134149e4a9211841ab822102 SHA512 4cbe7d62fe86e51355d63a09ce64ec768ad236aebf4375dd410549339a5f244fb2cc30c89821b0e6f001bb31646432abd06a2b9947b8d589d5c5b73de24e6e9d +DIST rpcs3-asmjit-416f7356967c1f66784dc1580fe157f9406d8bff.tar.gz 1152383 BLAKE2B 17b054083ce178255f19026d175986225f6f803a21e0cef4ce9a557ac50057578d3ae76d3b179fe25d0febd5e05d5d5feb28f9761045a8e41497b92a966196ec SHA512 2be4de27b2ed2212cf7b6ef9d40afac5c00f7a71df4e60208ea57258c01e56413cee439f84490d605f44a835522d1c1a55de898feccdd4429e907a9f82edd7cb +DIST rpcs3-glslang-36d08c0d940cf307a23928299ef52c7970d8cee6.tar.gz 3769785 BLAKE2B 923bfada8484a3bb91dd92a242d7096017b77fd399a90052af121658221069215e277d51fb4b9b95821b9272e44618f91883c2dc49bfb671c52a941d54aec182 SHA512 184baa0bc22d5e79bf8424692b5c8bb51676ca20819551cf406a4fd898dd1ad5ca7296e26ce7b99878e627dcafc4cd435933dd939c91753c5050022052e1dbe5 +DIST rpcs3-miniupnp-7f189988a0decca0ab7da89000051ab91751f70d.tar.gz 462956 BLAKE2B da35be2f89c4aa19e4d956f2929184653c9dcafdd6f7fa8b463e23bb6b449bb4ad17ea526ea11eb1dae460ff26c4c45e219de6e93afaeb9fe9042e91ac7a64eb SHA512 7bc34491912099b26873f7942077156e267cf3860082299c6ebf42ca0d7cb8a0d8330b874fd37f00907b865bb08321e4d6d5d1b5bba581140d9dd0f07f9f1599 +DIST rpcs3-rtmidi-1e5b49925aa60065db52de44c366d446a902547b.tar.gz 515635 BLAKE2B 4a4809bd2c1f03b0ecda9a2583c84fb7f0a040f362bcd96f2639b062b8a5dbdb4da214f1f14d56664e59f0c964413db8f6d1722ece59c9a36629fb50d2b56c92 SHA512 c5f221cecbcee5085a75264b9c5f4eb4f8096d8f7425908678a3429f97fd4177d4f1781c5ef9f46093353878eabffc76b2f9af049ea4ba6dee05f1c7999f1b9f +DIST rpcs3-soundtouch-394e1f58b23dc80599214d2e9b6a5e0dfd0bbe07.tar.gz 606942 BLAKE2B 208041ba68fc7b26d3fd800e1a26c79d8f011142fff1f6ea519d71972762299816eb10b3204a8bd4fe872bb19fe5639e5782db4e40333cb2073c7fb32153e6e7 SHA512 ef4a3300b6e80e4f540c3d1444b2604e6cb9bb72bd9648059706e1ad1aba015fdf9babecd9986910a2069ba44947e72e965ccc793f98598b6d6c140181585dfe +DIST rpcs3-wolfssl-00e42151ca061463ba6a95adb2290f678cbca472.tar.gz 23602428 BLAKE2B 3e8dfe67c9401a32ae9cdea9f03ef929e6378e55af4edb5b26c4e8bd91e21ff91d5cae73bf858b4dfcc292ca0ac4ba667baf373e9f5d093e26ea6287dd677bee SHA512 79023c31489fa8ce3772e8042c47360be8ad29e29b7e7ae2dd397907e11acd64536d5446f52e9957194d054f959069521ffdc90faa820d09ba406a4ad8ae1440 +DIST rpcs3-yaml-cpp-456c68f452da09d8ca84b375faa2b1397713eaba.tar.gz 1019142 BLAKE2B 8c7b4e1c788a07c1092be813555b1774a713693dd995183671d60b1896f96e105631447cb8c69bbcb13c380388b632d38a2c59be19903bc259ae6b57a181612a SHA512 0d06856bacb6c3cb987299c650baffcb2647a4b9a53394a7ce5c75301b527574d41cb0dfe9bf2e997e04588786d5aa7232437472a2e5fec422e8aa56aba0ea14 diff --git a/games-emulation/rpcs3/files/rpcs3-0.0.34-system-openal.patch b/games-emulation/rpcs3/files/rpcs3-0.0.34-system-openal.patch new file mode 100644 index 0000000000..880721d230 --- /dev/null +++ b/games-emulation/rpcs3/files/rpcs3-0.0.34-system-openal.patch @@ -0,0 +1,23 @@ +Unbundle openal. +--- a/rpcs3/Emu/Cell/Modules/cellMic.h ++++ b/rpcs3/Emu/Cell/Modules/cellMic.h +@@ -3,7 +3,7 @@ + #include "Utilities/Thread.h" + #include "Emu/Cell/timers.hpp" + +-#include "3rdparty/OpenAL/openal-soft/include/AL/alext.h" ++#include + + // Error Codes + enum CellMicInError : u32 +--- a/rpcs3/rpcs3qt/microphone_creator.cpp ++++ b/rpcs3/rpcs3qt/microphone_creator.cpp +@@ -4,7 +4,7 @@ + #include "Utilities/StrFmt.h" + #include "Utilities/StrUtil.h" + +-#include "3rdparty/OpenAL/openal-soft/include/AL/alext.h" ++#include + + LOG_CHANNEL(cfg_log, "CFG"); + diff --git a/games-emulation/rpcs3/files/rpcs3-0.0.34-system-stb.patch b/games-emulation/rpcs3/files/rpcs3-0.0.34-system-stb.patch new file mode 100644 index 0000000000..062e215da6 --- /dev/null +++ b/games-emulation/rpcs3/files/rpcs3-0.0.34-system-stb.patch @@ -0,0 +1,21 @@ +Unbundle stb. +--- a/3rdparty/CMakeLists.txt ++++ b/3rdparty/CMakeLists.txt +@@ -129,7 +130,8 @@ endif() + + + # stblib +-add_subdirectory(stblib) ++pkg_check_modules(stb REQUIRED IMPORTED_TARGET GLOBAL stb) ++add_library(3rdparty::stblib ALIAS PkgConfig::stb) + + # DiscordRPC + add_subdirectory(discord-rpc) +@@ -359,7 +360,6 @@ add_library(3rdparty::xxhash ALIAS xxhash) + add_library(3rdparty::hidapi ALIAS 3rdparty_hidapi) + add_library(3rdparty::libpng ALIAS ${LIBPNG_TARGET}) + add_library(3rdparty::opengl ALIAS 3rdparty_opengl) +-add_library(3rdparty::stblib ALIAS 3rdparty_stblib) + add_library(3rdparty::discordRPC ALIAS 3rdparty_discordRPC) + add_library(3rdparty::faudio ALIAS ${FAUDIO_TARGET}) + add_library(3rdparty::libevdev ALIAS ${LIBEVDEV_TARGET}) diff --git a/games-emulation/rpcs3/files/rpcs3-0.0.34-system-zstd.patch b/games-emulation/rpcs3/files/rpcs3-0.0.34-system-zstd.patch new file mode 100644 index 0000000000..0b8464e720 --- /dev/null +++ b/games-emulation/rpcs3/files/rpcs3-0.0.34-system-zstd.patch @@ -0,0 +1,21 @@ +Unbundle zstd. +--- a/3rdparty/CMakeLists.txt ++++ b/3rdparty/CMakeLists.txt +@@ -20,7 +20,8 @@ add_library(3rdparty_dummy_lib INTERFACE) + add_subdirectory(zlib EXCLUDE_FROM_ALL) + + # ZSTD +-add_subdirectory(zstd EXCLUDE_FROM_ALL) ++pkg_check_modules(zstd REQUIRED IMPORTED_TARGET GLOBAL libzstd) ++add_library(3rdparty::zstd ALIAS PkgConfig::zstd) + + # 7zip sdk + add_subdirectory(7zip EXCLUDE_FROM_ALL) +@@ -350,7 +351,6 @@ else() + add_library(3rdparty::libusb ALIAS usb-1.0-static) + endif() + add_library(3rdparty::zlib ALIAS 3rdparty_zlib) +-add_library(3rdparty::zstd ALIAS 3rdparty_zstd) + add_library(3rdparty::7zip ALIAS 3rdparty_7zip) + add_library(3rdparty::flatbuffers ALIAS 3rdparty_flatbuffers) + add_library(3rdparty::pugixml ALIAS pugixml) diff --git a/games-emulation/rpcs3/metadata.xml b/games-emulation/rpcs3/metadata.xml index 65cadeec83..b4175b4560 100644 --- a/games-emulation/rpcs3/metadata.xml +++ b/games-emulation/rpcs3/metadata.xml @@ -12,4 +12,7 @@ Enable PS Move support Build vulkan renderer + + RPCS3/rpcs3 + diff --git a/games-emulation/rpcs3/rpcs3-0.0.34.ebuild b/games-emulation/rpcs3/rpcs3-0.0.34.ebuild new file mode 100644 index 0000000000..cc6580324a --- /dev/null +++ b/games-emulation/rpcs3/rpcs3-0.0.34.ebuild @@ -0,0 +1,184 @@ +# Copyright 2021-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake flag-o-matic xdg + +ASMJIT_COMMIT="416f7356967c1f66784dc1580fe157f9406d8bff" +GLSLANG_COMMIT="36d08c0d940cf307a23928299ef52c7970d8cee6" +MINIUPNP_COMMIT="7f189988a0decca0ab7da89000051ab91751f70d" +RTMIDI_COMMIT="1e5b49925aa60065db52de44c366d446a902547b" +WOLFSSL_COMMIT="00e42151ca061463ba6a95adb2290f678cbca472" +SOUNDTOUCH_COMMIT="394e1f58b23dc80599214d2e9b6a5e0dfd0bbe07" +YAMLCPP_COMMIT="456c68f452da09d8ca84b375faa2b1397713eaba" + +DESCRIPTION="PS3 emulator/debugger" +HOMEPAGE="https://rpcs3.net/" +if [[ ${PV} == "9999" ]]; then + EGIT_REPO_URI="https://github.com/RPCS3/rpcs3" + EGIT_SUBMODULES=( + 'asmjit' '3rdparty/glslang' '3rdparty/miniupnp/miniupnp' '3rdparty/rtmidi/rtmidi' '3rdparty/wolfssl' + '3rdparty/SoundTouch/soundtouch' '3rdparty/zstd/zstd' '3rdparty/stblib/stb' '3rdparty/OpenAL/openal-soft' + '3rdparty/fusion/fusion' + ) + # Delete sources when ensuring yaml-cpp compiled with fexceptions + EGIT_SUBMODULES+=( '3rdparty/yaml-cpp' ) + inherit git-r3 +else + SRC_URI=" + https://github.com/RPCS3/rpcs3/archive/v${PV}.tar.gz -> ${P}.tar.gz + https://github.com/asmjit/asmjit/archive/${ASMJIT_COMMIT}.tar.gz -> ${PN}-asmjit-${ASMJIT_COMMIT}.tar.gz + https://github.com/KhronosGroup/glslang/archive/${GLSLANG_COMMIT}.tar.gz -> ${PN}-glslang-${GLSLANG_COMMIT}.tar.gz + https://github.com/miniupnp/miniupnp/archive/${MINIUPNP_COMMIT}.tar.gz -> ${PN}-miniupnp-${MINIUPNP_COMMIT}.tar.gz + https://github.com/thestk/rtmidi/archive/${RTMIDI_COMMIT}.tar.gz -> ${PN}-rtmidi-${RTMIDI_COMMIT}.tar.gz + https://github.com/wolfSSL/wolfssl/archive/${WOLFSSL_COMMIT}.tar.gz -> ${PN}-wolfssl-${WOLFSSL_COMMIT}.tar.gz + https://github.com/RPCS3/soundtouch/archive/${SOUNDTOUCH_COMMIT}.tar.gz -> ${PN}-soundtouch-${SOUNDTOUCH_COMMIT}.tar.gz + https://github.com/RPCS3/yaml-cpp/archive/${YAMLCPP_COMMIT}.tar.gz -> ${PN}-yaml-cpp-${YAMLCPP_COMMIT}.tar.gz + " + KEYWORDS="~amd64" +fi + +LICENSE="GPL-2" +SLOT="0" +IUSE="discord faudio +llvm opencv wayland" + +COMMON_DEPEND=" + app-arch/zstd + dev-libs/flatbuffers + dev-libs/hidapi + dev-libs/libevdev + dev-libs/pugixml + dev-libs/xxhash + dev-qt/qtbase:6[concurrent,dbus,gui,widgets] + dev-qt/qtmultimedia:6 + dev-qt/qtsvg:6 + media-libs/alsa-lib + media-libs/cubeb + media-libs/glew + media-libs/libglvnd + media-libs/libpng:= + media-libs/openal + media-libs/vulkan-loader[wayland?] + media-video/ffmpeg:= + net-misc/curl + llvm-core/llvm:= + sys-libs/zlib + virtual/libusb:1 + x11-libs/libX11 + faudio? ( app-emulation/faudio ) + opencv? ( media-libs/opencv ) + wayland? ( dev-libs/wayland ) +" +RDEPEND="${COMMON_DEPEND}" +DEPEND=" + ${COMMON_DEPEND} + dev-libs/stb +" + +QA_PREBUILT="usr/share/rpcs3/test/.*" +QA_WX_LOAD="usr/share/rpcs3/test/*" + +PATCHES=( + "${FILESDIR}/${P}-system-openal.patch" + "${FILESDIR}/${P}-system-stb.patch" + "${FILESDIR}/${P}-system-zstd.patch" +) + +src_prepare() { + if [[ ${PV} != "9999" ]]; then + rmdir "${S}/3rdparty/asmjit/asmjit" || die + mv "${WORKDIR}/asmjit-${ASMJIT_COMMIT}" "${S}/3rdparty/asmjit/asmjit" || die + + rmdir "${S}/3rdparty/glslang/glslang" || die + mv "${WORKDIR}/glslang-${GLSLANG_COMMIT}" "${S}/3rdparty/glslang/glslang" || die + + rmdir "${S}/3rdparty/miniupnp/miniupnp" || die + mv "${WORKDIR}/miniupnp-${MINIUPNP_COMMIT}" "${S}/3rdparty/miniupnp/miniupnp" || die + + rmdir "${S}/3rdparty/rtmidi/rtmidi" || die + mv "${WORKDIR}/rtmidi-${RTMIDI_COMMIT}" "${S}/3rdparty/rtmidi/rtmidi" || die + + rmdir "${S}/3rdparty/wolfssl/wolfssl" || die + mv "${WORKDIR}/wolfssl-${WOLFSSL_COMMIT}" "${S}/3rdparty/wolfssl/wolfssl" || die + + rmdir "${S}/3rdparty/SoundTouch/soundtouch" || die + mv "${WORKDIR}/soundtouch-${SOUNDTOUCH_COMMIT}" "${S}/3rdparty/SoundTouch/soundtouch" || die + + rmdir "${S}/3rdparty/yaml-cpp/yaml-cpp" || die + mv "${WORKDIR}/yaml-cpp-${YAMLCPP_COMMIT}" "${S}/3rdparty/yaml-cpp/yaml-cpp" || die + + #Define RPCS3 Version + { echo "#define RPCS3_GIT_VERSION \"${PV}\"" + echo '#define RPCS3_GIT_BRANCH "master"' + echo '#define RPCS3_GIT_FULL_BRANCH "RPCS3/rpcs3/master"' + echo '#define RPCS3_GIT_VERSION_NO_UPDATE 1'; } > rpcs3/git-version.h + fi + + # Disable automagic ccache + sed -i -e '/find_program(CCACHE_FOUND ccache)/d' CMakeLists.txt || die + + # Unbundle hidapi + sed -i -e '/hidapi\.h/{s:":/}' rpcs3/Input/hid_pad_handler.h || die + sed -i -e '/hidapi/d' 3rdparty/CMakeLists.txt || die + sed -i -e '1afind_package(PkgConfig REQUIRED)\npkg_check_modules(hidapi-hidraw REQUIRED hidapi-hidraw)' \ + rpcs3/CMakeLists.txt || die + sed -i -e 's/3rdparty::hidapi/hidapi-hidraw/' rpcs3/CMakeLists.txt rpcs3/rpcs3qt/CMakeLists.txt || die + sed -i -e 's/hid_write_control/hid_write/' \ + rpcs3/Input/dualsense_pad_handler.cpp rpcs3/Input/ds4_pad_handler.cpp || die + + # Unbundle cubeb + sed -i -e '/cubeb/d' 3rdparty/CMakeLists.txt || die + sed -i -e '$afind_package(cubeb)\n' CMakeLists.txt || die + sed -i -e 's/3rdparty::cubeb/cubeb/' rpcs3/Emu/CMakeLists.txt || die + + # Unbundle yaml-cpp: system yaml-cpp should be compiled with -fexceptions + # sed -i -e '/yaml-cpp/d' 3rdparty/CMakeLists.txt || die + # sed -i -e '$afind_package(yaml-cpp)\n' CMakeLists.txt || die + # sed -i -e 's/3rdparty::yaml-cpp/yaml-cpp/' rpcs3/Emu/CMakeLists.txt \ + # rpcs3/rpcs3qt/CMakeLists.txt || die + + # Fix build with GCC 15 + # https://github.com/KhronosGroup/glslang/commit/e40c14a3e007fac0e4f2e4164fdf14d1712355bd + sed -i '//a#include ' 3rdparty/glslang/glslang/SPIRV/SpvBuilder.h || die + + cmake_src_prepare +} + +src_configure() { + filter-lto + + local mycmakeargs=( + -DBUILD_SHARED_LIBS=OFF # to remove after unbundling + -DUSE_PRECOMPILED_HEADERS=ON + -DUSE_SYSTEM_CURL=ON + -DUSE_SYSTEM_FFMPEG=ON + -DUSE_SYSTEM_FLATBUFFERS=ON + -DUSE_SYSTEM_LIBPNG=ON + -DUSE_SYSTEM_LIBUSB=ON + -DUSE_SYSTEM_PUGIXML=ON + -DUSE_SYSTEM_XXHASH=ON + -DUSE_SYSTEM_ZLIB=ON + -DUSE_VULKAN=ON + -DUSE_DISCORD_RPC=$(usex discord) + -DUSE_FAUDIO=$(usex faudio) + -DUSE_SYSTEM_OPENCV=$(usex opencv) + -DWITH_LLVM=$(usex llvm) + $(cmake_use_find_package wayland Wayland) + ) + # These options are defined conditionally to suppress QA notice + use faudio && mycmakeargs+=( -DUSE_SYSTEM_FAUDIO=$(usex faudio) ) + + cmake_src_configure + + sed -i -e 's/FFMPEG_LIB_AVFORMAT-NOTFOUND/avformat/' -e 's/FFMPEG_LIB_AVCODEC-NOTFOUND/avcodec/' \ + -e 's/FFMPEG_LIB_AVUTIL-NOTFOUND/avutil/' -e 's/FFMPEG_LIB_SWSCALE-NOTFOUND/swscale/' \ + -e 's/FFMPEG_LIB_SWRESAMPLE-NOTFOUND/swresample/' "${BUILD_DIR}"/build.ninja || die +} + +src_install() { + cmake_src_install + + # remove unneccessary files to save some space + rm -rf "${ED}/usr/share/rpcs3/"{git,test} || die +}