Skip to content

Commit

Permalink
games-emulation/rpcs3: add patch for LLVM 17 and require it
Browse files Browse the repository at this point in the history
Signed-off-by: Andrew Udvare <audvare@gmail.com>
  • Loading branch information
Tatsh committed Dec 18, 2023
1 parent 1903743 commit 13eac07
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 28 deletions.
5 changes: 2 additions & 3 deletions games-emulation/rpcs3/Manifest
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@ AUX rpcs3-0005-allow-system-cubeb.patch 1183 BLAKE2B d6f6ee1851459476c6ee7f554ce
AUX rpcs3-0006-support-for-system-miniupnpc.patch 1996 BLAKE2B 293f331824853710b0f4b825d76b3036713ade880113df06c099106f0efa28cd3ebbe58df24b21b5c4cd6035a79177b4b9c4cea03c5a211ebe10efb4baf2f82b SHA512 7c8e14b9fc4933028c42e340bc980efdfc4bedd4a2cd9682dd9077cacc6a4d79cb548790a5759bab40351835e4866517c462a4790827eff09d73a2164a57692c
AUX rpcs3-0007-remove-extra.patch 782 BLAKE2B c3bfe67899d548106a13eecbf85356dd588c388aa86529e7534ff9645c529ddccff41467dba61e6de79886d0436b3071ec789f0184e688ecdc10e6fe43a946c4 SHA512 d86e3320d67d8b65285e7f8c0fd4355f7a755c63cadfb8730b3cd97426e5461389bf2f21ce2a7e5f1e6acf3be5351c7efd6dc0c15773f535c5b9037349d21204
AUX rpcs3-0008-allow-system-rtmidi.patch 1105 BLAKE2B f4da84003b9a317fe35a8ebf0cc610cfca3d30540dd0a8cfe48bcde2463f549d9d3632abe1f2704be7adb771688f18f884e5034929ca7291f5efb437ee36b86f SHA512 fafe89747ec797d9dc4c4cfd797112ee39ce543ede9876f3407e6f4b0e7b3f4595f952fee64bd53ae021b842e8e84590956c449d826b492ac794e0219d01c231
AUX rpcs3-9999-ittapi-remove-git-co.patch 875 BLAKE2B 95be42e3522bce4e96572f2d983ceb7df9ada946c8c4aca93647009204d6e6a01f3e5fc052e39202ae93a94a67bce7a0203596bd64cec797472805cc8a0c3c97 SHA512 101312dbce964fd1d8631900743068bf8a83ce4357884d791c214215954b75ff3477a86fb1fbff31aeb8faee8a72ffec13bb3b0bdf4a2aa55a8531f2c04eaf1a
AUX rpcs3-9999-llvm-17.patch 4911 BLAKE2B 15f7efab5c7584fd2e831a0f4fc58b323a5a4264185bd711f25e9a5781ca0891c7cfcaa8914279c3fc2370b5c96c69255d4d1cbeed8f61c92fd0bf17c9fe6450 SHA512 c84f66fa4c4c3852d538aacf4525515d6f5c350feaaf87b22f48650a78fe5aaf679715f488d80301a0b24d271e8866a5b8cbce1744363472692406d18221b977
DIST rpcs3-0.0.29.tar.gz 8874802 BLAKE2B 2eb2fbd501b7e787e782419aabb38fa668f6cdfd2d3dc4266d907680b680261caa8bbee922a31337f7668cb39bcfff1d88e87928e1ef6dea0499278f98651854 SHA512 f093c0d98739cecb0564064b0c9a6e94271f3d6bc53f5fe3d9700ae4c25a2acdac134c4d44ef824cab592fd4217f5f8c35caf67edf8cacc151a68554b6cf9f12
DIST rpcs3-83cfba6.tar.gz 524551 BLAKE2B f6bc7ea33db5d56dc459d551b41682386626eefebc50fb6a4f039a1db1dd67772e0c478a1be555697d48453f6447f9d07de8b6f8cb604f6004c398c305876a5c SHA512 8efa893b5661af1b5b4a1a025b4f180dae2052f6522588d74c0673fb4c8545a96c760928b6a6bcedc5ddeb516bb5d205e4bda37755cf892ae55f002ddee97a4a
DIST rpcs3-asmjit-c598476.tar.gz 974040 BLAKE2B 28f2d23bcded48f1526b8820a5c9c919e014bdd6e8095762ba37414d2a47dc5665d89c4ca43fee9b216d5dfc71ef19835ce04f6dccc500451f204033b42be20c SHA512 c1196edb656833caa6d4d6817e34e4d2320ecda06bc6b531a0ff73f9e3786a98dad3f2348884de4e272d0e6853bb7b1eaab3feaa5d4430f28c3c9339ded1a58c
DIST rpcs3-hidapi-8b43a97.tar.gz 349041 BLAKE2B f97011530cf94c31cac192c3a78151ebde1a25f77afdea634706648c108919ff33dff40eb127b18c1bd4f2e08dea565ccd6716be76813981ee2333242a136197 SHA512 643f2422f1718ae5633297468fd9257fbe9feb6ba47c85161d282df087413a501dd9c223762427df9455b886006c2bb8346cbe4bf3be63d9b9a04ef7207414af
DIST rpcs3-ittapi-3.18.12.tar.gz 128417 BLAKE2B b2ca4f347d3ba0e4dbcdaf2f0f3bc53088d75d7dc08044d32e96808d95435ef10a476863a21973e34281a901d7410d1c0ef8723745db17f9460919c63e1f239f SHA512 fe819ed535c5477642e705fc10ca0eb63a91cca75ea008c388cbd15d1ec0f67e10f1ae291f76f33cad6707c7c77f36044d9e8a59b99eead9f645e2e689e707da
DIST rpcs3-llvm-cd89023.tar.gz 179419292 BLAKE2B 0bacf12ca3ef4a4e575f167b7c8cf89bf7126f864a4a1d7f353912222eff3f1c327c46868c34db4e5d6e3260452a2a2873a20a25051b4a2face8cdcbc417b40b SHA512 24ba93298848820db8606b3377eab72aba2adb949ff07116e7f37f485161aad2e0f124d6c5423270faab7665c9f1078d7b348e94acc55e27528499909f79b6bc
DIST rpcs3-yaml-cpp-0b67821.tar.gz 1034010 BLAKE2B 856fbfb254e6afdd78197182fb550e0428aff1c284675fbe2e7b6d5bcac3e9f06fb944dcfaaa13bb139d5920dd4546a4d57140b56f41a51dee6a9f00c2784a5b SHA512 be8860d95514024d869d002b23879faf0b776e22f945087c5c6745c6c81286b3d5ae3afb73fbe195f3cdb0938be08f98ecfa8e80f6fa6964593334cf319e6587
EBUILD rpcs3-0.0.29-r2.ebuild 4863 BLAKE2B b270a742d0e97002f6b259e5d7fb3433e3c06e16706ab1a8cde8c34054d907422e4f67e232b24e48bda6b0d8e53b8e77545f3cfc24e6dd3e1314958ab846aaa5 SHA512 11a429657f8a2bf97eeaf584dad0b9dcae2785484ee99adb21da241e4b6e3cb847566a2aa4b1b95cc4d037942ee667136c52b0fb8691efd87a0688054cdc0613
EBUILD rpcs3-0.0.29-r3.ebuild 4407 BLAKE2B d1412e2d5d20d12fdb5dacce26736d516c5921e20479dc7d13a5079b9665414d0d6065ba26cf09ca856ec4a7a29debeb8d5a46e23f1c485c980a1f98f4f87230 SHA512 7512c0149b09dfa639a606d2fbc923c871ac7a50d12ce6c88e9a5bda83305a48458375cecb8b69365798fe8853d3a26b853ab4f1701aafde5cd1023c46207478
MISC metadata.xml 609 BLAKE2B 57cc7af451b10f5184d67d98f45ca728de247dd480c6d2a10dda77da823b71ab88ae766f6ddfd565a51924703e3efd179fab0d87a3416623ebbff5b76ad079eb SHA512 4430cbe2e32908bd058329ff2faebf6e6cafc316d7c762229fa6f267ce3497af5d6f87da8fa83934fdadc60fb7f5ee68efe0a8e635ebd8471b34e8935464a708
18 changes: 0 additions & 18 deletions games-emulation/rpcs3/files/rpcs3-9999-ittapi-remove-git-co.patch

