From d58671f17b9d9dd66329c8732033d100201c3f72 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Thu, 5 Oct 2023 14:08:50 +0200 Subject: [PATCH 01/20] Setup som ebasics --- .github/workflows/build.yml | 39 ++++++++++++++ .github/workflows/test.yml | 11 ++++ build/Build.Osx.cs | 104 ++++++++++++++++++++++++++++++++++++ 3 files changed, 154 insertions(+) create mode 100644 .github/workflows/test.yml create mode 100644 build/Build.Osx.cs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 668f736..8180d59 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -125,6 +125,45 @@ jobs: name: alphaskia-android-jni-${{ matrix.architecture }}-${{ matrix.variant }} path: artifacts + osx: + runs-on: macos-latest + strategy: + fail-fast: false + matrix: + architecture: [x64, arm64] + variant: ['shared', 'static'] + steps: + - uses: actions/checkout@v3 + with: + submodules: true + - run: ./build.sh OsxSkia --architecture ${{ matrix.architecture }} --variant ${{ matrix.variant }} + - uses: actions/upload-artifact@v3 + with: + name: alphaskia-osx-${{ matrix.architecture }}-${{ matrix.variant }} + path: artifacts + + osx-jni: + runs-on: macos-latest + needs: [osx] + strategy: + fail-fast: false + matrix: + architecture: [x64, arm64] + variant: ['shared', 'static'] + + steps: + - uses: actions/checkout@v3 + with: + submodules: true + - uses: actions/download-artifact@v3 + with: + path: dist + - run: ./build.cmd OsxJni --architecture ${{ matrix.architecture }} --variant ${{ matrix.variant }} + - uses: actions/upload-artifact@v3 + with: + name: alphaskia-osx-jni-${{ matrix.architecture }}-${{ matrix.variant }} + path: artifacts + dotnet: runs-on: windows-latest needs: [windows, linux] diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..2761c11 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,11 @@ +on: + workflow_dispatch: + pull_request: + +jobs: + osx: + runs-on: macos-latest + steps: + - run: echo $JAVA_HOME + - run: ls -l $JAVA_HOME + - run: ls -l $JAVA_HOME/include \ No newline at end of file diff --git a/build/Build.Osx.cs b/build/Build.Osx.cs new file mode 100644 index 0000000..c401d97 --- /dev/null +++ b/build/Build.Osx.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using Nuke.Common; + +partial class Build +{ + public Target OsxSkia => _ => _ + .DependsOn(GitSyncDepsSkia, PatchSkiaBuildFiles) + .Requires(() => Architecture) + .Requires(() => Variant) + .OnlyWhenStatic(OperatingSystem.IsMacOS) + .Executes(() => + { + BuildSkiaOsxMain(Architecture, Variant); + }); + + public Target OsxJni => _ => _ + .DependsOn(PrepareGitHubArtifacts, GitSyncDepsJni, PatchSkiaBuildFiles) + .Requires(() => Architecture) + .Requires(() => Variant == Variant.Shared) + .OnlyWhenStatic(OperatingSystem.IsMacOS) + .Executes(() => + { + BuildSkiaOsxJni(Architecture, Variant); + }); + + void BuildSkiaOsxMain(Architecture arch, Variant variant) + { + var gnArgs = new Dictionary(); + string[] filesToCopy; + var isShared = variant == Variant.Shared; + if (isShared) + { + filesToCopy = new[] + { + "libAlphaSkia.so" + }; + } + else + { + filesToCopy = new[] + { + "libAlphaSkia.a", + "libskia.a" + }; + } + + BuildSkiaOsx("libAlphaSkia", arch, variant, gnArgs, filesToCopy); + } + + void BuildSkiaOsxJni(Architecture arch, Variant variant) + { + var gnArgs = new Dictionary(); + var alphaSkiaInclude = DistBasePath / "include"; + var jniInclude = JavaHome / "include"; + var jniWinInclude = JavaHome / "include" / "osx"; // TODO + gnArgs["extra_cflags"] = $"[ '-I{alphaSkiaInclude}', '-I{jniInclude}', '-I{jniWinInclude}' ]"; + + // Add Libs and lib search paths + var staticLibPath = DistBasePath / $"libAlphaSkia-osx-{arch}-static"; + gnArgs["extra_ldflags"] = + $"[ '-L{staticLibPath}', '-lAlphaSkia', '-lskia' ]"; + + BuildSkiaOsx("libAlphaSkiaJni", arch, variant, gnArgs, new[] { "libAlphaSkiaJni.so" }); + } + + void BuildSkiaOsx(string buildTarget, Architecture arch, Variant variant, Dictionary gnArgs, + string[] filesToCopy) + { + SetClangOsx(arch, gnArgs); + + gnArgs["skia_use_system_freetype2"] = "false"; + + BuildSkia(buildTarget, "mac", arch, variant, gnArgs, filesToCopy); + } + + void SetClangOsx(Architecture arch, Dictionary gnArgs) + { + AppendToFlagList(gnArgs, "extra_cflags", "'-DHAVE_SYSCALL_GETRANDOM', '-DXML_DEV_URANDOM'"); + + if (arch == Architecture.X64) + { + gnArgs["cc"] = "clang"; + gnArgs["cxx"] = "'clang++'"; + AppendToFlagList(gnArgs, "extra_ldflags", "'-static-libstdc++', '-static-libgcc'"); + } + else if (arch == Architecture.X86) + { + // TODO + gnArgs["cc"] = "clang"; + gnArgs["cxx"] = "'clang++'"; + AppendToFlagList(gnArgs, "extra_ldflags", "'-static-libstdc++', '-static-libgcc'"); + } + else if (arch == Architecture.Arm64) // aka AArch64 + { + // TODO + gnArgs["cc"] = "clang"; + gnArgs["cxx"] = "'clang++'"; + AppendToFlagList(gnArgs, "extra_ldflags", "'-static-libstdc++', '-static-libgcc'"); + } + + // gnArgs["ar"] = "llvm-ar"; + } +} \ No newline at end of file From 1b8a1c75d5170cedab719731336f3e91ab6ce493 Mon Sep 17 00:00:00 2001 From: Danielku15 Date: Thu, 5 Oct 2023 14:27:19 +0200 Subject: [PATCH 02/20] Add MacOs Build infrastructure --- .github/workflows/build.yml | 19 ++-- .github/workflows/test.yml | 11 -- build/Build.MacOs.cs | 88 +++++++++++++++ build/Build.Osx.cs | 104 ------------------ .../AlphaSkia.Native.MacOs.csproj | 15 +++ lib/dotnet/AlphaSkia.Native.MacOs/Marker.cs | 6 + lib/dotnet/AlphaSkia.Native.MacOs/README.md | 3 + .../AlphaSkia.Test/AlphaSkia.Test.csproj | 9 ++ lib/dotnet/AlphaSkia.sln | 6 + lib/dotnet/AlphaSkia/AlphaSkiaPlatform.cs | 4 +- lib/java/.idea/gradle.xml | 1 + lib/java/.idea/misc.xml | 2 +- lib/java/linux/build.gradle.kts | 2 +- lib/java/macos/build.gradle.kts | 20 ++++ .../main/java/alphaskia/AlphaSkiaMacOs.java | 18 +++ .../alphaskia/MusicSheetRenderTest.java | 2 +- lib/java/settings.gradle.kts | 1 + 17 files changed, 180 insertions(+), 131 deletions(-) delete mode 100644 .github/workflows/test.yml create mode 100644 build/Build.MacOs.cs delete mode 100644 build/Build.Osx.cs create mode 100644 lib/dotnet/AlphaSkia.Native.MacOs/AlphaSkia.Native.MacOs.csproj create mode 100644 lib/dotnet/AlphaSkia.Native.MacOs/Marker.cs create mode 100644 lib/dotnet/AlphaSkia.Native.MacOs/README.md create mode 100644 lib/java/macos/build.gradle.kts create mode 100644 lib/java/macos/src/main/java/alphaskia/AlphaSkiaMacOs.java diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8180d59..02e42c1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -125,7 +125,7 @@ jobs: name: alphaskia-android-jni-${{ matrix.architecture }}-${{ matrix.variant }} path: artifacts - osx: + macos: runs-on: macos-latest strategy: fail-fast: false @@ -136,15 +136,15 @@ jobs: - uses: actions/checkout@v3 with: submodules: true - - run: ./build.sh OsxSkia --architecture ${{ matrix.architecture }} --variant ${{ matrix.variant }} + - run: ./build.sh MacOsSkia --architecture ${{ matrix.architecture }} --variant ${{ matrix.variant }} - uses: actions/upload-artifact@v3 with: - name: alphaskia-osx-${{ matrix.architecture }}-${{ matrix.variant }} + name: alphaskia-macos-${{ matrix.architecture }}-${{ matrix.variant }} path: artifacts - osx-jni: + macos-jni: runs-on: macos-latest - needs: [osx] + needs: [macos] strategy: fail-fast: false matrix: @@ -158,10 +158,10 @@ jobs: - uses: actions/download-artifact@v3 with: path: dist - - run: ./build.cmd OsxJni --architecture ${{ matrix.architecture }} --variant ${{ matrix.variant }} + - run: ./build.cmd MacOsJni --architecture ${{ matrix.architecture }} --variant ${{ matrix.variant }} - uses: actions/upload-artifact@v3 with: - name: alphaskia-osx-jni-${{ matrix.architecture }}-${{ matrix.variant }} + name: alphaskia-macos-jni-${{ matrix.architecture }}-${{ matrix.variant }} path: artifacts dotnet: @@ -197,7 +197,4 @@ jobs: with: name: Jars path: | - lib/java/main/build/libs/*.jar - lib/java/linux/build/libs/*.jar - lib/java/android/build/libs/*.jar - lib/java/windows/build/libs/*.jar + lib/java/*/build/libs/*.jar diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 2761c11..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,11 +0,0 @@ -on: - workflow_dispatch: - pull_request: - -jobs: - osx: - runs-on: macos-latest - steps: - - run: echo $JAVA_HOME - - run: ls -l $JAVA_HOME - - run: ls -l $JAVA_HOME/include \ No newline at end of file diff --git a/build/Build.MacOs.cs b/build/Build.MacOs.cs new file mode 100644 index 0000000..af2571c --- /dev/null +++ b/build/Build.MacOs.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using Nuke.Common; + +partial class Build +{ + public Target MacOsSkia => _ => _ + .DependsOn(GitSyncDepsSkia, PatchSkiaBuildFiles) + .Requires(() => Architecture) + .Requires(() => Variant) + .OnlyWhenStatic(OperatingSystem.IsMacOS) + .Executes(() => + { + BuildSkiaMacOsMain(Architecture, Variant); + }); + + public Target MacOsJni => _ => _ + .DependsOn(PrepareGitHubArtifacts, GitSyncDepsJni, PatchSkiaBuildFiles) + .Requires(() => Architecture) + .Requires(() => Variant == Variant.Shared) + .OnlyWhenStatic(OperatingSystem.IsMacOS) + .Executes(() => + { + BuildSkiaMacOsJni(Architecture, Variant); + }); + + void BuildSkiaMacOsMain(Architecture arch, Variant variant) + { + var gnArgs = new Dictionary(); + string[] filesToCopy; + var isShared = variant == Variant.Shared; + if (isShared) + { + filesToCopy = new[] + { + "libAlphaSkia.so" + }; + } + else + { + filesToCopy = new[] + { + "libAlphaSkia.a", + "libskia.a" + }; + } + + BuildSkiaMacOs("libAlphaSkia", arch, variant, gnArgs, filesToCopy); + } + + void BuildSkiaMacOsJni(Architecture arch, Variant variant) + { + var gnArgs = new Dictionary(); + var alphaSkiaInclude = DistBasePath / "include"; + var jniInclude = JavaHome / "include"; + var jniWinInclude = JavaHome / "include" / "darwin"; + gnArgs["extra_cflags"] = $"[ '-I{alphaSkiaInclude}', '-I{jniInclude}', '-I{jniWinInclude}' ]"; + + // Add Libs and lib search paths + var staticLibPath = DistBasePath / $"libAlphaSkia-macos-{arch}-static"; + gnArgs["extra_ldflags"] = + $"[ '-L{staticLibPath}', '-lAlphaSkia', '-lskia' ]"; + + BuildSkiaMacOs("libAlphaSkiaJni", arch, variant, gnArgs, new[] { "libAlphaSkiaJni.so" }); + } + + void BuildSkiaMacOs(string buildTarget, Architecture arch, Variant variant, Dictionary gnArgs, + string[] filesToCopy) + { + SetClangMacOs(arch, gnArgs); + + gnArgs["skia_use_system_freetype2"] = "false"; + gnArgs["skia_use_metal"] = "true"; + + BuildSkia(buildTarget, "mac", arch, variant, gnArgs, filesToCopy); + } + + void SetClangMacOs(Architecture arch, Dictionary gnArgs) + { + AppendToFlagList(gnArgs, "extra_cflags", "'-DHAVE_ARC4RANDOM_BUF, '-stdlib=libc++'"); + + 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.Osx.cs b/build/Build.Osx.cs deleted file mode 100644 index c401d97..0000000 --- a/build/Build.Osx.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System; -using System.Collections.Generic; -using Nuke.Common; - -partial class Build -{ - public Target OsxSkia => _ => _ - .DependsOn(GitSyncDepsSkia, PatchSkiaBuildFiles) - .Requires(() => Architecture) - .Requires(() => Variant) - .OnlyWhenStatic(OperatingSystem.IsMacOS) - .Executes(() => - { - BuildSkiaOsxMain(Architecture, Variant); - }); - - public Target OsxJni => _ => _ - .DependsOn(PrepareGitHubArtifacts, GitSyncDepsJni, PatchSkiaBuildFiles) - .Requires(() => Architecture) - .Requires(() => Variant == Variant.Shared) - .OnlyWhenStatic(OperatingSystem.IsMacOS) - .Executes(() => - { - BuildSkiaOsxJni(Architecture, Variant); - }); - - void BuildSkiaOsxMain(Architecture arch, Variant variant) - { - var gnArgs = new Dictionary(); - string[] filesToCopy; - var isShared = variant == Variant.Shared; - if (isShared) - { - filesToCopy = new[] - { - "libAlphaSkia.so" - }; - } - else - { - filesToCopy = new[] - { - "libAlphaSkia.a", - "libskia.a" - }; - } - - BuildSkiaOsx("libAlphaSkia", arch, variant, gnArgs, filesToCopy); - } - - void BuildSkiaOsxJni(Architecture arch, Variant variant) - { - var gnArgs = new Dictionary(); - var alphaSkiaInclude = DistBasePath / "include"; - var jniInclude = JavaHome / "include"; - var jniWinInclude = JavaHome / "include" / "osx"; // TODO - gnArgs["extra_cflags"] = $"[ '-I{alphaSkiaInclude}', '-I{jniInclude}', '-I{jniWinInclude}' ]"; - - // Add Libs and lib search paths - var staticLibPath = DistBasePath / $"libAlphaSkia-osx-{arch}-static"; - gnArgs["extra_ldflags"] = - $"[ '-L{staticLibPath}', '-lAlphaSkia', '-lskia' ]"; - - BuildSkiaOsx("libAlphaSkiaJni", arch, variant, gnArgs, new[] { "libAlphaSkiaJni.so" }); - } - - void BuildSkiaOsx(string buildTarget, Architecture arch, Variant variant, Dictionary gnArgs, - string[] filesToCopy) - { - SetClangOsx(arch, gnArgs); - - gnArgs["skia_use_system_freetype2"] = "false"; - - BuildSkia(buildTarget, "mac", arch, variant, gnArgs, filesToCopy); - } - - void SetClangOsx(Architecture arch, Dictionary gnArgs) - { - AppendToFlagList(gnArgs, "extra_cflags", "'-DHAVE_SYSCALL_GETRANDOM', '-DXML_DEV_URANDOM'"); - - if (arch == Architecture.X64) - { - gnArgs["cc"] = "clang"; - gnArgs["cxx"] = "'clang++'"; - AppendToFlagList(gnArgs, "extra_ldflags", "'-static-libstdc++', '-static-libgcc'"); - } - else if (arch == Architecture.X86) - { - // TODO - gnArgs["cc"] = "clang"; - gnArgs["cxx"] = "'clang++'"; - AppendToFlagList(gnArgs, "extra_ldflags", "'-static-libstdc++', '-static-libgcc'"); - } - else if (arch == Architecture.Arm64) // aka AArch64 - { - // TODO - gnArgs["cc"] = "clang"; - gnArgs["cxx"] = "'clang++'"; - AppendToFlagList(gnArgs, "extra_ldflags", "'-static-libstdc++', '-static-libgcc'"); - } - - // gnArgs["ar"] = "llvm-ar"; - } -} \ No newline at end of file diff --git a/lib/dotnet/AlphaSkia.Native.MacOs/AlphaSkia.Native.MacOs.csproj b/lib/dotnet/AlphaSkia.Native.MacOs/AlphaSkia.Native.MacOs.csproj new file mode 100644 index 0000000..f4b3528 --- /dev/null +++ b/lib/dotnet/AlphaSkia.Native.MacOs/AlphaSkia.Native.MacOs.csproj @@ -0,0 +1,15 @@ + + + true + false + netstandard2.0 + README.md + $(NoWarn);NU5128 + + + + + + + + diff --git a/lib/dotnet/AlphaSkia.Native.MacOs/Marker.cs b/lib/dotnet/AlphaSkia.Native.MacOs/Marker.cs new file mode 100644 index 0000000..ad3c170 --- /dev/null +++ b/lib/dotnet/AlphaSkia.Native.MacOs/Marker.cs @@ -0,0 +1,6 @@ +namespace AlphaSkia.Native.Linux +{ + internal class Marker + { + } +} \ No newline at end of file diff --git a/lib/dotnet/AlphaSkia.Native.MacOs/README.md b/lib/dotnet/AlphaSkia.Native.MacOs/README.md new file mode 100644 index 0000000..a3b4da2 --- /dev/null +++ b/lib/dotnet/AlphaSkia.Native.MacOs/README.md @@ -0,0 +1,3 @@ +# AlphaSkia Linux Runtime Dependencies + +This package contains the AlphaSkia runtime dependencies for Linux \ No newline at end of file diff --git a/lib/dotnet/AlphaSkia.Test/AlphaSkia.Test.csproj b/lib/dotnet/AlphaSkia.Test/AlphaSkia.Test.csproj index 4530cbf..7217817 100644 --- a/lib/dotnet/AlphaSkia.Test/AlphaSkia.Test.csproj +++ b/lib/dotnet/AlphaSkia.Test/AlphaSkia.Test.csproj @@ -42,5 +42,14 @@ + + + + + diff --git a/lib/dotnet/AlphaSkia.sln b/lib/dotnet/AlphaSkia.sln index 15bd3c2..903164b 100644 --- a/lib/dotnet/AlphaSkia.sln +++ b/lib/dotnet/AlphaSkia.sln @@ -12,6 +12,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaSkia.Test", "AlphaSkia EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaSkia.Native.Android", "AlphaSkia.Native.Android\AlphaSkia.Native.Android.csproj", "{0500984B-5733-499A-850F-3CD964B9BE5A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlphaSkia.Native.MacOs", "AlphaSkia.Native.MacOs\AlphaSkia.Native.MacOs.csproj", "{6727C66F-7AD0-4E81-BDDE-E9422B0601A5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -38,6 +40,10 @@ Global {0500984B-5733-499A-850F-3CD964B9BE5A}.Debug|Any CPU.Build.0 = Debug|Any CPU {0500984B-5733-499A-850F-3CD964B9BE5A}.Release|Any CPU.ActiveCfg = Release|Any CPU {0500984B-5733-499A-850F-3CD964B9BE5A}.Release|Any CPU.Build.0 = Release|Any CPU + {6727C66F-7AD0-4E81-BDDE-E9422B0601A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {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 EndGlobalSection GlobalSection(NestedProjects) = preSolution {3693A53C-386E-4DBC-9B5E-9C3B7723FBE0} = {20757D78-DE4E-450B-97CC-24F926593193} diff --git a/lib/dotnet/AlphaSkia/AlphaSkiaPlatform.cs b/lib/dotnet/AlphaSkia/AlphaSkiaPlatform.cs index 00f28b1..bfb77a8 100644 --- a/lib/dotnet/AlphaSkia/AlphaSkiaPlatform.cs +++ b/lib/dotnet/AlphaSkia/AlphaSkiaPlatform.cs @@ -64,7 +64,7 @@ private static string BuildKnownRid(out string libExtension) { PlatformID.Unix => ".so", PlatformID.Win32NT => ".dll", - PlatformID.MacOSX => ".dylib", + PlatformID.MacOSX => ".so", //TODO .dylib? _ => "" }; @@ -72,7 +72,7 @@ private static string BuildKnownRid(out string libExtension) { PlatformID.Unix => "linux", PlatformID.Win32NT => "win", - PlatformID.MacOSX => "osx", + PlatformID.MacOSX => "macos", _ => officialOs }; if (string.IsNullOrEmpty(os)) diff --git a/lib/java/.idea/gradle.xml b/lib/java/.idea/gradle.xml index 0ccee45..5bd1ce6 100644 --- a/lib/java/.idea/gradle.xml +++ b/lib/java/.idea/gradle.xml @@ -11,6 +11,7 @@