summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIonen Wolkens <ionen@gentoo.org>2022-09-22 18:58:27 -0400
committerIonen Wolkens <ionen@gentoo.org>2022-09-22 20:27:16 -0400
commit87f15c596ca134db6715ce4d3b4f543917e560cd (patch)
tree9288fae9321df7b86780b91e9019e61b822dcbec /games-emulation
parentdev-cpp/rapidyaml: fix build without git (diff)
downloadgentoo-87f15c596ca134db6715ce4d3b4f543917e560cd.tar.gz
gentoo-87f15c596ca134db6715ce4d3b4f543917e560cd.tar.bz2
gentoo-87f15c596ca134db6715ce4d3b4f543917e560cd.zip
games-emulation/pcsx2: add 1.7.3329
Meant to do this for a while given 1.6.0 is getting very old and is 32bit-only (many users end up going with -9999 to handle this), but upstream kept doing major changes making this perhaps too experimental. Seems to have settled down a bit, so trying now. Many changes, so please report if anything off. For some notable changes from current -9999 ebuild: - EAPI7->8 - add machinery to keep 1.7.x and -9999 ebuilds in sync - switch to patches for unbundling, 9999 may break more often but there will now be a known-working 1.7.x release to fallback on - postinst elog to explain 1.7.x model a bit + warn - update LICENSE to account for hopefully all files and 3rdparty/* use - add IUSE=qt6 early support, doesn't support PACKAGE_MODE so this requires a few workarounds - add IUSE=wayland with untested runtime (build system would need updates if wanted pure X-less) - add IUSE=vulkan (considered IUSE=opengl too, esp if using vulkan, but code/build is too tied with opengl+egl) - pass -fno-strict-aliasing with USE=vulkan for glslang wrt bug #858374 - depend on >=libsdl2-2.0.22, not /necessary/ but the Qt build requests this minimum version rather than gtk's .12 for some reason - fix tests (they weren't being built/ran, low coverage either way) - use -DARCH_FLAG to pass minimum required -msse4.1 rather than rely on -DDISABLE_ADVANCED_SIMD which still pass more than necessary - disable WX_vs_SDL check rather than pass -DSDL2_API, see wx-vs-sdl patch for details - drop ld.gold workaround, likely still broken but not really supporting gold anymore (please don't use it, esp. system-wide) - drop imgui submodule, is now hard-bundled as non-submodule and makes little sense to unbundle because of the way it's setup - drop unused alsa-lib(alsa is provided by external cubeb), libXext + libICE (checked but unused, okay if missing), and libxml2 - replace freetype by harfbuzz, albeit while it checks and tries to link with harfbuzz it's technically unused (same for libsamplerate) This also drops x86 keyword, it may be possible to make it work but between the CMakeLists current FATAL_ERROR if not x86_64 (thus -* in KEYWORDS), various use of migrated-from-x86 asm, and min req of sse4.1 leaving out many cpus, this doesn't leave real room for non-x86_64. CMake Error at cmake/BuildParameters.cmake:152 (message): Unsupported architecture: i386 Users of -9999 are encouraged to switch to 1.7.x to get normal updates and not be at the forefront of every new issues (9999 ebuild will mostly only be checked when doing new 1.7.x releases unless get a report). Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
Diffstat (limited to 'games-emulation')
-rw-r--r--games-emulation/pcsx2/Manifest3
-rw-r--r--games-emulation/pcsx2/files/pcsx2-1.7.3329-clang16.patch19
-rw-r--r--games-emulation/pcsx2/files/pcsx2-1.7.3329-lto.patch21
-rw-r--r--games-emulation/pcsx2/files/pcsx2-1.7.3329-musl.patch9
-rw-r--r--games-emulation/pcsx2/files/pcsx2-1.7.3329-qt6.patch10
-rw-r--r--games-emulation/pcsx2/files/pcsx2-1.7.3329-unbundle.patch41
-rw-r--r--games-emulation/pcsx2/files/pcsx2-1.7.3329-wx-vs-sdl.patch9
-rw-r--r--games-emulation/pcsx2/metadata.xml4
-rw-r--r--games-emulation/pcsx2/pcsx2-1.7.3329.ebuild198
9 files changed, 314 insertions, 0 deletions
diff --git a/games-emulation/pcsx2/Manifest b/games-emulation/pcsx2/Manifest
index bb30d90e594a..3a8dfeb3dde4 100644
--- a/games-emulation/pcsx2/Manifest
+++ b/games-emulation/pcsx2/Manifest
@@ -1 +1,4 @@
DIST pcsx2-1.6.0.tar.gz 17963332 BLAKE2B d1370fd089e1f8716a3365b9f499fef9418c4a9464e701cf0dbac8296cf59a2c6fc9b85ed680c514d8128da7b5c47aa8a067d48cac9eb0482ef2ba5f9234e60e SHA512 0a3e01a25384719fc72b636a1e9cf1cd966d0c978c1c3adfb46d6b3f76f43a25f90ef63d27a1d8092cdf444c5dc7560ce807ca81908d11ade9715e7eaaad6253
+DIST pcsx2-1.7.3329.tar.gz 19379924 BLAKE2B ec1313d97ab9f8bb5c735e73a3174071ccbd8499857835145dcd057f96cf51b60f3677a64c155916e5b6d33960d3e0d8c300714b6149ce4326e747e672c97406 SHA512 cfdd129c93e04f3ddc0a685483683cf5d4c239f9e7a059fd838ebe6cc8c2f3f819c26f45a8fe2a256030fdbd6273599d6e95813980eafbd301dac27689c2182a
+DIST pcsx2-glslang-c9706bdda0.tar.gz 3433325 BLAKE2B f2449a6c8b05e47367164d09036ae2302f0f28ec83c2e2f401426f52fbd4edf55f717f01eea2cbfe7554e1004b89ffdebc34ec21a95809fcbc719f69e65e8487 SHA512 5ff0902e95592525b2671788bf27717c85d0876b31e96374eff5128f9bf7caf93bb636e4d5e1916a5d641715a780172308403bd49305d9a07cf66358d7e6407c
+DIST pcsx2-vulkan-headers-9f4c61a314.tar.gz 1554220 BLAKE2B 7f7fa093e8af30919dd743768e6d882fa40800fecedf1183a45568dbb81207ffdf9eed1beadba98160c61bac89a24182794a601a2dce0c91cf54e16d0080cb69 SHA512 8b5fa5bcf6bd8ae5fb44000e4b842d86c014e9d8dae9bff988f86ec359fc27db3f71dc96253ceb2f31da4db41a6585034bb185f68da5446e91293bb0c2bbf993
diff --git a/games-emulation/pcsx2/files/pcsx2-1.7.3329-clang16.patch b/games-emulation/pcsx2/files/pcsx2-1.7.3329-clang16.patch
new file mode 100644
index 000000000000..331101ed6a1c
--- /dev/null
+++ b/games-emulation/pcsx2/files/pcsx2-1.7.3329-clang16.patch
@@ -0,0 +1,19 @@
+https://bugs.gentoo.org/870412
+--- a/3rdparty/cpuinfo/src/api.c
++++ b/3rdparty/cpuinfo/src/api.c
+@@ -78 +78 @@
+-const struct cpuinfo_uarch_info* cpuinfo_get_uarchs() {
++const struct cpuinfo_uarch_info* cpuinfo_get_uarchs(void) {
+--- a/cmake/FindPCAP.cmake
++++ b/cmake/FindPCAP.cmake
+@@ -47 +47 @@
+-check_c_source_compiles("int main() { return 0; }" PCAP_LINKS_SOLO)
++check_c_source_compiles("int main(void) { return 0; }" PCAP_LINKS_SOLO)
+@@ -55 +55 @@
+- check_c_source_compiles("int main() { return 0; }" PCAP_NEEDS_THREADS)
++ check_c_source_compiles("int main(void) { return 0; }" PCAP_NEEDS_THREADS)
+--- a/tests/ctest/CMakeLists.txt
++++ b/tests/ctest/CMakeLists.txt
+@@ -20 +20 @@
+- int main() {
++ int main(void) {
diff --git a/games-emulation/pcsx2/files/pcsx2-1.7.3329-lto.patch b/games-emulation/pcsx2/files/pcsx2-1.7.3329-lto.patch
new file mode 100644
index 000000000000..1047105d646a
--- /dev/null
+++ b/games-emulation/pcsx2/files/pcsx2-1.7.3329-lto.patch
@@ -0,0 +1,21 @@
+Lazy fix for -Werror=odr and don't rely on the CMAKE macro to
+pass -fno-lto to the problematic FastJmp.cpp source with lto.
+--- a/common/CMakeLists.txt
++++ b/common/CMakeLists.txt
+@@ -268,3 +268,3 @@
+
+-if (USE_GCC AND CMAKE_INTERPROCEDURAL_OPTIMIZATION)
++if (USE_GCC)
+ # GCC LTO doesn't work with asm statements
+--- a/pcsx2/PAD/Linux/Device.h
++++ b/pcsx2/PAD/Linux/Device.h
+@@ -31,3 +31,3 @@
+
+-enum DeviceType
++enum PADDeviceType
+ {
+@@ -101,3 +101,3 @@
+ DeviceAPI api;
+- DeviceType type;
++ PADDeviceType type;
+
diff --git a/games-emulation/pcsx2/files/pcsx2-1.7.3329-musl.patch b/games-emulation/pcsx2/files/pcsx2-1.7.3329-musl.patch
new file mode 100644
index 000000000000..95d2ff38a8c2
--- /dev/null
+++ b/games-emulation/pcsx2/files/pcsx2-1.7.3329-musl.patch
@@ -0,0 +1,9 @@
+--- a/pcsx2/USB/qemu-usb/iov.h
++++ b/pcsx2/USB/qemu-usb/iov.h
+@@ -17,5 +17,5 @@
+ #define IOV_H
+
+-#if !defined(_BITS_UIO_H) && !defined(__iovec_defined) /* /usr/include/bits/uio.h */
++#if !defined(_BITS_UIO_H) && !defined(__iovec_defined) && !defined(__DEFINED_struct_iovec)
+ struct iovec
+ {
diff --git a/games-emulation/pcsx2/files/pcsx2-1.7.3329-qt6.patch b/games-emulation/pcsx2/files/pcsx2-1.7.3329-qt6.patch
new file mode 100644
index 000000000000..9ef82985dc99
--- /dev/null
+++ b/games-emulation/pcsx2/files/pcsx2-1.7.3329-qt6.patch
@@ -0,0 +1,10 @@
+https://github.com/PCSX2/pcsx2/commit/6386be09c2e disabled PACKAGE_MODE
+for reasons that make no sense as far as installing from an ebuild goes.
+
+Skip the error and handle the rest from the ebuild.
+--- a/pcsx2-qt/CMakeLists.txt
++++ b/pcsx2-qt/CMakeLists.txt
+@@ -7,3 +7,2 @@
+ if (PACKAGE_MODE)
+- message(FATAL_ERROR "Package mode is not supported for Qt builds.")
+ else()
diff --git a/games-emulation/pcsx2/files/pcsx2-1.7.3329-unbundle.patch b/games-emulation/pcsx2/files/pcsx2-1.7.3329-unbundle.patch
new file mode 100644
index 000000000000..450329522183
--- /dev/null
+++ b/games-emulation/pcsx2/files/pcsx2-1.7.3329-unbundle.patch
@@ -0,0 +1,41 @@
+Adjust to unbundle a few extras.
+
+zstd changes only needed because of https://bugs.gentoo.org/872254
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -54,3 +54,4 @@
+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+- add_subdirectory(3rdparty/gtest EXCLUDE_FROM_ALL)
++ find_package(GTest REQUIRED)
++ alias_library(gtest_main GTest::gtest_main)
+ add_subdirectory(tests/ctest)
+--- a/cmake/SearchForStuff.cmake
++++ b/cmake/SearchForStuff.cmake
+@@ -177,3 +177,3 @@
+ set(ACTUALLY_ENABLE_TESTS ${ENABLE_TESTS})
+-if(ENABLE_TESTS)
++if(0)
+ if(NOT EXISTS "${CMAKE_SOURCE_DIR}/3rdparty/gtest/CMakeLists.txt")
+@@ -210,7 +210,4 @@
+ find_optional_system_library(ryml 3rdparty/rapidyaml/rapidyaml 0.4.0)
+-find_optional_system_library(zstd 3rdparty/zstd 1.4.5)
+-if (${zstd_TYPE} STREQUAL System)
+- alias_library(Zstd::Zstd zstd::libzstd_shared)
+- alias_library(pcsx2-zstd zstd::libzstd_shared)
+-endif()
++pkg_check_modules(zstd REQUIRED IMPORTED_TARGET libzstd)
++alias_library(Zstd::Zstd PkgConfig::zstd)
+ find_optional_system_library(libzip 3rdparty/libzip 1.8.0)
+@@ -243,3 +240,4 @@
+ add_subdirectory(3rdparty/lzma EXCLUDE_FROM_ALL)
+-add_subdirectory(3rdparty/libchdr EXCLUDE_FROM_ALL)
++pkg_check_modules(chdr REQUIRED IMPORTED_TARGET libchdr)
++alias_library(chdr-static PkgConfig::chdr)
+
+@@ -269,5 +267,3 @@
+ if(CUBEB_API)
+- add_subdirectory(3rdparty/cubeb EXCLUDE_FROM_ALL)
+- target_compile_options(cubeb PRIVATE "-w")
+- target_compile_options(speex PRIVATE "-w")
++ find_package(cubeb REQUIRED)
+ endif()
diff --git a/games-emulation/pcsx2/files/pcsx2-1.7.3329-wx-vs-sdl.patch b/games-emulation/pcsx2/files/pcsx2-1.7.3329-wx-vs-sdl.patch
new file mode 100644
index 000000000000..d00f9553993d
--- /dev/null
+++ b/games-emulation/pcsx2/files/pcsx2-1.7.3329-wx-vs-sdl.patch
@@ -0,0 +1,9 @@
+This check is unnecessary, bit dodgy (ldd+grep), and requires -DSDL2_API=1
+/only/ if wxGTK was built with USE=sdl or else get a cmake unused options
+warning. Test code also fails with -Werror=strict-prototypes (clang16).
+--- a/cmake/SearchForStuff.cmake
++++ b/cmake/SearchForStuff.cmake
+@@ -191,3 +191,2 @@
+ if(NOT PCSX2_CORE)
+- WX_vs_SDL()
+ endif()
diff --git a/games-emulation/pcsx2/metadata.xml b/games-emulation/pcsx2/metadata.xml
index 0d8f2efac4cd..40c13d5f12ff 100644
--- a/games-emulation/pcsx2/metadata.xml
+++ b/games-emulation/pcsx2/metadata.xml
@@ -13,6 +13,10 @@
<email>games@gentoo.org</email>
<name>Gentoo Games Project</name>
</maintainer>
+ <use>
+ <flag name="qt6">Add support for the Qt 6 application and UI framework</flag>
+ <flag name="vulkan">Enable support for Vulkan</flag>
+ </use>
<upstream>
<bugs-to>https://github.com/PCSX2/pcsx2/issues</bugs-to>
<remote-id type="github">PCSX2/pcsx2</remote-id>
diff --git a/games-emulation/pcsx2/pcsx2-1.7.3329.ebuild b/games-emulation/pcsx2/pcsx2-1.7.3329.ebuild
new file mode 100644
index 000000000000..e4673dc1422c
--- /dev/null
+++ b/games-emulation/pcsx2/pcsx2-1.7.3329.ebuild
@@ -0,0 +1,198 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+WX_GTK_VER="3.0-gtk3"
+inherit cmake fcaps flag-o-matic wxwidgets
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/PCSX2/pcsx2.git"
+else
+ HASH_GLSLANG=c9706bdda0ac22b9856f1aa8261e5b9e15cd20c5
+ HASH_VULKAN=9f4c61a31435a7a90a314fc68aeb386c92a09c0f
+ SRC_URI="
+ https://github.com/PCSX2/pcsx2/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
+ vulkan? (
+ https://github.com/KhronosGroup/glslang/archive/${HASH_GLSLANG}.tar.gz -> ${PN}-glslang-${HASH_GLSLANG::10}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz -> ${PN}-vulkan-headers-${HASH_VULKAN::10}.tar.gz
+ )"
+ KEYWORDS="-* ~amd64"
+fi
+
+DESCRIPTION="PlayStation 2 emulator"
+HOMEPAGE="https://pcsx2.net/"
+
+LICENSE="
+ GPL-3+ Apache-2.0 BSD BSD-2 BSD-4 Boost-1.0 GPL-2+ LGPL-2.1+
+ LGPL-3+ MIT OFL-1.1 ZLIB public-domain"
+SLOT="0"
+IUSE="cpu_flags_x86_sse4_1 pulseaudio qt6 test vulkan wayland"
+REQUIRED_USE="cpu_flags_x86_sse4_1" # dies at runtime if no support
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ app-arch/xz-utils
+ app-arch/zstd:=
+ dev-cpp/rapidyaml:=
+ dev-libs/libaio
+ dev-libs/libchdr
+ >=dev-libs/libfmt-7.1.3:=
+ dev-libs/libzip:=[zstd]
+ media-libs/cubeb
+ media-libs/harfbuzz
+ media-libs/libglvnd
+ media-libs/libpng:=
+ media-libs/libsamplerate
+ >=media-libs/libsdl2-2.0.22[haptic,joystick]
+ media-libs/libsoundtouch:=
+ net-libs/libpcap
+ sys-libs/zlib:=
+ virtual/libudev:=
+ x11-libs/libX11
+ x11-libs/libXrandr
+ qt6? (
+ dev-qt/qtbase:6[gui,network,widgets]
+ net-misc/curl
+ )
+ !qt6? (
+ dev-libs/glib:2
+ x11-libs/gdk-pixbuf:2
+ x11-libs/gtk+:3[wayland?]
+ x11-libs/wxGTK:${WX_GTK_VER}[X]
+ pulseaudio? ( media-libs/libpulse )
+ )
+ vulkan? ( media-libs/vulkan-loader )
+ wayland? ( dev-libs/wayland )"
+DEPEND="
+ ${RDEPEND}
+ x11-base/xorg-proto
+ test? ( dev-cpp/gtest )"
+BDEPEND="
+ dev-lang/perl
+ qt6? ( dev-qt/qttools[linguist] )
+ !qt6? ( sys-devel/gettext )"
+
+FILECAPS=(
+ -m 0755 "CAP_NET_RAW+eip CAP_NET_ADMIN+eip" usr/bin/pcsx2
+)
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.7.0-crcs.patch
+ "${FILESDIR}"/${PN}-1.7.3329-clang16.patch
+ "${FILESDIR}"/${PN}-1.7.3329-lto.patch
+ "${FILESDIR}"/${PN}-1.7.3329-musl.patch
+ "${FILESDIR}"/${PN}-1.7.3329-qt6.patch
+ "${FILESDIR}"/${PN}-1.7.3329-unbundle.patch
+ "${FILESDIR}"/${PN}-1.7.3329-wx-vs-sdl.patch
+)
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]]; then
+ local EGIT_SUBMODULES=()
+ if use vulkan; then
+ EGIT_SUBMODULES+=(
+ 3rdparty/glslang/glslang # needs StandAlone/ResourceLimits.h
+ 3rdparty/vulkan-headers # to keep in sync with glslang
+ )
+ fi
+ git-r3_src_unpack
+ else
+ default
+ if use vulkan; then
+ rmdir "${S}"/3rdparty/{glslang/glslang,vulkan-headers} || die
+ mv glslang-${HASH_GLSLANG} "${S}"/3rdparty/glslang/glslang || die
+ mv Vulkan-Headers-${HASH_VULKAN} "${S}"/3rdparty/vulkan-headers || die
+ fi
+ fi
+}
+
+src_prepare() {
+ cmake_src_prepare
+
+ # qt6 build doesn't support PACKAGE_MODE and need to set resources location
+ sed -e "/EmuFolders::AppRoot =/s|=.*|= \"${EPREFIX}/usr/share/PCSX2\";|" \
+ -i pcsx2/Frontend/CommonHost.cpp || die
+
+ # pulseaudio is only used for usb-mic and without qt6, not for audio output
+ { use pulseaudio && use !qt6; } || :> cmake/FindPulseAudio.cmake || die
+
+ # GS tests currently fail to build with qt6
+ use !qt6 || sed -i '/add_subdirectory(GS)/d' tests/ctest/CMakeLists.txt || die
+
+ # delete all 3rdparty/* except known-used ones in non-live
+ if [[ ${PV} != 9999 ]]; then
+ local keep=(
+ cpuinfo glad imgui include jpgd lzma simpleini xbyak
+ $(usev vulkan 'glslang vulkan-headers')
+ )
+ find 3rdparty -mindepth 1 -maxdepth 1 -type d \
+ -not \( -false ${keep[*]/#/-o -name } \) -exec rm -r {} + || die
+ fi
+}
+
+src_configure() {
+ use qt6 || setup-wxwidgets
+
+ # for bundled glslang (bug #858374)
+ use vulkan && append-flags -fno-strict-aliasing
+
+ local mycmakeargs=(
+ -DBUILD_SHARED_LIBS=no
+ -DDISABLE_BUILD_DATE=yes
+ -DDISABLE_PCSX2_WRAPPER=yes
+ -DDISABLE_SETCAP=yes
+ -DENABLE_TESTS=$(usex test)
+ -DPACKAGE_MODE=yes
+ -DQT_BUILD=$(usex qt6)
+ -DUSE_SYSTEM_LIBS=yes
+ -DUSE_VTUNE=no
+ -DUSE_VULKAN=$(usex vulkan)
+ -DWAYLAND_API=$(usex wayland)
+ -DXDG_STD=yes
+
+ # sse4.1 is the bare minimum required, -m is required at build time
+ # (see PCSX2Base.h) and it dies if no support at runtime (AppInit.cpp)
+ # https://github.com/PCSX2/pcsx2/pull/4329
+ -DARCH_FLAG=-msse4.1
+ )
+
+ cmake_src_configure
+}
+
+src_test() {
+ cmake_build unittests
+}
+
+src_install() {
+ cmake_src_install
+
+ use qt6 && newbin "${BUILD_DIR}"/pcsx2-qt/pcsx2-qt pcsx2
+}
+
+pkg_postinst() {
+ fcaps_pkg_postinst
+
+ local replacing_old
+ if [[ ${REPLACING_VERSIONS##* } ]] &&
+ ver_test ${REPLACING_VERSIONS##* } -lt 1.6.1
+ then
+ replacing_old=
+ elog ">=${PN}-1.7 has received several changes since <=${PN}-1.6.0, just-in-case"
+ elog "it is recommended to backup your save states and memory cards before use."
+ elog "Note that the executable was also renamed from 'PCSX2' to 'pcsx2'."
+ fi
+
+ if [[ ${PV} != 9999 && ( ! ${REPLACING_VERSIONS} || -v replacing_old ) ]]; then
+ [[ -v replacing_old ]] && elog
+ elog "${PN}-1.7.x is a development branch using a nightly release model"
+ elog "(new 'release' every 1-2 days). Stable 1.6.0 is getting old and lacks"
+ elog "many notable features (e.g. native 64bit builds). Given it may be a long"
+ elog "time before there is a new stable, Gentoo will carry and update 1.7.x"
+ elog "roughly every months."
+ elog
+ elog "Please report an issue if feel a picked nightly release needs to be"
+ elog "updated ahead of time or masked (notably for handling regressions)."
+ fi
+}