This file was deleted.

139 changes: 139 additions & 0 deletions games-emulation/rpcs3/files/rpcs3-9999-llvm-17.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
From 50df01d00e8c80ede4e0928ee9ba6a822ef408d8 Mon Sep 17 00:00:00 2001
From: oltolm <oleg.tolmatcev@gmail.com>
Date: Mon, 25 Sep 2023 17:04:48 +0200
Subject: [PATCH] llvm: add support for LLVM 17

---
3rdparty/llvm/CMakeLists.txt | 9 ++++++++-
Utilities/JIT.cpp | 2 +-
rpcs3/Emu/CPU/CPUTranslator.h | 10 +++++++++-
rpcs3/Emu/Cell/PPUThread.cpp | 2 +-
rpcs3/Emu/Cell/SPURecompiler.cpp | 12 +++++++++++-
5 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/3rdparty/llvm/CMakeLists.txt b/3rdparty/llvm/CMakeLists.txt
index 679cb23a613..fdadd8c5d3f 100644
--- a/3rdparty/llvm/CMakeLists.txt
+++ b/3rdparty/llvm/CMakeLists.txt
@@ -38,6 +38,10 @@ if(WITH_LLVM)

# now tries to find LLVM again
find_package(LLVM 16.0 CONFIG)
+ if(NOT LLVM_FOUND)
+ set(LLVM_DIR "${CMAKE_CURRENT_BINARY_DIR}/llvm_build/lib/cmake/llvm/")
+ find_package(LLVM 17.0 CONFIG)
+ endif()
if(NOT LLVM_FOUND)
message(FATAL_ERROR "Couldn't build LLVM from the submodule. You might need to run `git submodule update --init`")
endif()
@@ -50,10 +54,13 @@ if(WITH_LLVM)
endif()

