diff --git a/.gitignore b/.gitignore index ff31438..3cee717 100644 --- a/.gitignore +++ b/.gitignore @@ -396,5 +396,6 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml +.DS_Store builds/ diff --git a/UnionPatcher/OSUtil.cs b/UnionPatcher/OSUtil.cs new file mode 100644 index 0000000..b4eb0da --- /dev/null +++ b/UnionPatcher/OSUtil.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; + +namespace LBPUnion.UnionPatcher +{ + using RuntimeOSPlatform = System.Runtime.InteropServices.OSPlatform; + + public enum OSPlatform + { + NotSupported, + Windows, + OSX, + Linux, + } + public class OSUtil + { + private static IEnumerable + <(OSPlatform Platform, RuntimeOSPlatform RuntimePlatform)?> EnumeratePlatforms() + { + yield return (OSPlatform.Windows, RuntimeOSPlatform.Windows); + yield return (OSPlatform.OSX, RuntimeOSPlatform.OSX); + yield return (OSPlatform.Linux, RuntimeOSPlatform.Linux); + } + + public static OSPlatform GetPlatform() + { + return EnumeratePlatforms().FirstOrDefault(p + => RuntimeInformation.IsOSPlatform(p.Value.RuntimePlatform))?.Platform ?? default; + } + } +} + diff --git a/UnionPatcher/RemotePatch.cs b/UnionPatcher/RemotePatch.cs index d3951b8..8642559 100644 --- a/UnionPatcher/RemotePatch.cs +++ b/UnionPatcher/RemotePatch.cs @@ -38,44 +38,53 @@ private static Dictionary GetUsers(string ps3Ip, string user, st public static void LaunchSCETool(string args) { string platformExecutable = ""; - - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - platformExecutable = "scetool/win64/scetool.exe"; - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - platformExecutable = "scetool/linux64/scetool"; - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - if (RuntimeInformation.OSArchitecture == Architecture.Arm64) - { - platformExecutable = "scetool/macarm64/scetool"; // For Apple Silicon Macs - } - else - { - platformExecutable = "scetool/mac64/scetool"; - } - } - if (platformExecutable != "") + switch (OSUtil.GetPlatform()) { - ProcessStartInfo startInfo = new(); - startInfo.UseShellExecute = false; - startInfo.FileName = Path.GetFullPath(platformExecutable); - startInfo.WorkingDirectory = Path.GetFullPath("."); - startInfo.Arguments = args; - startInfo.RedirectStandardOutput = true; - - Console.WriteLine("\n\n===== START SCETOOL =====\n"); - using (Process proc = Process.Start(startInfo)) - { - while (!proc.StandardOutput.EndOfStream) Console.WriteLine(proc.StandardOutput.ReadLine()); - proc.WaitForExit(); - } + case OSPlatform.Windows: + platformExecutable = "scetool/win64/scetool.exe"; + break; + case OSPlatform.Linux: + if(RuntimeInformation.ProcessArchitecture == Architecture.X64) + { + platformExecutable = "scetool/linux64/scetool"; + } else if (RuntimeInformation.ProcessArchitecture == Architecture.Arm) + { + platformExecutable = "scetool/linuxarm/scetool"; + } else if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64) + { + platformExecutable = "scetool/linuxarm64/scetool"; + } + break; + case OSPlatform.OSX: + if (RuntimeInformation.OSArchitecture == Architecture.Arm64) + { + platformExecutable = "scetool/macarm64/scetool"; // For Apple Silicon Macs + } + else + { + platformExecutable = "scetool/mac64/scetool"; + } + break; + default: + throw new Exception("Error starting SCETool. Your platform may not be supported yet."); - Console.WriteLine("\n===== END SCETOOL =====\n\n"); } - else + + ProcessStartInfo startInfo = new(); + startInfo.UseShellExecute = false; + startInfo.FileName = Path.GetFullPath(platformExecutable); + startInfo.WorkingDirectory = Path.GetFullPath("."); + startInfo.Arguments = args; + startInfo.RedirectStandardOutput = true; + + Console.WriteLine("\n\n===== START SCETOOL =====\n"); + using (Process proc = Process.Start(startInfo)) { - throw new Exception("Error starting SCETool. Your platform may not be supported yet."); + while (!proc.StandardOutput.EndOfStream) Console.WriteLine(proc.StandardOutput.ReadLine()); + proc.WaitForExit(); } + + Console.WriteLine("\n===== END SCETOOL =====\n\n"); } public void RevertEBOOT(string ps3ip, string gameID, string serverURL, string user, string pass) diff --git a/UnionPatcher/scetool/linuxarm/scetool b/UnionPatcher/scetool/linuxarm/scetool new file mode 100755 index 0000000..d67b964 Binary files /dev/null and b/UnionPatcher/scetool/linuxarm/scetool differ diff --git a/UnionPatcher/scetool/linuxarm64/scetool b/UnionPatcher/scetool/linuxarm64/scetool new file mode 100644 index 0000000..8eada82 Binary files /dev/null and b/UnionPatcher/scetool/linuxarm64/scetool differ