From 2d81c820b4e7cd72f4e93737aba4149ce59eee46 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Thu, 9 Sep 2021 03:44:12 +1000 Subject: [PATCH] Add LibretroBridge binary for Linux and wire it up build scripts to come, see PR #2895 --- Assets/dll/LibretroBridge.so | Bin 0 -> 27920 bytes .../Libretro/LibretroApi.cs | 8 ++++++-- .../Libretro/LibretroCore.cs | 4 +--- 3 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 Assets/dll/LibretroBridge.so diff --git a/Assets/dll/LibretroBridge.so b/Assets/dll/LibretroBridge.so new file mode 100644 index 0000000000000000000000000000000000000000..2897d7b8ab98d47001c4b501c5f543487d8e3c11 GIT binary patch literal 27920 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 literal 0 HcmV?d00001 diff --git a/src/BizHawk.Emulation.Cores/Libretro/LibretroApi.cs b/src/BizHawk.Emulation.Cores/Libretro/LibretroApi.cs index 97fdfb27cc..b2c3edda38 100644 --- a/src/BizHawk.Emulation.Cores/Libretro/LibretroApi.cs +++ b/src/BizHawk.Emulation.Cores/Libretro/LibretroApi.cs @@ -20,6 +20,9 @@ namespace BizHawk.Emulation.Cores.Libretro [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate IntPtr DllInit(IntPtr dllModule); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate IntPtr DllInitUnix(string dllModule); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void MessageApi(eMessage msg); @@ -49,13 +52,14 @@ namespace BizHawk.Emulation.Cores.Libretro instanceDll = new InstanceDll(dllPath); instanceDllCore = new InstanceDll(corePath); - var dllinit = GetTypedDelegate("DllInit"); Message = GetTypedDelegate("Message"); _copyBuffer = GetTypedDelegate("CopyBuffer"); _setBuffer = GetTypedDelegate("SetBuffer"); SetVariable = GetTypedDelegate("SetVariable"); - comm = (CommStruct*)dllinit(instanceDllCore.HModule).ToPointer(); + comm = (CommStruct*) (OSTailoredCode.IsUnixHost + ? GetTypedDelegate("DllInit")(corePath) + : GetTypedDelegate("DllInit")(instanceDllCore.HModule)).ToPointer(); //TODO: (stash function pointers locally and thunk to IntPtr) //ALSO: this should be done by the core, I think, not the API. No smarts should be in here diff --git a/src/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs b/src/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs index 6c88fb1dd7..0a6769e7ec 100644 --- a/src/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs +++ b/src/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs @@ -23,13 +23,11 @@ namespace BizHawk.Emulation.Cores.Libretro // TODO: codepath just for introspection (lighter weight; no speex, no controls, etc.) public LibretroCore(CoreComm nextComm, IGameInfo game, string corePath) { - if (OSTailoredCode.IsUnixHost) throw new NotImplementedException("required library LibretroBridge is not yet available for Linux"); - ServiceProvider = new BasicServiceProvider(this); _SyncSettings = new SyncSettings(); CoreComm = nextComm; - string dllPath = Path.Combine(CoreComm.CoreFileProvider.DllPath(), "LibretroBridge.dll"); + var dllPath = Path.Combine(CoreComm.CoreFileProvider.DllPath(), OSTailoredCode.IsUnixHost ? "LibretroBridge.so" : "LibretroBridge.dll"); api = new LibretroApi(dllPath, corePath); if (api.comm->env.retro_api_version != 1)