Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion .github/actions/build-jni/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,22 @@ runs:
- uses: actions/download-artifact@v3
with:
path: dist
- run: ./build.cmd LibAlphaSkiaJni --target-os ${{ inputs.target-os }} --architecture ${{ inputs.architecture }} --variant ${{ inputs.variant }}
name: alphaskia-${{ inputs.target-os }}-${{ inputs.architecture }}-static

- id: build-info
run: |
if [ ${{ runner.os }} != 'Windows' ]; then
echo "script=./build.sh" >> "$GITHUB_OUTPUT"
echo "shell=bash" >> "$GITHUB_OUTPUT"
else
echo "script=./build.cmd" >> "$GITHUB_OUTPUT"
echo "shell=pwsh" >> "$GITHUB_OUTPUT"
fi
shell: bash

- run: ${{ steps.build-info.outputs.script }} LibAlphaSkiaJni --target-os ${{ inputs.target-os }} --architecture ${{ inputs.architecture }} --variant ${{ inputs.variant }}
shell: ${{ steps.build-info.outputs.shell }}

- uses: actions/upload-artifact@v3
with:
name: alphaskia-${{ inputs.target-os }}-jni-${{ inputs.architecture }}-${{ inputs.variant }}
Expand Down
22 changes: 16 additions & 6 deletions .github/actions/build-skia/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,28 @@ inputs:

runs:
using: "composite"
steps:
- uses: actions/checkout@v3
with:
submodules: false

steps:
- uses: actions/cache/restore@v3
if: ${{ inputs.use-cache }}
with:
path: dist
key: alphaskia-${{ inputs.target-os }}-${{ inputs.architecture }}-${{ inputs.variant }}-${{ github.run_id }}
restore-keys: alphaskia-${{ inputs.target-os }}-${{ inputs.architecture }}-${{ inputs.variant }}

- run: ./build.cmd LibAlphaSkia --target-os ${{ inputs.target-os }} --architecture ${{ inputs.architecture }} --variant ${{ inputs.variant }} --use-cache ${{ inputs.use-cache }}
- id: build-info
run: |
if [ ${{ runner.os }} != 'Windows' ]; then
echo "script=./build.sh" >> "$GITHUB_OUTPUT"
echo "shell=bash" >> "$GITHUB_OUTPUT"
else
echo "script=./build.cmd" >> "$GITHUB_OUTPUT"
echo "shell=pwsh" >> "$GITHUB_OUTPUT"
fi
shell: bash

- run: ${{ steps.build-info.outputs.script }} LibAlphaSkiaWithCache --target-os ${{ inputs.target-os }} --architecture ${{ inputs.architecture }} --variant ${{ inputs.variant }} --use-cache ${{ inputs.use-cache }}
shell: ${{ steps.build-info.outputs.shell }}

