From 41a122a266dac989314d507e07661176728b4f63 Mon Sep 17 00:00:00 2001
From: Marin Baron <marin.baron.pro@gmail.com>
Date: Sat, 26 Jul 2025 10:12:13 +0200
Subject: [PATCH] [Build] Explicit Triple with LLVM 21.1.0

---
 Utilities/JITLLVM.cpp                | 8 ++++++++
 rpcs3/Emu/Cell/PPUThread.cpp         | 4 ++++
 rpcs3/Emu/Cell/SPULLVMRecompiler.cpp | 8 ++++++++
 3 files changed, 20 insertions(+)

diff --git a/Utilities/JITLLVM.cpp b/Utilities/JITLLVM.cpp
index 2b82d57d54d7..166ee7cec213 100644
--- a/Utilities/JITLLVM.cpp
+++ b/Utilities/JITLLVM.cpp
@@ -658,7 +658,11 @@ jit_compiler::jit_compiler(const std::unordered_map<std::string, u64>& _link, co
 	std::string result;
 
 	auto null_mod = std::make_unique<llvm::Module> ("null_", *m_context);
+#if LLVM_VERSION_MAJOR >= 21 && (LLVM_VERSION_MINOR >= 1 || LLVM_VERSION_MAJOR >= 22)
+	null_mod->setTargetTriple(llvm::Triple(jit_compiler::triple1()));
+#else
 	null_mod->setTargetTriple(jit_compiler::triple1());
+#endif
 
 	std::unique_ptr<llvm::RTDyldMemoryManager> mem;
 
@@ -672,7 +676,11 @@ jit_compiler::jit_compiler(const std::unordered_map<std::string, u64>& _link, co
 		else
 		{
 			mem = std::make_unique<MemoryManager2>(std::move(symbols_cement));
+#if LLVM_VERSION_MAJOR >= 21 && (LLVM_VERSION_MINOR >= 1 || LLVM_VERSION_MAJOR >= 22)
+			null_mod->setTargetTriple(llvm::Triple(jit_compiler::triple2()));
+#else
 			null_mod->setTargetTriple(jit_compiler::triple2());
+#endif
 		}
 	}
 	else
diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp
index d27e4104cae6..456715ccf90b 100644
--- a/rpcs3/Emu/Cell/PPUThread.cpp
+++ b/rpcs3/Emu/Cell/PPUThread.cpp
@@ -5803,7 +5803,11 @@ static void ppu_initialize2(jit_compiler& jit, const ppu_module<lv2_obj>& module
 	std::unique_ptr<Module> _module = std::make_unique<Module>(obj_name, jit.get_context());
 
 	// Initialize target
+#if LLVM_VERSION_MAJOR >= 21 && (LLVM_VERSION_MINOR >= 1 || LLVM_VERSION_MAJOR >= 22)
+	_module->setTargetTriple(Triple(jit_compiler::triple1()));
+#else
 	_module->setTargetTriple(jit_compiler::triple1());
+#endif
 	_module->setDataLayout(jit.get_engine().getTargetMachine()->createDataLayout());
 
 	// Initialize translator
diff --git a/rpcs3/Emu/Cell/SPULLVMRecompiler.cpp b/rpcs3/Emu/Cell/SPULLVMRecompiler.cpp
index e66d7c965462..fa1d782ee424 100644
--- a/rpcs3/Emu/Cell/SPULLVMRecompiler.cpp
+++ b/rpcs3/Emu/Cell/SPULLVMRecompiler.cpp
@@ -1598,7 +1598,11 @@ class spu_llvm_recompiler : public spu_recompiler_base, public cpu_translator
 
 		// Create LLVM module
 		std::unique_ptr<Module> _module = std::make_unique<Module>(m_hash + ".obj", m_context);
+#if LLVM_VERSION_MAJOR >= 21 && (LLVM_VERSION_MINOR >= 1 || LLVM_VERSION_MAJOR >= 22)
+		_module->setTargetTriple(Triple(jit_compiler::triple2()));
+#else
 		_module->setTargetTriple(jit_compiler::triple2());
+#endif
 		_module->setDataLayout(m_jit.get_engine().getTargetMachine()->createDataLayout());
 		m_module = _module.get();
 
@@ -2873,7 +2877,11 @@ class spu_llvm_recompiler : public spu_recompiler_base, public cpu_translator
 
 		// Create LLVM module
 		std::unique_ptr<Module> _module = std::make_unique<Module>("spu_interpreter.obj", m_context);
+#if LLVM_VERSION_MAJOR >= 21 && (LLVM_VERSION_MINOR >= 1 || LLVM_VERSION_MAJOR >= 22)
+		_module->setTargetTriple(Triple(jit_compiler::triple2()));
+#else
 		_module->setTargetTriple(jit_compiler::triple2());
+#endif
 		_module->setDataLayout(m_jit.get_engine().getTargetMachine()->createDataLayout());
 		m_module = _module.get();
 
