Skip to content

Commit e5f74e7

Browse files
authored
Add riscv64 build support (#3192)
* Add riscv64 build support * fix arm64 * Update native/linux-clang-cross/build.cake * Fix so pattern
1 parent 2c5d61b commit e5f74e7

File tree

14 files changed

+141
-34
lines changed

14 files changed

+141
-34
lines changed

.devcontainer/devcontainer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
// Features to add to the dev container. More info: https://containers.dev/features.
99
"features": {
1010
"ghcr.io/devcontainers/features/dotnet:2": "latest",
11+
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
1112
},
1213

1314
// Use 'forwardPorts' to make a list of ports inside the container available locally.

binding/Binding.Shared/LibraryLoader.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,13 @@ public static IntPtr LoadLocalLibrary<T> (string libraryName)
4343

4444
static string GetLibraryPath (string libraryName)
4545
{
46+
#if NET
47+
var arch = RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();
48+
#else
4649
var arch = PlatformConfiguration.Is64Bit
4750
? PlatformConfiguration.IsArm ? "arm64" : "x64"
4851
: PlatformConfiguration.IsArm ? "arm" : "x86";
52+
#endif
4953

5054
var libWithExt = libraryName;
5155
if (!libraryName.EndsWith (Extension, StringComparison.OrdinalIgnoreCase))

binding/HarfBuzzSharp.NativeAssets.Linux/HarfBuzzSharp.NativeAssets.Linux.csproj

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,21 @@
66
</PropertyGroup>
77
<ItemGroup>
88
<!-- glibc -->
9-
<PackageFile Include="..\..\output\native\linux\x64\libHarfBuzzSharp*" PackagePath="runtimes\linux-x64\native\%(Filename)%(Extension)" />
10-
<PackageFile Include="..\..\output\native\linux\x86\libHarfBuzzSharp*" PackagePath="runtimes\linux-x86\native\%(Filename)%(Extension)" />
11-
<PackageFile Include="..\..\output\native\linux\arm64\libHarfBuzzSharp*" PackagePath="runtimes\linux-arm64\native\%(Filename)%(Extension)" />
12-
<PackageFile Include="..\..\output\native\linux\arm\libHarfBuzzSharp*" PackagePath="runtimes\linux-arm\native\%(Filename)%(Extension)" />
9+
<PackageFile Include="..\..\output\native\linux\x64\libHarfBuzzSharp*.so" PackagePath="runtimes\linux-x64\native\%(Filename)%(Extension)" />
10+
<PackageFile Include="..\..\output\native\linux\x86\libHarfBuzzSharp*.so" PackagePath="runtimes\linux-x86\native\%(Filename)%(Extension)" />
11+
<PackageFile Include="..\..\output\native\linux\arm64\libHarfBuzzSharp*.so" PackagePath="runtimes\linux-arm64\native\%(Filename)%(Extension)" />
12+
<PackageFile Include="..\..\output\native\linux\arm\libHarfBuzzSharp*.so" PackagePath="runtimes\linux-arm\native\%(Filename)%(Extension)" />
13+
<PackageFile Include="..\..\output\native\linux\riscv64\libHarfBuzzSharp*.so" PackagePath="runtimes\linux-riscv64\native\%(Filename)%(Extension)" />
1314
<!-- Musl -->
14-
<PackageFile Include="..\..\output\native\alpine\x64\libHarfBuzzSharp*" PackagePath="runtimes\linux-musl-x64\native\%(Filename)%(Extension)" />
15-
<PackageFile Include="..\..\output\native\alpine\x86\libHarfBuzzSharp*" PackagePath="runtimes\linux-musl-x86\native\%(Filename)%(Extension)" />
16-
<PackageFile Include="..\..\output\native\alpine\arm64\libHarfBuzzSharp*" PackagePath="runtimes\linux-musl-arm64\native\%(Filename)%(Extension)" />
17-
<PackageFile Include="..\..\output\native\alpine\arm\libHarfBuzzSharp*" PackagePath="runtimes\linux-musl-arm\native\%(Filename)%(Extension)" />
15+
<PackageFile Include="..\..\output\native\alpine\x64\libHarfBuzzSharp*.so" PackagePath="runtimes\linux-musl-x64\native\%(Filename)%(Extension)" />
16+
<PackageFile Include="..\..\output\native\alpine\x86\libHarfBuzzSharp*.so" PackagePath="runtimes\linux-musl-x86\native\%(Filename)%(Extension)" />
17+
<PackageFile Include="..\..\output\native\alpine\arm64\libHarfBuzzSharp*.so" PackagePath="runtimes\linux-musl-arm64\native\%(Filename)%(Extension)" />
18+
<PackageFile Include="..\..\output\native\alpine\arm\libHarfBuzzSharp*.so" PackagePath="runtimes\linux-musl-arm\native\%(Filename)%(Extension)" />
19+
<PackageFile Include="..\..\output\native\alpine\riscv64\libHarfBuzzSharp*.so" PackagePath="runtimes\linux-musl-riscv64\native\%(Filename)%(Extension)" />
1820
</ItemGroup>
1921
<Target Name="IncludeAdditionalTfmSpecificPackageFiles">
2022
<ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
2123
<TfmSpecificPackageFile Include="buildTransitive\net4\HarfBuzzSharp.targets" PackagePath="buildTransitive\$(NuGetShortFolderName)\$(PackageId).targets" />
2224
</ItemGroup>
2325
</Target>
24-
</Project>
26+
</Project>

binding/HarfBuzzSharp.NativeAssets.Linux/buildTransitive/net4/HarfBuzzSharp.targets

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
<_NativeHarfBuzzSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libHarfBuzzSharp*.so">
2323
<Dir>arm64\</Dir>
2424
</_NativeHarfBuzzSharpFile>
25+
<_NativeHarfBuzzSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-riscv64\native\libHarfBuzzSharp*.so">
26+
<Dir>riscv64\</Dir>
27+
</_NativeHarfBuzzSharpFile>
2528

2629
<!-- Musl -->
2730
<_NativeHarfBuzzSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-musl-x86\native\libHarfBuzzSharp*.so">
@@ -36,6 +39,9 @@
3639
<_NativeHarfBuzzSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-musl-arm64\native\libHarfBuzzSharp*.so">
3740
<Dir>musl-arm64\</Dir>
3841
</_NativeHarfBuzzSharpFile>
42+
<_NativeHarfBuzzSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-musl-riscv64\native\libHarfBuzzSharp*.so">
43+
<Dir>musl-riscv64\</Dir>
44+
</_NativeHarfBuzzSharpFile>
3945

4046
<!-- include everything -->
4147
<Content Include="@(_NativeHarfBuzzSharpFile)">
@@ -46,4 +52,4 @@
4652

4753
</ItemGroup>
4854

49-
</Project>
55+
</Project>

binding/SkiaSharp.NativeAssets.Linux.NoDependencies/SkiaSharp.NativeAssets.Linux.NoDependencies.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ The excluded dependencies are:
2121
<PackageFile Include="..\..\output\native\linuxnodeps\x86\libSkiaSharp*.so" PackagePath="runtimes\linux-x86\native\%(Filename)%(Extension)" />
2222
<PackageFile Include="..\..\output\native\linuxnodeps\arm64\libSkiaSharp*.so" PackagePath="runtimes\linux-arm64\native\%(Filename)%(Extension)" />
2323
<PackageFile Include="..\..\output\native\linuxnodeps\arm\libSkiaSharp*.so" PackagePath="runtimes\linux-arm\native\%(Filename)%(Extension)" />
24+
<PackageFile Include="..\..\output\native\linuxnodeps\riscv64\libSkiaSharp*.so" PackagePath="runtimes\linux-riscv64\native\%(Filename)%(Extension)" />
2425
<!-- Musl -->
2526
<PackageFile Include="..\..\output\native\alpinenodeps\x64\libSkiaSharp*.so" PackagePath="runtimes\linux-musl-x64\native\%(Filename)%(Extension)" />
2627
<PackageFile Include="..\..\output\native\alpinenodeps\x86\libSkiaSharp*.so" PackagePath="runtimes\linux-musl-x86\native\%(Filename)%(Extension)" />
2728
<PackageFile Include="..\..\output\native\alpinenodeps\arm64\libSkiaSharp*.so" PackagePath="runtimes\linux-musl-arm64\native\%(Filename)%(Extension)" />
2829
<PackageFile Include="..\..\output\native\alpinenodeps\arm\libSkiaSharp*.so" PackagePath="runtimes\linux-musl-arm\native\%(Filename)%(Extension)" />
30+
<PackageFile Include="..\..\output\native\alpinenodeps\riscv64\libSkiaSharp*.so" PackagePath="runtimes\linux-musl-riscv64\native\%(Filename)%(Extension)" />
2931
</ItemGroup>
3032
<Target Name="IncludeAdditionalTfmSpecificPackageFiles">
3133
<ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">

binding/SkiaSharp.NativeAssets.Linux.NoDependencies/buildTransitive/net4/SkiaSharp.targets

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
<_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libSkiaSharp*.so">
2323
<Dir>arm64\</Dir>
2424
</_NativeSkiaSharpFile>
25+
<_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-riscv64\native\libSkiaSharp*.so">
26+
<Dir>riscv64\</Dir>
27+
</_NativeSkiaSharpFile>
2528

2629
<!-- Musl -->
2730
<_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-musl-x86\native\libSkiaSharp*.so">
@@ -36,6 +39,9 @@
3639
<_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-musl-arm64\native\libSkiaSharp*.so">
3740
<Dir>musl-arm64\</Dir>
3841
</_NativeSkiaSharpFile>
42+
<_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-musl-riscv64\native\libSkiaSharp*.so">
43+
<Dir>musl-riscv64\</Dir>
44+
</_NativeSkiaSharpFile>
3945

4046
<!-- include everything -->
4147
<Content Include="@(_NativeSkiaSharpFile)">

binding/SkiaSharp.NativeAssets.Linux/SkiaSharp.NativeAssets.Linux.csproj

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,22 @@
66
</PropertyGroup>
77
<ItemGroup>
88
<!-- glibc -->
9-
<PackageFile Include="..\..\output\native\linux\x64\libSkiaSharp*" PackagePath="runtimes\linux-x64\native\%(Filename)%(Extension)" />
10-
<PackageFile Include="..\..\output\native\linux\x86\libSkiaSharp*" PackagePath="runtimes\linux-x86\native\%(Filename)%(Extension)" />
11-
<PackageFile Include="..\..\output\native\linux\arm64\libSkiaSharp*" PackagePath="runtimes\linux-arm64\native\%(Filename)%(Extension)" />
12-
<PackageFile Include="..\..\output\native\linux\arm\libSkiaSharp*" PackagePath="runtimes\linux-arm\native\%(Filename)%(Extension)" />
9+
<PackageFile Include="..\..\output\native\linux\x64\libSkiaSharp*.so" PackagePath="runtimes\linux-x64\native\%(Filename)%(Extension)" />
10+
<PackageFile Include="..\..\output\native\linux\x86\libSkiaSharp*.so" PackagePath="runtimes\linux-x86\native\%(Filename)%(Extension)" />
11+
<PackageFile Include="..\..\output\native\linux\arm64\libSkiaSharp*.so" PackagePath="runtimes\linux-arm64\native\%(Filename)%(Extension)" />
12+
<PackageFile Include="..\..\output\native\linux\arm\libSkiaSharp*.so" PackagePath="runtimes\linux-arm\native\%(Filename)%(Extension)" />
13+
<PackageFile Include="..\..\output\native\linux\riscv64\libSkiaSharp*.so" PackagePath="runtimes\linux-riscv64\native\%(Filename)%(Extension)" />
1314
<!-- Musl -->
14-
<PackageFile Include="..\..\output\native\alpine\x64\libSkiaSharp*" PackagePath="runtimes\linux-musl-x64\native\%(Filename)%(Extension)" />
15-
<PackageFile Include="..\..\output\native\alpine\x86\libSkiaSharp*" PackagePath="runtimes\linux-musl-x86\native\%(Filename)%(Extension)" />
16-
<PackageFile Include="..\..\output\native\alpine\arm64\libSkiaSharp*" PackagePath="runtimes\linux-musl-arm64\native\%(Filename)%(Extension)" />
17-
<PackageFile Include="..\..\output\native\alpine\arm\libSkiaSharp*" PackagePath="runtimes\linux-musl-arm\native\%(Filename)%(Extension)" />
15+
<PackageFile Include="..\..\output\native\alpine\x64\libSkiaSharp*.so" PackagePath="runtimes\linux-musl-x64\native\%(Filename)%(Extension)" />
16+
<PackageFile Include="..\..\output\native\alpine\x86\libSkiaSharp*.so" PackagePath="runtimes\linux-musl-x86\native\%(Filename)%(Extension)" />
17+
<PackageFile Include="..\..\output\native\alpine\arm64\libSkiaSharp*.so" PackagePath="runtimes\linux-musl-arm64\native\%(Filename)%(Extension)" />
18+
<PackageFile Include="..\..\output\native\alpine\arm\libSkiaSharp*.so" PackagePath="runtimes\linux-musl-arm\native\%(Filename)%(Extension)" />
19+
<PackageFile Include="..\..\output\native\alpine\riscv64\libSkiaSharp*.so" PackagePath="runtimes\linux-musl-riscv64\native\%(Filename)%(Extension)" />
1820
</ItemGroup>
1921
<Target Name="IncludeAdditionalTfmSpecificPackageFiles">
2022
<ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
2123
<TfmSpecificPackageFile Include="buildTransitive\net4\SkiaSharp.targets" PackagePath="buildTransitive\$(NuGetShortFolderName)\$(PackageId).targets" />
2224
<TfmSpecificPackageFile Include="buildTransitive\net4\SkiaSharp.targets" PackagePath="build\$(NuGetShortFolderName)\$(PackageId).targets" />
2325
</ItemGroup>
2426
</Target>
25-
</Project>
27+
</Project>

binding/SkiaSharp.NativeAssets.Linux/buildTransitive/net4/SkiaSharp.targets

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
<_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-arm64\native\libSkiaSharp*.so">
2323
<Dir>arm64\</Dir>
2424
</_NativeSkiaSharpFile>
25+
<_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-riscv64\native\libSkiaSharp*.so">
26+
<Dir>riscv64\</Dir>
27+
</_NativeSkiaSharpFile>
2528

2629
<!-- Musl -->
2730
<_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-musl-x86\native\libSkiaSharp*.so">
@@ -36,6 +39,9 @@
3639
<_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-musl-arm64\native\libSkiaSharp*.so">
3740
<Dir>musl-arm64\</Dir>
3841
</_NativeSkiaSharpFile>
42+
<_NativeSkiaSharpFile Include="$(MSBuildThisFileDirectory)..\..\runtimes\linux-musl-riscv64\native\libSkiaSharp*.so">
43+
<Dir>musl-riscv64\</Dir>
44+
</_NativeSkiaSharpFile>
3945

4046
<!-- include everything -->
4147
<Content Include="@(_NativeSkiaSharpFile)">
@@ -46,4 +52,4 @@
4652

4753
</ItemGroup>
4854

49-
</Project>
55+
</Project>

native/linux-clang-cross/build.cake

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ if (BUILD_ARCH.Length == 0)
77

88
string GetGnArgs(string arch)
99
{
10-
var toolchainArch = arch == "arm"
11-
? "arm-linux-gnueabihf"
12-
: "aarch64-linux-gnu";
13-
var targetArch = arch == "arm"
14-
? "armv7a-linux-gnueabihf"
15-
: "aarch64-linux-gnu";
10+
var (toolchainArch, targetArch) = arch switch
11+
{
12+
"arm" => ("arm-linux-gnueabihf", "armv7a-linux-gnueabihf"),
13+
"arm64" => ("aarch64-linux-gnu", "aarch64-linux-gnu"),
14+
_ => ($"{arch}-linux-gnu", $"{arch}-linux-gnu"),
15+
};
1616

1717
var sysroot = $"/usr/{toolchainArch}";
18-
var init = $"'--sysroot={sysroot}', '--target={targetArch}'";
18+
var init = $"'--target={targetArch}'";
1919
var bin = $"'-B{sysroot}/bin/' ";
2020
var libs = $"'-L{sysroot}/lib/' ";
2121
var includes =

0 commit comments

Comments
 (0)