- uses: actions/upload-artifact@v3
with:
name: alphaskia-${{ inputs.target-os }}-${{ inputs.architecture }}-${{ inputs.variant }}
Expand Down
12 changes: 8 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ jobs:
architecture: [x64, x86, arm64]
variant: ['shared', 'static']
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/build-skia
with:
use-cache: ${{ inputs.use-skia-cache }}
Expand All @@ -33,6 +34,7 @@ jobs:
architecture: [x64, x86, arm64]
variant: ['shared']
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/build-jni
with:
architecture: ${{ matrix.architecture }}
Expand All @@ -50,6 +52,7 @@ jobs:
# TODO architecture: [x64, x86, arm64]
variant: ['shared', 'static']
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/build-skia
with:
use-cache: ${{ inputs.use-skia-cache }}
Expand All @@ -66,6 +69,7 @@ jobs:
architecture: [x64]
variant: ['shared']
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/build-jni
with:
architecture: ${{ matrix.architecture }}
Expand All @@ -82,6 +86,7 @@ jobs:
architecture: [x64, x86, arm, arm64]
variant: ['shared', 'static']
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/build-skia
with:
use-cache: ${{ inputs.use-skia-cache }}
Expand All @@ -97,6 +102,7 @@ jobs:
architecture: [x64, x86, arm, arm64]
variant: ['shared']
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/build-jni
with:
architecture: ${{ matrix.architecture }}
Expand All @@ -112,6 +118,7 @@ jobs:
architecture: [x64, arm64]
variant: ['shared', 'static']
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/build-skia
with:
use-cache: ${{ inputs.use-skia-cache }}
Expand All @@ -127,6 +134,7 @@ jobs:
architecture: [x64, arm64]
variant: ['shared']
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/build-jni
with:
architecture: ${{ matrix.architecture }}
Expand All @@ -139,8 +147,6 @@ jobs:
needs: [windows, linux, android, macos]
steps:
- uses: actions/checkout@v3
with:
submodules: false
- uses: actions/download-artifact@v3
with:
path: dist
Expand All @@ -157,8 +163,6 @@ jobs:
needs: [windows-jni, linux-jni, android-jni, macos-jni]
steps:
- uses: actions/checkout@v3
with:
submodules: false
- uses: actions/download-artifact@v3
with:
path: dist
Expand Down
53 changes: 21 additions & 32 deletions .nuke/build.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -106,29 +106,19 @@
"items": {
"type": "string",
"enum": [
"AndroidJni",
"AndroidSkia",
"Compile",
"CompileTests",
"CompileWithCache",
"DotNet",
"DotNetBuild",
"DotNetPack",
"DotNetTest",
"GitSyncDepsJni",
"GitSyncDepsSkia",
"GitSyncDepsLibAlphaSkia",
"GitSyncDepsLibAlphaSkiaJni",
"Java",
"LinuxJni",
"LinuxSkia",
"MacOsJni",
"MacOsSkia",
"LibAlphaSkia",
"LibAlphaSkiaJni",
"LibAlphaSkiaWithCache",
"PatchSkiaBuildFiles",
"PrepareForBuild",
"PrepareGitHubArtifacts",
"SetupDepotTools",
"WindowsJni",
"WindowsSkia",
"WithDependencies"
"SetupDepotTools"
]
}
},
Expand All @@ -138,32 +128,31 @@
"items": {
"type": "string",
"enum": [
"AndroidJni",
"AndroidSkia",
"Compile",
"CompileTests",
"CompileWithCache",
"DotNet",
"DotNetBuild",
"DotNetPack",
"DotNetTest",
"GitSyncDepsJni",
"GitSyncDepsSkia",
"GitSyncDepsLibAlphaSkia",
"GitSyncDepsLibAlphaSkiaJni",
"Java",
"LinuxJni",
"LinuxSkia",
"MacOsJni",
"MacOsSkia",
"LibAlphaSkia",
"LibAlphaSkiaJni",
"LibAlphaSkiaWithCache",
"PatchSkiaBuildFiles",
"PrepareForBuild",
"PrepareGitHubArtifacts",
"SetupDepotTools",
"WindowsJni",
"WindowsSkia",
"WithDependencies"
"SetupDepotTools"
]
}
},
"TargetOs": {
"type": "string",
"enum": [
"Android",
"Linux",
"MacOs",
"Windows"
]
},
"use-cache": {
"type": "string"
},
Expand Down
2 changes: 1 addition & 1 deletion build/Build.Android.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void BuildLibAlphaSkiaJniAndroid()
gnArgs["extra_cflags"] = $"[ '-I{alphaSkiaInclude}', '-I{jniInclude}', '-I{jniWinInclude}' ]";

// Add Libs and lib search paths
var staticLibPath = DistBasePath / GetLibDirectory(variant: Variant.Shared);
var staticLibPath = DistBasePath / GetLibDirectory(variant: Variant.Static);
gnArgs["extra_ldflags"] = $"[ '-L{staticLibPath}', '-lAlphaSkia', '-lskia' ]";

BuildSkiaAndroid("libAlphaSkiaJni", gnArgs, new[] { "libAlphaSkiaJni.so" });
Expand Down
2 changes: 1 addition & 1 deletion build/Build.Linux.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ void BuildLibAlphaSkiaJniLinux()
gnArgs["extra_cflags"] = $"[ '-I{alphaSkiaInclude}', '-I{jniInclude}', '-I{jniWinInclude}' ]";

// Add Libs and lib search paths
var staticLibPath = DistBasePath / GetLibDirectory(variant: Variant.Shared);
var staticLibPath = DistBasePath / GetLibDirectory(variant: Variant.Static);
gnArgs["extra_ldflags"] =
$"[ '-L{staticLibPath}', '-lAlphaSkia', '-lskia' ]";

