Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Title>$(PackagingGroup) - Native Assets for Mac Catalyst</Title>
</PropertyGroup>
<ItemGroup>
<PackageFile Include="..\..\output\native\maccatalyst\libHarfBuzzSharp*.framework.zip" PackagePath="runtimes\maccatalyst\native\%(Filename)%(Extension)" />
<PackageFile Include="..\..\output\native\maccatalyst\libHarfBuzzSharp.xcframework.zip*" PackagePath="runtimes\maccatalyst\native\%(Filename)%(Extension)" />
</ItemGroup>
<Target Name="IncludeAdditionalTfmSpecificPackageFiles">
<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
<Title>$(PackagingGroup) - Native Assets for iOS</Title>
</PropertyGroup>
<ItemGroup>
<PackageFile Include="..\..\output\native\ios\libHarfBuzzSharp.framework\**" PackagePath="runtimes\ios\native\libHarfBuzzSharp.framework" />
<PackageFile Include="..\..\output\native\iossimulator\libHarfBuzzSharp.framework\**" PackagePath="runtimes\iossimulator\native\libHarfBuzzSharp.framework" />
<PackageFile Include="..\..\output\native\ios\libHarfBuzzSharp.xcframework.zip*" PackagePath="runtimes\ios\native\%(Filename)%(Extension)" />
</ItemGroup>
<Target Name="IncludeAdditionalTfmSpecificPackageFiles">
<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Title>$(PackagingGroup) - Native Assets for tvOS</Title>
</PropertyGroup>
<ItemGroup>
<PackageFile Include="..\..\output\native\tvos\libHarfBuzzSharp.framework\**" PackagePath="runtimes\tvos\native\libHarfBuzzSharp.framework" />
<PackageFile Include="..\..\output\native\tvos\libHarfBuzzSharp.xcframework.zip*" PackagePath="runtimes\tvos\native\%(Filename)%(Extension)" />
</ItemGroup>
<Target Name="IncludeAdditionalTfmSpecificPackageFiles">
<ItemGroup>
Expand Down
9 changes: 4 additions & 5 deletions binding/IncludeNativeAssets.HarfBuzzSharp.targets
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,8 @@
<Content Include="$(MSBuildThisFileDirectory)..\output\native\windows\$(BuildArch)\libHarfBuzzSharp.*" Condition="'$(RuntimeIdentifier)' == ''" Visible="False" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.Contains('-ios')) and '$(RuntimeIdentifier)' != ''">
<NativeReference Include="$(MSBuildThisFileDirectory)..\output\native\iossimulator\libHarfBuzzSharp.framework" Kind="Framework" Condition="$(RuntimeIdentifier.StartsWith('iossimulator'))" />
<NativeReference Include="$(MSBuildThisFileDirectory)..\output\native\ios\libHarfBuzzSharp.framework" Kind="Framework" Condition="!$(RuntimeIdentifier.StartsWith('iossimulator'))" />
<ItemGroup Condition="$(TargetFramework.Contains('-ios'))">
<ResolvedFileToPublish Include="$(MSBuildThisFileDirectory)..\output\native\ios\libHarfBuzzSharp.xcframework.zip" PublishFolderType="CompressedAppleFramework" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.Contains('-android'))">
Expand All @@ -38,7 +37,7 @@
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.Contains('-maccatalyst'))">
<ResolvedFileToPublish Include="$(MSBuildThisFileDirectory)..\output\native\maccatalyst\libHarfBuzzSharp.framework.zip" PublishFolderType="CompressedAppleFramework" />
<ResolvedFileToPublish Include="$(MSBuildThisFileDirectory)..\output\native\maccatalyst\libHarfBuzzSharp.xcframework.zip" PublishFolderType="CompressedAppleFramework" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.Contains('-macos'))">
Expand All @@ -59,7 +58,7 @@
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.Contains('-tvos'))">
<NativeReference Include="$(MSBuildThisFileDirectory)..\output\native\tvos\libHarfBuzzSharp.framework" Kind="Framework" />
<ResolvedFileToPublish Include="$(MSBuildThisFileDirectory)..\output\native\tvos\libHarfBuzzSharp.xcframework.zip" PublishFolderType="CompressedAppleFramework" />
</ItemGroup>

