Skip to content

Commit 753296f

Browse files
committed
Add props for Linux and MacOS
1 parent 1a71a5f commit 753296f

File tree

2 files changed

+123
-74
lines changed

2 files changed

+123
-74
lines changed

csharp/src/Microsoft.ML.OnnxRuntime/NativeMethods.shared.cs

Lines changed: 3 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -889,8 +889,8 @@ internal class NativeLib
889889
#if !NETSTANDARD2_0 && !__ANDROID__ && !__IOS__
890890
/// <summary>
891891
/// Custom DllImportResolver to handle platform-specific library loading.
892-
/// On Windows, it explicitly loads the library with a lowercase .dll extension to handle
893-
/// case-sensitive filesystems.
892+
/// It handles the addition of "lib" prefix and file extensions (.so/.dylib) for Linux/macOS,
893+
/// and .dll extension for Windows (handling case-sensitivity).
894894
/// </summary>
895895
private static IntPtr DllImportResolver(string libraryName, Assembly assembly, DllImportSearchPath? searchPath)
896896
{
@@ -915,89 +915,18 @@ private static IntPtr DllImportResolver(string libraryName, Assembly assembly, D
915915

916916
if (mappedName != null)
917917
{
918-
// 1. Try default loading (name only)
919918
if (NativeLibrary.TryLoad(mappedName, assembly, searchPath, out IntPtr handle))
920919
{
921920
return handle;
922921
}
923-
924-
// 2. Try relative to assembly location (look into runtimes subfolders)
925-
string assemblyLocation = null;
926-
try { assemblyLocation = assembly.Location; } catch { }
927-
if (!string.IsNullOrEmpty(assemblyLocation))
928-
{
929-
string assemblyDir = System.IO.Path.GetDirectoryName(assemblyLocation);
930-
string rid = RuntimeInformation.RuntimeIdentifier;
931-
932-
// Probe the specific RID first, then common fallbacks for the current OS
933-
string[] ridsToTry;
934-
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
935-
{
936-
ridsToTry = new[] { rid, "win-x64", "win-arm64" };
937-
}
938-
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
939-
{
940-
ridsToTry = new[] { rid, "linux-x64", "linux-arm64" };
941-
}
942-
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
943-
{
944-
// We no longer provide osx-x64 in official package since 1.24.
945-
// However, we keep it in the list for build-from-source users.
946-
ridsToTry = new[] { rid, "osx-arm64", "osx-x64" };
947-
}
948-
else
949-
{
950-
ridsToTry = new[] { rid };
951-
}
952-
953-
foreach (var tryRid in ridsToTry)
954-
{
955-
string probePath = System.IO.Path.Combine(assemblyDir, "runtimes", tryRid, "native", mappedName);
956-
if (System.IO.File.Exists(probePath) && NativeLibrary.TryLoad(probePath, assembly, searchPath, out handle))
957-
{
958-
LogLibLoad($"[DllImportResolver] Loaded {mappedName} from: {probePath}");
959-
return handle;
960-
}
961-
}
962-
}
963-
964-
// 3. Try AppContext.BaseDirectory as a fallback
965-
string baseDir = AppContext.BaseDirectory;
966-
if (!string.IsNullOrEmpty(baseDir))
967-
{
968-
string probePath = System.IO.Path.Combine(baseDir, mappedName);
969-
if (NativeLibrary.TryLoad(probePath, assembly, searchPath, out handle))
970-
{
971-
LogLibLoad($"[DllImportResolver] Loaded {mappedName} from: {probePath}");
972-
return handle;
973-
}
974-
975-
string rid = RuntimeInformation.RuntimeIdentifier;
976-
probePath = System.IO.Path.Combine(baseDir, "runtimes", rid, "native", mappedName);
977-
if (NativeLibrary.TryLoad(probePath, assembly, searchPath, out handle))
978-
{
979-
LogLibLoad($"[DllImportResolver] Loaded {mappedName} from: {probePath}");
980-
return handle;
981-
}
982-
}
983-
984-
LogLibLoad($"[DllImportResolver] Failed loading {mappedName} (RID: {RuntimeInformation.RuntimeIdentifier}, Assembly: {assemblyLocation})");
985-
986922
}
987923
}
988924

989925
// Fall back to default resolution
990926
return IntPtr.Zero;
991927
}
992928

993-
private static void LogLibLoad(string message)
994-
{
995-
System.Diagnostics.Trace.WriteLine(message);
996-
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("ORT_LOADER_VERBOSITY")))
997-
{
998-
Console.WriteLine(message);
999-
}
1000-
}
929+
1001930
#endif
1002931

1003932
[DllImport(NativeLib.DllName, CharSet = CharSet.Ansi)]