Expand Down
50 changes: 40 additions & 10 deletions build/Build.Native.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,17 @@
[TypeConverter(typeof(TypeConverter<TargetOperatingSystem>))]
public class TargetOperatingSystem : Enumeration
{
public static TargetOperatingSystem Windows = new() { Value = "windows", SkiaTargetOs = "win", RuntimeIdentifier = "win" };
public static TargetOperatingSystem Linux = new() { Value = "linux", SkiaTargetOs = "linux", RuntimeIdentifier = "linux" };
public static TargetOperatingSystem Android = new() { Value = "android", SkiaTargetOs = "android", RuntimeIdentifier = "android" };
public static TargetOperatingSystem MacOs = new() { Value = "macos", SkiaTargetOs = "mac", RuntimeIdentifier = "macos" };
public static TargetOperatingSystem Windows = new()
{ Value = "windows", SkiaTargetOs = "win", RuntimeIdentifier = "win" };

public static TargetOperatingSystem Linux = new()
{ Value = "linux", SkiaTargetOs = "linux", RuntimeIdentifier = "linux" };

public static TargetOperatingSystem Android = new()
{ Value = "android", SkiaTargetOs = "android", RuntimeIdentifier = "android" };

public static TargetOperatingSystem MacOs = new()
{ Value = "macos", SkiaTargetOs = "mac", RuntimeIdentifier = "macos" };

public string SkiaTargetOs { get; private set; }
public string RuntimeIdentifier { get; private set; }
Expand Down Expand Up @@ -75,8 +82,11 @@ partial class Build

bool UseCache => "true".Equals(UseCacheParam, StringComparison.OrdinalIgnoreCase);

public Target GitSyncDepsAlphaSkia => _ => _
bool SkipLibAlphaSkia => CanUseCachedBinaries("libAlphaSkia", TargetOs.RuntimeIdentifier);

public Target GitSyncDepsLibAlphaSkia => _ => _
.Unlisted()
.OnlyWhenStatic(() => !SkipLibAlphaSkia)
.DependsOn(SetupDepotTools)
.Executes(() =>
{
Expand Down Expand Up @@ -117,14 +127,32 @@ partial class Build

public Target LibAlphaSkiaWithCache => _ => _
.Unlisted()
.OnlyWhenStatic(() => !CanUseCachedBinaries("libAlphaSkia", TargetOs.RuntimeIdentifier))
.Requires(() => Architecture)
.Requires(() => Variant)
.Requires(() => TargetOs)
.Before(SetupDepotTools) // ensure it runs before any oher targets
.Executes(() =>
{
if (SkipLibAlphaSkia)
{
FileSystemTasks.CopyDirectoryRecursively(DistBasePath, ArtifactBasePath, DirectoryExistsPolicy.Merge,
FileExistsPolicy.OverwriteIfNewer);
}
else
{
GitTool("submodule update --init --recursive");
if (OperatingSystem.IsLinux())
{
var dependenciesScript = SkiaPath / "tools" / "install_dependencies.sh";
ToolResolver.GetPathTool("bash")($"{dependenciesScript}", workingDirectory: SkiaPath);
}
}
})
.Triggers(LibAlphaSkia);

public Target LibAlphaSkia => _ => _
.DependsOn(GitSyncDepsAlphaSkia, PatchSkiaBuildFiles)
.DependsOn(GitSyncDepsLibAlphaSkia, PatchSkiaBuildFiles)
.OnlyWhenStatic(() => !SkipLibAlphaSkia)
.Requires(() => Architecture)
.Requires(() => Variant)
.Requires(() => TargetOs)
Expand All @@ -147,7 +175,7 @@ partial class Build
BuildLibAlphaSkiaMacOs();
}
});

public Target LibAlphaSkiaJni => _ => _
.DependsOn(PrepareGitHubArtifacts, GitSyncDepsLibAlphaSkiaJni, PatchSkiaBuildFiles)
.Requires(() => Architecture)
Expand All @@ -172,7 +200,7 @@ partial class Build
BuildLibAlphaSkiaJniMacOs();
}
});

string GetLibDirectory(string libName = "libAlphaSkia", TargetOperatingSystem targetOs = null,
Architecture arch = null, Variant variant = null)
{
Expand Down Expand Up @@ -316,6 +344,7 @@ Dictionary<string, string> ReadDepsData(TextReader reader)

public Target SetupDepotTools => _ => _
.Unlisted()
.OnlyWhenStatic(() => !SkipLibAlphaSkia)
.Executes(() =>
{
var oldValue = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Process);
Expand All @@ -335,6 +364,7 @@ Dictionary<string, string> ReadDepsData(TextReader reader)

public Target PatchSkiaBuildFiles => _ => _
.Unlisted()
.OnlyWhenStatic(() => !SkipLibAlphaSkia)
.Executes(() =>
{
var buildConfigNew = new StringBuilder();
Expand Down Expand Up @@ -522,7 +552,7 @@ void BuildSkia(
{
SetClangMacOs(gnArgs);
}

var isShared = Variant == Variant.Shared;
var libDir = GetLibDirectory(buildTarget, TargetOs, Architecture, Variant);
var distPath = DistBasePath / libDir;
Expand Down
5 changes: 0 additions & 5 deletions build/Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,19 +77,14 @@ bool CanUseCachedBinaries(string buildTarget, string targetOsDir)
{
if (!UseCache)
{
Log.Debug("Cache use is disabled.");
return false;
}

if (!HasCachedFiles(buildTarget, targetOsDir))
{
Log.Information("Did not find cached binaries.");
return false;
}

Log.Information("Can use cached binaries, copying them to artifact output");
FileSystemTasks.CopyDirectoryRecursively(DistBasePath, ArtifactBasePath, DirectoryExistsPolicy.Merge, FileExistsPolicy.OverwriteIfNewer);

return true;
}
}