<ItemGroup Condition="'$(IsUnoHead)' == 'True' and '$(UnoRuntimeIdentifier)' == 'WebAssembly'">
Expand Down
9 changes: 4 additions & 5 deletions binding/IncludeNativeAssets.SkiaSharp.targets
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,8 @@
<Content Include="$(MSBuildThisFileDirectory)..\output\native\windows\$(BuildArch)\libSkiaSharp.*" Condition="'$(RuntimeIdentifier)' == ''" Visible="False" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.Contains('-ios')) and '$(RuntimeIdentifier)' != ''">
<NativeReference Include="$(MSBuildThisFileDirectory)..\output\native\iossimulator\libSkiaSharp.framework" Kind="Framework" Condition="$(RuntimeIdentifier.StartsWith('iossimulator'))" />
<NativeReference Include="$(MSBuildThisFileDirectory)..\output\native\ios\libSkiaSharp.framework" Kind="Framework" Condition="!$(RuntimeIdentifier.StartsWith('iossimulator'))" />
<ItemGroup Condition="$(TargetFramework.Contains('-ios'))">
<ResolvedFileToPublish Include="$(MSBuildThisFileDirectory)..\output\native\ios\libSkiaSharp.xcframework.zip" PublishFolderType="CompressedAppleFramework" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.Contains('-android'))">
Expand All @@ -38,7 +37,7 @@
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.Contains('-maccatalyst'))">
<ResolvedFileToPublish Include="$(MSBuildThisFileDirectory)..\output\native\maccatalyst\libSkiaSharp.framework.zip" PublishFolderType="CompressedAppleFramework" />
<ResolvedFileToPublish Include="$(MSBuildThisFileDirectory)..\output\native\maccatalyst\libSkiaSharp.xcframework.zip" PublishFolderType="CompressedAppleFramework" />
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.Contains('-macos'))">
Expand All @@ -59,7 +58,7 @@
</ItemGroup>

<ItemGroup Condition="$(TargetFramework.Contains('-tvos'))">
<NativeReference Include="$(MSBuildThisFileDirectory)..\output\native\tvos\libSkiaSharp.framework" Kind="Framework" />
<ResolvedFileToPublish Include="$(MSBuildThisFileDirectory)..\output\native\tvos\libSkiaSharp.xcframework.zip" PublishFolderType="CompressedAppleFramework" />
</ItemGroup>

<ItemGroup Condition="'$(IsUnoHead)' == 'True' and '$(UnoRuntimeIdentifier)' == 'WebAssembly'">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Title>$(PackagingGroup) - Native Assets for Mac Catalyst</Title>
</PropertyGroup>
<ItemGroup>
<PackageFile Include="..\..\output\native\maccatalyst\libSkiaSharp*.framework.zip" PackagePath="runtimes\maccatalyst\native\%(Filename)%(Extension)" />
<PackageFile Include="..\..\output\native\maccatalyst\libSkiaSharp.xcframework.zip*" PackagePath="runtimes\maccatalyst\native\%(Filename)%(Extension)" />
</ItemGroup>
<Target Name="IncludeAdditionalTfmSpecificPackageFiles">
<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
<Title>$(PackagingGroup) - Native Assets for iOS</Title>
</PropertyGroup>
<ItemGroup>
<PackageFile Include="..\..\output\native\ios\libSkiaSharp.framework\**" PackagePath="runtimes\ios\native\libSkiaSharp.framework" />
<PackageFile Include="..\..\output\native\iossimulator\libSkiaSharp.framework\**" PackagePath="runtimes\iossimulator\native\libSkiaSharp.framework" />
<PackageFile Include="..\..\output\native\ios\libSkiaSharp.xcframework.zip*" PackagePath="runtimes\ios\native\%(Filename)%(Extension)" />
</ItemGroup>
<Target Name="IncludeAdditionalTfmSpecificPackageFiles">
<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Title>$(PackagingGroup) - Native Assets for tvOS</Title>
</PropertyGroup>
<ItemGroup>
<PackageFile Include="..\..\output\native\tvos\libSkiaSharp.framework\**" PackagePath="runtimes\tvos\native\libSkiaSharp.framework" />
<PackageFile Include="..\..\output\native\tvos\libSkiaSharp.xcframework.zip*" PackagePath="runtimes\tvos\native\%(Filename)%(Extension)" />
</ItemGroup>
<Target Name="IncludeAdditionalTfmSpecificPackageFiles">
<ItemGroup>
Expand Down
110 changes: 43 additions & 67 deletions native/ios/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -6,53 +6,46 @@ DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native"));