find_package(LLVM 16.0 CONFIG)
+ if(NOT LLVM_FOUND)
+ find_package(LLVM 17.0 CONFIG)
+ endif()

if (NOT LLVM_FOUND)
if (LLVM_VERSION AND LLVM_VERSION_MAJOR LESS 16)
- message(FATAL_ERROR "Found LLVM version ${LLVM_VERSION}. Required version 16. \
+ message(FATAL_ERROR "Found LLVM version ${LLVM_VERSION}. Required versions 16...17. \
Enable BUILD_LLVM option to build LLVM from included as a git submodule.")
endif()

diff --git a/Utilities/JIT.cpp b/Utilities/JIT.cpp
index caec5a6b22a..b183f16f7d6 100644
--- a/Utilities/JIT.cpp
+++ b/Utilities/JIT.cpp
@@ -866,7 +866,7 @@ void asmjit::simd_builder::vec_extract_gpr(u32 esize, const x86::Gp& dst, const
#endif
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/FormattedStream.h"
-#include "llvm/Support/Host.h"
+#include "llvm/TargetParser/Host.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/ExecutionEngine/RTDyldMemoryManager.h"
#include "llvm/ExecutionEngine/ObjectCache.h"
diff --git a/rpcs3/Emu/CPU/CPUTranslator.h b/rpcs3/Emu/CPU/CPUTranslator.h
index edf6c92a65f..57948d2d1a3 100644
--- a/rpcs3/Emu/CPU/CPUTranslator.h
+++ b/rpcs3/Emu/CPU/CPUTranslator.h
@@ -922,6 +922,14 @@ inline llvm_div<T1, T2> operator /(T1&& a1, T2&& a2)
return {a1, a2};
}

+inline llvm::Constant* getZeroValueForNegation(llvm::Type* Ty)
+{
+ if (Ty->isFPOrFPVectorTy())
+ return llvm::ConstantFP::getNegativeZero(Ty);
+
+ return llvm::Constant::getNullValue(Ty);
+}
+
template <typename A1, typename T = llvm_common_t<A1>>
struct llvm_neg
{
@@ -971,7 +979,7 @@ struct llvm_neg
{
v1 = i->getOperand(1);

- if (i->getOperand(0) == llvm::ConstantFP::getZeroValueForNegation(v1->getType()))
+ if (i->getOperand(0) == getZeroValueForNegation(v1->getType()))
{
if (auto r1 = a1.match(v1, _m); v1)
{
diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp
index ee89bb46920..b69dca24053 100644
--- a/rpcs3/Emu/Cell/PPUThread.cpp
+++ b/rpcs3/Emu/Cell/PPUThread.cpp
@@ -41,7 +41,7 @@
#pragma GCC diagnostic ignored "-Wmissing-noreturn"
#endif
#include "llvm/Support/FormattedStream.h"
-#include "llvm/Support/Host.h"
+#include "llvm/TargetParser/Host.h"
#include "llvm/Object/ObjectFile.h"
#if LLVM_VERSION_MAJOR < 17
#include "llvm/ADT/Triple.h"
diff --git a/rpcs3/Emu/Cell/SPURecompiler.cpp b/rpcs3/Emu/Cell/SPURecompiler.cpp
index e90133c93c9..f69e7924a88 100644
--- a/rpcs3/Emu/Cell/SPURecompiler.cpp
+++ b/rpcs3/Emu/Cell/SPURecompiler.cpp
@@ -4373,7 +4373,7 @@ void spu_recompiler_base::dump(const spu_program& result, std::string& out)
#if LLVM_VERSION_MAJOR < 17
#include "llvm/ADT/Triple.h"
#endif
-#include "llvm/Support/Host.h"
+#include "llvm/TargetParser/Host.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Verifier.h"
#include "llvm/IR/InlineAsm.h"
@@ -6304,9 +6304,15 @@ class spu_llvm_recompiler : public spu_recompiler_base, public cpu_translator
pm.add(createEarlyCSEPass());
pm.add(createCFGSimplificationPass());
//pm.add(createNewGVNPass());
+#if LLVM_VERSION_MAJOR < 17
pm.add(createDeadStoreEliminationPass());
+#endif
pm.add(createLICMPass());
+#if LLVM_VERSION_MAJOR < 17
pm.add(createAggressiveDCEPass());
+#else
+ pm.add(createDeadCodeEliminationPass());
+#endif
//pm.add(createLintPass()); // Check

for (auto& f : *m_module)
@@ -6772,8 +6778,12 @@ class spu_llvm_recompiler : public spu_recompiler_base, public cpu_translator
// Basic optimizations
pm.add(createEarlyCSEPass());
pm.add(createCFGSimplificationPass());
+#if LLVM_VERSION_MAJOR < 17
pm.add(createDeadStoreEliminationPass());
pm.add(createAggressiveDCEPass());
+#else
+ pm.add(createDeadCodeEliminationPass());
+#endif
//pm.add(createLintPass());

for (auto& f : *_module)
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@ HOMEPAGE="https://rpcs3.net/ https://github.com/RPCS3/rpcs3"
ASMJIT_SHA="c59847629d3a19da4d10f0be4ac33b43fc4a100f"
HIDAPI_SHA="8b43a97a9330f8b0035439ce9e255e4be202deca"
ITTAPI_VERSION="3.18.12"
LLVM_SHA="cd89023f797900e4492da58b7bed36f702120011"
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/llvm/llvm-project/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
Expand Down Expand Up @@ -46,6 +44,7 @@ DEPEND=">=dev-libs/flatbuffers-2.0.6
media-video/ffmpeg
net-libs/miniupnpc
net-misc/curl
sys-devel/llvm:17
sys-libs/ncurses
sys-libs/zlib
media-libs/libjpeg-turbo
Expand All @@ -71,12 +70,10 @@ PATCHES=(
"${FILESDIR}/${PN}-0006-support-for-system-miniupnpc.patch"
"${FILESDIR}/${PN}-0007-remove-extra.patch"
"${FILESDIR}/${PN}-0008-allow-system-rtmidi.patch"
"${FILESDIR}/${PN}-9999-ittapi-remove-git-co.patch"
"${FILESDIR}/${PN}-9999-llvm-17.patch"
)

src_prepare() {
rmdir "${S}/3rdparty/llvm/llvm" || die
mv "${WORKDIR}/llvm-project-${LLVM_SHA}" "${S}/3rdparty/llvm/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
Expand All @@ -87,8 +84,6 @@ src_prepare() {
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
sed -re 's/MATCHES "\^\(DEBUG\|RELEASE\|RELWITHDEBINFO\|MINSIZEREL\)\$/MATCHES "^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL|GENTOO)/' \
-i "${S}/3rdparty/llvm/llvm/llvm/CMakeLists.txt" || die
sed -e '/find_program(CCACHE_FOUND/d' -i CMakeLists.txt || die
sed -re '/\s+add_compile_options\(-Werror=missing-noreturn\).*/d' \
-e '/\s+add_compile_options\(-Werror=old-style-cast\).*/d' \
Expand Down

0 comments on commit 13eac07

Please sign in to comment.