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
8 changes: 4 additions & 4 deletions VERSIONS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ SkiaSharp file 2.88.0.0

# HarfBuzzSharp.dll
HarfBuzzSharp assembly 1.0.0.0
HarfBuzzSharp file 2.6.1.7
HarfBuzzSharp file 2.6.1.8

# nuget versions
SkiaSharp nuget 2.88.0
Expand All @@ -63,9 +63,9 @@ SkiaSharp.Views.Forms.GTK nuget 2.88.0
SkiaSharp.Views.Uno nuget 2.88.0
SkiaSharp.HarfBuzz nuget 2.88.0
SkiaSharp.Vulkan.SharpVk nuget 2.88.0
HarfBuzzSharp nuget 2.6.1.7
HarfBuzzSharp.NativeAssets.Linux nuget 2.6.1.7
HarfBuzzSharp.NativeAssets.WebAssembly nuget 2.6.1.7
HarfBuzzSharp nuget 2.6.1.8
HarfBuzzSharp.NativeAssets.Linux nuget 2.6.1.8
HarfBuzzSharp.NativeAssets.WebAssembly nuget 2.6.1.8

# nuget replacement versions
Xamarin.Forms nuget 4.6.0.772
Expand Down
6 changes: 3 additions & 3 deletions binding/HarfBuzzSharp.Shared/HarfBuzzApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ namespace HarfBuzzSharp
internal unsafe partial class HarfBuzzApi
{
#if __TVOS__ && __UNIFIED__
private const string HARFBUZZ = "__Internal";
private const string HARFBUZZ = "@rpath/libHarfBuzzSharp.framework/libHarfBuzzSharp";
#elif __WATCHOS__ && __UNIFIED__
private const string HARFBUZZ = "__Internal";
private const string HARFBUZZ = "@rpath/libHarfBuzzSharp.framework/libHarfBuzzSharp";
#elif __IOS__ && __UNIFIED__
private const string HARFBUZZ = "__Internal";
private const string HARFBUZZ = "@rpath/libHarfBuzzSharp.framework/libHarfBuzzSharp";
#elif __ANDROID__
private const string HARFBUZZ = "libHarfBuzzSharp.so";
#elif __MACOS__
Expand Down
4 changes: 2 additions & 2 deletions binding/HarfBuzzSharp.iOS/HarfBuzzSharp.iOS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
<DefineConstants>$(DefineConstants);HARFBUZZ</DefineConstants>
</PropertyGroup>
<ItemGroup>
<None Include="..\..\output\native\ios\libHarfBuzzSharp.a" Link="nuget\build\$(TargetFramework)\libHarfBuzzSharp.a" />
<None Include="..\..\output\native\ios\libHarfBuzzSharp.framework\**" Link="nuget\build\$(TargetFramework)\libHarfBuzzSharp.framework\%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>
<ItemGroup>
<None Include="nuget\build\$(TargetFramework)\HarfBuzzSharp.targets" Link="nuget\build\$(TargetFramework)\HarfBuzzSharp.targets" />
<None Include="nuget\build\xamarinios1.0\HarfBuzzSharp.targets" Link="nuget\build\$(TargetFramework)\HarfBuzzSharp.targets" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
</PropertyGroup>

<ItemGroup Condition=" '$(ShouldIncludeNativeHarfBuzzSharp)' != 'False' ">
<NativeReference Include="$(_HarfBuzzSharpNativeLibraryRootDir)libHarfBuzzSharp.a" Kind="Static" IsCxx="true" ForceLoad="True" SmartLink="true" />
<NativeReference Include="$(_HarfBuzzSharpNativeLibraryRootDir)libHarfBuzzSharp.framework" Kind="Framework" />
</ItemGroup>

</Project>
4 changes: 2 additions & 2 deletions binding/HarfBuzzSharp.tvOS/HarfBuzzSharp.tvOS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
<DefineConstants>$(DefineConstants);HARFBUZZ</DefineConstants>
</PropertyGroup>
<ItemGroup>
<None Include="..\..\output\native\tvos\libHarfBuzzSharp.a" Link="nuget\build\$(TargetFramework)\libHarfBuzzSharp.a" />
<None Include="..\..\output\native\tvos\libHarfBuzzSharp.framework\**" Link="nuget\build\$(TargetFramework)\libHarfBuzzSharp.framework\%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>
<ItemGroup>
<None Include="nuget\build\$(TargetFramework)\HarfBuzzSharp.targets" Link="nuget\build\$(TargetFramework)\HarfBuzzSharp.targets" />
<None Include="nuget\build\xamarintvos1.0\HarfBuzzSharp.targets" Link="nuget\build\$(TargetFramework)\HarfBuzzSharp.targets" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
</PropertyGroup>

<ItemGroup Condition=" '$(ShouldIncludeNativeHarfBuzzSharp)' != 'False' ">
<NativeReference Include="$(_HarfBuzzSharpNativeLibraryRootDir)libHarfBuzzSharp.a" Kind="Static" IsCxx="true" ForceLoad="True" SmartLink="true" />
<NativeReference Include="$(_HarfBuzzSharpNativeLibraryRootDir)libHarfBuzzSharp.framework" Kind="Framework" />
</ItemGroup>

</Project>
4 changes: 2 additions & 2 deletions binding/HarfBuzzSharp.watchOS/HarfBuzzSharp.watchOS.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
<DefineConstants>$(DefineConstants);HARFBUZZ</DefineConstants>
</PropertyGroup>
<ItemGroup>
<None Include="..\..\output\native\watchos\libHarfBuzzSharp.a" Link="nuget\build\$(TargetFramework)\libHarfBuzzSharp.a" />
<None Include="..\..\output\native\watchos\libHarfBuzzSharp.framework\**" Link="nuget\build\$(TargetFramework)\libHarfBuzzSharp.framework\%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>
<ItemGroup>
<None Include="nuget\build\$(TargetFramework)\HarfBuzzSharp.targets" Link="nuget\build\$(TargetFramework)\HarfBuzzSharp.targets" />
<None Include="nuget\build\xamarinwatchos1.0\HarfBuzzSharp.targets" Link="nuget\build\$(TargetFramework)\HarfBuzzSharp.targets" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
</PropertyGroup>

<ItemGroup Condition=" '$(ShouldIncludeNativeHarfBuzzSharp)' != 'False' ">
<NativeReference Include="$(_HarfBuzzSharpNativeLibraryRootDir)libHarfBuzzSharp.a" Kind="Static" IsCxx="true" ForceLoad="True" SmartLink="true" />
<NativeReference Include="$(_HarfBuzzSharpNativeLibraryRootDir)libHarfBuzzSharp.framework" Kind="Framework" />
</ItemGroup>

</Project>
10 changes: 8 additions & 2 deletions cake/externals.cake
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ foreach (var cake in GetFiles("native/*/build.cake"))
Task("externals-osx")
.IsDependentOn("externals-macos");

Task("externals-catalyst")
.IsDependentOn("externals-maccatalyst");

////////////////////////////////////////////////////////////////////////////////////////////////////
// EXTERNALS DOWNLOAD - download any externals that are needed
////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -67,8 +70,11 @@ bool ShouldBuildExternal(string platform)

switch (platform) {
case "mac":
case "macos":
platform = "osx";
case "osx":
platform = "macos";
break;
case "catalyst":
platform = "maccatalyst";
break;
case "win":
platform = "windows";
Expand Down
36 changes: 0 additions & 36 deletions cake/native-shared.cake
Original file line number Diff line number Diff line change
Expand Up @@ -80,42 +80,6 @@ void GnNinja(DirectoryPath outDir, string target, string skiaArgs)
});
}

