From cbcfdb5b2063659607c9ad5055b22beca37e962d Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Wed, 11 Oct 2023 17:17:07 +0200 Subject: [PATCH 1/2] Add iOS build --- .github/workflows/build.yml | 27 +++++++++++- build/Build.MacOs.cs | 2 - build/Build.Native.cs | 44 +++++++++++++++---- build/Build.iOS.cs | 43 ++++++++++++++++++ .../AlphaSkia.Native.iOS.csproj | 16 +++++++ lib/dotnet/AlphaSkia.Native.iOS/Marker.cs | 6 +++ lib/dotnet/AlphaSkia.Native.iOS/README.md | 3 ++ lib/dotnet/AlphaSkia.sln | 6 +++ .../alphatab}/alphaskia/AlphaSkiaMacOs.java | 4 +- 9 files changed, 137 insertions(+), 14 deletions(-) create mode 100644 build/Build.iOS.cs create mode 100644 lib/dotnet/AlphaSkia.Native.iOS/AlphaSkia.Native.iOS.csproj create mode 100644 lib/dotnet/AlphaSkia.Native.iOS/Marker.cs create mode 100644 lib/dotnet/AlphaSkia.Native.iOS/README.md rename lib/java/macos/src/main/java/{ => net/alphatab}/alphaskia/AlphaSkiaMacOs.java (89%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 21febe9..2c95e7f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -139,10 +139,35 @@ jobs: variant: ${{ matrix.variant }} target-os: macos # +# iOS + ios: + runs-on: macos-latest + strategy: + fail-fast: false + matrix: + include: + - architecture: arm64 + variant: shared + target-os: ios + - architecture: arm64 + variant: shared + target-os: iossimulator + - architecture: x64 + variant: shared + target-os: iossimulator + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/build-skia + with: + use-cache: ${{ inputs.use-skia-cache }} + architecture: ${{ matrix.architecture }} + variant: ${{ matrix.variant }} + target-os: ${{ matrix.target-os }} +# # Libraries dotnet: runs-on: windows-latest - needs: [windows, linux, android, macos] + needs: [windows, linux, android, macos, ios] steps: - uses: actions/checkout@v3 - uses: actions/download-artifact@v3 diff --git a/build/Build.MacOs.cs b/build/Build.MacOs.cs index 515a3f6..cfe4320 100644 --- a/build/Build.MacOs.cs +++ b/build/Build.MacOs.cs @@ -58,7 +58,5 @@ void SetClangMacOs(Dictionary gnArgs) gnArgs["cc"] = "clang"; gnArgs["cxx"] = "'clang++'"; AppendToFlagList(gnArgs, "extra_ldflags", "'-stdlib=libc++'"); - - // gnArgs["ar"] = "llvm-ar"; } } \ No newline at end of file diff --git a/build/Build.Native.cs b/build/Build.Native.cs index a40b9e7..ba8b703 100644 --- a/build/Build.Native.cs +++ b/build/Build.Native.cs @@ -15,16 +15,22 @@ public class TargetOperatingSystem : Enumeration { public static TargetOperatingSystem Windows = new() - { Value = "windows", SkiaTargetOs = "win", RuntimeIdentifier = "win" }; + { Value = "windows", SkiaTargetOs = "win", RuntimeIdentifier = "win" }; public static TargetOperatingSystem Linux = new() - { Value = "linux", SkiaTargetOs = "linux", RuntimeIdentifier = "linux" }; + { Value = "linux", SkiaTargetOs = "linux", RuntimeIdentifier = "linux" }; public static TargetOperatingSystem Android = new() - { Value = "android", SkiaTargetOs = "android", RuntimeIdentifier = "android" }; + { Value = "android", SkiaTargetOs = "android", RuntimeIdentifier = "android" }; public static TargetOperatingSystem MacOs = new() - { Value = "macos", SkiaTargetOs = "mac", RuntimeIdentifier = "macos" }; + { Value = "macos", SkiaTargetOs = "mac", RuntimeIdentifier = "macos" }; + + public static TargetOperatingSystem iOS = new() + { Value = "ios", SkiaTargetOs = "ios", RuntimeIdentifier = "ios" }; + + public static TargetOperatingSystem iOSSimulator = new() + { Value = "ios", SkiaTargetOs = "ios", RuntimeIdentifier = "iossimulator" }; public string SkiaTargetOs { get; private set; } public string RuntimeIdentifier { get; private set; } @@ -33,10 +39,26 @@ public class TargetOperatingSystem : Enumeration [TypeConverter(typeof(TypeConverter))] public class Architecture : Enumeration { - public static Architecture X64 = new() { Value = "x64", LinuxArch = "amd64", LinuxCrossToolchain = "", LinuxCrossTargetArch = ""}; - public static Architecture X86 = new() { Value = "x86", LinuxArch = "i386", LinuxCrossToolchain = "i686-linux-gnu", LinuxCrossTargetArch = "i686-linux-gnu"}; - public static Architecture Arm = new() { Value = "arm", LinuxArch = "armhf", LinuxCrossToolchain = "arm-linux-gnueabihf", LinuxCrossTargetArch = "armv7a-linux-gnueabihf"}; - public static Architecture Arm64 = new() { Value = "arm64", LinuxArch = "arm64", LinuxCrossToolchain = "aarch64-linux-gnu", LinuxCrossTargetArch = "aarch64-linux-gnu"}; + public static Architecture X64 = new() + { Value = "x64", LinuxArch = "amd64", LinuxCrossToolchain = "", LinuxCrossTargetArch = "" }; + + public static Architecture X86 = new() + { + Value = "x86", LinuxArch = "i386", LinuxCrossToolchain = "i686-linux-gnu", + LinuxCrossTargetArch = "i686-linux-gnu" + }; + + public static Architecture Arm = new() + { + Value = "arm", LinuxArch = "armhf", LinuxCrossToolchain = "arm-linux-gnueabihf", + LinuxCrossTargetArch = "armv7a-linux-gnueabihf" + }; + + public static Architecture Arm64 = new() + { + Value = "arm64", LinuxArch = "arm64", LinuxCrossToolchain = "aarch64-linux-gnu", + LinuxCrossTargetArch = "aarch64-linux-gnu" + }; public string LinuxArch { get; private set; } public string LinuxCrossToolchain { get; private set; } @@ -178,6 +200,10 @@ partial class Build { BuildLibAlphaSkiaMacOs(); } + else if (TargetOs == TargetOperatingSystem.iOS || TargetOs == TargetOperatingSystem.iOSSimulator) + { + BuildLibAlphaSkiaiOS(); + } }); public Target LibAlphaSkiaJni => _ => _ @@ -192,7 +218,7 @@ partial class Build { InstallDependenciesLinux(); } - + if (TargetOs == TargetOperatingSystem.Windows) { BuildLibAlphaSkiaJniWindows(); diff --git a/build/Build.iOS.cs b/build/Build.iOS.cs new file mode 100644 index 0000000..971c073 --- /dev/null +++ b/build/Build.iOS.cs @@ -0,0 +1,43 @@ +using System.Collections.Generic; + +partial class Build +{ + void BuildLibAlphaSkiaiOS() + { + var gnArgs = new Dictionary(); + + if (TargetOs == TargetOperatingSystem.iOSSimulator) + { + gnArgs["ios_use_simulator"] = "true"; + } + + string[] filesToCopy; + var isShared = Variant == Variant.Shared; + if (isShared) + { + filesToCopy = new[] + { + "libAlphaSkia.dylib" + }; + } + else + { + filesToCopy = new[] + { + "libAlphaSkia.a", + "libskia.a" + }; + } + + BuildSkiaiOS("libAlphaSkia", gnArgs, filesToCopy); + } + + void BuildSkiaiOS(string buildTarget, Dictionary gnArgs, + string[] filesToCopy) + { + gnArgs["skia_use_system_freetype2"] = "false"; + gnArgs["skia_use_metal"] = "true"; + + BuildSkia(buildTarget, gnArgs, filesToCopy); + } +} \ No newline at end of file diff --git a/lib/dotnet/AlphaSkia.Native.iOS/AlphaSkia.Native.iOS.csproj b/lib/dotnet/AlphaSkia.Native.iOS/AlphaSkia.Native.iOS.csproj new file mode 100644 index 0000000..6c855a6 --- /dev/null +++ b/lib/dotnet/AlphaSkia.Native.iOS/AlphaSkia.Native.iOS.csproj @@ -0,0 +1,16 @@ + + + true + false + netstandard2.0 + README.md + $(NoWarn);NU5128 + + + + + + + + + diff --git a/lib/dotnet/AlphaSkia.Native.iOS/Marker.cs b/lib/dotnet/AlphaSkia.Native.iOS/Marker.cs new file mode 100644 index 0000000..8969d54 --- /dev/null +++ b/lib/dotnet/AlphaSkia.Native.iOS/Marker.cs @@ -0,0 +1,6 @@ +namespace AlphaSkia.Native.iOS +{ + internal class Marker + { + } +} \ No newline at end of file diff --git a/lib/dotnet/AlphaSkia.Native.iOS/README.md b/lib/dotnet/AlphaSkia.Native.iOS/README.md new file mode 100644 index 0000000..c531cb7 --- /dev/null +++ b/lib/dotnet/AlphaSkia.Native.iOS/README.md @@ -0,0 +1,3 @@ +# AlphaSkia iOS Runtime Dependencies + +This package contains the AlphaSkia runtime dependencies for iOS \ No newline at end of file diff --git a/lib/dotnet/AlphaSkia.sln b/lib/dotnet/AlphaSkia.sln index 903164b..a1e5bd9 100644 --- a/lib/dotnet/AlphaSkia.sln +++ b/lib/dotnet/AlphaSkia.sln @@ -14,6 +14,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaSkia.Native.Android", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaSkia.Native.MacOs", "AlphaSkia.Native.MacOs\AlphaSkia.Native.MacOs.csproj", "{6727C66F-7AD0-4E81-BDDE-E9422B0601A5}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaSkia.Native.iOS", "AlphaSkia.Native.iOS\AlphaSkia.Native.iOS.csproj", "{E20172D9-D9E5-495B-91CC-B21B36BA3BF4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -44,6 +46,10 @@ Global {6727C66F-7AD0-4E81-BDDE-E9422B0601A5}.Debug|Any CPU.Build.0 = Debug|Any CPU {6727C66F-7AD0-4E81-BDDE-E9422B0601A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {6727C66F-7AD0-4E81-BDDE-E9422B0601A5}.Release|Any CPU.Build.0 = Release|Any CPU + {E20172D9-D9E5-495B-91CC-B21B36BA3BF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E20172D9-D9E5-495B-91CC-B21B36BA3BF4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E20172D9-D9E5-495B-91CC-B21B36BA3BF4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E20172D9-D9E5-495B-91CC-B21B36BA3BF4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {3693A53C-386E-4DBC-9B5E-9C3B7723FBE0} = {20757D78-DE4E-450B-97CC-24F926593193} diff --git a/lib/java/macos/src/main/java/alphaskia/AlphaSkiaMacOs.java b/lib/java/macos/src/main/java/net/alphatab/alphaskia/AlphaSkiaMacOs.java similarity index 89% rename from lib/java/macos/src/main/java/alphaskia/AlphaSkiaMacOs.java rename to lib/java/macos/src/main/java/net/alphatab/alphaskia/AlphaSkiaMacOs.java index 04fe313..a449364 100644 --- a/lib/java/macos/src/main/java/alphaskia/AlphaSkiaMacOs.java +++ b/lib/java/macos/src/main/java/net/alphatab/alphaskia/AlphaSkiaMacOs.java @@ -1,6 +1,6 @@ -package alphaskia; +package net.alphatab.alphaskia; -public class AlphaSkiaMacOs { +public class AlphaSkiaIOS { public static final String[] libraries = { "native/macos-" + getCurrentArchitecture() + "/libAlphaSkiaJni.so" }; From c33f5face0ed84d8a988cdc7de1bb0785780dce6 Mon Sep 17 00:00:00 2001 From: Daniel Kuschny Date: Wed, 11 Oct 2023 18:23:39 +0200 Subject: [PATCH 2/2] Update AlphaSkiaMacOs.java --- .../src/main/java/net/alphatab/alphaskia/AlphaSkiaMacOs.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/java/macos/src/main/java/net/alphatab/alphaskia/AlphaSkiaMacOs.java b/lib/java/macos/src/main/java/net/alphatab/alphaskia/AlphaSkiaMacOs.java index a449364..a790ccd 100644 --- a/lib/java/macos/src/main/java/net/alphatab/alphaskia/AlphaSkiaMacOs.java +++ b/lib/java/macos/src/main/java/net/alphatab/alphaskia/AlphaSkiaMacOs.java @@ -1,6 +1,6 @@ package net.alphatab.alphaskia; -public class AlphaSkiaIOS { +public class AlphaSkiaMacOs { public static final String[] libraries = { "native/macos-" + getCurrentArchitecture() + "/libAlphaSkiaJni.so" };