string VARIANT = (BUILD_VARIANT ?? "ios").ToLower();

string GetDeploymentTarget(string arch)
{
switch (VARIANT) {
case "maccatalyst": return "13.1";
default: return "11.0";
}
}
string GetDeploymentTarget() =>
VARIANT switch
{
"maccatalyst" => "13.1",
_ => "11.0",
};

string GetDestination(string sdk) =>
VARIANT switch
{
"ios" => sdk.EndsWith("simulator") ? "generic/platform=iOS Simulator" : "generic/platform=iOS",
"maccatalyst" => "generic/platform=macOS,variant=Mac Catalyst",
_ => throw new InvalidOperationException($"Unknown variant: {VARIANT}"),
};

Task("libSkiaSharp")
.IsDependentOn("git-sync-deps")
.WithCriteria(IsRunningOnMacOs())
.Does(() =>
{
if (VARIANT == "ios") {
Build("iphonesimulator", "x86_64", "x64");
Build("iphonesimulator", "arm64", "arm64");
Build("iphoneos", "arm64", "arm64");
// Build("iphoneos", "arm64", "arm64", "arm64e");

SafeCopy(
$"libSkiaSharp/bin/{CONFIGURATION}/iphonesimulator/x86_64.xcarchive",
OUTPUT_PATH.Combine($"ios/libSkiaSharp/x86_64.xcarchive"));

CreateFatFramework(OUTPUT_PATH.Combine("ios/libSkiaSharp"));
CreateFatFramework(OUTPUT_PATH.Combine("iossimulator/libSkiaSharp"));
BuildSkia("iphonesimulator", "x86_64", "x64");
BuildSkia("iphonesimulator", "arm64", "arm64");
Build("iphonesimulator");
BuildSkia("iphoneos", "arm64", "arm64");
Build("iphoneos");
} else if (VARIANT == "maccatalyst") {
Build("macosx", "x86_64", "x64");
Build("macosx", "arm64", "arm64");

CreateFatVersionedFramework(OUTPUT_PATH.Combine("maccatalyst/libSkiaSharp"));
BuildSkia("macosx", "x86_64", "x64");
BuildSkia("macosx", "arm64", "arm64");
Build("macosx");
}
CreateXCFramework(OUTPUT_PATH.Combine($"{VARIANT}/libSkiaSharp"));

void Build(string sdk, string arch, string skiaArch, string xcodeArch = null)
void BuildSkia(string sdk, string xcodeArch, string skiaArch)
{
if (Skip(arch)) return;

xcodeArch = xcodeArch ?? arch;
var isSim = sdk.EndsWith("simulator");
var platform = VARIANT;
if (VARIANT == "ios" && isSim)
platform += "simulator";

GnNinja($"{platform}/{xcodeArch}", "skia modules/skottie",
GnNinja($"{sdk}/{xcodeArch}", "skia modules/skottie",
$"target_cpu='{skiaArch}' " +
$"target_os='{VARIANT}' " +
$"min_{VARIANT}_version='{GetDeploymentTarget(arch)}' " +
$"ios_use_simulator={(isSim ? "true" : "false")} " +
$"min_{VARIANT}_version='{GetDeploymentTarget()}' " +
$"ios_use_simulator={(sdk.EndsWith("simulator") ? "true" : "false")} " +
$"skia_use_harfbuzz=false " +
$"skia_use_icu=false " +
$"skia_use_metal=true " +
Expand All @@ -66,15 +59,17 @@ Task("libSkiaSharp")
$"skia_enable_skottie=true " +
$"extra_cflags=[ '-DSKIA_C_DLL', '-DHAVE_ARC4RANDOM_BUF' ] " +
ADDITIONAL_GN_ARGS);
}

RunXCodeBuild("libSkiaSharp/libSkiaSharp.xcodeproj", "libSkiaSharp", sdk, xcodeArch, properties: new Dictionary<string, string> {
{ $"{VARIANT.ToUpper()}_DEPLOYMENT_TARGET_VERSION", GetDeploymentTarget(arch) },
{ $"SKIA_PLATFORM", platform },
void Build(string sdk)
{
RunXCodeBuild("libSkiaSharp/libSkiaSharp.xcodeproj", "libSkiaSharp", sdk, GetDestination(sdk), properties: new Dictionary<string, string> {
{ $"{VARIANT.ToUpper()}_DEPLOYMENT_TARGET_VERSION", GetDeploymentTarget() },
});

SafeCopy(
$"libSkiaSharp/bin/{CONFIGURATION}/{sdk}/{xcodeArch}.xcarchive",
OUTPUT_PATH.Combine($"{platform}/libSkiaSharp/{xcodeArch}.xcarchive"));
$"libSkiaSharp/bin/{CONFIGURATION}/{sdk}.xcarchive",
OUTPUT_PATH.Combine($"{VARIANT}/libSkiaSharp/{sdk}.xcarchive"));
}
});

Expand All @@ -83,41 +78,22 @@ Task("libHarfBuzzSharp")
.Does(() =>
{
if (VARIANT == "ios") {
Build("iphonesimulator", "x86_64");
Build("iphonesimulator", "arm64");
Build("iphoneos", "arm64");
// Build("iphoneos", "arm64e");

SafeCopy(
$"libHarfBuzzSharp/bin/{CONFIGURATION}/iphonesimulator/x86_64.xcarchive",
OUTPUT_PATH.Combine($"ios/libHarfBuzzSharp/x86_64.xcarchive"));

CreateFatFramework(OUTPUT_PATH.Combine("ios/libHarfBuzzSharp"));
CreateFatFramework(OUTPUT_PATH.Combine("iossimulator/libHarfBuzzSharp"));
Build("iphonesimulator");
Build("iphoneos");
} else if (VARIANT == "maccatalyst") {
Build("macosx", "x86_64");
Build("macosx", "arm64");

CreateFatVersionedFramework(OUTPUT_PATH.Combine("maccatalyst/libHarfBuzzSharp"));
Build("macosx");
}
CreateXCFramework(OUTPUT_PATH.Combine($"{VARIANT}/libHarfBuzzSharp"));

void Build(string sdk, string arch, string xcodeArch = null)
void Build(string sdk)
{
if (Skip(arch)) return;

xcodeArch = xcodeArch ?? arch;
var isSim = sdk.EndsWith("simulator");
var platform = VARIANT;
if (VARIANT == "ios" && isSim)
platform += "simulator";

RunXCodeBuild("libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj", "libHarfBuzzSharp", sdk, xcodeArch, properties: new Dictionary<string, string> {
{ $"{VARIANT.ToUpper()}_DEPLOYMENT_TARGET_VERSION", GetDeploymentTarget(arch) },
RunXCodeBuild("libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj", "libHarfBuzzSharp", sdk, GetDestination(sdk), properties: new Dictionary<string, string> {
{ $"{VARIANT.ToUpper()}_DEPLOYMENT_TARGET_VERSION", GetDeploymentTarget() },
});

SafeCopy(
$"libHarfBuzzSharp/bin/{CONFIGURATION}/{sdk}/{xcodeArch}.xcarchive",
OUTPUT_PATH.Combine($"{platform}/libHarfBuzzSharp/{xcodeArch}.xcarchive"));
$"libHarfBuzzSharp/bin/{CONFIGURATION}/{sdk}.xcarchive",
OUTPUT_PATH.Combine($"{VARIANT}/libHarfBuzzSharp/{sdk}.xcarchive"));
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,6 @@
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "-all_load";
SDKROOT = iphoneos;
SKIA_PLATFORM = ios;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
Expand Down Expand Up @@ -408,7 +407,6 @@
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_LDFLAGS = "-all_load";
SDKROOT = iphoneos;
SKIA_PLATFORM = ios;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
Expand All @@ -431,7 +429,7 @@
IPHONEOS_DEPLOYMENT_TARGET = "$(IOS_DEPLOYMENT_TARGET_VERSION)";
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = "$(MACCATALYST_DEPLOYMENT_TARGET_VERSION)";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/$(SKIA_PLATFORM)/$(ARCHS)";
LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/$(PLATFORM_NAME)/$(CURRENT_ARCH)";
OTHER_LDFLAGS = (
"-all_load",
"-lskia",
Expand Down Expand Up @@ -462,7 +460,7 @@
IPHONEOS_DEPLOYMENT_TARGET = "$(IOS_DEPLOYMENT_TARGET_VERSION)";
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = "$(MACCATALYST_DEPLOYMENT_TARGET_VERSION)";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/$(SKIA_PLATFORM)/$(ARCHS)";
LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/$(PLATFORM_NAME)/$(CURRENT_ARCH)";
OTHER_LDFLAGS = (
"-all_load",
"-lskia",
Expand Down
51 changes: 24 additions & 27 deletions native/macos/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,29 @@ DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native/osx"))
#load "../../scripts/cake/native-shared.cake"
#load "../../scripts/cake/xcode.cake"

string GetDeploymentTarget(string arch)
{
switch (arch.ToLower()) {
case "arm64": return "11.0";
default: return "10.13";
}
}
string GetDeploymentTarget() =>
"10.13";

string GetDestination(string sdk) =>
"generic/platform=macOS";

Task("libSkiaSharp")
.IsDependentOn("git-sync-deps")
.WithCriteria(IsRunningOnMacOs())
.Does(() =>
{
Build("x86_64", "x64");
Build("arm64", "arm64");
BuildSkia("macosx", "x86_64", "x64");
BuildSkia("macosx", "arm64", "arm64");
Build("macosx");

CreateFatDylib(OUTPUT_PATH.Combine("libSkiaSharp"));

void Build(string arch, string skiaArch)
void BuildSkia(string sdk, string xcodeArch, string skiaArch)
{
if (Skip(arch)) return;

GnNinja($"macos/{arch}", "skia modules/skottie",
GnNinja($"{sdk}/{xcodeArch}", "skia modules/skottie",
$"target_os='mac' " +
$"target_cpu='{skiaArch}' " +
$"min_macos_version='{GetDeploymentTarget(arch)}' " +
$"min_macos_version='{GetDeploymentTarget()}' " +
$"skia_use_harfbuzz=false " +
$"skia_use_icu=false " +
$"skia_use_metal=true " +
Expand All @@ -43,37 +40,37 @@ Task("libSkiaSharp")
$"skia_enable_skottie=true " +
$"extra_cflags=[ '-DSKIA_C_DLL', '-DHAVE_ARC4RANDOM_BUF', '-stdlib=libc++' ] " +
$"extra_ldflags=[ '-stdlib=libc++' ]");
}

RunXCodeBuild("libSkiaSharp/libSkiaSharp.xcodeproj", "libSkiaSharp", "macosx", arch, properties: new Dictionary<string, string> {
{ "MACOSX_DEPLOYMENT_TARGET", GetDeploymentTarget(arch) },
void Build(string sdk)
{
RunXCodeBuild("libSkiaSharp/libSkiaSharp.xcodeproj", "libSkiaSharp", sdk, GetDestination(sdk), properties: new Dictionary<string, string> {
{ "MACOSX_DEPLOYMENT_TARGET", GetDeploymentTarget() },
});

SafeCopy(
$"libSkiaSharp/bin/{CONFIGURATION}/macosx/{arch}.xcarchive",
OUTPUT_PATH.Combine($"libSkiaSharp/{arch}.xcarchive"));
$"libSkiaSharp/bin/{CONFIGURATION}/{sdk}.xcarchive",
OUTPUT_PATH.Combine($"libSkiaSharp/{sdk}.xcarchive"));
}
});

Task("libHarfBuzzSharp")
.WithCriteria(IsRunningOnMacOs())
.Does(() =>
{
Build("x86_64");
Build("arm64");
Build("macosx");

CreateFatDylib(OUTPUT_PATH.Combine("libHarfBuzzSharp"));

void Build(string arch)
void Build(string sdk)
{
if (Skip(arch)) return;

RunXCodeBuild("libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj", "libHarfBuzzSharp", "macosx", arch, properties: new Dictionary<string, string> {
{ "MACOSX_DEPLOYMENT_TARGET", GetDeploymentTarget(arch) },
RunXCodeBuild("libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj", "libHarfBuzzSharp", sdk, GetDestination(sdk), properties: new Dictionary<string, string> {
{ "MACOSX_DEPLOYMENT_TARGET", GetDeploymentTarget() },
});

SafeCopy(
$"libHarfBuzzSharp/bin/{CONFIGURATION}/macosx/{arch}.xcarchive",
OUTPUT_PATH.Combine($"libHarfBuzzSharp/{arch}.xcarchive"));
$"libHarfBuzzSharp/bin/{CONFIGURATION}/{sdk}.xcarchive",
OUTPUT_PATH.Combine($"libHarfBuzzSharp/{sdk}.xcarchive"));
}
});

Expand Down
Loading