void StripSign(FilePath target)
{
if (!IsRunningOnMac())
throw new InvalidOperationException("lipo is only available on macOS.");

target = MakeAbsolute(target);
var archive = target;
if (target.FullPath.EndsWith(".framework")) {
archive = $"{target}/{target.GetFilenameWithoutExtension()}";
}

// strip anything we can
RunProcess("strip", new ProcessSettings {
Arguments = $"-x -S {archive}",
});

// re-sign with empty
RunProcess("codesign", new ProcessSettings {
Arguments = $"--force --sign - --timestamp=none {target}",
});
}

void RunLipo(DirectoryPath directory, FilePath output, FilePath[] inputs)
{
if (!IsRunningOnMac())
throw new InvalidOperationException("lipo is only available on macOS.");

EnsureDirectoryExists(directory.CombineWithFilePath(output).GetDirectory());

var inputString = string.Join(" ", inputs.Select(i => string.Format("\"{0}\"", i)));
RunProcess("lipo", new ProcessSettings {
Arguments = string.Format("-create -output \"{0}\" {1}", output, inputString),
WorkingDirectory = directory,
});
}

bool Skip(string arch)
{
arch = arch?.ToLower() ?? "";
Expand Down
119 changes: 106 additions & 13 deletions cake/xcode.cake
Original file line number Diff line number Diff line change
@@ -1,25 +1,118 @@
#addin nuget:?package=Cake.XCode&version=4.2.0

void RunXCodeBuild(FilePath project, string target, string sdk, string arch)
void RunXCodeBuild(FilePath project, string scheme, string sdk, string arch, string platform = null)
{
var dir = project.GetDirectory();

if (DirectoryExists(dir.Combine($"bin/{CONFIGURATION}/{arch}"))) {
if (DirectoryExists(dir.Combine("build")))
DeleteDirectory(dir.Combine("build"), true);
MoveDirectory(dir.Combine($"bin/{CONFIGURATION}/{arch}"), dir.Combine("build"));
}

XCodeBuild(new XCodeBuildSettings {
var settings = new XCodeBuildSettings {
Project = project.FullPath,
Target = target,
Scheme = scheme,
Sdk = sdk,
Arch = arch,
Archive = true,
Configuration = CONFIGURATION,
DerivedDataPath = dir.Combine($"obj/{CONFIGURATION}/{sdk}/{arch}"),
ArchivePath = dir.Combine($"bin/{CONFIGURATION}/{sdk}/{arch}"),
BuildSettings = new Dictionary<string, string> {
{ "SKIP_INSTALL", "NO" },
{ "BUILD_LIBRARIES_FOR_DISTRIBUTION", "YES" },
},
};
if (platform != null) {
settings.BuildSettings["PLATFORM"] = platform;
}

XCodeBuild(settings);
}

void StripSign(FilePath target)
{
if (!IsRunningOnMac())
throw new InvalidOperationException("strip and codesign are only available on macOS.");

target = MakeAbsolute(target);
var archive = target;
if (target.FullPath.EndsWith(".framework")) {
archive = $"{target}/{target.GetFilenameWithoutExtension()}";
}

// strip anything we can
RunProcess("strip", new ProcessSettings {
Arguments = $"-x -S {archive}",
});

// re-sign with empty
RunProcess("codesign", new ProcessSettings {
Arguments = $"--force --sign - --timestamp=none {target}",
});
}

void RunLipo(DirectoryPath directory, FilePath output, FilePath[] inputs)
{
if (!IsRunningOnMac())
throw new InvalidOperationException("lipo is only available on macOS.");

EnsureDirectoryExists(directory.CombineWithFilePath(output).GetDirectory());

var inputString = string.Join(" ", inputs.Select(i => string.Format("\"{0}\"", i)));
RunProcess("lipo", new ProcessSettings {
Arguments = string.Format("-create -output \"{0}\" {1}", output, inputString),
WorkingDirectory = directory,
});
}

void RunLipo(FilePath output, FilePath[] inputs)
{
if (!IsRunningOnMac())
throw new InvalidOperationException("lipo is only available on macOS.");

var inputString = string.Join(" ", inputs.Select(i => string.Format("\"{0}\"", i)));
RunProcess("lipo", new ProcessSettings {
Arguments = string.Format("-create -output \"{0}\" {1}", output, inputString),
});
}

void CreateFatDylib(DirectoryPath archives)
{
var libName = archives.GetDirectoryName();

var binaries = GetFiles($"{archives}/*.xcarchive/Products/@rpath/{libName}.dylib").ToArray();
RunLipo($"{archives}.dylib", binaries);

StripSign($"{archives}.dylib");
}

void CreateFatFramework(DirectoryPath archives)
{
var libName = archives.GetDirectoryName();

var frameworks = GetDirectories($"{archives}/*.xcarchive/Products/Library/Frameworks/{libName}.framework").ToArray();
SafeCopy(frameworks[0], $"{archives}.framework");
DeleteFile($"{archives}.framework/{libName}");

if (DirectoryExists(dir.Combine($"bin/{CONFIGURATION}/{arch}")))
DeleteDirectory(dir.Combine($"bin/{CONFIGURATION}/{arch}"), true);
EnsureDirectoryExists(dir.Combine($"bin/{CONFIGURATION}"));
MoveDirectory(dir.Combine("build"), dir.Combine($"bin/{CONFIGURATION}/{arch}"));
var binaries = GetFiles($"{archives}/*.xcarchive/Products/Library/Frameworks/{libName}.framework/{libName}").ToArray();
RunLipo($"{archives}.framework/{libName}", binaries);

StripSign($"{archives}.framework");
}

void CreateFatVersionedFramework(DirectoryPath archives)
{
var libName = archives.GetDirectoryName();

var frameworks = GetDirectories($"{archives}/*.xcarchive/Products/Library/Frameworks/{libName}.framework").ToArray();
SafeCopy(frameworks[0], $"{archives}.framework");
DeleteFile($"{archives}.framework/Versions/A/{libName}");

var binaries = GetFiles($"{archives}/*.xcarchive/Products/Library/Frameworks/{libName}.framework/Versions/A/{libName}").ToArray();
RunLipo($"{archives}.framework/Versions/A/{libName}", binaries);

StripSign($"{archives}.framework");
}

void SafeCopy(DirectoryPath src, DirectoryPath dst)
{
EnsureDirectoryExists(dst);
DeleteDirectory(dst, new DeleteDirectorySettings { Recursive = true, Force = true });
RunProcess("cp", $"-R {src} {dst}");
}
2 changes: 1 addition & 1 deletion externals/skia
Submodule skia updated 2 files
+46 −2 gn/BUILD.gn
+8 −1 gn/BUILDCONFIG.gn
Loading