Skip to content

Commit b221c7a

Browse files
committed
Add support to native Windows ARM64 with fallback to Win64
Wrap Windows ARM64 detection in #if !NET40 && !NETSTANDARD1_1 to fix CI running on NET40
1 parent 8d68fdd commit b221c7a

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

src/LibVLCSharp/Shared/Core/Constants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ internal static class Constants
3030

3131
internal static class ArchitectureNames
3232
{
33+
internal const string WinArm64 = "win-arm64";
3334
internal const string Win64 = "win-x64";
3435
internal const string Win86 = "win-x86";
3536
internal const string MacOS64 = "osx-x64";

src/LibVLCSharp/Shared/Core/Core.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,16 @@ static internal bool LibVLCLoaded
7777
{
7878
arch = Path.Combine(ArchitectureNames.MacOS64, Constants.Lib);
7979
}
80+
else if (PlatformHelper.IsWindows)
81+
{
82+
arch = RuntimeInformation.ProcessArchitecture switch
83+
{
84+
Architecture.X64 => ArchitectureNames.Win64,
85+
Architecture.X86 => ArchitectureNames.Win86,
86+
Architecture.Arm64 => ArchitectureNames.WinArm64,
87+
_ => arch = PlatformHelper.IsX64BitProcess ? ArchitectureNames.Win64 : ArchitectureNames.Win86
88+
};
89+
}
8090
else
8191
{
8292
arch = PlatformHelper.IsX64BitProcess ? ArchitectureNames.Win64 : ArchitectureNames.Win86;
@@ -117,6 +127,27 @@ static internal bool LibVLCLoaded
117127

118128
paths.Add((string.Empty, libvlcPath3));
119129

130+
// Add Win64 folders as fallback for WinArm64 to keep compatibility
131+
if (arch == ArchitectureNames.WinArm64)
132+
{
133+
var fallbackLibvlcDirPath1 = Path.Combine(Path.GetDirectoryName(libvlcAssemblyLocation)!,
134+
Constants.LibrariesRepositoryFolderName, ArchitectureNames.Win64);
135+
136+
var fallbackLibvlccorePath1 = LibVLCCorePath(fallbackLibvlcDirPath1);
137+
var fallbackLibvlcPath1 = LibVLCPath(fallbackLibvlcDirPath1);
138+
paths.Add((fallbackLibvlccorePath1, fallbackLibvlcPath1));
139+
140+
if (!string.IsNullOrEmpty(assemblyLocation))
141+
{
142+
var fallbackLibvlcDirPath2 = Path.Combine(Path.GetDirectoryName(assemblyLocation)!,
143+
Constants.LibrariesRepositoryFolderName, ArchitectureNames.Win64);
144+
145+
var fallbackLibvlccorePath2 = LibVLCCorePath(fallbackLibvlcDirPath2);
146+
var fallbackLibvlcPath2 = LibVLCPath(fallbackLibvlcDirPath2);
147+
paths.Add((fallbackLibvlccorePath2, fallbackLibvlcPath2));
148+
}
149+
}
150+
120151
if (PlatformHelper.IsMac)
121152
{
122153
var libvlcPath4 = Path.Combine(Path.Combine(Path.GetDirectoryName(libvlcAssemblyLocation)!,

0 commit comments

Comments
 (0)