csharp/src/Microsoft.ML.OnnxRuntime/targets/netstandard/props.xml

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,125 @@
142142
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
143143
<Visible>false</Visible>
144144
</None>
145+
146+
<!-- linux-x64 -->
147+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime.so"
148+
Condition="('$(PlatformTarget)' == 'x64' OR ('$(PlatformTarget)' == 'AnyCPU' AND '$(Prefer32Bit)' != 'true')) AND
149+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime.so')">
150+
<Link>libonnxruntime.so</Link>
151+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
152+
<Visible>false</Visible>
153+
</None>
154+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime_providers_shared.so"
155+
Condition="('$(PlatformTarget)' == 'x64' OR ('$(PlatformTarget)' == 'AnyCPU' AND '$(Prefer32Bit)' != 'true')) AND
156+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime_providers_shared.so')">
157+
<Link>libonnxruntime_providers_shared.so</Link>
158+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
159+
<Visible>false</Visible>
160+
</None>
161+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime_providers_cuda.so"
162+
Condition="('$(PlatformTarget)' == 'x64' OR ('$(PlatformTarget)' == 'AnyCPU' AND '$(Prefer32Bit)' != 'true')) AND
163+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime_providers_cuda.so')">
164+
<Link>libonnxruntime_providers_cuda.so</Link>
165+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
166+
<Visible>false</Visible>
167+
</None>
168+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime_providers_dnnl.so"
169+
Condition="('$(PlatformTarget)' == 'x64' OR ('$(PlatformTarget)' == 'AnyCPU' AND '$(Prefer32Bit)' != 'true')) AND
170+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime_providers_dnnl.so')">
171+
<Link>libonnxruntime_providers_dnnl.so</Link>
172+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
173+
<Visible>false</Visible>
174+
</None>
175+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime_providers_tensorrt.so"
176+
Condition="('$(PlatformTarget)' == 'x64' OR ('$(PlatformTarget)' == 'AnyCPU' AND '$(Prefer32Bit)' != 'true')) AND
177+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime_providers_tensorrt.so')">
178+
<Link>libonnxruntime_providers_tensorrt.so</Link>
179+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
180+
<Visible>false</Visible>
181+
</None>
182+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime_providers_openvino.so"
183+
Condition="('$(PlatformTarget)' == 'x64' OR ('$(PlatformTarget)' == 'AnyCPU' AND '$(Prefer32Bit)' != 'true')) AND
184+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-x64\native\libonnxruntime_providers_openvino.so')">
185+
<Link>libonnxruntime_providers_openvino.so</Link>
186+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
187+
<Visible>false</Visible>
188+
</None>
189+
190+
<!-- linux-arm64 -->
191+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime.so"
192+
Condition="'$(PlatformTarget)' == 'ARM64' AND
193+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime.so')">
194+
<Link>libonnxruntime.so</Link>
195+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
196+
<Visible>false</Visible>
197+
</None>
198+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime_providers_shared.so"
199+
Condition="'$(PlatformTarget)' == 'ARM64' AND
200+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime_providers_shared.so')">
201+
<Link>libonnxruntime_providers_shared.so</Link>
202+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
203+
<Visible>false</Visible>
204+
</None>
205+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime_providers_cuda.so"
206+
Condition="'$(PlatformTarget)' == 'ARM64' AND
207+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime_providers_cuda.so')">
208+
<Link>libonnxruntime_providers_cuda.so</Link>
209+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
210+
<Visible>false</Visible>
211+
</None>
212+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime_providers_dnnl.so"
213+
Condition="'$(PlatformTarget)' == 'ARM64' AND
214+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime_providers_dnnl.so')">
215+
<Link>libonnxruntime_providers_dnnl.so</Link>
216+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
217+
<Visible>false</Visible>
218+
</None>
219+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime_providers_tensorrt.so"
220+
Condition="'$(PlatformTarget)' == 'ARM64' AND
221+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime_providers_tensorrt.so')">
222+
<Link>libonnxruntime_providers_tensorrt.so</Link>
223+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
224+
<Visible>false</Visible>
225+
</None>
226+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime_providers_openvino.so"
227+
Condition="'$(PlatformTarget)' == 'ARM64' AND
228+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libonnxruntime_providers_openvino.so')">
229+
<Link>libonnxruntime_providers_openvino.so</Link>
230+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
231+
<Visible>false</Visible>
232+
</None>
233+
234+
<!-- osx-x64 -->
235+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\osx-x64\native\libonnxruntime.dylib"
236+
Condition="('$(PlatformTarget)' == 'x64' OR ('$(PlatformTarget)' == 'AnyCPU' AND '$(Prefer32Bit)' != 'true')) AND
237+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\osx-x64\native\libonnxruntime.dylib')">
238+
<Link>libonnxruntime.dylib</Link>
239+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
240+
<Visible>false</Visible>
241+
</None>
242+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\osx-x64\native\libonnxruntime_providers_shared.dylib"
243+
Condition="('$(PlatformTarget)' == 'x64' OR ('$(PlatformTarget)' == 'AnyCPU' AND '$(Prefer32Bit)' != 'true')) AND
244+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\osx-x64\native\libonnxruntime_providers_shared.dylib')">
245+
<Link>libonnxruntime_providers_shared.dylib</Link>
246+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
247+
<Visible>false</Visible>
248+
</None>
249+
250+
<!-- osx-arm64 -->
251+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\osx-arm64\native\libonnxruntime.dylib"
252+
Condition="'$(PlatformTarget)' == 'ARM64' AND
253+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\osx-arm64\native\libonnxruntime.dylib')">
254+
<Link>libonnxruntime.dylib</Link>
255+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
256+
<Visible>false</Visible>
257+
</None>
258+
<None Include="$(MSBuildThisFileDirectory)..\..\runtimes\osx-arm64\native\libonnxruntime_providers_shared.dylib"
259+
Condition="'$(PlatformTarget)' == 'ARM64' AND
260+
Exists('$(MSBuildThisFileDirectory)..\..\runtimes\osx-arm64\native\libonnxruntime_providers_shared.dylib')">
261+
<Link>libonnxruntime_providers_shared.dylib</Link>
262+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
263+
<Visible>false</Visible>
264+
</None>
145265
</ItemGroup>
146266
</Project>

0 commit comments

Comments
 (0)