diff --git a/VERSIONS.txt b/VERSIONS.txt index 9c42394ce1..af781fe498 100644 --- a/VERSIONS.txt +++ b/VERSIONS.txt @@ -37,6 +37,7 @@ HarfBuzzSharp file 2.6.1.1 SkiaSharp nuget 1.68.1.1 SkiaSharp.NativeAssets.Linux nuget 1.68.1.1 SkiaSharp.NativeAssets.Linux.NoDependencies nuget 1.68.1.1 +SkiaSharp.NativeAssets.NanoServer nuget 1.68.1.1 SkiaSharp.Views nuget 1.68.1.1 SkiaSharp.Views.Desktop.Common nuget 1.68.1.1 SkiaSharp.Views.Gtk2 nuget 1.68.1.1 diff --git a/binding/HarfBuzzSharp.Desktop/HarfBuzzSharp.Desktop.csproj b/binding/HarfBuzzSharp.Desktop/HarfBuzzSharp.Desktop.csproj index 51a7e1bd04..bb71f213d9 100644 --- a/binding/HarfBuzzSharp.Desktop/HarfBuzzSharp.Desktop.csproj +++ b/binding/HarfBuzzSharp.Desktop/HarfBuzzSharp.Desktop.csproj @@ -22,8 +22,10 @@ + + diff --git a/binding/HarfBuzzSharp.NetStandard/HarfBuzzSharp.NetStandard.csproj b/binding/HarfBuzzSharp.NetStandard/HarfBuzzSharp.NetStandard.csproj index 0481fdf59e..aea3af6ce5 100644 --- a/binding/HarfBuzzSharp.NetStandard/HarfBuzzSharp.NetStandard.csproj +++ b/binding/HarfBuzzSharp.NetStandard/HarfBuzzSharp.NetStandard.csproj @@ -23,8 +23,10 @@ + + diff --git a/binding/SkiaSharp.Desktop/SkiaSharp.Desktop.csproj b/binding/SkiaSharp.Desktop/SkiaSharp.Desktop.csproj index fd5830ea94..718e604eda 100644 --- a/binding/SkiaSharp.Desktop/SkiaSharp.Desktop.csproj +++ b/binding/SkiaSharp.Desktop/SkiaSharp.Desktop.csproj @@ -22,8 +22,10 @@ + + diff --git a/binding/SkiaSharp.NetStandard/SkiaSharp.NetStandard.csproj b/binding/SkiaSharp.NetStandard/SkiaSharp.NetStandard.csproj index f7a1710650..843daf35eb 100644 --- a/binding/SkiaSharp.NetStandard/SkiaSharp.NetStandard.csproj +++ b/binding/SkiaSharp.NetStandard/SkiaSharp.NetStandard.csproj @@ -23,8 +23,10 @@ + + diff --git a/build.cake b/build.cake index 1d4fe0c5fc..07263fa1d3 100644 --- a/build.cake +++ b/build.cake @@ -22,83 +22,79 @@ using Mono.ApiTools; using NuGet.Packaging; using NuGet.Versioning; -#load "cake/Utils.cake" +DirectoryPath ROOT_PATH = MakeAbsolute(Directory(".")); + +#load "cake/shared.cake" +#load "cake/native-shared.cake" -var TARGET = Argument ("t", Argument ("target", "Default")); -var VERBOSITY = Argument ("v", Argument ("verbosity", Verbosity.Normal)); -var BUILD_ARCH = Argument ("buildarch", EnvironmentVariable ("BUILD_ARCH") ?? "") - .ToLower ().Split (new [] { ',' }, StringSplitOptions.RemoveEmptyEntries); var SKIP_EXTERNALS = Argument ("skipexternals", "") .ToLower ().Split (new [] { ',' }, StringSplitOptions.RemoveEmptyEntries); var PACK_ALL_PLATFORMS = Argument ("packall", Argument ("PackAllPlatforms", false)); +var BUILD_ALL_PLATFORMS = Argument ("buildall", Argument ("BuildAllPlatforms", false)); var PRINT_ALL_ENV_VARS = Argument ("printAllEnvVars", false); var AZURE_BUILD_ID = Argument ("azureBuildId", ""); var UNSUPPORTED_TESTS = Argument ("unsupportedTests", ""); -var ADDITIONAL_GN_ARGS = Argument ("additionalGnArgs", ""); -var CONFIGURATION = Argument ("c", Argument ("configuration", "Release")); -var NuGetSources = new [] { MakeAbsolute (Directory ("./output/nugets")).FullPath, "https://api.nuget.org/v3/index.json" }; var NuGetToolPath = Context.Tools.Resolve ("nuget.exe"); var CakeToolPath = Context.Tools.Resolve ("Cake.exe"); var MDocPath = Context.Tools.Resolve ("mdoc.exe"); -var MSBuildToolPath = GetMSBuildToolPath (EnvironmentVariable ("MSBUILD_EXE")); -var PythonToolPath = EnvironmentVariable ("PYTHON_EXE") ?? "python"; - -DirectoryPath PROFILE_PATH = EnvironmentVariable ("USERPROFILE") ?? EnvironmentVariable ("HOME"); -DirectoryPath NUGET_PACKAGES = EnvironmentVariable ("NUGET_PACKAGES") ?? PROFILE_PATH.Combine (".nuget/packages"); -DirectoryPath ANDROID_SDK_ROOT = EnvironmentVariable ("ANDROID_SDK_ROOT") ?? EnvironmentVariable ("ANDROID_HOME") ?? PROFILE_PATH.Combine ("android-sdk"); -DirectoryPath ANDROID_NDK_HOME = EnvironmentVariable ("ANDROID_NDK_HOME") ?? EnvironmentVariable ("ANDROID_NDK_ROOT") ?? PROFILE_PATH.Combine ("android-ndk"); -DirectoryPath TIZEN_STUDIO_HOME = EnvironmentVariable ("TIZEN_STUDIO_HOME") ?? PROFILE_PATH.Combine ("tizen-studio"); -DirectoryPath LLVM_HOME = EnvironmentVariable ("LLVM_HOME") ?? (IsRunningOnWindows () ? "C:/Program Files/LLVM" : null); - -DirectoryPath ROOT_PATH = MakeAbsolute(Directory(".")); -DirectoryPath DEPOT_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/depot_tools")); -DirectoryPath SKIA_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/skia")); -DirectoryPath ANGLE_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/angle")); -DirectoryPath HARFBUZZ_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/harfbuzz")); DirectoryPath DOCS_PATH = MakeAbsolute(ROOT_PATH.Combine("docs/SkiaSharpAPI")); -DirectoryPath PACKAGE_CACHE_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/package_cache")); var PREVIEW_LABEL = EnvironmentVariable ("PREVIEW_LABEL") ?? "preview"; var FEATURE_NAME = EnvironmentVariable ("FEATURE_NAME") ?? ""; var BUILD_NUMBER = EnvironmentVariable ("BUILD_NUMBER") ?? "0"; -if (!string.IsNullOrEmpty (PythonToolPath) && FileExists (PythonToolPath)) { - var dir = MakeAbsolute ((FilePath) PythonToolPath).GetDirectory (); - var oldPath = EnvironmentVariable ("PATH"); - System.Environment.SetEnvironmentVariable ("PATH", dir.FullPath + System.IO.Path.PathSeparator + oldPath); -} - var AZURE_BUILD_SUCCESS = "https://dev.azure.com/xamarin/6fd3d886-57a5-4e31-8db7-52a1b47c07a8/_apis/build/builds?statusFilter=completed&resultFilter=succeeded&definitions=4&branchName=refs/heads/master&$top=1&api-version=5.1"; var AZURE_BUILD_URL = "https://dev.azure.com/xamarin/6fd3d886-57a5-4e31-8db7-52a1b47c07a8/_apis/build/builds/{0}/artifacts?artifactName={1}&%24format=zip&api-version=5.1"; var TRACKED_NUGETS = new Dictionary { - { "SkiaSharp", new Version (1, 57, 0) }, - { "SkiaSharp.NativeAssets.Linux", new Version (1, 57, 0) }, - { "SkiaSharp.Views", new Version (1, 57, 0) }, - { "SkiaSharp.Views.Desktop.Common", new Version (1, 57, 0) }, - { "SkiaSharp.Views.Gtk2", new Version (1, 57, 0) }, - { "SkiaSharp.Views.Gtk3", new Version (1, 57, 0) }, - { "SkiaSharp.Views.WindowsForms", new Version (1, 57, 0) }, - { "SkiaSharp.Views.WPF", new Version (1, 57, 0) }, - { "SkiaSharp.Views.Forms", new Version (1, 57, 0) }, - { "SkiaSharp.Views.Forms.WPF", new Version (1, 57, 0) }, - { "HarfBuzzSharp", new Version (1, 0, 0) }, - { "HarfBuzzSharp.NativeAssets.Linux", new Version (1, 0, 0) }, - { "SkiaSharp.HarfBuzz", new Version (1, 57, 0) }, + { "SkiaSharp", new Version (1, 57, 0) }, + { "SkiaSharp.NativeAssets.Linux", new Version (1, 57, 0) }, + { "SkiaSharp.NativeAssets.Linux.NoDependencies", new Version (1, 57, 0) }, + { "SkiaSharp.NativeAssets.NanoServer", new Version (1, 57, 0) }, + { "SkiaSharp.Views", new Version (1, 57, 0) }, + { "SkiaSharp.Views.Desktop.Common", new Version (1, 57, 0) }, + { "SkiaSharp.Views.Gtk2", new Version (1, 57, 0) }, + { "SkiaSharp.Views.Gtk3", new Version (1, 57, 0) }, + { "SkiaSharp.Views.WindowsForms", new Version (1, 57, 0) }, + { "SkiaSharp.Views.WPF", new Version (1, 57, 0) }, + { "SkiaSharp.Views.Forms", new Version (1, 57, 0) }, + { "SkiaSharp.Views.Forms.WPF", new Version (1, 57, 0) }, + { "HarfBuzzSharp", new Version (1, 0, 0) }, + { "HarfBuzzSharp.NativeAssets.Linux", new Version (1, 0, 0) }, + { "SkiaSharp.HarfBuzz", new Version (1, 57, 0) }, }; +#load "cake/msbuild.cake" #load "cake/UtilsManaged.cake" -#load "cake/BuildExternals.cake" +#load "cake/externals.cake" #load "cake/UpdateDocs.cake" +Task ("determine-last-successful-build") + .WithCriteria (string.IsNullOrEmpty (AZURE_BUILD_ID)) + .Does (() => +{ + Warning ("A build ID (--azureBuildId=) was not specified, using the last successful build."); + + var successUrl = string.Format(AZURE_BUILD_SUCCESS); + var json = ParseJson (FileReadText (DownloadFile (successUrl))); + + AZURE_BUILD_ID = (string)json ["value"] [0] ["id"]; + + Information ($"Using last successful build ID {AZURE_BUILD_ID}"); +}); + +Task ("__________________________________") + .Description ("__________________________________________________"); + //////////////////////////////////////////////////////////////////////////////////////////////////// // EXTERNALS - the native C and C++ libraries //////////////////////////////////////////////////////////////////////////////////////////////////// // this builds all the externals Task ("externals") + .Description ("Build all external dependencies.") .IsDependentOn ("externals-native"); //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -106,20 +102,20 @@ Task ("externals") //////////////////////////////////////////////////////////////////////////////////////////////////// Task ("libs") + .Description ("Build all managed assemblies.") .IsDependentOn ("externals") - .IsDependentOn ("libs-only"); - -Task ("libs-only") .Does (() => { // build the managed libraries var platform = ""; - if (IsRunningOnWindows ()) { - platform = ".Windows"; - } else if (IsRunningOnMac ()) { - platform = ".Mac"; - } else if (IsRunningOnLinux ()) { - platform = ".Linux"; + if (!BUILD_ALL_PLATFORMS) { + if (IsRunningOnWindows ()) { + platform = ".Windows"; + } else if (IsRunningOnMac ()) { + platform = ".Mac"; + } else if (IsRunningOnLinux ()) { + platform = ".Linux"; + } } RunMSBuild ($"./source/SkiaSharpSource{platform}.sln"); @@ -136,10 +132,8 @@ Task ("libs-only") //////////////////////////////////////////////////////////////////////////////////////////////////// Task ("tests") + .Description ("Run all tests.") .IsDependentOn ("externals") - .IsDependentOn ("tests-only"); - -Task ("tests-only") .Does (() => { var RunDesktopTest = new Action (arch => { @@ -169,11 +163,32 @@ Task ("tests-only") // SAMPLES - the demo apps showing off the work //////////////////////////////////////////////////////////////////////////////////////////////////// -Task ("samples") +Task ("samples-generate") + .Description ("Generate and zip the samples directory structure.") .Does (() => { EnsureDirectoryExists ("./output/"); + // create the workbooks archive + Zip ("./workbooks", "./output/workbooks.zip"); + + // create the samples archive + CreateSamplesDirectory ("./samples/", "./output/samples/"); + Zip ("./output/samples/", "./output/samples.zip"); + + // create the preview samples archive + var suffix = string.IsNullOrEmpty (BUILD_NUMBER) + ? $"{PREVIEW_LABEL}" + : $"{PREVIEW_LABEL}.{BUILD_NUMBER}"; + CreateSamplesDirectory ("./samples/", "./output/samples-preview/", suffix); + Zip ("./output/samples-preview/", "./output/samples-preview.zip"); +}); + +Task ("samples") + .Description ("Build all samples.") + .IsDependentOn ("samples-generate") + .Does(() => +{ var isLinux = IsRunningOnLinux (); var isMac = IsRunningOnMac (); var isWin = IsRunningOnWindows (); @@ -198,7 +213,8 @@ Task ("samples") { "xamarin.forms.windows", "x86" }, }; - var buildSample = new Action (sln => { + void BuildSample (FilePath sln) + { var platform = sln.GetDirectory ().GetDirectoryName ().ToLower (); var name = sln.GetFilenameWithoutExtension (); var slnPlatform = name.GetExtension (); @@ -219,25 +235,12 @@ Task ("samples") RunMSBuild (sln, platform: buildPlatform); } - }); - - // create the workbooks archive - Zip ("./workbooks", "./output/workbooks.zip"); - - // create the samples archive - CreateSamplesDirectory ("./samples/", "./output/samples/"); - Zip ("./output/samples/", "./output/samples.zip"); - - // create the preview samples archive - var suffix = string.IsNullOrEmpty (BUILD_NUMBER) - ? $"{PREVIEW_LABEL}" - : $"{PREVIEW_LABEL}.{BUILD_NUMBER}"; - CreateSamplesDirectory ("./samples/", "./output/samples-preview/", suffix); - Zip ("./output/samples-preview/", "./output/samples-preview.zip"); + }; // build the newly migrated samples CleanDirectories ($"{PACKAGE_CACHE_PATH}/skiasharp*"); CleanDirectories ($"{PACKAGE_CACHE_PATH}/harfbuzzsharp*"); + var solutions = GetFiles ("./output/samples/**/*.sln"); foreach (var sln in solutions) { var name = sln.GetFilenameWithoutExtension (); @@ -248,7 +251,7 @@ Task ("samples") var variants = GetFiles (sln.GetDirectory ().CombineWithFilePath (name) + ".*.sln"); if (!variants.Any ()) { // there is no platform variant - buildSample (sln); + BuildSample (sln); } else { // skip as there is a platform variant } @@ -260,12 +263,13 @@ Task ("samples") (isMac && slnPlatform == ".mac") || (isWin && slnPlatform == ".windows"); if (shouldBuild) { - buildSample (sln); + BuildSample (sln); } else { // skip this as this is not the correct platform } } } + CleanDirectory ("./output/samples/"); DeleteDirectory ("./output/samples/"); CleanDirectory ("./output/samples-preview/"); @@ -277,10 +281,8 @@ Task ("samples") //////////////////////////////////////////////////////////////////////////////////////////////////// Task ("nuget") + .Description ("Pack all NuGets (build all required dependencies).") .IsDependentOn ("libs") - .IsDependentOn ("nuget-only"); - -Task ("nuget-only") .Does (() => { var platform = ""; @@ -394,12 +396,7 @@ Task ("nuget-only") foreach (var nuspec in GetFiles ("./output/*/nuget/*.nuspec")) { PackageNuGet (nuspec, "./output/nugets/"); } -}); -Task ("nuget-validation") - .IsDependentOn ("nuget") - .Does(() => -{ // setup validation options var options = new Xamarin.Nuget.Validator.NugetValidatorOptions { Copyright = "© Microsoft Corporation. All rights reserved.", @@ -411,7 +408,7 @@ Task ("nuget-validation") ValidPackageNamespace = new [] { "SkiaSharp", "HarfBuzzSharp" }, }; - var nupkgFiles = GetFiles ("./output/*.nupkg"); + var nupkgFiles = GetFiles ("./output/**/*.nupkg"); Information ("Found ({0}) Nuget's to validate", nupkgFiles.Count ()); @@ -434,21 +431,8 @@ Task ("nuget-validation") // DOCS - creating the xml, markdown and other documentation //////////////////////////////////////////////////////////////////////////////////////////////////// -Task ("download-last-successful-build") - .WithCriteria (string.IsNullOrEmpty (AZURE_BUILD_ID)) - .Does (() => -{ - Warning ("A build ID (--azureBuildId=) was not specified, using the last successful build."); - - var successUrl = string.Format(AZURE_BUILD_SUCCESS); - var json = ParseJson (FileReadText (DownloadFile (successUrl))); - - AZURE_BUILD_ID = (string)json ["value"] [0] ["id"]; - - Information ($"Using last successful build ID {AZURE_BUILD_ID}"); -}); - Task ("update-docs") + .Description ("Regenerate all docs.") .IsDependentOn ("docs-api-diff") .IsDependentOn ("docs-update-frameworks") .IsDependentOn ("docs-format-docs"); @@ -458,9 +442,12 @@ Task ("update-docs") //////////////////////////////////////////////////////////////////////////////////////////////////// Task ("clean") + .Description ("Clean up.") .IsDependentOn ("clean-externals") .IsDependentOn ("clean-managed"); + Task ("clean-managed") + .Description ("Clean up (managed only).") .Does (() => { CleanDirectories ("./binding/*/bin"); @@ -497,121 +484,24 @@ Task ("clean-managed") // DEFAULT - target for common development //////////////////////////////////////////////////////////////////////////////////////////////////// +Task ("----------------------------------") + .Description ("--------------------------------------------------"); + Task ("Default") + .Description ("Build all managed assemblies and external dependencies.") .IsDependentOn ("externals") .IsDependentOn ("libs"); Task ("Everything") + .Description ("Build, pack and test everything.") .IsDependentOn ("externals") .IsDependentOn ("libs") .IsDependentOn ("nuget") .IsDependentOn ("tests") .IsDependentOn ("samples"); -Task ("Nothing"); - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// CI - the master target to build everything -//////////////////////////////////////////////////////////////////////////////////////////////////// - -Task ("CI") - .IsDependentOn ("externals") - .IsDependentOn ("libs") - .IsDependentOn ("nuget") - .IsDependentOn ("docs-api-diff") - .IsDependentOn ("nuget-validation") - .IsDependentOn ("tests") - .IsDependentOn ("samples"); - -Task ("Mac-CI") - .IsDependentOn ("CI"); - -Task ("Windows-CI") - .IsDependentOn ("CI"); - -Task ("Linux-CI") - .IsDependentOn ("CI"); - //////////////////////////////////////////////////////////////////////////////////////////////////// // BUILD NOW //////////////////////////////////////////////////////////////////////////////////////////////////// -Information (""); - -Information ("Arguments:"); -Information (" Target: {0}", TARGET); -Information (" Verbosity: {0}", VERBOSITY); -Information (" Skip externals: {0}", string.Join (", ", SKIP_EXTERNALS)); -Information (" Build architectures: {0}", string.Join (", ", BUILD_ARCH)); -Information (" Print all environment variables: {0}", PRINT_ALL_ENV_VARS); -Information (" Pack all platforms: {0}", PACK_ALL_PLATFORMS); -Information (" Azure build ID: {0}", AZURE_BUILD_ID); -Information (" Unsupported Tests: {0}", UNSUPPORTED_TESTS); -Information (" Configuration: {0}", CONFIGURATION); -Information (" Additional GN Arguments: {0}", ADDITIONAL_GN_ARGS); -Information (""); - -Information ("Tool Paths:"); -Information (" Cake.exe: {0}", CakeToolPath); -Information (" mdoc: {0}", MDocPath); -Information (" msbuild: {0}", MSBuildToolPath); -Information (" nuget.exe: {0}", NuGetToolPath); -Information (" python: {0}", PythonToolPath); -Information (""); - -Information ("Build Paths:"); -Information (" ~: {0}", PROFILE_PATH); -Information (" NuGet Cache: {0}", NUGET_PACKAGES); -Information (" root: {0}", ROOT_PATH); -Information (" docs: {0}", DOCS_PATH); -Information (" package_cache: {0}", PACKAGE_CACHE_PATH); -Information (" ANGLE: {0}", ANGLE_PATH); -Information (" depot_tools: {0}", DEPOT_PATH); -Information (" harfbuzz: {0}", HARFBUZZ_PATH); -Information (" skia: {0}", SKIA_PATH); -Information (""); - -Information ("SDK Paths:"); -Information (" Android SDK: {0}", ANDROID_SDK_ROOT); -Information (" Android NDK: {0}", ANDROID_NDK_HOME); -Information (" Tizen Studio: {0}", TIZEN_STUDIO_HOME); -Information (" LLVM/Clang: {0}", LLVM_HOME); -Information (""); - -Information ("Environment Variables (whitelisted):"); -var envVarsWhitelist = new [] { - "path", "psmodulepath", "pwd", "shell", "processor_architecture", - "processor_identifier", "node_name", "node_labels", "branch_name", - "os", "build_url", "build_number", "number_of_processors", - "node_label", "build_id", "git_sha", "git_branch_name", - "feature_name", "msbuild_exe", "python_exe", "preview_label", - "home", "userprofile", "nuget_packages", "build_arch", - "android_sdk_root", "android_ndk_root", "llvm_home", - "android_home", "android_ndk_home", "tizen_studio_home" -}; -var envVars = EnvironmentVariables (); -var max = envVars.Max (v => v.Key.Length) + 2; -foreach (var envVar in envVars.OrderBy (e => e.Key.ToLower ())) { - if (!PRINT_ALL_ENV_VARS && !envVarsWhitelist.Contains (envVar.Key.ToLower ())) - continue; - var spaces = string.Concat (Enumerable.Repeat (" ", max - envVar.Key.Length)); - var toSplit = new [] { "path", "psmodulepath" }; - if (toSplit.Contains (envVar.Key.ToLower ())) { - var paths = new string [0]; - if (IsRunningOnWindows ()) { - paths = envVar.Value.Split (';'); - } else { - paths = envVar.Value.Split (':'); - } - Information ($" {envVar.Key}:{spaces}{{0}}", paths.FirstOrDefault ()); - var keySpaces = string.Concat (Enumerable.Repeat (" ", envVar.Key.Length)); - foreach (var path in paths.Skip (1)) { - Information ($" {keySpaces} {spaces}{{0}}", path); - } - } else { - Information ($" {envVar.Key}:{spaces}{{0}}", envVar.Value); - } -} -Information (""); - RunTarget (TARGET); diff --git a/cake/BuildExternals.cake b/cake/BuildExternals.cake deleted file mode 100644 index 2fac8443e6..0000000000 --- a/cake/BuildExternals.cake +++ /dev/null @@ -1,812 +0,0 @@ - -void GnNinja (DirectoryPath outDir, string target, string skiaArgs) -{ - var exe = IsRunningOnWindows () ? ".exe" : ""; - var quote = IsRunningOnWindows () ? "\"" : "'"; - var innerQuote = IsRunningOnWindows () ? "\\\"" : "\""; - - if (!string.IsNullOrEmpty(ADDITIONAL_GN_ARGS)) { - skiaArgs += " " + ADDITIONAL_GN_ARGS; - } - - // generate native skia build files - RunProcess (SKIA_PATH.CombineWithFilePath($"bin/gn{exe}"), new ProcessSettings { - Arguments = $"gen out/{outDir} --args={quote}{skiaArgs.Replace("'", innerQuote)}{quote}", - WorkingDirectory = SKIA_PATH.FullPath, - }); - - // build native skia - RunProcess (DEPOT_PATH.CombineWithFilePath ($"ninja{exe}"), new ProcessSettings { - Arguments = $"{target} -C out/{outDir}", - WorkingDirectory = SKIA_PATH.FullPath, - }); -} - -void StripSign (FilePath target) -{ - 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 Unix."); - } - - 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, - }); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// EXTERNALS - the native C and C++ libraries -//////////////////////////////////////////////////////////////////////////////////////////////////// - -Task ("externals-init") - .Does (() => -{ - RunProcess (PythonToolPath, new ProcessSettings { - Arguments = SKIA_PATH.CombineWithFilePath ("tools/git-sync-deps").FullPath, - WorkingDirectory = SKIA_PATH.FullPath, - }); -}); - -// this builds the native C and C++ externals -Task ("externals-native"); -Task ("externals-native-skip"); - -// this builds the native C and C++ externals for Windows -Task ("externals-windows") - .IsDependentOn ("externals-init") - .IsDependeeOf (ShouldBuildExternal ("windows") ? "externals-native" : "externals-native-skip") - .WithCriteria (ShouldBuildExternal ("windows")) - .WithCriteria (IsRunningOnWindows ()) - .Does (() => -{ - // libSkiaSharp - - var buildArch = new Action ((arch, skiaArch, dir) => { - if (!ShouldBuildArch (arch)) { - Warning ($"Skipping architecture: {arch}."); - return; - } - - var clang = string.IsNullOrEmpty(LLVM_HOME.FullPath) ? "" : $"clang_win='{LLVM_HOME}' "; - - // generate native skia build files - GnNinja ($"win/{arch}", "SkiaSharp", - $"is_official_build=true skia_enable_tools=false " + - $"target_os='win' target_cpu='{skiaArch}' " + - clang + - $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true skia_use_dng_sdk=true " + - $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + - $"extra_cflags=[ '-DSKIA_C_DLL', '/MT', '/EHsc', '/Z7' ] " + - $"extra_ldflags=[ '/DEBUG:FULL' ]"); - - // copy libSkiaSharp to output - var outDir = $"output/native/windows/{dir}"; - EnsureDirectoryExists (outDir); - CopyFileToDirectory (SKIA_PATH.CombineWithFilePath ($"out/win/{arch}/libSkiaSharp.dll"), outDir); - CopyFileToDirectory (SKIA_PATH.CombineWithFilePath ($"out/win/{arch}/libSkiaSharp.pdb"), outDir); - }); - - buildArch ("Win32", "x86", "x86"); - buildArch ("x64", "x64", "x64"); - - // libHarfBuzzSharp - - var buildHarfBuzzArch = new Action ((arch, dir) => { - if (!ShouldBuildArch (arch)) { - Warning ($"Skipping architecture: {arch}."); - return; - } - - // build libHarfBuzzSharp - RunMSBuild ("native-builds/libHarfBuzzSharp_windows/libHarfBuzzSharp.sln", platformTarget: arch); - - // copy libHarfBuzzSharp to output - var outDir = $"output/native/windows/{dir}"; - EnsureDirectoryExists (outDir); - CopyFileToDirectory ($"native-builds/libHarfBuzzSharp_windows/bin/{arch}/{CONFIGURATION}/libHarfBuzzSharp.dll", outDir); - CopyFileToDirectory ($"native-builds/libHarfBuzzSharp_windows/bin/{arch}/{CONFIGURATION}/libHarfBuzzSharp.pdb", outDir); - }); - - buildHarfBuzzArch ("Win32", "x86"); - buildHarfBuzzArch ("x64", "x64"); -}); - -// this builds the native C and C++ externals for Windows UWP -Task ("externals-uwp") - .IsDependentOn ("externals-init") - .IsDependentOn ("externals-angle-uwp") - .IsDependeeOf (ShouldBuildExternal ("uwp") ? "externals-native" : "externals-native-skip") - .WithCriteria (ShouldBuildExternal ("uwp")) - .WithCriteria (IsRunningOnWindows ()) - .Does (() => -{ - // libSkiaSharp - - var buildArch = new Action ((arch, skiaArch, dir) => { - if (!ShouldBuildArch (arch)) { - Warning ($"Skipping architecture: {arch}."); - return; - } - - // generate native skia build files - GnNinja ($"winrt/{arch}", "SkiaSharp", - $"is_official_build=true skia_enable_tools=false " + - $"target_os='winrt' target_cpu='{skiaArch}' " + - $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + - $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + - $"extra_cflags=[ " + - $" '-DSKIA_C_DLL', '/MD', '/EHsc', '/Z7', " + - $" '-DWINAPI_FAMILY=WINAPI_FAMILY_APP', '-DSK_BUILD_FOR_WINRT', '-DSK_HAS_DWRITE_1_H', '-DSK_HAS_DWRITE_2_H', '-DNO_GETENV' ] " + - $"extra_ldflags=[ '/DEBUG:FULL', '/APPCONTAINER', 'WindowsApp.lib' ]"); - - // copy libSkiaSharp to output - var outDir = $"output/native/uwp/{dir}"; - EnsureDirectoryExists (outDir); - CopyFileToDirectory (SKIA_PATH.CombineWithFilePath ($"out/winrt/{arch}/libSkiaSharp.dll"), outDir); - CopyFileToDirectory (SKIA_PATH.CombineWithFilePath ($"out/winrt/{arch}/libSkiaSharp.pdb"), outDir); - }); - - buildArch ("x64", "x64", "x64"); - buildArch ("Win32", "x86", "x86"); - buildArch ("ARM", "arm", "ARM"); - - // libHarfBuzzSharp - - var buildHarfBuzzArch = new Action ((arch, dir) => { - if (!ShouldBuildArch (arch)) { - Warning ($"Skipping architecture: {arch}."); - return; - } - - // build libHarfBuzzSharp - RunMSBuild ("native-builds/libHarfBuzzSharp_uwp/libHarfBuzzSharp.sln", platformTarget: arch); - - // copy libHarfBuzzSharp to output - var outDir = $"output/native/uwp/{dir}"; - EnsureDirectoryExists (outDir); - CopyFileToDirectory ($"native-builds/libHarfBuzzSharp_uwp/bin/{arch}/{CONFIGURATION}/libHarfBuzzSharp.dll", outDir); - CopyFileToDirectory ($"native-builds/libHarfBuzzSharp_uwp/bin/{arch}/{CONFIGURATION}/libHarfBuzzSharp.pdb", outDir); - }); - - buildHarfBuzzArch ("Win32", "x86"); - buildHarfBuzzArch ("x64", "x64"); - buildHarfBuzzArch ("ARM", "arm"); - - // SkiaSharp.Views.Interop.UWP - - var buildInteropArch = new Action ((arch, dir) => { - if (!ShouldBuildArch (arch)) { - Warning ($"Skipping architecture: {arch}."); - return; - } - - // build SkiaSharp.Views.Interop.UWP - RunMSBuild ("source/SkiaSharp.Views.Interop.UWP.sln", platformTarget: arch); - - // copy SkiaSharp.Views.Interop.UWP to native - var outDir = $"./output/native/uwp/{dir}"; - EnsureDirectoryExists (outDir); - CopyFileToDirectory ($"source/SkiaSharp.Views.Interop.UWP/bin/{arch}/{CONFIGURATION}/SkiaSharp.Views.Interop.UWP.dll", outDir); - CopyFileToDirectory ($"source/SkiaSharp.Views.Interop.UWP/bin/{arch}/{CONFIGURATION}/SkiaSharp.Views.Interop.UWP.pdb", outDir); - }); - - buildInteropArch ("Win32", "x86"); - buildInteropArch ("x64", "x64"); - buildInteropArch ("ARM", "arm"); - - // copy ANGLE externals - EnsureDirectoryExists ("./output/native/uwp/arm/"); - EnsureDirectoryExists ("./output/native/uwp/x86/"); - EnsureDirectoryExists ("./output/native/uwp/x64/"); - CopyFileToDirectory (ANGLE_PATH.CombineWithFilePath ("uwp/bin/UAP/ARM/libEGL.dll"), "./output/native/uwp/arm/"); - CopyFileToDirectory (ANGLE_PATH.CombineWithFilePath ("uwp/bin/UAP/ARM/libGLESv2.dll"), "./output/native/uwp/arm/"); - CopyFileToDirectory (ANGLE_PATH.CombineWithFilePath ("uwp/bin/UAP/Win32/libEGL.dll"), "./output/native/uwp/x86/"); - CopyFileToDirectory (ANGLE_PATH.CombineWithFilePath ("uwp/bin/UAP/Win32/libGLESv2.dll"), "./output/native/uwp/x86/"); - CopyFileToDirectory (ANGLE_PATH.CombineWithFilePath ("uwp/bin/UAP/x64/libEGL.dll"), "./output/native/uwp/x64/"); - CopyFileToDirectory (ANGLE_PATH.CombineWithFilePath ("uwp/bin/UAP/x64/libGLESv2.dll"), "./output/native/uwp/x64/"); -}); - -// this builds the native C and C++ externals for Mac OS X -Task ("externals-macos") - .IsDependentOn ("externals-osx"); -Task ("externals-osx") - .IsDependentOn ("externals-init") - .IsDependeeOf (ShouldBuildExternal ("osx") ? "externals-native" : "externals-native-skip") - .WithCriteria (ShouldBuildExternal ("osx")) - .WithCriteria (IsRunningOnMac ()) - .Does (() => -{ - // SkiaSharp - - var buildArch = new Action ((arch, skiaArch) => { - // generate native skia build files - GnNinja ($"mac/{arch}", "skia", - $"is_official_build=true skia_enable_tools=false " + - $"target_os='mac' target_cpu='{skiaArch}' " + - $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + - $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + - $"extra_cflags=[ '-DSKIA_C_DLL', '-mmacosx-version-min=10.7', '-stdlib=libc++' ] " + - $"extra_ldflags=[ '-Wl,macosx_version_min=10.7', '-stdlib=libc++' ]"); - - // build libSkiaSharp - XCodeBuild (new XCodeBuildSettings { - Project = "native-builds/libSkiaSharp_osx/libSkiaSharp.xcodeproj", - Target = "libSkiaSharp", - Sdk = "macosx", - Arch = arch, - Configuration = CONFIGURATION, - }); - - // copy libSkiaSharp to output - EnsureDirectoryExists ($"output/native/osx/{arch}"); - CopyDirectory ($"native-builds/libSkiaSharp_osx/build/{CONFIGURATION}/", $"output/native/osx/{arch}"); - - StripSign ($"output/native/osx/{arch}/libSkiaSharp.dylib"); - }); - - buildArch ("x86_64", "x64"); - - // create the fat dylib - RunLipo ("output/native/osx/", "libSkiaSharp.dylib", new [] { - (FilePath) "x86_64/libSkiaSharp.dylib" - }); - - // HarfBuzzSharp - - var buildHarfBuzzArch = new Action ((arch, skiaArch) => { - // build libHarfBuzzSharp - XCodeBuild (new XCodeBuildSettings { - Project = "native-builds/libHarfBuzzSharp_osx/libHarfBuzzSharp.xcodeproj", - Target = "libHarfBuzzSharp", - Sdk = "macosx", - Arch = arch, - Configuration = CONFIGURATION, - }); - - // copy libHarfBuzzSharp to output - EnsureDirectoryExists ($"output/native/osx/{arch}"); - CopyFileToDirectory ($"native-builds/libHarfBuzzSharp_osx/build/{CONFIGURATION}/libHarfBuzzSharp.dylib", $"output/native/osx/{arch}"); - - StripSign ($"output/native/osx/{arch}/libHarfBuzzSharp.dylib"); - }); - - buildHarfBuzzArch ("x86_64", "x64"); - - // create the fat dylib - RunLipo ("output/native/osx/", "libHarfBuzzSharp.dylib", new [] { - (FilePath) "x86_64/libHarfBuzzSharp.dylib" - }); -}); - -// this builds the native C and C++ externals for iOS -Task ("externals-ios") - .IsDependentOn ("externals-init") - .IsDependeeOf (ShouldBuildExternal ("ios") ? "externals-native" : "externals-native-skip") - .WithCriteria (ShouldBuildExternal ("ios")) - .WithCriteria (IsRunningOnMac ()) - .Does (() => -{ - // SkiaSharp - - var buildArch = new Action ((sdk, arch, skiaArch) => { - // generate native skia build files - GnNinja ($"ios/{arch}", "skia", - $"is_official_build=true skia_enable_tools=false " + - $"target_os='ios' target_cpu='{skiaArch}' " + - $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + - $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + - $"extra_cflags=[ '-DSKIA_C_DLL', '-mios-version-min=8.0' ] " + - $"extra_ldflags=[ '-Wl,ios_version_min=8.0' ]"); - - // build libSkiaSharp - XCodeBuild (new XCodeBuildSettings { - Project = "native-builds/libSkiaSharp_ios/libSkiaSharp.xcodeproj", - Target = "libSkiaSharp", - Sdk = sdk, - Arch = arch, - Configuration = CONFIGURATION, - }); - - // copy libSkiaSharp to output - EnsureDirectoryExists ($"output/native/ios/{arch}"); - CopyDirectory ($"native-builds/libSkiaSharp_ios/build/{CONFIGURATION}-{sdk}", $"output/native/ios/{arch}"); - - StripSign ($"output/native/ios/{arch}/libSkiaSharp.framework"); - }); - - buildArch ("iphonesimulator", "i386", "x86"); - buildArch ("iphonesimulator", "x86_64", "x64"); - buildArch ("iphoneos", "armv7", "arm"); - buildArch ("iphoneos", "arm64", "arm64"); - - // create the fat framework - CopyDirectory ("output/native/ios/armv7/libSkiaSharp.framework/", "output/native/ios/libSkiaSharp.framework/"); - DeleteFile ("output/native/ios/libSkiaSharp.framework/libSkiaSharp"); - RunLipo ("output/native/ios/", "libSkiaSharp.framework/libSkiaSharp", new [] { - (FilePath) "i386/libSkiaSharp.framework/libSkiaSharp", - (FilePath) "x86_64/libSkiaSharp.framework/libSkiaSharp", - (FilePath) "armv7/libSkiaSharp.framework/libSkiaSharp", - (FilePath) "arm64/libSkiaSharp.framework/libSkiaSharp" - }); - - // HarfBuzzSharp - - var buildHarfBuzzArch = new Action ((sdk, arch) => { - // build libHarfBuzzSharp - XCodeBuild (new XCodeBuildSettings { - Project = "native-builds/libHarfBuzzSharp_ios/libHarfBuzzSharp.xcodeproj", - Target = "libHarfBuzzSharp", - Sdk = sdk, - Arch = arch, - Configuration = CONFIGURATION, - }); - - // copy libHarfBuzzSharp_ios to output - EnsureDirectoryExists ($"output/native/ios/{arch}"); - CopyFileToDirectory ($"native-builds/libHarfBuzzSharp_ios/build/{CONFIGURATION}-{sdk}/libHarfBuzzSharp.a", $"output/native/ios/{arch}"); - - StripSign ($"output/native/ios/{arch}/libHarfBuzzSharp.a"); - }); - - buildHarfBuzzArch ("iphonesimulator", "i386"); - buildHarfBuzzArch ("iphonesimulator", "x86_64"); - buildHarfBuzzArch ("iphoneos", "armv7"); - buildHarfBuzzArch ("iphoneos", "arm64"); - - // create the fat archive - RunLipo ("output/native/ios/", "libHarfBuzzSharp.a", new [] { - (FilePath) "i386/libHarfBuzzSharp.a", - (FilePath) "x86_64/libHarfBuzzSharp.a", - (FilePath) "armv7/libHarfBuzzSharp.a", - (FilePath) "arm64/libHarfBuzzSharp.a" - }); -}); - -// this builds the native C and C++ externals for tvOS -Task ("externals-tvos") - .IsDependentOn ("externals-init") - .IsDependeeOf (ShouldBuildExternal ("tvos") ? "externals-native" : "externals-native-skip") - .WithCriteria (ShouldBuildExternal ("tvos")) - .WithCriteria (IsRunningOnMac ()) - .Does (() => -{ - // SkiaSharp - - var buildArch = new Action ((sdk, arch, skiaArch) => { - // generate native skia build files - GnNinja ($"tvos/{arch}", "skia", - $"is_official_build=true skia_enable_tools=false " + - $"target_os='tvos' target_cpu='{skiaArch}' " + - $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + - $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + - $"extra_cflags=[ '-DSK_BUILD_FOR_TVOS', '-DSKIA_C_DLL', '-mtvos-version-min=9.0' ] " + - $"extra_ldflags=[ '-Wl,tvos_version_min=9.0' ]"); - - // build libSkiaSharp - XCodeBuild (new XCodeBuildSettings { - Project = "native-builds/libSkiaSharp_tvos/libSkiaSharp.xcodeproj", - Target = "libSkiaSharp", - Sdk = sdk, - Arch = arch, - Configuration = CONFIGURATION, - }); - - // copy libSkiaSharp to output - EnsureDirectoryExists ($"output/native/tvos/{arch}"); - CopyDirectory ($"native-builds/libSkiaSharp_tvos/build/{CONFIGURATION}-{sdk}", $"output/native/tvos/{arch}"); - - StripSign ($"output/native/tvos/{arch}/libSkiaSharp.framework"); - }); - - buildArch ("appletvsimulator", "x86_64", "x64"); - buildArch ("appletvos", "arm64", "arm64"); - - // create the fat framework - CopyDirectory ("output/native/tvos/arm64/libSkiaSharp.framework/", "output/native/tvos/libSkiaSharp.framework/"); - DeleteFile ("output/native/tvos/libSkiaSharp.framework/libSkiaSharp"); - RunLipo ("output/native/tvos/", "libSkiaSharp.framework/libSkiaSharp", new [] { - (FilePath) "x86_64/libSkiaSharp.framework/libSkiaSharp", - (FilePath) "arm64/libSkiaSharp.framework/libSkiaSharp" - }); - - // HarfBuzzSharp - - var buildHarfBuzzArch = new Action ((sdk, arch) => { - // build libHarfBuzzSharp - XCodeBuild (new XCodeBuildSettings { - Project = "native-builds/libHarfBuzzSharp_tvos/libHarfBuzzSharp.xcodeproj", - Target = "libHarfBuzzSharp", - Sdk = sdk, - Arch = arch, - Configuration = CONFIGURATION, - }); - - // copy libHarfBuzzSharp to output - EnsureDirectoryExists ($"output/native/tvos/{arch}"); - CopyFileToDirectory ($"native-builds/libHarfBuzzSharp_tvos/build/{CONFIGURATION}-{sdk}/libHarfBuzzSharp.a", $"output/native/tvos/{arch}"); - - StripSign ($"output/native/tvos/{arch}/libHarfBuzzSharp.a"); - }); - - buildHarfBuzzArch ("appletvsimulator", "x86_64"); - buildHarfBuzzArch ("appletvos", "arm64"); - - // create the fat framework - RunLipo ("output/native/tvos/", "libHarfBuzzSharp.a", new [] { - (FilePath) "x86_64/libHarfBuzzSharp.a", - (FilePath) "arm64/libHarfBuzzSharp.a" - }); -}); - -// this builds the native C and C++ externals for watchOS -Task ("externals-watchos") - .IsDependentOn ("externals-init") - .IsDependeeOf (ShouldBuildExternal ("watchos") ? "externals-native" : "externals-native-skip") - .WithCriteria (ShouldBuildExternal ("watchos")) - .WithCriteria (IsRunningOnMac ()) - .Does (() => -{ - // SkiaSharp - - var buildArch = new Action ((sdk, arch, skiaArch) => { - // generate native skia build files - GnNinja ($"watchos/{arch}", "skia", - $"is_official_build=true skia_enable_tools=false " + - $"target_os='watchos' target_cpu='{skiaArch}' " + - $"skia_enable_gpu=false " + - $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + - $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + - $"extra_cflags=[ '-DSK_BUILD_FOR_WATCHOS', '-DSKIA_C_DLL', '-mwatchos-version-min=2.0' ] " + - $"extra_ldflags=[ '-Wl,watchos_version_min=2.0' ]"); - - // build libSkiaSharp - XCodeBuild (new XCodeBuildSettings { - Project = "native-builds/libSkiaSharp_watchos/libSkiaSharp.xcodeproj", - Target = "libSkiaSharp", - Sdk = sdk, - Arch = arch, - Configuration = CONFIGURATION, - }); - - // copy libSkiaSharp to output - EnsureDirectoryExists ($"output/native/watchos/{arch}"); - CopyDirectory ($"native-builds/libSkiaSharp_watchos/build/{CONFIGURATION}-{sdk}", $"output/native/watchos/{arch}"); - - StripSign ($"output/native/watchos/{arch}/libSkiaSharp.framework"); - }); - - buildArch ("watchsimulator", "i386", "x86"); - buildArch ("watchos", "armv7k", "arm"); - buildArch ("watchos", "arm64_32", "arm64"); - - // create the fat framework - CopyDirectory ("output/native/watchos/armv7k/libSkiaSharp.framework/", "output/native/watchos/libSkiaSharp.framework/"); - DeleteFile ("output/native/watchos/libSkiaSharp.framework/libSkiaSharp"); - RunLipo ("output/native/watchos/", "libSkiaSharp.framework/libSkiaSharp", new [] { - (FilePath) "i386/libSkiaSharp.framework/libSkiaSharp", - (FilePath) "armv7k/libSkiaSharp.framework/libSkiaSharp", - (FilePath) "arm64_32/libSkiaSharp.framework/libSkiaSharp" - }); - - // HarfBuzzSharp - - var buildHarfBuzzArch = new Action ((sdk, arch) => { - // build libHarfBuzzSharp - XCodeBuild (new XCodeBuildSettings { - Project = "native-builds/libHarfBuzzSharp_watchos/libHarfBuzzSharp.xcodeproj", - Target = "libHarfBuzzSharp", - Sdk = sdk, - Arch = arch, - Configuration = CONFIGURATION, - }); - - // copy libHarfBuzzSharp to output - EnsureDirectoryExists ($"output/native/watchos/{arch}"); - CopyFileToDirectory ($"native-builds/libHarfBuzzSharp_watchos/build/{CONFIGURATION}-{sdk}/libHarfBuzzSharp.a", $"output/native/watchos/{arch}"); - - StripSign ($"output/native/watchos/{arch}/libHarfBuzzSharp.a"); - }); - - buildHarfBuzzArch ("watchsimulator", "i386"); - buildHarfBuzzArch ("watchos", "armv7k"); - buildHarfBuzzArch ("watchos", "arm64_32"); - - // create the fat framework - RunLipo ("output/native/watchos/", "libHarfBuzzSharp.a", new [] { - (FilePath) "i386/libHarfBuzzSharp.a", - (FilePath) "armv7k/libHarfBuzzSharp.a", - (FilePath) "arm64_32/libHarfBuzzSharp.a" - }); -}); - -// this builds the native C and C++ externals for Android -Task ("externals-android") - .IsDependentOn ("externals-init") - .IsDependeeOf (ShouldBuildExternal ("android") ? "externals-native" : "externals-native-skip") - .WithCriteria (ShouldBuildExternal ("android")) - .WithCriteria (IsRunningOnMac () || IsRunningOnWindows ()) - .Does (() => -{ - var cmd = IsRunningOnWindows () ? ".cmd" : ""; - var ndkbuild = ANDROID_NDK_HOME.CombineWithFilePath ($"ndk-build{cmd}").FullPath; - - // SkiaSharp - - var buildArch = new Action ((arch, skiaArch) => { - if (!ShouldBuildArch (arch)) { - Warning ($"Skipping architecture: {arch}."); - return; - } - - // generate native skia build files - GnNinja ($"android/{arch}", "SkiaSharp", - $"is_official_build=true skia_enable_tools=false " + - $"target_os='android' target_cpu='{skiaArch}' " + - $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + - $"skia_use_system_expat=false skia_use_system_freetype2=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + - $"extra_cflags=[ '-DSKIA_C_DLL' ] " + - $"ndk='{ANDROID_NDK_HOME}' " + - $"ndk_api={(skiaArch == "x64" || skiaArch == "arm64" ? 21 : 9)}"); - - var outDir = $"output/native/android/{arch}"; - EnsureDirectoryExists (outDir); - CopyFileToDirectory (SKIA_PATH.CombineWithFilePath ($"out/android/{arch}/libSkiaSharp.so"), outDir); - }); - - buildArch ("x86", "x86"); - buildArch ("x86_64", "x64"); - buildArch ("armeabi-v7a", "arm"); - buildArch ("arm64-v8a", "arm64"); - - // HarfBuzzSharp - - var buildHarfBuzzArch = new Action ((arch) => { - if (!ShouldBuildArch (arch)) { - Warning ($"Skipping architecture: {arch}."); - return; - } - - // build libHarfBuzzSharp - RunProcess (ndkbuild, new ProcessSettings { - Arguments = $"APP_ABI={arch}", - WorkingDirectory = ROOT_PATH.Combine ("native-builds/libHarfBuzzSharp_android").FullPath, - }); - - // copy libSkiaSharp to output - var outDir = $"output/native/android/{arch}"; - EnsureDirectoryExists (outDir); - CopyFileToDirectory ($"native-builds/libHarfBuzzSharp_android/libs/{arch}/libHarfBuzzSharp.so", outDir); - }); - - buildHarfBuzzArch ("x86"); - buildHarfBuzzArch ("x86_64"); - buildHarfBuzzArch ("armeabi-v7a"); - buildHarfBuzzArch ("arm64-v8a"); -}); - -// this builds the native C and C++ externals for Linux -Task ("externals-linux") - .IsDependentOn ("externals-init") - .IsDependeeOf (ShouldBuildExternal ("linux") ? "externals-native" : "externals-native-skip") - .WithCriteria (ShouldBuildExternal ("linux")) - .WithCriteria (IsRunningOnLinux ()) - .Does (() => -{ - var SUPPORT_GPU = (EnvironmentVariable ("SUPPORT_GPU") ?? "1") == "1"; // 1 == true, 0 == false - - var CC = EnvironmentVariable ("CC"); - var CXX = EnvironmentVariable ("CXX"); - var AR = EnvironmentVariable ("AR"); - var CUSTOM_COMPILERS = ""; - if (!string.IsNullOrEmpty (CC)) - CUSTOM_COMPILERS += $"cc='{CC}' "; - if (!string.IsNullOrEmpty (CXX)) - CUSTOM_COMPILERS += $"cxx='{CXX}' "; - if (!string.IsNullOrEmpty (AR)) - CUSTOM_COMPILERS += $"ar='{AR}' "; - - // libSkiaSharp - - var buildArch = new Action ((arch) => { - var soname = GetVersion ("libSkiaSharp", "soname"); - - // generate native skia build files - GnNinja ($"linux/{arch}", "SkiaSharp", - $"is_official_build=true skia_enable_tools=false " + - $"target_os='linux' target_cpu='{arch}' " + - $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + - $"skia_use_system_expat=false skia_use_system_freetype2=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + - $"skia_enable_gpu={(SUPPORT_GPU ? "true" : "false")} " + - $"extra_cflags=[ '-DSKIA_C_DLL' ] " + - $"extra_ldflags=[ '-static-libstdc++', '-static-libgcc', '-Wl,--version-script={ROOT_PATH.CombineWithFilePath("native-builds/libSkiaSharp_linux/libSkiaSharp.map")}' ] " + - $"{CUSTOM_COMPILERS} " + - $"linux_soname_version='{soname}'"); - - // copy libSkiaSharp to output - var outDir = $"output/native/linux/{arch}"; - var libSkiaSharp = SKIA_PATH.CombineWithFilePath ($"out/linux/{arch}/libSkiaSharp.so.{soname}"); - EnsureDirectoryExists (outDir); - CopyFileToDirectory (libSkiaSharp, outDir); - CopyFile (libSkiaSharp, $"{outDir}/libSkiaSharp.so"); - }); - - buildArch ("x64"); - - // libHarfBuzzSharp - - var buildHarfBuzzArch = new Action ((arch) => { - // build libHarfBuzzSharp - // RunProcess ("make", new ProcessSettings { - // Arguments = "clean", - // WorkingDirectory = "native-builds/libHarfBuzzSharp_linux", - // }); - RunProcess ("make", new ProcessSettings { - Arguments = $"ARCH={arch} SONAME_VERSION={GetVersion ("HarfBuzz", "soname")} LDFLAGS=-static-libstdc++", - WorkingDirectory = "native-builds/libHarfBuzzSharp_linux", - }); - - // copy libHarfBuzzSharp to output - EnsureDirectoryExists ($"output/native/linux/{arch}"); - var so = $"native-builds/libHarfBuzzSharp_linux/bin/{arch}/libHarfBuzzSharp.so.{GetVersion ("HarfBuzz", "soname")}"; - CopyFileToDirectory (so, $"output/native/linux/{arch}"); - CopyFile (so, $"output/native/linux/{arch}/libHarfBuzzSharp.so"); - }); - - buildHarfBuzzArch ("x64"); -}); - -Task ("externals-tizen") - .IsDependentOn ("externals-init") - .IsDependeeOf (ShouldBuildExternal ("tizen") ? "externals-native" : "externals-native-skip") - .WithCriteria (ShouldBuildExternal ("tizen")) - .Does (() => -{ - var bat = IsRunningOnWindows () ? ".bat" : ""; - var tizen = TIZEN_STUDIO_HOME.CombineWithFilePath ($"tools/ide/bin/tizen{bat}").FullPath; - - // libSkiaSharp - - var buildArch = new Action ((arch, skiaArch) => { - // generate native skia build files - GnNinja ($"tizen/{arch}", "skia", - $"is_official_build=true skia_enable_tools=false " + - $"target_os='tizen' target_cpu='{skiaArch}' " + - $"skia_enable_gpu=true " + - $"skia_use_icu=false " + - $"skia_use_sfntly=false " + - $"skia_use_piex=true " + - $"skia_use_system_expat=false " + - $"skia_use_system_freetype2=true " + - $"skia_use_system_libjpeg_turbo=false " + - $"skia_use_system_libpng=false " + - $"skia_use_system_libwebp=false " + - $"skia_use_system_zlib=true " + - $"extra_cflags=[ '-DSKIA_C_DLL', '-DSK_BUILD_FOR_TIZEN' ] " + - $"ncli='{TIZEN_STUDIO_HOME}' " + - $"ncli_version='4.0'"); - - // build libSkiaSharp - RunProcess (tizen, new ProcessSettings { - Arguments = $"build-native -a {skiaArch} -c llvm -C {CONFIGURATION}" , - WorkingDirectory = ROOT_PATH.Combine ("native-builds/libSkiaSharp_tizen").FullPath, - }); - - // copy libSkiaSharp to output - var outDir = $"output/native/tizen/{arch}"; - var libSkiaSharp = $"native-builds/libSkiaSharp_tizen/{CONFIGURATION}/libskiasharp.so"; - EnsureDirectoryExists (outDir); - CopyFile (libSkiaSharp, $"{outDir}/libSkiaSharp.so"); - }); - - buildArch ("armel", "arm"); - buildArch ("i386", "x86"); - - // libHarfBuzzSharp - - var buildHarfBuzzArch = new Action ((arch, skiaArch) => { - // build libHarfBuzzSharp - RunProcess(tizen, new ProcessSettings { - Arguments = $"build-native -a {skiaArch} -c llvm -C {CONFIGURATION}", - WorkingDirectory = ROOT_PATH.Combine ("native-builds/libHarfBuzzSharp_tizen").FullPath - }); - - // copy libHarfBuzzSharp to output - var outDir = $"output/native/tizen/{arch}"; - var so = $"native-builds/libHarfBuzzSharp_tizen/{CONFIGURATION}/libharfbuzzsharp.so"; - EnsureDirectoryExists ($"output/native/tizen/{arch}"); - CopyFile (so, $"{outDir}/libHarfBuzzSharp.so"); - }); - - buildHarfBuzzArch ("armel", "arm"); - buildHarfBuzzArch ("i386", "x86"); -}); - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// EXTERNALS DOWNLOAD - download any externals that are needed -//////////////////////////////////////////////////////////////////////////////////////////////////// - -Task ("externals-download") - .IsDependentOn ("download-last-successful-build") - .Does (() => -{ - var artifactName = "native-default"; - var artifactFilename = $"{artifactName}.zip"; - var url = string.Format(AZURE_BUILD_URL, AZURE_BUILD_ID, artifactName); - - var outputPath = "./output"; - EnsureDirectoryExists (outputPath); - CleanDirectories (outputPath); - - DownloadFile (url, $"{outputPath}/{artifactFilename}"); - Unzip ($"{outputPath}/{artifactFilename}", outputPath); - MoveDirectory ($"{outputPath}/{artifactName}", $"{outputPath}/native"); -}); - -Task ("externals-angle-uwp") - .WithCriteria (!FileExists (ANGLE_PATH.CombineWithFilePath ("uwp/ANGLE.WindowsStore.nuspec"))) - .Does (() => -{ - var id = "ANGLE.WindowsStore"; - var version = GetVersion (id, "release"); - var angleUrl = $"https://api.nuget.org/v3-flatcontainer/{id.ToLower ()}/{version}/{id.ToLower ()}.{version}.nupkg"; - var angleRoot = ANGLE_PATH.Combine ("uwp"); - var angleNupkg = angleRoot.CombineWithFilePath ($"angle_{version}.nupkg"); - - EnsureDirectoryExists (angleRoot); - CleanDirectory (angleRoot); - - DownloadFile (angleUrl, angleNupkg); - Unzip (angleNupkg, angleRoot); -}); - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// CLEAN - remove all the build artefacts -//////////////////////////////////////////////////////////////////////////////////////////////////// - -Task ("clean-externals") - .Does (() => -{ - // skia - CleanDirectories ("externals/skia/out"); - CleanDirectories ("externals/skia/xcodebuild"); - - // angle - CleanDirectories ("externals/angle"); - - // all - CleanDirectories ("output/native"); - // ios - CleanDirectories ("native-builds/libSkiaSharp_ios/build"); - CleanDirectories ("native-builds/libHarfBuzzSharp_ios/build"); - // tvos - CleanDirectories ("native-builds/libSkiaSharp_tvos/build"); - CleanDirectories ("native-builds/libHarfBuzzSharp_tvos/build"); - // watchos - CleanDirectories ("native-builds/libSkiaSharp_watchos/build"); - CleanDirectories ("native-builds/libHarfBuzzSharp_watchos/build"); - // osx - CleanDirectories ("native-builds/libSkiaSharp_osx/build"); - CleanDirectories ("native-builds/libHarfBuzzSharp_osx/build"); -}); diff --git a/cake/UpdateDocs.cake b/cake/UpdateDocs.cake index 096f56c83e..17dde5ccfe 100644 --- a/cake/UpdateDocs.cake +++ b/cake/UpdateDocs.cake @@ -36,7 +36,7 @@ void CopyChangelogs (DirectoryPath diffRoot, string id, string version) } Task ("docs-download-build-artifact") - .IsDependentOn ("download-last-successful-build") + .IsDependentOn ("determine-last-successful-build") .Does (() => { var url = string.Format(AZURE_BUILD_URL, AZURE_BUILD_ID, "nuget"); diff --git a/cake/Utils.cake b/cake/Utils.cake deleted file mode 100644 index ec749ee4ac..0000000000 --- a/cake/Utils.cake +++ /dev/null @@ -1,118 +0,0 @@ - -internal static class MacPlatformDetector -{ - internal static readonly Lazy IsMac = new Lazy (IsRunningOnMac); - - [DllImport ("libc")] - static extern int uname (IntPtr buf); - - static bool IsRunningOnMac () - { - IntPtr buf = IntPtr.Zero; - try { - buf = Marshal.AllocHGlobal (8192); - // This is a hacktastic way of getting sysname from uname () - if (uname (buf) == 0) { - string os = Marshal.PtrToStringAnsi (buf); - if (os == "Darwin") - return true; - } - } catch { - } finally { - if (buf != IntPtr.Zero) - Marshal.FreeHGlobal (buf); - } - return false; - } -} - -bool IsRunningOnMac () -{ - return System.Environment.OSVersion.Platform == PlatformID.MacOSX || MacPlatformDetector.IsMac.Value; -} - -bool IsRunningOnLinux () -{ - return IsRunningOnUnix () && !IsRunningOnMac (); -} - -string GetMSBuildToolPath (string possible) -{ - if (string.IsNullOrEmpty (possible)) { - if (IsRunningOnLinux ()) { - possible = "/usr/bin/msbuild"; - } else if (IsRunningOnMac ()) { - possible = "/Library/Frameworks/Mono.framework/Versions/Current/Commands/msbuild"; - } else if (IsRunningOnWindows ()) { - possible = null; // use the default - } - } - return possible; -} - -string GetVersion (string lib, string type = "nuget") -{ - try { - var contents = FileReadText ("./VERSIONS.txt"); - var match = Regex.Match(contents, $@"^{lib}\s*{type}\s*(.*)$", RegexOptions.IgnoreCase | RegexOptions.Multiline); - return match.Groups[1].Value.Trim(); - } catch { - return ""; - } -} - -bool ShouldBuildExternal (string platform) -{ - platform = platform?.ToLower() ?? ""; - - if (SKIP_EXTERNALS.Contains ("all") || SKIP_EXTERNALS.Contains ("true")) - return false; - - switch (platform) { - case "mac": - case "macos": - platform = "osx"; - break; - case "win": - platform = "windows"; - break; - } - - if (SKIP_EXTERNALS.Contains (platform)) - return false; - - return true; -} - -bool ShouldBuildArch (string arch) -{ - arch = arch?.ToLower() ?? ""; - - if (BUILD_ARCH.Length == 0 || BUILD_ARCH.Contains ("all")) - return true; - - switch (arch) { - case "win32": - case "i386": - arch = "x86"; - break; - case "x86_64": - arch = "x64"; - break; - case "armeabi-v7a": - case "armel": - case "armv7": - case "armv7k": - arch = "arm"; - break; - case "arm64_32": - case "arm64-v8a": - arch = "arm64"; - break; - } - - if (BUILD_ARCH.Contains (arch)) - return true; - - return false; -} diff --git a/cake/UtilsManaged.cake b/cake/UtilsManaged.cake index d3be215ca7..9be1564aa8 100644 --- a/cake/UtilsManaged.cake +++ b/cake/UtilsManaged.cake @@ -1,51 +1,6 @@ var MSBuildNS = (XNamespace) "http://schemas.microsoft.com/developer/msbuild/2003"; -void RunMSBuild ( - FilePath solution, - string platform = "Any CPU", - string platformTarget = null, - bool restore = true, - bool restoreOnly = false) -{ - EnsureDirectoryExists ("./output/nugets/"); - - MSBuild (solution, c => { - c.Configuration = CONFIGURATION; - c.Verbosity = VERBOSITY; - c.ToolVersion = MSBuildToolVersion.VS2017; - - if (restoreOnly) { - c.Targets.Clear(); - c.Targets.Add("Restore"); - } else { - c.Restore = restore; - } - - if (!string.IsNullOrEmpty (platformTarget)) { - platform = null; - c.PlatformTarget = (PlatformTarget)Enum.Parse(typeof(PlatformTarget), platformTarget); - } else { - c.PlatformTarget = PlatformTarget.MSIL; - c.MSBuildPlatform = MSBuildPlatform.x86; - } - - if (!string.IsNullOrEmpty (platform)) { - c.Properties ["Platform"] = new [] { "\"" + platform + "\"" }; - } - - c.Properties ["RestoreNoCache"] = new [] { "true" }; - c.Properties ["RestorePackagesPath"] = new [] { PACKAGE_CACHE_PATH.FullPath }; - // c.Properties ["RestoreSources"] = NuGetSources; - var sep = IsRunningOnWindows () ? ";" : "%3B"; - c.ArgumentCustomization = args => args.Append ($"/p:RestoreSources=\"{string.Join (sep, NuGetSources)}\""); - - if (!string.IsNullOrEmpty (MSBuildToolPath)) { - c.ToolPath = MSBuildToolPath; - } - }); -} - var PackageNuGet = new Action ((nuspecPath, outputPath) => { EnsureDirectoryExists (outputPath); @@ -57,14 +12,6 @@ var PackageNuGet = new Action ((nuspecPath, outputPath) }); }); -var RunProcess = new Action ((process, settings) => -{ - var result = StartProcess (process, settings); - if (result != 0) { - throw new Exception ($"Process '{process}' failed with error: {result}"); - } -}); - void RunTests (FilePath testAssembly, bool is32) { var dir = testAssembly.GetDirectory (); diff --git a/cake/externals.cake b/cake/externals.cake new file mode 100644 index 0000000000..31fbce6623 --- /dev/null +++ b/cake/externals.cake @@ -0,0 +1,89 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// EXTERNALS - the native C and C++ libraries +//////////////////////////////////////////////////////////////////////////////////////////////////// + +var externalsTask = Task("externals-native"); + +foreach (var cake in GetFiles("native/*/build.cake")) +{ + var native = cake.GetDirectory().GetDirectoryName(); + var should = ShouldBuildExternal(native); + var localCake = cake; + + var task = Task($"externals-{native}") + .WithCriteria(should) + .Does(() => RunCake(localCake, "Default")); + + externalsTask.IsDependentOn(task); +} + +Task("externals-osx") + .IsDependentOn("externals-macos"); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// EXTERNALS DOWNLOAD - download any externals that are needed +//////////////////////////////////////////////////////////////////////////////////////////////////// + +Task("externals-download") + .IsDependentOn("determine-last-successful-build") + .Does(() => +{ + var artifactName = "native"; + var artifactFilename = $"{artifactName}.zip"; + var url = string.Format(AZURE_BUILD_URL, AZURE_BUILD_ID, artifactName); + + var outputPath = "./output"; + EnsureDirectoryExists(outputPath); + CleanDirectories(outputPath); + + DownloadFile(url, $"{outputPath}/{artifactFilename}"); + Unzip($"{outputPath}/{artifactFilename}", outputPath); + MoveDirectory($"{outputPath}/{artifactName}", $"{outputPath}/native"); +}); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// CLEAN - remove all the build artefacts +//////////////////////////////////////////////////////////////////////////////////////////////////// + +Task("clean-externals") + .Does(() => +{ + // skia + CleanDirectories("externals/skia/out"); + CleanDirectories("externals/skia/xcodebuild"); + + // angle + CleanDirectories("externals/angle"); + + // all + CleanDirectories("output/native"); + + // intermediate + CleanDirectories("native/*/*/bin"); + CleanDirectories("native/*/*/obj"); + CleanDirectories("native/*/*/libs"); + CleanDirectories("native/*/tools"); +}); + +bool ShouldBuildExternal(string platform) +{ + platform = platform?.ToLower() ?? ""; + + if (SKIP_EXTERNALS.Contains("all") || SKIP_EXTERNALS.Contains("true")) + return false; + + switch (platform) { + case "mac": + case "macos": + platform = "osx"; + break; + case "win": + platform = "windows"; + break; + } + + if (SKIP_EXTERNALS.Contains(platform)) + return false; + + return true; +} diff --git a/cake/msbuild.cake b/cake/msbuild.cake new file mode 100644 index 0000000000..daa77857d8 --- /dev/null +++ b/cake/msbuild.cake @@ -0,0 +1,47 @@ +DirectoryPath PACKAGE_CACHE_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/package_cache")); + +void RunMSBuild( + FilePath solution, + string platform = "Any CPU", + string platformTarget = null, + bool restore = true, + bool restoreOnly = false) +{ + var nugets = MakeAbsolute(ROOT_PATH.Combine("output/nugets")); + var nugetSources = new [] { nugets.FullPath, "https://api.nuget.org/v3/index.json" }; + + EnsureDirectoryExists(nugets); + + MSBuild(solution, c => { + c.Configuration = CONFIGURATION; + c.Verbosity = VERBOSITY; + c.ToolVersion = MSBuildToolVersion.VS2017; + + c.NoLogo = VERBOSITY == Verbosity.Minimal; + + if (restoreOnly) { + c.Targets.Clear(); + c.Targets.Add("Restore"); + } else { + c.Restore = restore; + } + + if (!string.IsNullOrEmpty(platformTarget)) { + platform = null; + c.PlatformTarget = (PlatformTarget)Enum.Parse(typeof(PlatformTarget), platformTarget); + } else { + c.PlatformTarget = PlatformTarget.MSIL; + c.MSBuildPlatform = MSBuildPlatform.x86; + } + + if (!string.IsNullOrEmpty(platform)) { + c.Properties ["Platform"] = new [] { $"\"{platform}\"" }; + } + + c.Properties ["RestoreNoCache"] = new [] { "true" }; + c.Properties ["RestorePackagesPath"] = new [] { PACKAGE_CACHE_PATH.FullPath }; + // c.Properties ["RestoreSources"] = nugetSources; + var sep = IsRunningOnWindows () ? ";" : "%3B"; + c.ArgumentCustomization = args => args.Append ($"/p:RestoreSources=\"{string.Join (sep, nugetSources)}\""); + }); +} diff --git a/cake/native-shared.cake b/cake/native-shared.cake new file mode 100644 index 0000000000..7e6d2c97cd --- /dev/null +++ b/cake/native-shared.cake @@ -0,0 +1,128 @@ +#load "shared.cake" + +var BUILD_ARCH = Argument("arch", Argument("buildarch", EnvironmentVariable("BUILD_ARCH") ?? "")) + .ToLower().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + +var BUILD_VARIANT = Argument("variant", EnvironmentVariable("BUILD_VARIANT")); +var ADDITIONAL_GN_ARGS = Argument("gn", EnvironmentVariable("ADDITIONAL_GN_ARGS")); + +var PYTHON_EXE = Argument("python", EnvironmentVariable("PYTHON_EXE") ?? "python"); + +if (!string.IsNullOrEmpty(PYTHON_EXE) && FileExists(PYTHON_EXE)) { + var dir = MakeAbsolute((FilePath)PYTHON_EXE).GetDirectory(); + var oldPath = EnvironmentVariable("PATH"); + System.Environment.SetEnvironmentVariable("PATH", dir.FullPath + System.IO.Path.PathSeparator + oldPath); +} + +DirectoryPath DEPOT_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/depot_tools")); +DirectoryPath SKIA_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/skia")); +DirectoryPath HARFBUZZ_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/harfbuzz")); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// TASKS +//////////////////////////////////////////////////////////////////////////////////////////////////// + +Task("git-sync-deps") + .Does(() => +{ + RunProcess(PYTHON_EXE, new ProcessSettings { + Arguments = SKIA_PATH.CombineWithFilePath("tools/git-sync-deps").FullPath, + WorkingDirectory = SKIA_PATH.FullPath, + }); +}); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// HELPERS +//////////////////////////////////////////////////////////////////////////////////////////////////// + +void GnNinja(DirectoryPath outDir, string target, string skiaArgs) +{ + var isCore = Context.Environment.Runtime.IsCoreClr; + + var exe = IsRunningOnWindows() ? ".exe" : ""; + var quote = IsRunningOnWindows() || isCore ? "\"" : "'"; + var innerQuote = IsRunningOnWindows() || isCore ? "\\\"" : "\""; + + // generate native skia build files + RunProcess(SKIA_PATH.CombineWithFilePath($"bin/gn{exe}"), new ProcessSettings { + Arguments = $"gen out/{outDir} --args={quote}{skiaArgs.Replace("'", innerQuote)}{quote}", + WorkingDirectory = SKIA_PATH.FullPath, + }); + + // build native skia + RunProcess(DEPOT_PATH.CombineWithFilePath($"ninja{exe}"), new ProcessSettings { + Arguments = $"{target} -C out/{outDir}", + WorkingDirectory = SKIA_PATH.FullPath, + }); +} + +void StripSign(FilePath target) +{ + if (!IsRunningOnMac()) + throw new InvalidOperationException("lipo is only available on Unix."); + + 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 Unix."); + + 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() ?? ""; + + if (BUILD_ARCH.Length == 0 || BUILD_ARCH.Contains("all")) + return false; + + switch (arch) { + case "win32": + case "i386": + arch = "x86"; + break; + case "x86_64": + arch = "x64"; + break; + case "armeabi-v7a": + case "armel": + case "armv7": + case "armv7k": + arch = "arm"; + break; + case "arm64_32": + case "arm64-v8a": + arch = "arm64"; + break; + } + + if (BUILD_ARCH.Contains(arch)) + return false; + + Warning($"Skipping architecture: {arch}"); + + return true; +} diff --git a/cake/shared.cake b/cake/shared.cake new file mode 100644 index 0000000000..c808400f15 --- /dev/null +++ b/cake/shared.cake @@ -0,0 +1,113 @@ +using System.Runtime.InteropServices; +using System.Text.RegularExpressions; + +var TARGET = Argument("t", Argument("target", "Default")); +var VERBOSITY = Argument("v", Argument("verbosity", Verbosity.Normal)); +var CONFIGURATION = Argument("c", Argument("configuration", "Release")); + +var CAKE_ARGUMENTS = (IReadOnlyDictionary)Context.Arguments + .GetType() + .GetProperty("Arguments") + .GetValue(Context.Arguments); + +DirectoryPath PROFILE_PATH = EnvironmentVariable("USERPROFILE") ?? EnvironmentVariable("HOME"); + +void RunCake(FilePath cake, string target = null, Dictionary arguments = null) +{ + var args = new Dictionary(); + + foreach (var arg in CAKE_ARGUMENTS) { + args[arg.Key] = arg.Value; + } + + args.Remove("t"); + args["target"] = target; + + if (arguments != null) { + foreach (var arg in arguments) { + args[arg.Key] = arg.Value; + } + } + + CakeExecuteScript(cake, new CakeSettings { + WorkingDirectory = cake.GetDirectory(), + Arguments = args, + }); +} + +void RunProcess(FilePath process, string args) +{ + var result = StartProcess(process, args); + if (result != 0) { + throw new Exception($"Process '{process}' failed with error: {result}"); + } +} + +void RunProcess(FilePath process, string args, out IEnumerable stdout) +{ + var settings = new ProcessSettings { + RedirectStandardOutput = true, + Arguments = args, + }; + var result = StartProcess(process, settings, out stdout); + if (result != 0) { + throw new Exception($"Process '{process}' failed with error: {result}"); + } +} + +void RunProcess(FilePath process, ProcessSettings settings) +{ + var result = StartProcess(process, settings); + if (result != 0) { + throw new Exception($"Process '{process}' failed with error: {result}"); + } +} + +bool IsRunningOnMac() +{ + return System.Environment.OSVersion.Platform == PlatformID.MacOSX || MacPlatformDetector.IsMac.Value; +} + +bool IsRunningOnLinux() +{ + return IsRunningOnUnix() && !IsRunningOnMac(); +} + +string GetVersion(string lib, string type = "nuget") +{ + try { + var file = ROOT_PATH.CombineWithFilePath("VERSIONS.txt"); + var contents = System.IO.File.ReadAllText(file.FullPath); + var match = Regex.Match(contents, $@"^{lib}\s*{type}\s*(.*)$", RegexOptions.IgnoreCase | RegexOptions.Multiline); + return match.Groups[1].Value.Trim(); + } catch { + return ""; + } +} + +internal static class MacPlatformDetector +{ + internal static readonly Lazy IsMac = new Lazy(IsRunningOnMac); + + [DllImport("libc")] + static extern int uname(IntPtr buf); + + static bool IsRunningOnMac() + { + IntPtr buf = IntPtr.Zero; + try { + buf = Marshal.AllocHGlobal(8192); + // This is a hacktastic way of getting sysname from uname() + if (uname(buf) == 0) { + string os = Marshal.PtrToStringAnsi(buf); + if (os == "Darwin") + return true; + } + } catch { + } finally { + if (buf != IntPtr.Zero) + Marshal.FreeHGlobal(buf); + } + return false; + } +} diff --git a/cake/xcode.cake b/cake/xcode.cake new file mode 100644 index 0000000000..8d34c53237 --- /dev/null +++ b/cake/xcode.cake @@ -0,0 +1,25 @@ +#addin nuget:?package=Cake.XCode&version=4.2.0 + +void RunXCodeBuild(FilePath project, string target, string sdk, string arch) +{ + 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 { + Project = project.FullPath, + Target = target, + Sdk = sdk, + Arch = arch, + Configuration = CONFIGURATION, + }); + + 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}")); +} diff --git a/native-builds/.gitignore b/native-builds/.gitignore deleted file mode 100644 index 6040cd9490..0000000000 --- a/native-builds/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -xcuserdata/ -libskia_ios/build/ -libskia_tvos/build/ -libskia_watchos/build/ -libskia_osx/build/ -project.xcworkspace/ diff --git a/native-builds/libHarfBuzzSharp_android/jni/HarfBuzzSharp.mk b/native-builds/libHarfBuzzSharp_android/jni/HarfBuzzSharp.mk deleted file mode 100644 index 949a8142b0..0000000000 --- a/native-builds/libHarfBuzzSharp_android/jni/HarfBuzzSharp.mk +++ /dev/null @@ -1,72 +0,0 @@ - -include $(CLEAR_VARS) - -cmd-strip = $(PRIVATE_STRIP) --strip-all $(call host-path,$1) - -LOCAL_MODULE := HarfBuzzSharp - -LOCAL_C_INCLUDES := . \ - ../../externals/harfbuzz/src - -LOCAL_LDFLAGS := -s -Wl,--gc-sections - -LOCAL_CFLAGS := -DHAVE_CONFIG_H -DNDEBUG \ - -fno-rtti -fno-exceptions -fno-threadsafe-statics -fPIC \ - -g -Os -ffunction-sections -fdata-sections - -LOCAL_CPPFLAGS := -std=c++11 - -LOCAL_SRC_FILES := ../../../externals/harfbuzz/src/hb-aat-layout.cc \ - ../../../externals/harfbuzz/src/hb-aat-map.cc \ - ../../../externals/harfbuzz/src/hb-blob.cc \ - ../../../externals/harfbuzz/src/hb-buffer-serialize.cc \ - ../../../externals/harfbuzz/src/hb-buffer.cc \ - ../../../externals/harfbuzz/src/hb-common.cc \ - ../../../externals/harfbuzz/src/hb-face.cc \ - ../../../externals/harfbuzz/src/hb-fallback-shape.cc \ - ../../../externals/harfbuzz/src/hb-font.cc \ - ../../../externals/harfbuzz/src/hb-map.cc \ - ../../../externals/harfbuzz/src/hb-ot-cff1-table.cc \ - ../../../externals/harfbuzz/src/hb-ot-cff2-table.cc \ - ../../../externals/harfbuzz/src/hb-ot-color.cc \ - ../../../externals/harfbuzz/src/hb-ot-face.cc \ - ../../../externals/harfbuzz/src/hb-ot-font.cc \ - ../../../externals/harfbuzz/src/hb-ot-layout.cc \ - ../../../externals/harfbuzz/src/hb-ot-map.cc \ - ../../../externals/harfbuzz/src/hb-ot-math.cc \ - ../../../externals/harfbuzz/src/hb-ot-meta.cc \ - ../../../externals/harfbuzz/src/hb-ot-metrics.cc \ - ../../../externals/harfbuzz/src/hb-ot-name.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-arabic.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-default.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-hangul.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-hebrew.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-indic-table.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-indic.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-khmer.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-myanmar.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-thai.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-use-table.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-use.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-fallback.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape-normalize.cc \ - ../../../externals/harfbuzz/src/hb-ot-shape.cc \ - ../../../externals/harfbuzz/src/hb-ot-tag.cc \ - ../../../externals/harfbuzz/src/hb-ot-var.cc \ - ../../../externals/harfbuzz/src/hb-set.cc \ - ../../../externals/harfbuzz/src/hb-shape-plan.cc \ - ../../../externals/harfbuzz/src/hb-shape.cc \ - ../../../externals/harfbuzz/src/hb-shaper.cc \ - ../../../externals/harfbuzz/src/hb-static.cc \ - ../../../externals/harfbuzz/src/hb-subset-cff-common.cc \ - ../../../externals/harfbuzz/src/hb-subset-cff1.cc \ - ../../../externals/harfbuzz/src/hb-subset-cff2.cc \ - ../../../externals/harfbuzz/src/hb-subset-input.cc \ - ../../../externals/harfbuzz/src/hb-subset-plan.cc \ - ../../../externals/harfbuzz/src/hb-subset.cc \ - ../../../externals/harfbuzz/src/hb-ucd.cc \ - ../../../externals/harfbuzz/src/hb-unicode.cc \ - ../../../externals/harfbuzz/src/hb-warning.cc - -include $(BUILD_SHARED_LIBRARY) diff --git a/native-builds/libHarfBuzzSharp_tizen/project_def.prop b/native-builds/libHarfBuzzSharp_tizen/project_def.prop deleted file mode 100755 index 96f2771c2d..0000000000 --- a/native-builds/libHarfBuzzSharp_tizen/project_def.prop +++ /dev/null @@ -1,65 +0,0 @@ -type = sharedLib -profile = mobile-4.0 - -APPNAME = HarfBuzzSharp - -USER_INC_DIRS = . \ - ../../externals/harfbuzz/src \ - ../../externals/harfbuzz - -USER_DEFS = HAVE_CONFIG_H NDEBUG - -USER_CPP_DEFS = $(USER_DEFS) - -USER_SRCS = ../../externals/harfbuzz/src/hb-aat-layout.cc \ - ../../externals/harfbuzz/src/hb-aat-map.cc \ - ../../externals/harfbuzz/src/hb-blob.cc \ - ../../externals/harfbuzz/src/hb-buffer-serialize.cc \ - ../../externals/harfbuzz/src/hb-buffer.cc \ - ../../externals/harfbuzz/src/hb-common.cc \ - ../../externals/harfbuzz/src/hb-face.cc \ - ../../externals/harfbuzz/src/hb-fallback-shape.cc \ - ../../externals/harfbuzz/src/hb-font.cc \ - ../../externals/harfbuzz/src/hb-map.cc \ - ../../externals/harfbuzz/src/hb-ot-cff1-table.cc \ - ../../externals/harfbuzz/src/hb-ot-cff2-table.cc \ - ../../externals/harfbuzz/src/hb-ot-color.cc \ - ../../externals/harfbuzz/src/hb-ot-face.cc \ - ../../externals/harfbuzz/src/hb-ot-font.cc \ - ../../externals/harfbuzz/src/hb-ot-layout.cc \ - ../../externals/harfbuzz/src/hb-ot-map.cc \ - ../../externals/harfbuzz/src/hb-ot-math.cc \ - ../../externals/harfbuzz/src/hb-ot-meta.cc \ - ../../externals/harfbuzz/src/hb-ot-metrics.cc \ - ../../externals/harfbuzz/src/hb-ot-name.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-arabic.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-default.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-hangul.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-hebrew.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-indic-table.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-indic.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-khmer.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-myanmar.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-thai.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-use-table.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-use.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-fallback.cc \ - ../../externals/harfbuzz/src/hb-ot-shape-normalize.cc \ - ../../externals/harfbuzz/src/hb-ot-shape.cc \ - ../../externals/harfbuzz/src/hb-ot-tag.cc \ - ../../externals/harfbuzz/src/hb-ot-var.cc \ - ../../externals/harfbuzz/src/hb-set.cc \ - ../../externals/harfbuzz/src/hb-shape-plan.cc \ - ../../externals/harfbuzz/src/hb-shape.cc \ - ../../externals/harfbuzz/src/hb-shaper.cc \ - ../../externals/harfbuzz/src/hb-static.cc \ - ../../externals/harfbuzz/src/hb-subset-cff-common.cc \ - ../../externals/harfbuzz/src/hb-subset-cff1.cc \ - ../../externals/harfbuzz/src/hb-subset-cff2.cc \ - ../../externals/harfbuzz/src/hb-subset-input.cc \ - ../../externals/harfbuzz/src/hb-subset-plan.cc \ - ../../externals/harfbuzz/src/hb-subset.cc \ - ../../externals/harfbuzz/src/hb-ucd.cc \ - ../../externals/harfbuzz/src/hb-unicode.cc \ - ../../externals/harfbuzz/src/hb-warning.cc diff --git a/native-builds/libHarfBuzzSharp_uwp/libHarfBuzzSharp.vcxproj b/native-builds/libHarfBuzzSharp_uwp/libHarfBuzzSharp.vcxproj deleted file mode 100644 index fcb0d84b11..0000000000 --- a/native-builds/libHarfBuzzSharp_uwp/libHarfBuzzSharp.vcxproj +++ /dev/null @@ -1,420 +0,0 @@ - - - - - Debug - ARM - - - Debug - Win32 - - - Debug - x64 - - - Release - ARM - - - Release - Win32 - - - Release - x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {25b54d3d-b0f8-4e7e-8928-ffaf116fcce9} - DynamicLibrary - libHarfBuzzSharp - en-US - 14.0 - true - Windows Store - 10.0.10240.0 - 10.0.10240.0 - 10.0 - - - - DynamicLibrary - true - v141 - - - DynamicLibrary - true - v141 - - - DynamicLibrary - true - v141 - - - DynamicLibrary - false - true - v141 - - - DynamicLibrary - false - true - v141 - - - DynamicLibrary - false - true - v141 - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - false - - - false - false - - - false - false - - - false - false - - - false - false - - - false - false - - - $(SolutionDir)\bin\$(Platform)\$(Configuration)\ - $(SolutionDir)\obj\$(Platform)\$(Configuration)\$(ProjectName)\ - - - - NotUsing - false - - HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_WINDLL;%(PreprocessorDefinitions) - $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) - 4146;4267;4244 - - - Console - false - false - - - - - NotUsing - false - - HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_WINDLL;%(PreprocessorDefinitions) - $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) - 4146;4267;4244 - - - Console - false - false - - - - - NotUsing - false - - HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) - $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) - 4146;4267;4244 - - - Console - false - false - - - - - NotUsing - false - - HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) - $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) - 4146;4267;4244 - - - Console - false - false - - - - - NotUsing - false - - HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_WINDLL;%(PreprocessorDefinitions) - $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) - 4146;4267;4244 - - - Console - false - false - - - - - NotUsing - false - - HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_WINDLL;%(PreprocessorDefinitions) - $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) - 4146;4267;4244 - - - Console - false - false - - - - - - \ No newline at end of file diff --git a/native-builds/libHarfBuzzSharp_windows/libHarfBuzzSharp.vcxproj b/native-builds/libHarfBuzzSharp_windows/libHarfBuzzSharp.vcxproj deleted file mode 100644 index e2d2fc757e..0000000000 --- a/native-builds/libHarfBuzzSharp_windows/libHarfBuzzSharp.vcxproj +++ /dev/null @@ -1,362 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 15.0 - {AFE6308E-9F79-4F9D-85BF-B68E8DEE2F13} - Win32Proj - libHarfBuzzSharp - 8.1 - - - - DynamicLibrary - true - v140 - Unicode - - - DynamicLibrary - false - v140 - true - Unicode - - - DynamicLibrary - true - v140 - Unicode - - - DynamicLibrary - false - v140 - true - Unicode - - - - - - - - - - - - - - - - - - - - - true - - - true - - - false - - - false - - - $(SolutionDir)\bin\$(Platform)\$(Configuration)\ - $(SolutionDir)\obj\$(Platform)\$(Configuration)\$(ProjectName)\ - - - - - - Level3 - Disabled - HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;HARFBUZZ_EXPORTS;%(PreprocessorDefinitions) - $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) - 4267;4244 - MultiThreadedDebug - $(IntDir) - - - Windows - - - - - - - Level3 - Disabled - HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;HARFBUZZ_EXPORTS;%(PreprocessorDefinitions) - $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) - 4267;4244 - MultiThreadedDebug - - - Windows - - - - - Level3 - - - MaxSpeed - true - true - HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;HARFBUZZ_EXPORTS;%(PreprocessorDefinitions) - $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) - 4267;4244 - MultiThreaded - - - Windows - true - true - - - - - Level3 - - - MaxSpeed - true - true - HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;HARFBUZZ_EXPORTS;%(PreprocessorDefinitions) - $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) - 4267;4244 - MultiThreaded - - - Windows - true - true - - - - - - - - \ No newline at end of file diff --git a/native-builds/libSkiaSharp_tizen/project_def.prop b/native-builds/libSkiaSharp_tizen/project_def.prop deleted file mode 100755 index 96ab4fc21c..0000000000 --- a/native-builds/libSkiaSharp_tizen/project_def.prop +++ /dev/null @@ -1,50 +0,0 @@ -type = sharedLib -profile = mobile-4.0 - -USER_LIB_DIRS = ../../externals/skia/out/tizen/$(BUILD_ARCH) - -USER_LIBS = skia - -USER_LINK_OPTS = -Wl,--gc-sections - -APPNAME = SkiaSharp - -USER_INC_DIRS = ../../externals/skia/src/c \ - ../../externals/skia/src/core \ - ../../externals/skia/src/xml \ - ../../externals/skia/include/c \ - ../../externals/skia/include/core \ - ../../externals/skia/include/codec \ - ../../externals/skia/include/effects \ - ../../externals/skia/include/encode \ - ../../externals/skia/include/pathops \ - ../../externals/skia/include/gpu \ - ../../externals/skia/include/config \ - ../../externals/skia/include/xml \ - ../../externals/skia/include/svg \ - ../../externals/skia/include/utils \ - ../../externals/skia/include/ports \ - ../../externals/skia/include/private \ - ../../externals/skia/include/images \ - ../../externals/skia/include/xml \ - ../../externals/skia/include/xamarin - -USER_DEFS = SK_INTERNAL SK_GAMMA_APPLY_TO_A8 \ - SK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0 SK_SUPPORT_GPU=1 \ - SK_BUILD_FOR_UNIX SKIA_C_DLL SKIA_IMPLEMENTATION=1 \ - NDEBUG SK_BUILD_FOR_TIZEN - -USER_CPP_DEFS = $(USER_DEFS) - -USER_C_OPTS = -fPIC -g -fno-exceptions -fstrict-aliasing -Wall -Wextra \ - -Winit-self -Wpointer-arith -Wsign-compare -Wno-unused-parameter \ - -Werror -Os -ffunction-sections -fdata-sections -fno-rtti - -USER_CPP_OPTS = $(USER_C_OPTS) -std=c++11 -fno-threadsafe-statics -Wnon-virtual-dtor - -USER_SRCS = ../../externals/skia/src/xamarin/sk_xamarin.cpp \ - ../../externals/skia/src/xamarin/SkiaKeeper.c \ - ../../externals/skia/src/xamarin/sk_managedstream.cpp \ - ../../externals/skia/src/xamarin/SkManagedStream.cpp \ - ../../externals/skia/src/xamarin/sk_manageddrawable.cpp \ - ../../externals/skia/src/xamarin/SkManagedDrawable.cpp diff --git a/native/.gitignore b/native/.gitignore new file mode 100644 index 0000000000..56b68eaa98 --- /dev/null +++ b/native/.gitignore @@ -0,0 +1,2 @@ +xcuserdata/ +project.xcworkspace/ diff --git a/native/android/build.cake b/native/android/build.cake new file mode 100644 index 0000000000..40df7d35e5 --- /dev/null +++ b/native/android/build.cake @@ -0,0 +1,68 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native/android")); + +#load "../../cake/native-shared.cake" + +DirectoryPath ANDROID_NDK_HOME = Argument("ndk", EnvironmentVariable("ANDROID_NDK_HOME") ?? EnvironmentVariable("ANDROID_NDK_ROOT") ?? PROFILE_PATH.Combine("android-ndk").FullPath); + +Task("libSkiaSharp") + .IsDependentOn("git-sync-deps") + .WithCriteria(IsRunningOnMac() || IsRunningOnWindows()) + .Does(() => +{ + Build("x86", "x86"); + Build("x86_64", "x64"); + Build("armeabi-v7a", "arm"); + Build("arm64-v8a", "arm64"); + + void Build(string arch, string skiaArch) + { + if (Skip(arch)) return; + + GnNinja($"android/{arch}", "SkiaSharp", + $"is_official_build=true skia_enable_tools=false " + + $"target_os='android' target_cpu='{skiaArch}' " + + $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + + $"skia_use_system_expat=false skia_use_system_freetype2=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + + $"extra_cflags=[ '-DSKIA_C_DLL' ] " + + $"ndk='{ANDROID_NDK_HOME}' " + + $"ndk_api={(skiaArch == "x64" || skiaArch == "arm64" ? 21 : 9)}"); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyFileToDirectory(SKIA_PATH.CombineWithFilePath($"out/android/{arch}/libSkiaSharp.so"), outDir); + } +}); + +Task("libHarfBuzzSharp") + .WithCriteria(IsRunningOnMac() || IsRunningOnWindows()) + .Does(() => +{ + var cmd = IsRunningOnWindows() ? ".cmd" : ""; + var ndkbuild = ANDROID_NDK_HOME.CombineWithFilePath($"ndk-build{cmd}").FullPath; + + Build("x86"); + Build("x86_64"); + Build("armeabi-v7a"); + Build("arm64-v8a"); + + void Build(string arch) + { + if (Skip(arch)) return; + + RunProcess(ndkbuild, new ProcessSettings { + Arguments = $"APP_ABI={arch}", + WorkingDirectory = "libHarfBuzzSharp", + }); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyFileToDirectory($"libHarfBuzzSharp/libs/{arch}/libHarfBuzzSharp.so", outDir); + } +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp"); + +RunTarget(TARGET); diff --git a/native-builds/libHarfBuzzSharp_android/.gitignore b/native/android/libHarfBuzzSharp/.gitignore similarity index 100% rename from native-builds/libHarfBuzzSharp_android/.gitignore rename to native/android/libHarfBuzzSharp/.gitignore diff --git a/native-builds/libHarfBuzzSharp_android/config.h b/native/android/libHarfBuzzSharp/config.h similarity index 100% rename from native-builds/libHarfBuzzSharp_android/config.h rename to native/android/libHarfBuzzSharp/config.h diff --git a/native-builds/libHarfBuzzSharp_android/jni/Android.mk b/native/android/libHarfBuzzSharp/jni/Android.mk similarity index 100% rename from native-builds/libHarfBuzzSharp_android/jni/Android.mk rename to native/android/libHarfBuzzSharp/jni/Android.mk diff --git a/native-builds/libHarfBuzzSharp_android/jni/Application.mk b/native/android/libHarfBuzzSharp/jni/Application.mk similarity index 100% rename from native-builds/libHarfBuzzSharp_android/jni/Application.mk rename to native/android/libHarfBuzzSharp/jni/Application.mk diff --git a/native/android/libHarfBuzzSharp/jni/HarfBuzzSharp.mk b/native/android/libHarfBuzzSharp/jni/HarfBuzzSharp.mk new file mode 100644 index 0000000000..501f9bbaae --- /dev/null +++ b/native/android/libHarfBuzzSharp/jni/HarfBuzzSharp.mk @@ -0,0 +1,73 @@ + +include $(CLEAR_VARS) + +cmd-strip = $(PRIVATE_STRIP) --strip-all $(call host-path,$1) + +src_root = ../../../../externals/harfbuzz/src + +LOCAL_MODULE := HarfBuzzSharp + +LOCAL_C_INCLUDES := . $(src_root) + +LOCAL_LDFLAGS := -s -Wl,--gc-sections + +LOCAL_CFLAGS := -DHAVE_CONFIG_H -DNDEBUG \ + -fno-rtti -fno-exceptions -fno-threadsafe-statics -fPIC \ + -g -Os -ffunction-sections -fdata-sections + +LOCAL_CPPFLAGS := -std=c++11 + +LOCAL_SRC_FILES := $(src_root)/hb-aat-layout.cc \ + $(src_root)/hb-aat-map.cc \ + $(src_root)/hb-blob.cc \ + $(src_root)/hb-buffer-serialize.cc \ + $(src_root)/hb-buffer.cc \ + $(src_root)/hb-common.cc \ + $(src_root)/hb-face.cc \ + $(src_root)/hb-fallback-shape.cc \ + $(src_root)/hb-font.cc \ + $(src_root)/hb-map.cc \ + $(src_root)/hb-ot-cff1-table.cc \ + $(src_root)/hb-ot-cff2-table.cc \ + $(src_root)/hb-ot-color.cc \ + $(src_root)/hb-ot-face.cc \ + $(src_root)/hb-ot-font.cc \ + $(src_root)/hb-ot-layout.cc \ + $(src_root)/hb-ot-map.cc \ + $(src_root)/hb-ot-math.cc \ + $(src_root)/hb-ot-meta.cc \ + $(src_root)/hb-ot-metrics.cc \ + $(src_root)/hb-ot-name.cc \ + $(src_root)/hb-ot-shape-complex-arabic.cc \ + $(src_root)/hb-ot-shape-complex-default.cc \ + $(src_root)/hb-ot-shape-complex-hangul.cc \ + $(src_root)/hb-ot-shape-complex-hebrew.cc \ + $(src_root)/hb-ot-shape-complex-indic-table.cc \ + $(src_root)/hb-ot-shape-complex-indic.cc \ + $(src_root)/hb-ot-shape-complex-khmer.cc \ + $(src_root)/hb-ot-shape-complex-myanmar.cc \ + $(src_root)/hb-ot-shape-complex-thai.cc \ + $(src_root)/hb-ot-shape-complex-use-table.cc \ + $(src_root)/hb-ot-shape-complex-use.cc \ + $(src_root)/hb-ot-shape-complex-vowel-constraints.cc \ + $(src_root)/hb-ot-shape-fallback.cc \ + $(src_root)/hb-ot-shape-normalize.cc \ + $(src_root)/hb-ot-shape.cc \ + $(src_root)/hb-ot-tag.cc \ + $(src_root)/hb-ot-var.cc \ + $(src_root)/hb-set.cc \ + $(src_root)/hb-shape-plan.cc \ + $(src_root)/hb-shape.cc \ + $(src_root)/hb-shaper.cc \ + $(src_root)/hb-static.cc \ + $(src_root)/hb-subset-cff-common.cc \ + $(src_root)/hb-subset-cff1.cc \ + $(src_root)/hb-subset-cff2.cc \ + $(src_root)/hb-subset-input.cc \ + $(src_root)/hb-subset-plan.cc \ + $(src_root)/hb-subset.cc \ + $(src_root)/hb-ucd.cc \ + $(src_root)/hb-unicode.cc \ + $(src_root)/hb-warning.cc + +include $(BUILD_SHARED_LIBRARY) diff --git a/native/ios/build.cake b/native/ios/build.cake new file mode 100644 index 0000000000..35c1b96a2f --- /dev/null +++ b/native/ios/build.cake @@ -0,0 +1,82 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native/ios")); + +#load "../../cake/native-shared.cake" +#load "../../cake/xcode.cake" + +Task("libSkiaSharp") + .IsDependentOn("git-sync-deps") + .WithCriteria(IsRunningOnMac()) + .Does(() => +{ + Build("iphonesimulator", "i386", "x86"); + Build("iphonesimulator", "x86_64", "x64"); + Build("iphoneos", "armv7", "arm"); + Build("iphoneos", "arm64", "arm64"); + + CopyDirectory(OUTPUT_PATH.Combine("armv7/libSkiaSharp.framework"), OUTPUT_PATH.Combine("libSkiaSharp.framework")); + DeleteFile(OUTPUT_PATH.CombineWithFilePath("libSkiaSharp.framework/libSkiaSharp")); + RunLipo(OUTPUT_PATH, "libSkiaSharp.framework/libSkiaSharp", new [] { + (FilePath) "i386/libSkiaSharp.framework/libSkiaSharp", + (FilePath) "x86_64/libSkiaSharp.framework/libSkiaSharp", + (FilePath) "armv7/libSkiaSharp.framework/libSkiaSharp", + (FilePath) "arm64/libSkiaSharp.framework/libSkiaSharp" + }); + + void Build(string sdk, string arch, string skiaArch) + { + if (Skip(arch)) return; + + GnNinja($"ios/{arch}", "skia", + $"is_official_build=true skia_enable_tools=false " + + $"target_os='ios' target_cpu='{skiaArch}' " + + $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + + $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + + $"extra_cflags=[ '-DSKIA_C_DLL', '-mios-version-min=8.0' ] " + + $"extra_ldflags=[ '-Wl,ios_version_min=8.0' ]"); + + RunXCodeBuild("libSkiaSharp/libSkiaSharp.xcodeproj", "libSkiaSharp", sdk, arch); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyDirectory($"libSkiaSharp/bin/{CONFIGURATION}/{arch}/{CONFIGURATION}-{sdk}", outDir); + + StripSign(outDir.CombineWithFilePath("libSkiaSharp.framework")); + } +}); + +Task("libHarfBuzzSharp") + .WithCriteria(IsRunningOnMac()) + .Does(() => +{ + Build("iphonesimulator", "i386"); + Build("iphonesimulator", "x86_64"); + Build("iphoneos", "armv7"); + Build("iphoneos", "arm64"); + + RunLipo(OUTPUT_PATH, "libHarfBuzzSharp.a", new [] { + (FilePath) "i386/libHarfBuzzSharp.a", + (FilePath) "x86_64/libHarfBuzzSharp.a", + (FilePath) "armv7/libHarfBuzzSharp.a", + (FilePath) "arm64/libHarfBuzzSharp.a" + }); + + void Build(string sdk, string arch) + { + if (Skip(arch)) return; + + RunXCodeBuild("libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj", "libHarfBuzzSharp", sdk, arch); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyDirectory($"libHarfBuzzSharp/bin/{CONFIGURATION}/{arch}/{CONFIGURATION}-{sdk}", outDir); + + StripSign(outDir.CombineWithFilePath("libHarfBuzzSharp.a")); + } +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp"); + +RunTarget(TARGET); diff --git a/native-builds/libHarfBuzzSharp_ios/config.h b/native/ios/libHarfBuzzSharp/config.h similarity index 100% rename from native-builds/libHarfBuzzSharp_ios/config.h rename to native/ios/libHarfBuzzSharp/config.h diff --git a/native-builds/libHarfBuzzSharp_ios/libHarfBuzzSharp.xcodeproj/project.pbxproj b/native/ios/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj similarity index 84% rename from native-builds/libHarfBuzzSharp_ios/libHarfBuzzSharp.xcodeproj/project.pbxproj rename to native/ios/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj index 3d0896f44b..e985af47a3 100644 --- a/native-builds/libHarfBuzzSharp_ios/libHarfBuzzSharp.xcodeproj/project.pbxproj +++ b/native/ios/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj @@ -74,64 +74,64 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 34B817BB22BD8F6F00508F73 /* hb-subset-cff2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff2.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff2.cc"; sourceTree = ""; }; - 34B817BC22BD8F6F00508F73 /* hb-subset-cff-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff-common.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff-common.cc"; sourceTree = ""; }; - 34B817BD22BD8F6F00508F73 /* hb-subset-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-plan.cc"; path = "../../externals/harfbuzz/src/hb-subset-plan.cc"; sourceTree = ""; }; - 34B817BE22BD8F6F00508F73 /* hb-ucd.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ucd.cc"; path = "../../externals/harfbuzz/src/hb-ucd.cc"; sourceTree = ""; }; - 34B817BF22BD8F6F00508F73 /* hb-subset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset.cc"; path = "../../externals/harfbuzz/src/hb-subset.cc"; sourceTree = ""; }; - 34B817C022BD8F6F00508F73 /* hb-subset-input.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-input.cc"; path = "../../externals/harfbuzz/src/hb-subset-input.cc"; sourceTree = ""; }; - 34B817C122BD8F6F00508F73 /* hb-subset-cff1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff1.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff1.cc"; sourceTree = ""; }; + 34B817BB22BD8F6F00508F73 /* hb-subset-cff2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff2.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff2.cc"; sourceTree = ""; }; + 34B817BC22BD8F6F00508F73 /* hb-subset-cff-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff-common.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff-common.cc"; sourceTree = ""; }; + 34B817BD22BD8F6F00508F73 /* hb-subset-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-plan.cc"; path = "../../../externals/harfbuzz/src/hb-subset-plan.cc"; sourceTree = ""; }; + 34B817BE22BD8F6F00508F73 /* hb-ucd.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ucd.cc"; path = "../../../externals/harfbuzz/src/hb-ucd.cc"; sourceTree = ""; }; + 34B817BF22BD8F6F00508F73 /* hb-subset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset.cc"; path = "../../../externals/harfbuzz/src/hb-subset.cc"; sourceTree = ""; }; + 34B817C022BD8F6F00508F73 /* hb-subset-input.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-input.cc"; path = "../../../externals/harfbuzz/src/hb-subset-input.cc"; sourceTree = ""; }; + 34B817C122BD8F6F00508F73 /* hb-subset-cff1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff1.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff1.cc"; sourceTree = ""; }; 34C92F8D21FA593F002D729C /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = SOURCE_ROOT; }; - 34C9307121FA5A76002D729C /* hb-shape-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape-plan.cc"; path = "../../externals/harfbuzz/src/hb-shape-plan.cc"; sourceTree = ""; }; - 34C9307321FA5A76002D729C /* hb-ot-shape-complex-indic-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-indic-table.cc"; sourceTree = ""; }; - 34C9307421FA5A76002D729C /* hb-ot-shape-complex-myanmar.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-myanmar.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-myanmar.cc"; sourceTree = ""; }; - 34C9307521FA5A76002D729C /* hb-ot-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-map.cc"; path = "../../externals/harfbuzz/src/hb-ot-map.cc"; sourceTree = ""; }; - 34C9307621FA5A76002D729C /* hb-buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer.cc"; path = "../../externals/harfbuzz/src/hb-buffer.cc"; sourceTree = ""; }; - 34C9307721FA5A76002D729C /* hb-aat-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-layout.cc"; path = "../../externals/harfbuzz/src/hb-aat-layout.cc"; sourceTree = ""; }; - 34C9307821FA5A76002D729C /* hb-ot-color.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-color.cc"; path = "../../externals/harfbuzz/src/hb-ot-color.cc"; sourceTree = ""; }; - 34C9307921FA5A76002D729C /* hb-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-common.cc"; path = "../../externals/harfbuzz/src/hb-common.cc"; sourceTree = ""; }; - 34C9307A21FA5A76002D729C /* hb-ot-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-font.cc"; path = "../../externals/harfbuzz/src/hb-ot-font.cc"; sourceTree = ""; }; - 34C9307B21FA5A76002D729C /* hb-ot-shape-complex-hebrew.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hebrew.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-hebrew.cc"; sourceTree = ""; }; - 34C9307C21FA5A76002D729C /* hb-ot-cff1-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff1-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-cff1-table.cc"; sourceTree = ""; }; - 34C9307D21FA5A76002D729C /* hb-ot-cff2-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff2-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-cff2-table.cc"; sourceTree = ""; }; - 34C9307E21FA5A76002D729C /* hb-aat-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-map.cc"; path = "../../externals/harfbuzz/src/hb-aat-map.cc"; sourceTree = ""; }; - 34C9307F21FA5A76002D729C /* hb-ot-shape-complex-khmer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-khmer.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-khmer.cc"; sourceTree = ""; }; - 34C9308021FA5A76002D729C /* hb-ot-shape-complex-default.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-default.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-default.cc"; sourceTree = ""; }; - 34C9308121FA5A76002D729C /* hb-ot-shape-complex-use.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-use.cc"; sourceTree = ""; }; - 34C9308221FA5A76002D729C /* hb-shaper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shaper.cc"; path = "../../externals/harfbuzz/src/hb-shaper.cc"; sourceTree = ""; }; - 34C9308321FA5A76002D729C /* hb-buffer-serialize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer-serialize.cc"; path = "../../externals/harfbuzz/src/hb-buffer-serialize.cc"; sourceTree = ""; }; - 34C9308421FA5A76002D729C /* hb-ot-shape-fallback.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-fallback.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-fallback.cc"; sourceTree = ""; }; - 34C9308521FA5A76002D729C /* hb-blob.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-blob.cc"; path = "../../externals/harfbuzz/src/hb-blob.cc"; sourceTree = ""; }; - 34C9308621FA5A76002D729C /* hb-ot-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-layout.cc"; path = "../../externals/harfbuzz/src/hb-ot-layout.cc"; sourceTree = ""; }; - 34C9308721FA5A76002D729C /* hb-ot-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-face.cc"; path = "../../externals/harfbuzz/src/hb-ot-face.cc"; sourceTree = ""; }; - 34C9308821FA5A76002D729C /* hb-ot-shape-complex-indic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-indic.cc"; sourceTree = ""; }; - 34C9308921FA5A76002D729C /* hb-ot-shape-complex-thai.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-thai.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-thai.cc"; sourceTree = ""; }; - 34C9308A21FA5A76002D729C /* hb-ot-shape-normalize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-normalize.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-normalize.cc"; sourceTree = ""; }; - 34C9308B21FA5A76002D729C /* hb-ot-shape-complex-vowel-constraints.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-vowel-constraints.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc"; sourceTree = ""; }; - 34C9308C21FA5A76002D729C /* hb-ot-shape-complex-arabic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-arabic.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-arabic.cc"; sourceTree = ""; }; - 34C9308D21FA5A76002D729C /* hb-static.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-static.cc"; path = "../../externals/harfbuzz/src/hb-static.cc"; sourceTree = ""; }; - 34C9308E21FA5A76002D729C /* hb-unicode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-unicode.cc"; path = "../../externals/harfbuzz/src/hb-unicode.cc"; sourceTree = ""; }; - 34C9308F21FA5A77002D729C /* hb-ot-name.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-name.cc"; path = "../../externals/harfbuzz/src/hb-ot-name.cc"; sourceTree = ""; }; - 34C9309021FA5A77002D729C /* hb-ot-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape.cc"; sourceTree = ""; }; - 34C9309121FA5A77002D729C /* hb-ot-shape-complex-hangul.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hangul.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-hangul.cc"; sourceTree = ""; }; - 34C9309221FA5A77002D729C /* hb-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-face.cc"; path = "../../externals/harfbuzz/src/hb-face.cc"; sourceTree = ""; }; - 34C9309321FA5A77002D729C /* hb-ot-math.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-math.cc"; path = "../../externals/harfbuzz/src/hb-ot-math.cc"; sourceTree = ""; }; - 34C9309421FA5A77002D729C /* hb-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-map.cc"; path = "../../externals/harfbuzz/src/hb-map.cc"; sourceTree = ""; }; - 34C9309521FA5A77002D729C /* hb-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-font.cc"; path = "../../externals/harfbuzz/src/hb-font.cc"; sourceTree = ""; }; - 34C9309621FA5A77002D729C /* hb-set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-set.cc"; path = "../../externals/harfbuzz/src/hb-set.cc"; sourceTree = ""; }; - 34C9309821FA5A77002D729C /* hb-ot-shape-complex-use-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-use-table.cc"; sourceTree = ""; }; - 34C9309921FA5A77002D729C /* hb-ot-tag.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-tag.cc"; path = "../../externals/harfbuzz/src/hb-ot-tag.cc"; sourceTree = ""; }; - 34C9309A21FA5A77002D729C /* hb-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape.cc"; path = "../../externals/harfbuzz/src/hb-shape.cc"; sourceTree = ""; }; - 34C9309B21FA5A77002D729C /* hb-warning.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-warning.cc"; path = "../../externals/harfbuzz/src/hb-warning.cc"; sourceTree = ""; }; - 34C9309C21FA5A77002D729C /* hb-fallback-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-fallback-shape.cc"; path = "../../externals/harfbuzz/src/hb-fallback-shape.cc"; sourceTree = ""; }; - 34C9309D21FA5A77002D729C /* hb-ot-var.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-var.cc"; path = "../../externals/harfbuzz/src/hb-ot-var.cc"; sourceTree = ""; }; + 34C9307121FA5A76002D729C /* hb-shape-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape-plan.cc"; path = "../../../externals/harfbuzz/src/hb-shape-plan.cc"; sourceTree = ""; }; + 34C9307321FA5A76002D729C /* hb-ot-shape-complex-indic-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-indic-table.cc"; sourceTree = ""; }; + 34C9307421FA5A76002D729C /* hb-ot-shape-complex-myanmar.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-myanmar.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-myanmar.cc"; sourceTree = ""; }; + 34C9307521FA5A76002D729C /* hb-ot-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-map.cc"; path = "../../../externals/harfbuzz/src/hb-ot-map.cc"; sourceTree = ""; }; + 34C9307621FA5A76002D729C /* hb-buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer.cc"; path = "../../../externals/harfbuzz/src/hb-buffer.cc"; sourceTree = ""; }; + 34C9307721FA5A76002D729C /* hb-aat-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-layout.cc"; path = "../../../externals/harfbuzz/src/hb-aat-layout.cc"; sourceTree = ""; }; + 34C9307821FA5A76002D729C /* hb-ot-color.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-color.cc"; path = "../../../externals/harfbuzz/src/hb-ot-color.cc"; sourceTree = ""; }; + 34C9307921FA5A76002D729C /* hb-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-common.cc"; path = "../../../externals/harfbuzz/src/hb-common.cc"; sourceTree = ""; }; + 34C9307A21FA5A76002D729C /* hb-ot-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-font.cc"; path = "../../../externals/harfbuzz/src/hb-ot-font.cc"; sourceTree = ""; }; + 34C9307B21FA5A76002D729C /* hb-ot-shape-complex-hebrew.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hebrew.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-hebrew.cc"; sourceTree = ""; }; + 34C9307C21FA5A76002D729C /* hb-ot-cff1-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff1-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-cff1-table.cc"; sourceTree = ""; }; + 34C9307D21FA5A76002D729C /* hb-ot-cff2-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff2-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-cff2-table.cc"; sourceTree = ""; }; + 34C9307E21FA5A76002D729C /* hb-aat-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-map.cc"; path = "../../../externals/harfbuzz/src/hb-aat-map.cc"; sourceTree = ""; }; + 34C9307F21FA5A76002D729C /* hb-ot-shape-complex-khmer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-khmer.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-khmer.cc"; sourceTree = ""; }; + 34C9308021FA5A76002D729C /* hb-ot-shape-complex-default.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-default.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-default.cc"; sourceTree = ""; }; + 34C9308121FA5A76002D729C /* hb-ot-shape-complex-use.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-use.cc"; sourceTree = ""; }; + 34C9308221FA5A76002D729C /* hb-shaper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shaper.cc"; path = "../../../externals/harfbuzz/src/hb-shaper.cc"; sourceTree = ""; }; + 34C9308321FA5A76002D729C /* hb-buffer-serialize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer-serialize.cc"; path = "../../../externals/harfbuzz/src/hb-buffer-serialize.cc"; sourceTree = ""; }; + 34C9308421FA5A76002D729C /* hb-ot-shape-fallback.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-fallback.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-fallback.cc"; sourceTree = ""; }; + 34C9308521FA5A76002D729C /* hb-blob.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-blob.cc"; path = "../../../externals/harfbuzz/src/hb-blob.cc"; sourceTree = ""; }; + 34C9308621FA5A76002D729C /* hb-ot-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-layout.cc"; path = "../../../externals/harfbuzz/src/hb-ot-layout.cc"; sourceTree = ""; }; + 34C9308721FA5A76002D729C /* hb-ot-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-face.cc"; path = "../../../externals/harfbuzz/src/hb-ot-face.cc"; sourceTree = ""; }; + 34C9308821FA5A76002D729C /* hb-ot-shape-complex-indic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-indic.cc"; sourceTree = ""; }; + 34C9308921FA5A76002D729C /* hb-ot-shape-complex-thai.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-thai.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-thai.cc"; sourceTree = ""; }; + 34C9308A21FA5A76002D729C /* hb-ot-shape-normalize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-normalize.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-normalize.cc"; sourceTree = ""; }; + 34C9308B21FA5A76002D729C /* hb-ot-shape-complex-vowel-constraints.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-vowel-constraints.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc"; sourceTree = ""; }; + 34C9308C21FA5A76002D729C /* hb-ot-shape-complex-arabic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-arabic.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-arabic.cc"; sourceTree = ""; }; + 34C9308D21FA5A76002D729C /* hb-static.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-static.cc"; path = "../../../externals/harfbuzz/src/hb-static.cc"; sourceTree = ""; }; + 34C9308E21FA5A76002D729C /* hb-unicode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-unicode.cc"; path = "../../../externals/harfbuzz/src/hb-unicode.cc"; sourceTree = ""; }; + 34C9308F21FA5A77002D729C /* hb-ot-name.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-name.cc"; path = "../../../externals/harfbuzz/src/hb-ot-name.cc"; sourceTree = ""; }; + 34C9309021FA5A77002D729C /* hb-ot-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape.cc"; sourceTree = ""; }; + 34C9309121FA5A77002D729C /* hb-ot-shape-complex-hangul.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hangul.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-hangul.cc"; sourceTree = ""; }; + 34C9309221FA5A77002D729C /* hb-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-face.cc"; path = "../../../externals/harfbuzz/src/hb-face.cc"; sourceTree = ""; }; + 34C9309321FA5A77002D729C /* hb-ot-math.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-math.cc"; path = "../../../externals/harfbuzz/src/hb-ot-math.cc"; sourceTree = ""; }; + 34C9309421FA5A77002D729C /* hb-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-map.cc"; path = "../../../externals/harfbuzz/src/hb-map.cc"; sourceTree = ""; }; + 34C9309521FA5A77002D729C /* hb-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-font.cc"; path = "../../../externals/harfbuzz/src/hb-font.cc"; sourceTree = ""; }; + 34C9309621FA5A77002D729C /* hb-set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-set.cc"; path = "../../../externals/harfbuzz/src/hb-set.cc"; sourceTree = ""; }; + 34C9309821FA5A77002D729C /* hb-ot-shape-complex-use-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-use-table.cc"; sourceTree = ""; }; + 34C9309921FA5A77002D729C /* hb-ot-tag.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-tag.cc"; path = "../../../externals/harfbuzz/src/hb-ot-tag.cc"; sourceTree = ""; }; + 34C9309A21FA5A77002D729C /* hb-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape.cc"; path = "../../../externals/harfbuzz/src/hb-shape.cc"; sourceTree = ""; }; + 34C9309B21FA5A77002D729C /* hb-warning.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-warning.cc"; path = "../../../externals/harfbuzz/src/hb-warning.cc"; sourceTree = ""; }; + 34C9309C21FA5A77002D729C /* hb-fallback-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-fallback-shape.cc"; path = "../../../externals/harfbuzz/src/hb-fallback-shape.cc"; sourceTree = ""; }; + 34C9309D21FA5A77002D729C /* hb-ot-var.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-var.cc"; path = "../../../externals/harfbuzz/src/hb-ot-var.cc"; sourceTree = ""; }; 34D723421EB385E900E6210E /* libHarfBuzzSharp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libHarfBuzzSharp.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 34F6800B233ED0F70091C30D /* hb-ot-meta.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-meta.cc"; path = "../../externals/harfbuzz/src/hb-ot-meta.cc"; sourceTree = ""; }; - 34F6800C233ED0F70091C30D /* hb-ot-metrics.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-metrics.hh"; path = "../../externals/harfbuzz/src/hb-ot-metrics.hh"; sourceTree = ""; }; - 34F6800D233ED0F70091C30D /* hb-ot-meta-table.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-meta-table.hh"; path = "../../externals/harfbuzz/src/hb-ot-meta-table.hh"; sourceTree = ""; }; - 34F6800E233ED0F70091C30D /* hb-ot-meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-meta.h"; path = "../../externals/harfbuzz/src/hb-ot-meta.h"; sourceTree = ""; }; - 34F6800F233ED0F70091C30D /* hb-ot-metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-metrics.h"; path = "../../externals/harfbuzz/src/hb-ot-metrics.h"; sourceTree = ""; }; - 34F68010233ED0F70091C30D /* hb-ot-metrics.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-metrics.cc"; path = "../../externals/harfbuzz/src/hb-ot-metrics.cc"; sourceTree = ""; }; + 34F6800B233ED0F70091C30D /* hb-ot-meta.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-meta.cc"; path = "../../../externals/harfbuzz/src/hb-ot-meta.cc"; sourceTree = ""; }; + 34F6800C233ED0F70091C30D /* hb-ot-metrics.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-metrics.hh"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.hh"; sourceTree = ""; }; + 34F6800D233ED0F70091C30D /* hb-ot-meta-table.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-meta-table.hh"; path = "../../../externals/harfbuzz/src/hb-ot-meta-table.hh"; sourceTree = ""; }; + 34F6800E233ED0F70091C30D /* hb-ot-meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-meta.h"; path = "../../../externals/harfbuzz/src/hb-ot-meta.h"; sourceTree = ""; }; + 34F6800F233ED0F70091C30D /* hb-ot-metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-metrics.h"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.h"; sourceTree = ""; }; + 34F68010233ED0F70091C30D /* hb-ot-metrics.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-metrics.cc"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.cc"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ diff --git a/native-builds/libSkiaSharp_ios/libSkiaSharp.xcodeproj/project.pbxproj b/native/ios/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj similarity index 84% rename from native-builds/libSkiaSharp_ios/libSkiaSharp.xcodeproj/project.pbxproj rename to native/ios/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj index 75636d0444..ff453a1dd0 100644 --- a/native-builds/libSkiaSharp_ios/libSkiaSharp.xcodeproj/project.pbxproj +++ b/native/ios/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj @@ -29,23 +29,23 @@ /* Begin PBXFileReference section */ 21FD2B301C014C000023CFAE /* libSkiaSharp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = libSkiaSharp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 21FD2B351C014C000023CFAE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 3419BFDD21D405AA0067DAFB /* SkManagedDrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedDrawable.h; path = ../../../externals/skia/include/xamarin/SkManagedDrawable.h; sourceTree = ""; }; - 3419BFDE21D405AA0067DAFB /* sk_manageddrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_manageddrawable.h; path = ../../../externals/skia/include/xamarin/sk_manageddrawable.h; sourceTree = ""; }; - 3419BFE121D405B20067DAFB /* SkManagedDrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedDrawable.cpp; path = ../../../externals/skia/src/xamarin/SkManagedDrawable.cpp; sourceTree = ""; }; - 3419BFE221D405B20067DAFB /* sk_manageddrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_manageddrawable.cpp; path = ../../../externals/skia/src/xamarin/sk_manageddrawable.cpp; sourceTree = ""; }; + 3419BFDD21D405AA0067DAFB /* SkManagedDrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedDrawable.h; path = ../../../../externals/skia/include/xamarin/SkManagedDrawable.h; sourceTree = ""; }; + 3419BFDE21D405AA0067DAFB /* sk_manageddrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_manageddrawable.h; path = ../../../../externals/skia/include/xamarin/sk_manageddrawable.h; sourceTree = ""; }; + 3419BFE121D405B20067DAFB /* SkManagedDrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedDrawable.cpp; path = ../../../../externals/skia/src/xamarin/SkManagedDrawable.cpp; sourceTree = ""; }; + 3419BFE221D405B20067DAFB /* sk_manageddrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_manageddrawable.cpp; path = ../../../../externals/skia/src/xamarin/sk_manageddrawable.cpp; sourceTree = ""; }; 345A7E571E7635B10046F543 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 345A7E591E7635B50046F543 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; 345A7E5B1E7635B90046F543 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; 34C0C90320573CBE00DFDB22 /* libSkiaSharp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libSkiaSharp.h; sourceTree = ""; }; - 34CB9AC3205699BC00BACCBA /* WinRTCompat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WinRTCompat.cpp; path = ../../../externals/skia/src/xamarin/WinRTCompat.cpp; sourceTree = ""; }; - 34CB9AC4205699BC00BACCBA /* sk_managedstream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_managedstream.cpp; path = ../../../externals/skia/src/xamarin/sk_managedstream.cpp; sourceTree = ""; }; - 34CB9AC5205699BC00BACCBA /* SkManagedStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedStream.cpp; path = ../../../externals/skia/src/xamarin/SkManagedStream.cpp; sourceTree = ""; }; - 34CB9AC6205699BC00BACCBA /* sk_xamarin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_xamarin.cpp; path = ../../../externals/skia/src/xamarin/sk_xamarin.cpp; sourceTree = ""; }; - 34CB9AC8205699BC00BACCBA /* SkiaKeeper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkiaKeeper.c; path = ../../../externals/skia/src/xamarin/SkiaKeeper.c; sourceTree = ""; }; - 34CB9AD2205699C300BACCBA /* SkManagedStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedStream.h; path = ../../../externals/skia/include/xamarin/SkManagedStream.h; sourceTree = ""; }; - 34CB9AD3205699C400BACCBA /* sk_managedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_managedstream.h; path = ../../../externals/skia/include/xamarin/sk_managedstream.h; sourceTree = ""; }; - 34CB9AD5205699C400BACCBA /* sk_xamarin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_xamarin.h; path = ../../../externals/skia/include/xamarin/sk_xamarin.h; sourceTree = ""; }; - 34CB9AD6205699C400BACCBA /* WinRTCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WinRTCompat.h; path = ../../../externals/skia/include/xamarin/WinRTCompat.h; sourceTree = ""; }; + 34CB9AC3205699BC00BACCBA /* WinRTCompat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WinRTCompat.cpp; path = ../../../../externals/skia/src/xamarin/WinRTCompat.cpp; sourceTree = ""; }; + 34CB9AC4205699BC00BACCBA /* sk_managedstream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_managedstream.cpp; path = ../../../../externals/skia/src/xamarin/sk_managedstream.cpp; sourceTree = ""; }; + 34CB9AC5205699BC00BACCBA /* SkManagedStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedStream.cpp; path = ../../../../externals/skia/src/xamarin/SkManagedStream.cpp; sourceTree = ""; }; + 34CB9AC6205699BC00BACCBA /* sk_xamarin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_xamarin.cpp; path = ../../../../externals/skia/src/xamarin/sk_xamarin.cpp; sourceTree = ""; }; + 34CB9AC8205699BC00BACCBA /* SkiaKeeper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkiaKeeper.c; path = ../../../../externals/skia/src/xamarin/SkiaKeeper.c; sourceTree = ""; }; + 34CB9AD2205699C300BACCBA /* SkManagedStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedStream.h; path = ../../../../externals/skia/include/xamarin/SkManagedStream.h; sourceTree = ""; }; + 34CB9AD3205699C400BACCBA /* sk_managedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_managedstream.h; path = ../../../../externals/skia/include/xamarin/sk_managedstream.h; sourceTree = ""; }; + 34CB9AD5205699C400BACCBA /* sk_xamarin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_xamarin.h; path = ../../../../externals/skia/include/xamarin/sk_xamarin.h; sourceTree = ""; }; + 34CB9AD6205699C400BACCBA /* WinRTCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WinRTCompat.h; path = ../../../../externals/skia/include/xamarin/WinRTCompat.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -334,27 +334,27 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_ENABLE_CPP_RTTI = NO; HEADER_SEARCH_PATHS = ( - ../../externals/skia/src/c, - ../../externals/skia/src/core, - ../../externals/skia/src/xml, - ../../externals/skia/include/private, - ../../externals/skia/include/c, - ../../externals/skia/include/core, - ../../externals/skia/include/codec, - ../../externals/skia/include/effects, - ../../externals/skia/include/encode, - ../../externals/skia/include/pathops, - ../../externals/skia/include/utils, - ../../externals/skia/include/gpu, - ../../externals/skia/include/config, - ../../externals/skia/include/ports, - ../../externals/skia/include/xml, - ../../externals/skia/include/svg, + ../../../externals/skia/src/c, + ../../../externals/skia/src/core, + ../../../externals/skia/src/xml, + ../../../externals/skia/include/private, + ../../../externals/skia/include/c, + ../../../externals/skia/include/core, + ../../../externals/skia/include/codec, + ../../../externals/skia/include/effects, + ../../../externals/skia/include/encode, + ../../../externals/skia/include/pathops, + ../../../externals/skia/include/utils, + ../../../externals/skia/include/gpu, + ../../../externals/skia/include/config, + ../../../externals/skia/include/ports, + ../../../externals/skia/include/xml, + ../../../externals/skia/include/svg, ); INFOPLIST_FILE = libSkiaSharp/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "../../externals/skia/out/ios/$(ARCHS)"; + LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/ios/$(ARCHS)"; OTHER_LDFLAGS = ( "-all_load", "-lskia", @@ -375,27 +375,27 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_ENABLE_CPP_RTTI = NO; HEADER_SEARCH_PATHS = ( - ../../externals/skia/src/c, - ../../externals/skia/src/core, - ../../externals/skia/src/xml, - ../../externals/skia/include/private, - ../../externals/skia/include/c, - ../../externals/skia/include/core, - ../../externals/skia/include/codec, - ../../externals/skia/include/effects, - ../../externals/skia/include/encode, - ../../externals/skia/include/pathops, - ../../externals/skia/include/utils, - ../../externals/skia/include/gpu, - ../../externals/skia/include/config, - ../../externals/skia/include/ports, - ../../externals/skia/include/xml, - ../../externals/skia/include/svg, + ../../../externals/skia/src/c, + ../../../externals/skia/src/core, + ../../../externals/skia/src/xml, + ../../../externals/skia/include/private, + ../../../externals/skia/include/c, + ../../../externals/skia/include/core, + ../../../externals/skia/include/codec, + ../../../externals/skia/include/effects, + ../../../externals/skia/include/encode, + ../../../externals/skia/include/pathops, + ../../../externals/skia/include/utils, + ../../../externals/skia/include/gpu, + ../../../externals/skia/include/config, + ../../../externals/skia/include/ports, + ../../../externals/skia/include/xml, + ../../../externals/skia/include/svg, ); INFOPLIST_FILE = libSkiaSharp/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "../../externals/skia/out/ios/$(ARCHS)"; + LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/ios/$(ARCHS)"; OTHER_LDFLAGS = ( "-all_load", "-lskia", diff --git a/native-builds/libSkiaSharp_ios/libSkiaSharp/Info.plist b/native/ios/libSkiaSharp/libSkiaSharp/Info.plist similarity index 100% rename from native-builds/libSkiaSharp_ios/libSkiaSharp/Info.plist rename to native/ios/libSkiaSharp/libSkiaSharp/Info.plist diff --git a/native-builds/libSkiaSharp_ios/libSkiaSharp/libSkiaSharp.h b/native/ios/libSkiaSharp/libSkiaSharp/libSkiaSharp.h similarity index 100% rename from native-builds/libSkiaSharp_ios/libSkiaSharp/libSkiaSharp.h rename to native/ios/libSkiaSharp/libSkiaSharp/libSkiaSharp.h diff --git a/native/linux/build.cake b/native/linux/build.cake new file mode 100644 index 0000000000..68f75f02cc --- /dev/null +++ b/native/linux/build.cake @@ -0,0 +1,86 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native")); + +#load "../../cake/native-shared.cake" + +string SUPPORT_GPU_VAR = Argument("supportGpu", EnvironmentVariable("SUPPORT_GPU") ?? "true").ToLower(); +bool SUPPORT_GPU = SUPPORT_GPU_VAR == "1" || SUPPORT_GPU_VAR == "true"; + +string CC = Argument("cc", EnvironmentVariable("CC")); +string CXX = Argument("ccx", EnvironmentVariable("CXX")); +string AR = Argument("ar", EnvironmentVariable("AR")); + +string VARIANT = BUILD_VARIANT ?? "linux"; + +Task("libSkiaSharp") + .IsDependentOn("git-sync-deps") + .WithCriteria(IsRunningOnLinux()) + .Does(() => +{ + Build("x64", "x64", "x64"); + + void Build(string arch, string skiaArch, string dir) + { + if (Skip(arch)) return; + + var compilers = ""; + if (!string.IsNullOrEmpty(CC)) + compilers += $"cc='{CC}' "; + if (!string.IsNullOrEmpty(CXX)) + compilers += $"cxx='{CXX}' "; + if (!string.IsNullOrEmpty(AR)) + compilers += $"ar='{AR}' "; + + var soname = GetVersion("libSkiaSharp", "soname"); + var map = MakeAbsolute((FilePath)"libSkiaSharp/libSkiaSharp.map"); + + GnNinja($"{VARIANT}/{arch}", "SkiaSharp", + $"is_official_build=true skia_enable_tools=false " + + $"target_os='linux' target_cpu='{arch}' " + + $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + + $"skia_use_system_expat=false skia_use_system_freetype2=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + + $"skia_enable_gpu={(SUPPORT_GPU ? "true" : "false")} " + + $"extra_cflags=[ '-DSKIA_C_DLL' ] " + + $"extra_ldflags=[ '-static-libstdc++', '-static-libgcc', '-Wl,--version-script={map}' ] " + + compilers + + $"linux_soname_version='{soname}' " + + ADDITIONAL_GN_ARGS); + + var outDir = OUTPUT_PATH.Combine($"{VARIANT}/{dir}"); + EnsureDirectoryExists(outDir); + var so = SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libSkiaSharp.so.{soname}"); + CopyFileToDirectory(so, outDir); + CopyFile(so, outDir.CombineWithFilePath("libSkiaSharp.so")); + } +}); + +Task("libHarfBuzzSharp") + .WithCriteria(IsRunningOnLinux()) + .Does(() => +{ + Build("x64", "x64"); + + void Build(string arch, string dir) + { + if (Skip(arch)) return; + + var soname = GetVersion("HarfBuzz", "soname"); + + RunProcess("make", new ProcessSettings { + Arguments = $"ARCH={arch} SONAME_VERSION={soname} VARIANT={VARIANT} LDFLAGS=-static-libstdc++", + WorkingDirectory = "libHarfBuzzSharp", + }); + + var outDir = OUTPUT_PATH.Combine($"{VARIANT}/{dir}"); + EnsureDirectoryExists(outDir); + var so = $"libHarfBuzzSharp/bin/{VARIANT}/{arch}/libHarfBuzzSharp.so.{soname}"; + CopyFileToDirectory(so, outDir); + CopyFile(so, outDir.CombineWithFilePath("libHarfBuzzSharp.so")); + } +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp"); + +RunTarget(TARGET); diff --git a/native-builds/libHarfBuzzSharp_linux/Makefile b/native/linux/libHarfBuzzSharp/Makefile similarity index 97% rename from native-builds/libHarfBuzzSharp_linux/Makefile rename to native/linux/libHarfBuzzSharp/Makefile index 5bd57e4be4..68f9364a1b 100644 --- a/native-builds/libHarfBuzzSharp_linux/Makefile +++ b/native/linux/libHarfBuzzSharp/Makefile @@ -3,13 +3,14 @@ SONAME_VERSION ?= 0.0.0 CC ?= clang CXX ?= clang++ LDFLAGS += +VARIANT ?= linux noop = space = ${noop} ${noop} -src_root = ../../externals/harfbuzz/src -obj_root = obj -bin_root = bin +src_root = ../../../externals/harfbuzz/src +obj_root = obj/${VARIANT} +bin_root = bin/${VARIANT} objarch_root = ${obj_root}/${ARCH} target_name = libHarfBuzzSharp.so target = ${bin_root}/${ARCH}/${target_name}.${SONAME_VERSION} diff --git a/native-builds/libHarfBuzzSharp_linux/config.h b/native/linux/libHarfBuzzSharp/config.h similarity index 100% rename from native-builds/libHarfBuzzSharp_linux/config.h rename to native/linux/libHarfBuzzSharp/config.h diff --git a/native-builds/libSkiaSharp_linux/libSkiaSharp.map b/native/linux/libSkiaSharp/libSkiaSharp.map similarity index 100% rename from native-builds/libSkiaSharp_linux/libSkiaSharp.map rename to native/linux/libSkiaSharp/libSkiaSharp.map diff --git a/native/linuxnodeps/build.cake b/native/linuxnodeps/build.cake new file mode 100644 index 0000000000..ba8664ae53 --- /dev/null +++ b/native/linuxnodeps/build.cake @@ -0,0 +1,39 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native/linuxnodeps")); + +#load "../../cake/shared.cake" + +Task("libSkiaSharp") + .WithCriteria(IsRunningOnLinux()) + .Does(() => +{ + RunCake("../linux/build.cake", "libSkiaSharp", new Dictionary { + { "variant", "linuxnodeps" }, + { "gn", "skia_use_fontconfig=false" }, + }); + + RunProcess("ldd", OUTPUT_PATH.CombineWithFilePath($"x64/libSkiaSharp.so").FullPath, out var stdout); + + if (stdout.Any(o => o.Contains("fontconfig"))) + throw new Exception("libSkiaSharp.so contained a dependency on fontconfig."); +}); + +Task("libHarfBuzzSharp") + .WithCriteria(IsRunningOnLinux()) + .Does(() => +{ + RunCake("../linux/build.cake", "libHarfBuzzSharp", new Dictionary { + { "variant", "linuxnodeps" }, + }); + + RunProcess("ldd", OUTPUT_PATH.CombineWithFilePath($"x64/libHarfBuzzSharp.so").FullPath, out var stdout); + + if (stdout.Any(o => o.Contains("fontconfig"))) + throw new Exception("libHarfBuzzSharp.so contained a dependency on fontconfig."); +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp"); + +RunTarget(TARGET); diff --git a/native/macos/build.cake b/native/macos/build.cake new file mode 100644 index 0000000000..f94a6e0fcb --- /dev/null +++ b/native/macos/build.cake @@ -0,0 +1,68 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native/osx")); + +#load "../../cake/native-shared.cake" +#load "../../cake/xcode.cake" + +Task("libSkiaSharp") + .IsDependentOn("git-sync-deps") + .WithCriteria(IsRunningOnMac()) + .Does(() => +{ + Build("x86_64", "x64"); + + RunLipo(OUTPUT_PATH, "libSkiaSharp.dylib", new [] { + (FilePath) "x86_64/libSkiaSharp.dylib" + }); + + void Build(string arch, string skiaArch) + { + if (Skip(arch)) return; + + GnNinja($"macos/{arch}", "skia", + $"is_official_build=true skia_enable_tools=false " + + $"target_os='mac' target_cpu='{skiaArch}' " + + $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + + $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + + $"extra_cflags=[ '-DSKIA_C_DLL', '-mmacosx-version-min=10.7', '-stdlib=libc++' ] " + + $"extra_ldflags=[ '-Wl,macosx_version_min=10.7', '-stdlib=libc++' ]"); + + RunXCodeBuild("libSkiaSharp/libSkiaSharp.xcodeproj", "libSkiaSharp", "macosx", arch); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyDirectory($"libSkiaSharp/bin/{CONFIGURATION}/{arch}/{CONFIGURATION}/", outDir); + + StripSign(outDir.CombineWithFilePath("libSkiaSharp.dylib")); + } +}); + +Task("libHarfBuzzSharp") + .WithCriteria(IsRunningOnMac()) + .Does(() => +{ + Build("x86_64"); + + RunLipo(OUTPUT_PATH, "libHarfBuzzSharp.dylib", new [] { + (FilePath) "x86_64/libHarfBuzzSharp.dylib" + }); + + void Build(string arch) + { + if (Skip(arch)) return; + + RunXCodeBuild("libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj", "libHarfBuzzSharp", "macosx", arch); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyDirectory($"libHarfBuzzSharp/bin/{CONFIGURATION}/{arch}/{CONFIGURATION}/", outDir); + + StripSign(outDir.CombineWithFilePath("libHarfBuzzSharp.dylib")); + } +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp"); + +RunTarget(TARGET); diff --git a/native-builds/libHarfBuzzSharp_osx/config.h b/native/macos/libHarfBuzzSharp/config.h similarity index 100% rename from native-builds/libHarfBuzzSharp_osx/config.h rename to native/macos/libHarfBuzzSharp/config.h diff --git a/native-builds/libHarfBuzzSharp_osx/libHarfBuzzSharp.xcodeproj/project.pbxproj b/native/macos/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj similarity index 84% rename from native-builds/libHarfBuzzSharp_osx/libHarfBuzzSharp.xcodeproj/project.pbxproj rename to native/macos/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj index 2cb52bd0fa..925e7bab61 100644 --- a/native-builds/libHarfBuzzSharp_osx/libHarfBuzzSharp.xcodeproj/project.pbxproj +++ b/native/macos/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj @@ -68,63 +68,63 @@ /* Begin PBXFileReference section */ 346E0AC51EB38F6300F3DE96 /* libHarfBuzzSharp.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libHarfBuzzSharp.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 34F57AB9233ED11B00427BE9 /* hb-ot-meta.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-meta.cc"; path = "../../externals/harfbuzz/src/hb-ot-meta.cc"; sourceTree = ""; }; - 34F57ABA233ED11B00427BE9 /* hb-ot-metrics.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-metrics.cc"; path = "../../externals/harfbuzz/src/hb-ot-metrics.cc"; sourceTree = ""; }; - 34F57ABB233ED11B00427BE9 /* hb-ot-meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-meta.h"; path = "../../externals/harfbuzz/src/hb-ot-meta.h"; sourceTree = ""; }; - 34F57ABC233ED11B00427BE9 /* hb-ot-metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-metrics.h"; path = "../../externals/harfbuzz/src/hb-ot-metrics.h"; sourceTree = ""; }; - 34F57ABD233ED11C00427BE9 /* hb-ot-metrics.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-metrics.hh"; path = "../../externals/harfbuzz/src/hb-ot-metrics.hh"; sourceTree = ""; }; - 34F57ABE233ED11C00427BE9 /* hb-ot-meta-table.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-meta-table.hh"; path = "../../externals/harfbuzz/src/hb-ot-meta-table.hh"; sourceTree = ""; }; - 34F64B3E21FA5EC1008FBDBD /* hb-ot-cff1-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff1-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-cff1-table.cc"; sourceTree = ""; }; - 34F64B3F21FA5EC1008FBDBD /* hb-ot-shape-complex-indic-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-indic-table.cc"; sourceTree = ""; }; - 34F64B4021FA5EC1008FBDBD /* hb-ot-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-font.cc"; path = "../../externals/harfbuzz/src/hb-ot-font.cc"; sourceTree = ""; }; - 34F64B4121FA5EC1008FBDBD /* hb-ot-color.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-color.cc"; path = "../../externals/harfbuzz/src/hb-ot-color.cc"; sourceTree = ""; }; - 34F64B4321FA5EC1008FBDBD /* hb-ot-shape-complex-thai.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-thai.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-thai.cc"; sourceTree = ""; }; - 34F64B4421FA5EC1008FBDBD /* hb-blob.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-blob.cc"; path = "../../externals/harfbuzz/src/hb-blob.cc"; sourceTree = ""; }; - 34F64B4521FA5EC1008FBDBD /* hb-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-map.cc"; path = "../../externals/harfbuzz/src/hb-map.cc"; sourceTree = ""; }; - 34F64B4621FA5EC1008FBDBD /* hb-ot-shape-complex-use-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-use-table.cc"; sourceTree = ""; }; - 34F64B4721FA5EC1008FBDBD /* hb-ot-shape-complex-use.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-use.cc"; sourceTree = ""; }; - 34F64B4821FA5EC1008FBDBD /* hb-buffer-serialize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer-serialize.cc"; path = "../../externals/harfbuzz/src/hb-buffer-serialize.cc"; sourceTree = ""; }; - 34F64B4921FA5EC1008FBDBD /* hb-ot-shape-complex-vowel-constraints.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-vowel-constraints.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc"; sourceTree = ""; }; - 34F64B4A21FA5EC1008FBDBD /* hb-aat-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-map.cc"; path = "../../externals/harfbuzz/src/hb-aat-map.cc"; sourceTree = ""; }; - 34F64B4B21FA5EC1008FBDBD /* hb-ot-shape-normalize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-normalize.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-normalize.cc"; sourceTree = ""; }; - 34F64B4C21FA5EC1008FBDBD /* hb-unicode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-unicode.cc"; path = "../../externals/harfbuzz/src/hb-unicode.cc"; sourceTree = ""; }; - 34F64B4D21FA5EC1008FBDBD /* hb-warning.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-warning.cc"; path = "../../externals/harfbuzz/src/hb-warning.cc"; sourceTree = ""; }; - 34F64B4E21FA5EC1008FBDBD /* hb-ot-shape-complex-myanmar.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-myanmar.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-myanmar.cc"; sourceTree = ""; }; - 34F64B4F21FA5EC1008FBDBD /* hb-ot-shape-complex-hangul.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hangul.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-hangul.cc"; sourceTree = ""; }; - 34F64B5021FA5EC1008FBDBD /* hb-ot-shape-fallback.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-fallback.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-fallback.cc"; sourceTree = ""; }; - 34F64B5121FA5EC1008FBDBD /* hb-ot-cff2-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff2-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-cff2-table.cc"; sourceTree = ""; }; - 34F64B5221FA5EC1008FBDBD /* hb-ot-shape-complex-hebrew.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hebrew.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-hebrew.cc"; sourceTree = ""; }; - 34F64B5321FA5EC1008FBDBD /* hb-ot-shape-complex-arabic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-arabic.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-arabic.cc"; sourceTree = ""; }; - 34F64B5421FA5EC1008FBDBD /* hb-ot-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape.cc"; sourceTree = ""; }; - 34F64B5521FA5EC1008FBDBD /* hb-ot-var.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-var.cc"; path = "../../externals/harfbuzz/src/hb-ot-var.cc"; sourceTree = ""; }; - 34F64B5621FA5EC1008FBDBD /* hb-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape.cc"; path = "../../externals/harfbuzz/src/hb-shape.cc"; sourceTree = ""; }; - 34F64B5721FA5EC1008FBDBD /* hb-ot-shape-complex-khmer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-khmer.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-khmer.cc"; sourceTree = ""; }; - 34F64B5821FA5EC2008FBDBD /* hb-set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-set.cc"; path = "../../externals/harfbuzz/src/hb-set.cc"; sourceTree = ""; }; - 34F64B5921FA5EC2008FBDBD /* hb-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-face.cc"; path = "../../externals/harfbuzz/src/hb-face.cc"; sourceTree = ""; }; - 34F64B5A21FA5EC2008FBDBD /* hb-shaper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shaper.cc"; path = "../../externals/harfbuzz/src/hb-shaper.cc"; sourceTree = ""; }; - 34F64B5B21FA5EC2008FBDBD /* hb-ot-shape-complex-indic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-indic.cc"; sourceTree = ""; }; - 34F64B5C21FA5EC2008FBDBD /* hb-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-common.cc"; path = "../../externals/harfbuzz/src/hb-common.cc"; sourceTree = ""; }; - 34F64B5D21FA5EC2008FBDBD /* hb-ot-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-layout.cc"; path = "../../externals/harfbuzz/src/hb-ot-layout.cc"; sourceTree = ""; }; - 34F64B5E21FA5EC2008FBDBD /* hb-aat-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-layout.cc"; path = "../../externals/harfbuzz/src/hb-aat-layout.cc"; sourceTree = ""; }; - 34F64B5F21FA5EC2008FBDBD /* hb-ot-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-face.cc"; path = "../../externals/harfbuzz/src/hb-ot-face.cc"; sourceTree = ""; }; - 34F64B6121FA5EC2008FBDBD /* hb-fallback-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-fallback-shape.cc"; path = "../../externals/harfbuzz/src/hb-fallback-shape.cc"; sourceTree = ""; }; - 34F64B6221FA5EC2008FBDBD /* hb-shape-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape-plan.cc"; path = "../../externals/harfbuzz/src/hb-shape-plan.cc"; sourceTree = ""; }; - 34F64B6321FA5EC2008FBDBD /* hb-ot-math.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-math.cc"; path = "../../externals/harfbuzz/src/hb-ot-math.cc"; sourceTree = ""; }; - 34F64B6421FA5EC2008FBDBD /* hb-ot-tag.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-tag.cc"; path = "../../externals/harfbuzz/src/hb-ot-tag.cc"; sourceTree = ""; }; - 34F64B6521FA5EC2008FBDBD /* hb-ot-shape-complex-default.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-default.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-default.cc"; sourceTree = ""; }; - 34F64B6621FA5EC2008FBDBD /* hb-static.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-static.cc"; path = "../../externals/harfbuzz/src/hb-static.cc"; sourceTree = ""; }; - 34F64B6721FA5EC2008FBDBD /* hb-ot-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-map.cc"; path = "../../externals/harfbuzz/src/hb-ot-map.cc"; sourceTree = ""; }; - 34F64B6821FA5EC2008FBDBD /* hb-ot-name.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-name.cc"; path = "../../externals/harfbuzz/src/hb-ot-name.cc"; sourceTree = ""; }; - 34F64B6921FA5EC2008FBDBD /* hb-buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer.cc"; path = "../../externals/harfbuzz/src/hb-buffer.cc"; sourceTree = ""; }; - 34F64B6A21FA5EC2008FBDBD /* hb-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-font.cc"; path = "../../externals/harfbuzz/src/hb-font.cc"; sourceTree = ""; }; + 34F57AB9233ED11B00427BE9 /* hb-ot-meta.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-meta.cc"; path = "../../../externals/harfbuzz/src/hb-ot-meta.cc"; sourceTree = ""; }; + 34F57ABA233ED11B00427BE9 /* hb-ot-metrics.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-metrics.cc"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.cc"; sourceTree = ""; }; + 34F57ABB233ED11B00427BE9 /* hb-ot-meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-meta.h"; path = "../../../externals/harfbuzz/src/hb-ot-meta.h"; sourceTree = ""; }; + 34F57ABC233ED11B00427BE9 /* hb-ot-metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-metrics.h"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.h"; sourceTree = ""; }; + 34F57ABD233ED11C00427BE9 /* hb-ot-metrics.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-metrics.hh"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.hh"; sourceTree = ""; }; + 34F57ABE233ED11C00427BE9 /* hb-ot-meta-table.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-meta-table.hh"; path = "../../../externals/harfbuzz/src/hb-ot-meta-table.hh"; sourceTree = ""; }; + 34F64B3E21FA5EC1008FBDBD /* hb-ot-cff1-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff1-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-cff1-table.cc"; sourceTree = ""; }; + 34F64B3F21FA5EC1008FBDBD /* hb-ot-shape-complex-indic-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-indic-table.cc"; sourceTree = ""; }; + 34F64B4021FA5EC1008FBDBD /* hb-ot-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-font.cc"; path = "../../../externals/harfbuzz/src/hb-ot-font.cc"; sourceTree = ""; }; + 34F64B4121FA5EC1008FBDBD /* hb-ot-color.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-color.cc"; path = "../../../externals/harfbuzz/src/hb-ot-color.cc"; sourceTree = ""; }; + 34F64B4321FA5EC1008FBDBD /* hb-ot-shape-complex-thai.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-thai.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-thai.cc"; sourceTree = ""; }; + 34F64B4421FA5EC1008FBDBD /* hb-blob.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-blob.cc"; path = "../../../externals/harfbuzz/src/hb-blob.cc"; sourceTree = ""; }; + 34F64B4521FA5EC1008FBDBD /* hb-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-map.cc"; path = "../../../externals/harfbuzz/src/hb-map.cc"; sourceTree = ""; }; + 34F64B4621FA5EC1008FBDBD /* hb-ot-shape-complex-use-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-use-table.cc"; sourceTree = ""; }; + 34F64B4721FA5EC1008FBDBD /* hb-ot-shape-complex-use.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-use.cc"; sourceTree = ""; }; + 34F64B4821FA5EC1008FBDBD /* hb-buffer-serialize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer-serialize.cc"; path = "../../../externals/harfbuzz/src/hb-buffer-serialize.cc"; sourceTree = ""; }; + 34F64B4921FA5EC1008FBDBD /* hb-ot-shape-complex-vowel-constraints.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-vowel-constraints.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc"; sourceTree = ""; }; + 34F64B4A21FA5EC1008FBDBD /* hb-aat-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-map.cc"; path = "../../../externals/harfbuzz/src/hb-aat-map.cc"; sourceTree = ""; }; + 34F64B4B21FA5EC1008FBDBD /* hb-ot-shape-normalize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-normalize.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-normalize.cc"; sourceTree = ""; }; + 34F64B4C21FA5EC1008FBDBD /* hb-unicode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-unicode.cc"; path = "../../../externals/harfbuzz/src/hb-unicode.cc"; sourceTree = ""; }; + 34F64B4D21FA5EC1008FBDBD /* hb-warning.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-warning.cc"; path = "../../../externals/harfbuzz/src/hb-warning.cc"; sourceTree = ""; }; + 34F64B4E21FA5EC1008FBDBD /* hb-ot-shape-complex-myanmar.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-myanmar.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-myanmar.cc"; sourceTree = ""; }; + 34F64B4F21FA5EC1008FBDBD /* hb-ot-shape-complex-hangul.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hangul.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-hangul.cc"; sourceTree = ""; }; + 34F64B5021FA5EC1008FBDBD /* hb-ot-shape-fallback.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-fallback.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-fallback.cc"; sourceTree = ""; }; + 34F64B5121FA5EC1008FBDBD /* hb-ot-cff2-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff2-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-cff2-table.cc"; sourceTree = ""; }; + 34F64B5221FA5EC1008FBDBD /* hb-ot-shape-complex-hebrew.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hebrew.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-hebrew.cc"; sourceTree = ""; }; + 34F64B5321FA5EC1008FBDBD /* hb-ot-shape-complex-arabic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-arabic.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-arabic.cc"; sourceTree = ""; }; + 34F64B5421FA5EC1008FBDBD /* hb-ot-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape.cc"; sourceTree = ""; }; + 34F64B5521FA5EC1008FBDBD /* hb-ot-var.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-var.cc"; path = "../../../externals/harfbuzz/src/hb-ot-var.cc"; sourceTree = ""; }; + 34F64B5621FA5EC1008FBDBD /* hb-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape.cc"; path = "../../../externals/harfbuzz/src/hb-shape.cc"; sourceTree = ""; }; + 34F64B5721FA5EC1008FBDBD /* hb-ot-shape-complex-khmer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-khmer.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-khmer.cc"; sourceTree = ""; }; + 34F64B5821FA5EC2008FBDBD /* hb-set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-set.cc"; path = "../../../externals/harfbuzz/src/hb-set.cc"; sourceTree = ""; }; + 34F64B5921FA5EC2008FBDBD /* hb-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-face.cc"; path = "../../../externals/harfbuzz/src/hb-face.cc"; sourceTree = ""; }; + 34F64B5A21FA5EC2008FBDBD /* hb-shaper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shaper.cc"; path = "../../../externals/harfbuzz/src/hb-shaper.cc"; sourceTree = ""; }; + 34F64B5B21FA5EC2008FBDBD /* hb-ot-shape-complex-indic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-indic.cc"; sourceTree = ""; }; + 34F64B5C21FA5EC2008FBDBD /* hb-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-common.cc"; path = "../../../externals/harfbuzz/src/hb-common.cc"; sourceTree = ""; }; + 34F64B5D21FA5EC2008FBDBD /* hb-ot-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-layout.cc"; path = "../../../externals/harfbuzz/src/hb-ot-layout.cc"; sourceTree = ""; }; + 34F64B5E21FA5EC2008FBDBD /* hb-aat-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-layout.cc"; path = "../../../externals/harfbuzz/src/hb-aat-layout.cc"; sourceTree = ""; }; + 34F64B5F21FA5EC2008FBDBD /* hb-ot-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-face.cc"; path = "../../../externals/harfbuzz/src/hb-ot-face.cc"; sourceTree = ""; }; + 34F64B6121FA5EC2008FBDBD /* hb-fallback-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-fallback-shape.cc"; path = "../../../externals/harfbuzz/src/hb-fallback-shape.cc"; sourceTree = ""; }; + 34F64B6221FA5EC2008FBDBD /* hb-shape-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape-plan.cc"; path = "../../../externals/harfbuzz/src/hb-shape-plan.cc"; sourceTree = ""; }; + 34F64B6321FA5EC2008FBDBD /* hb-ot-math.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-math.cc"; path = "../../../externals/harfbuzz/src/hb-ot-math.cc"; sourceTree = ""; }; + 34F64B6421FA5EC2008FBDBD /* hb-ot-tag.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-tag.cc"; path = "../../../externals/harfbuzz/src/hb-ot-tag.cc"; sourceTree = ""; }; + 34F64B6521FA5EC2008FBDBD /* hb-ot-shape-complex-default.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-default.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-default.cc"; sourceTree = ""; }; + 34F64B6621FA5EC2008FBDBD /* hb-static.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-static.cc"; path = "../../../externals/harfbuzz/src/hb-static.cc"; sourceTree = ""; }; + 34F64B6721FA5EC2008FBDBD /* hb-ot-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-map.cc"; path = "../../../externals/harfbuzz/src/hb-ot-map.cc"; sourceTree = ""; }; + 34F64B6821FA5EC2008FBDBD /* hb-ot-name.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-name.cc"; path = "../../../externals/harfbuzz/src/hb-ot-name.cc"; sourceTree = ""; }; + 34F64B6921FA5EC2008FBDBD /* hb-buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer.cc"; path = "../../../externals/harfbuzz/src/hb-buffer.cc"; sourceTree = ""; }; + 34F64B6A21FA5EC2008FBDBD /* hb-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-font.cc"; path = "../../../externals/harfbuzz/src/hb-font.cc"; sourceTree = ""; }; 34F64B9E21FA5F1D008FBDBD /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; - 34FEAB0322BD8FE2007299F0 /* hb-subset-cff-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff-common.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff-common.cc"; sourceTree = ""; }; - 34FEAB0422BD8FE2007299F0 /* hb-subset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset.cc"; path = "../../externals/harfbuzz/src/hb-subset.cc"; sourceTree = ""; }; - 34FEAB0522BD8FE2007299F0 /* hb-subset-input.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-input.cc"; path = "../../externals/harfbuzz/src/hb-subset-input.cc"; sourceTree = ""; }; - 34FEAB0622BD8FE2007299F0 /* hb-ucd.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ucd.cc"; path = "../../externals/harfbuzz/src/hb-ucd.cc"; sourceTree = ""; }; - 34FEAB0722BD8FE2007299F0 /* hb-subset-cff1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff1.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff1.cc"; sourceTree = ""; }; - 34FEAB0822BD8FE2007299F0 /* hb-subset-cff2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff2.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff2.cc"; sourceTree = ""; }; - 34FEAB0922BD8FE2007299F0 /* hb-subset-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-plan.cc"; path = "../../externals/harfbuzz/src/hb-subset-plan.cc"; sourceTree = ""; }; + 34FEAB0322BD8FE2007299F0 /* hb-subset-cff-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff-common.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff-common.cc"; sourceTree = ""; }; + 34FEAB0422BD8FE2007299F0 /* hb-subset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset.cc"; path = "../../../externals/harfbuzz/src/hb-subset.cc"; sourceTree = ""; }; + 34FEAB0522BD8FE2007299F0 /* hb-subset-input.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-input.cc"; path = "../../../externals/harfbuzz/src/hb-subset-input.cc"; sourceTree = ""; }; + 34FEAB0622BD8FE2007299F0 /* hb-ucd.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ucd.cc"; path = "../../../externals/harfbuzz/src/hb-ucd.cc"; sourceTree = ""; }; + 34FEAB0722BD8FE2007299F0 /* hb-subset-cff1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff1.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff1.cc"; sourceTree = ""; }; + 34FEAB0822BD8FE2007299F0 /* hb-subset-cff2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff2.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff2.cc"; sourceTree = ""; }; + 34FEAB0922BD8FE2007299F0 /* hb-subset-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-plan.cc"; path = "../../../externals/harfbuzz/src/hb-subset-plan.cc"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ diff --git a/native-builds/libSkiaSharp_osx/libSkiaSharp.xcodeproj/project.pbxproj b/native/macos/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj similarity index 83% rename from native-builds/libSkiaSharp_osx/libSkiaSharp.xcodeproj/project.pbxproj rename to native/macos/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj index cc2c4950db..0794144c1f 100644 --- a/native-builds/libSkiaSharp_osx/libSkiaSharp.xcodeproj/project.pbxproj +++ b/native/macos/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj @@ -29,25 +29,25 @@ /* Begin PBXFileReference section */ 21C951551C03D27A003A1E1D /* libSkiaSharp.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libSkiaSharp.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; - 343CCD261E75FD47000EC0A6 /* libskia.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia.a; path = ../../externals/skia/out/mac/x64/libskia.a; sourceTree = ""; }; + 343CCD261E75FD47000EC0A6 /* libskia.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia.a; path = ../../../externals/skia/out/macos/x64/libskia.a; sourceTree = ""; }; 343CCD281E75FF29000EC0A6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 343CCD2A1E75FF3E000EC0A6 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; 343CCD2C1E75FF47000EC0A6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 343CCD2E1E75FF54000EC0A6 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; 343CCD301E75FF71000EC0A6 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - 3459E83C205698C6003EAD17 /* WinRTCompat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WinRTCompat.cpp; path = ../../../externals/skia/src/xamarin/WinRTCompat.cpp; sourceTree = ""; }; - 3459E83D205698C6003EAD17 /* sk_managedstream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_managedstream.cpp; path = ../../../externals/skia/src/xamarin/sk_managedstream.cpp; sourceTree = ""; }; - 3459E83E205698C6003EAD17 /* SkManagedStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedStream.cpp; path = ../../../externals/skia/src/xamarin/SkManagedStream.cpp; sourceTree = ""; }; - 3459E83F205698C6003EAD17 /* sk_xamarin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_xamarin.cpp; path = ../../../externals/skia/src/xamarin/sk_xamarin.cpp; sourceTree = ""; }; - 3459E841205698C7003EAD17 /* SkiaKeeper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkiaKeeper.c; path = ../../../externals/skia/src/xamarin/SkiaKeeper.c; sourceTree = ""; }; - 3459E84B205698D2003EAD17 /* SkManagedStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedStream.h; path = ../../../externals/skia/include/xamarin/SkManagedStream.h; sourceTree = ""; }; - 3459E84C205698D2003EAD17 /* sk_managedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_managedstream.h; path = ../../../externals/skia/include/xamarin/sk_managedstream.h; sourceTree = ""; }; - 3459E84E205698D2003EAD17 /* sk_xamarin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_xamarin.h; path = ../../../externals/skia/include/xamarin/sk_xamarin.h; sourceTree = ""; }; - 3459E84F205698D2003EAD17 /* WinRTCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WinRTCompat.h; path = ../../../externals/skia/include/xamarin/WinRTCompat.h; sourceTree = ""; }; - 346D1BBF21D405D30066C82D /* SkManagedDrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedDrawable.cpp; path = ../../../externals/skia/src/xamarin/SkManagedDrawable.cpp; sourceTree = ""; }; - 346D1BC021D405D30066C82D /* sk_manageddrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_manageddrawable.h; path = ../../../externals/skia/include/xamarin/sk_manageddrawable.h; sourceTree = ""; }; - 346D1BC121D405D30066C82D /* sk_manageddrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_manageddrawable.cpp; path = ../../../externals/skia/src/xamarin/sk_manageddrawable.cpp; sourceTree = ""; }; - 346D1BC221D405D30066C82D /* SkManagedDrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedDrawable.h; path = ../../../externals/skia/include/xamarin/SkManagedDrawable.h; sourceTree = ""; }; + 3459E83C205698C6003EAD17 /* WinRTCompat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WinRTCompat.cpp; path = ../../../../externals/skia/src/xamarin/WinRTCompat.cpp; sourceTree = ""; }; + 3459E83D205698C6003EAD17 /* sk_managedstream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_managedstream.cpp; path = ../../../../externals/skia/src/xamarin/sk_managedstream.cpp; sourceTree = ""; }; + 3459E83E205698C6003EAD17 /* SkManagedStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedStream.cpp; path = ../../../../externals/skia/src/xamarin/SkManagedStream.cpp; sourceTree = ""; }; + 3459E83F205698C6003EAD17 /* sk_xamarin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_xamarin.cpp; path = ../../../../externals/skia/src/xamarin/sk_xamarin.cpp; sourceTree = ""; }; + 3459E841205698C7003EAD17 /* SkiaKeeper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkiaKeeper.c; path = ../../../../externals/skia/src/xamarin/SkiaKeeper.c; sourceTree = ""; }; + 3459E84B205698D2003EAD17 /* SkManagedStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedStream.h; path = ../../../../externals/skia/include/xamarin/SkManagedStream.h; sourceTree = ""; }; + 3459E84C205698D2003EAD17 /* sk_managedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_managedstream.h; path = ../../../../externals/skia/include/xamarin/sk_managedstream.h; sourceTree = ""; }; + 3459E84E205698D2003EAD17 /* sk_xamarin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_xamarin.h; path = ../../../../externals/skia/include/xamarin/sk_xamarin.h; sourceTree = ""; }; + 3459E84F205698D2003EAD17 /* WinRTCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WinRTCompat.h; path = ../../../../externals/skia/include/xamarin/WinRTCompat.h; sourceTree = ""; }; + 346D1BBF21D405D30066C82D /* SkManagedDrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedDrawable.cpp; path = ../../../../externals/skia/src/xamarin/SkManagedDrawable.cpp; sourceTree = ""; }; + 346D1BC021D405D30066C82D /* sk_manageddrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_manageddrawable.h; path = ../../../../externals/skia/include/xamarin/sk_manageddrawable.h; sourceTree = ""; }; + 346D1BC121D405D30066C82D /* sk_manageddrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_manageddrawable.cpp; path = ../../../../externals/skia/src/xamarin/sk_manageddrawable.cpp; sourceTree = ""; }; + 346D1BC221D405D30066C82D /* SkManagedDrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedDrawable.h; path = ../../../../externals/skia/include/xamarin/SkManagedDrawable.h; sourceTree = ""; }; 3477EF0C221654DE00527FC7 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -303,26 +303,26 @@ EXECUTABLE_PREFIX = ""; GCC_ENABLE_CPP_RTTI = NO; HEADER_SEARCH_PATHS = ( - ../../externals/skia/src/c, - ../../externals/skia/src/core, - ../../externals/skia/src/xml, - ../../externals/skia/include/private, - ../../externals/skia/include/c, - ../../externals/skia/include/core, - ../../externals/skia/include/codec, - ../../externals/skia/include/effects, - ../../externals/skia/include/encode, - ../../externals/skia/include/pathops, - ../../externals/skia/include/gpu, - ../../externals/skia/include/utils, - ../../externals/skia/include/ports, - ../../externals/skia/include/config, - ../../externals/skia/include/xml, - ../../externals/skia/include/svg, - ../../externals/skia/include/xamarin, + ../../../externals/skia/src/c, + ../../../externals/skia/src/core, + ../../../externals/skia/src/xml, + ../../../externals/skia/include/private, + ../../../externals/skia/include/c, + ../../../externals/skia/include/core, + ../../../externals/skia/include/codec, + ../../../externals/skia/include/effects, + ../../../externals/skia/include/encode, + ../../../externals/skia/include/pathops, + ../../../externals/skia/include/gpu, + ../../../externals/skia/include/utils, + ../../../externals/skia/include/ports, + ../../../externals/skia/include/config, + ../../../externals/skia/include/xml, + ../../../externals/skia/include/svg, + ../../../externals/skia/include/xamarin, ); INSTALL_PATH = "@rpath"; - LIBRARY_SEARCH_PATHS = "../../externals/skia/out/mac/$(ARCHS)"; + LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/macos/$(ARCHS)"; MACOSX_DEPLOYMENT_TARGET = 10.7; OTHER_LDFLAGS = "-lskia"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -337,26 +337,26 @@ EXECUTABLE_PREFIX = ""; GCC_ENABLE_CPP_RTTI = NO; HEADER_SEARCH_PATHS = ( - ../../externals/skia/src/c, - ../../externals/skia/src/core, - ../../externals/skia/src/xml, - ../../externals/skia/include/private, - ../../externals/skia/include/c, - ../../externals/skia/include/core, - ../../externals/skia/include/codec, - ../../externals/skia/include/effects, - ../../externals/skia/include/encode, - ../../externals/skia/include/pathops, - ../../externals/skia/include/gpu, - ../../externals/skia/include/utils, - ../../externals/skia/include/ports, - ../../externals/skia/include/config, - ../../externals/skia/include/xml, - ../../externals/skia/include/svg, - ../../externals/skia/include/xamarin, + ../../../externals/skia/src/c, + ../../../externals/skia/src/core, + ../../../externals/skia/src/xml, + ../../../externals/skia/include/private, + ../../../externals/skia/include/c, + ../../../externals/skia/include/core, + ../../../externals/skia/include/codec, + ../../../externals/skia/include/effects, + ../../../externals/skia/include/encode, + ../../../externals/skia/include/pathops, + ../../../externals/skia/include/gpu, + ../../../externals/skia/include/utils, + ../../../externals/skia/include/ports, + ../../../externals/skia/include/config, + ../../../externals/skia/include/xml, + ../../../externals/skia/include/svg, + ../../../externals/skia/include/xamarin, ); INSTALL_PATH = "@rpath"; - LIBRARY_SEARCH_PATHS = "../../externals/skia/out/mac/$(ARCHS)"; + LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/macos/$(ARCHS)"; MACOSX_DEPLOYMENT_TARGET = 10.7; OTHER_LDFLAGS = "-lskia"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/native/nanoserver/build.cake b/native/nanoserver/build.cake new file mode 100644 index 0000000000..83de27d2ad --- /dev/null +++ b/native/nanoserver/build.cake @@ -0,0 +1,40 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native")); + +#load "../../cake/shared.cake" + +Task("libSkiaSharp") + .WithCriteria(IsRunningOnWindows()) + .Does(() => +{ + RunCake("../windows/build.cake", "libSkiaSharp", new Dictionary { + { "variant", "nanoserver" }, + { "gn", "extra_cflags+=[ '-DSK_BUILD_FOR_NANOSERVER' ]" }, + { "arch", "x64" }, + }); + + RunProcess("nano-api-scan", OUTPUT_PATH.CombineWithFilePath("nanoserver/x64/libSkiaSharp.dll").FullPath); +}); + +Task("libHarfBuzzSharp") + .WithCriteria(IsRunningOnWindows()) + .Does(() => +{ + RunCake("../windows/build.cake", "libHarfBuzzSharp", new Dictionary { + { "arch", "x64" }, + }); + + var outDir = OUTPUT_PATH.Combine($"nanoserver/x64"); + EnsureDirectoryExists(outDir); + var srcDir = OUTPUT_PATH.Combine($"windows/x64"); + CopyFileToDirectory(srcDir.CombineWithFilePath("libHarfBuzzSharp.dll"), outDir); + CopyFileToDirectory(srcDir.CombineWithFilePath("libHarfBuzzSharp.pdb"), outDir); + + RunProcess("nano-api-scan", OUTPUT_PATH.CombineWithFilePath("nanoserver/x64/libHarfBuzzSharp.dll").FullPath); +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp"); + +RunTarget(TARGET); diff --git a/native/tizen/build.cake b/native/tizen/build.cake new file mode 100644 index 0000000000..81e44a6174 --- /dev/null +++ b/native/tizen/build.cake @@ -0,0 +1,78 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native/tizen")); + +#load "../../cake/native-shared.cake" + +DirectoryPath TIZEN_STUDIO_HOME = EnvironmentVariable ("TIZEN_STUDIO_HOME") ?? PROFILE_PATH.Combine ("tizen-studio"); + +var bat = IsRunningOnWindows() ? ".bat" : ""; +var tizen = TIZEN_STUDIO_HOME.CombineWithFilePath($"tools/ide/bin/tizen{bat}").FullPath; + +Task("libSkiaSharp") + .IsDependentOn("git-sync-deps") + .Does(() => +{ + Build("armel", "arm"); + Build("i386", "x86"); + + void Build(string arch, string skiaArch) + { + if (Skip(arch)) return; + + GnNinja($"tizen/{arch}", "skia", + $"is_official_build=true skia_enable_tools=false " + + $"target_os='tizen' target_cpu='{skiaArch}' " + + $"skia_enable_gpu=true " + + $"skia_use_icu=false " + + $"skia_use_sfntly=false " + + $"skia_use_piex=true " + + $"skia_use_system_expat=false " + + $"skia_use_system_freetype2=true " + + $"skia_use_system_libjpeg_turbo=false " + + $"skia_use_system_libpng=false " + + $"skia_use_system_libwebp=false " + + $"skia_use_system_zlib=true " + + $"extra_cflags=[ '-DSKIA_C_DLL', '-DSK_BUILD_FOR_TIZEN' ] " + + $"ncli='{TIZEN_STUDIO_HOME}' " + + $"ncli_version='4.0'"); + + RunProcess(tizen, new ProcessSettings { + Arguments = $"build-native -a {skiaArch} -c llvm -C {CONFIGURATION}" , + WorkingDirectory = MakeAbsolute((DirectoryPath)"libSkiaSharp").FullPath, + }); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyFile($"libSkiaSharp/{CONFIGURATION}/libskiasharp.so", outDir.CombineWithFilePath("libSkiaSharp.so")); + } +}); + +Task("libHarfBuzzSharp") + .Does(() => +{ + var cmd = IsRunningOnWindows() ? ".cmd" : ""; + var ndkbuild = TIZEN_STUDIO_HOME.CombineWithFilePath($"ndk-build{cmd}").FullPath; + + Build("armel", "arm"); + Build("i386", "x86"); + + void Build(string arch, string cliArch) + { + if (Skip(arch)) return; + + RunProcess(tizen, new ProcessSettings { + Arguments = $"build-native -a {cliArch} -c llvm -C {CONFIGURATION}", + WorkingDirectory = MakeAbsolute((DirectoryPath)"libHarfBuzzSharp").FullPath, + }); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyFile($"libHarfBuzzSharp/{CONFIGURATION}/libharfbuzzsharp.so", outDir.CombineWithFilePath("libHarfBuzzSharp.so")); + } +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp"); + +RunTarget(TARGET); diff --git a/native-builds/libHarfBuzzSharp_tizen/config.h b/native/tizen/libHarfBuzzSharp/config.h similarity index 100% rename from native-builds/libHarfBuzzSharp_tizen/config.h rename to native/tizen/libHarfBuzzSharp/config.h diff --git a/native/tizen/libHarfBuzzSharp/project_def.prop b/native/tizen/libHarfBuzzSharp/project_def.prop new file mode 100644 index 0000000000..e24ee0cf80 --- /dev/null +++ b/native/tizen/libHarfBuzzSharp/project_def.prop @@ -0,0 +1,67 @@ +type = sharedLib +profile = mobile-4.0 + +harfbuzz_root = ../../../externals/harfbuzz + +APPNAME = HarfBuzzSharp + +USER_INC_DIRS = . \ + $(harfbuzz_root)/src \ + $(harfbuzz_root) + +USER_DEFS = HAVE_CONFIG_H NDEBUG + +USER_CPP_DEFS = $(USER_DEFS) + +USER_SRCS = $(harfbuzz_root)/src/hb-aat-layout.cc \ + $(harfbuzz_root)/src/hb-aat-map.cc \ + $(harfbuzz_root)/src/hb-blob.cc \ + $(harfbuzz_root)/src/hb-buffer-serialize.cc \ + $(harfbuzz_root)/src/hb-buffer.cc \ + $(harfbuzz_root)/src/hb-common.cc \ + $(harfbuzz_root)/src/hb-face.cc \ + $(harfbuzz_root)/src/hb-fallback-shape.cc \ + $(harfbuzz_root)/src/hb-font.cc \ + $(harfbuzz_root)/src/hb-map.cc \ + $(harfbuzz_root)/src/hb-ot-cff1-table.cc \ + $(harfbuzz_root)/src/hb-ot-cff2-table.cc \ + $(harfbuzz_root)/src/hb-ot-color.cc \ + $(harfbuzz_root)/src/hb-ot-face.cc \ + $(harfbuzz_root)/src/hb-ot-font.cc \ + $(harfbuzz_root)/src/hb-ot-layout.cc \ + $(harfbuzz_root)/src/hb-ot-map.cc \ + $(harfbuzz_root)/src/hb-ot-math.cc \ + $(harfbuzz_root)/src/hb-ot-meta.cc \ + $(harfbuzz_root)/src/hb-ot-metrics.cc \ + $(harfbuzz_root)/src/hb-ot-name.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-arabic.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-default.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-hangul.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-hebrew.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-indic-table.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-indic.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-khmer.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-myanmar.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-thai.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-use-table.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-use.cc \ + $(harfbuzz_root)/src/hb-ot-shape-complex-vowel-constraints.cc \ + $(harfbuzz_root)/src/hb-ot-shape-fallback.cc \ + $(harfbuzz_root)/src/hb-ot-shape-normalize.cc \ + $(harfbuzz_root)/src/hb-ot-shape.cc \ + $(harfbuzz_root)/src/hb-ot-tag.cc \ + $(harfbuzz_root)/src/hb-ot-var.cc \ + $(harfbuzz_root)/src/hb-set.cc \ + $(harfbuzz_root)/src/hb-shape-plan.cc \ + $(harfbuzz_root)/src/hb-shape.cc \ + $(harfbuzz_root)/src/hb-shaper.cc \ + $(harfbuzz_root)/src/hb-static.cc \ + $(harfbuzz_root)/src/hb-subset-cff-common.cc \ + $(harfbuzz_root)/src/hb-subset-cff1.cc \ + $(harfbuzz_root)/src/hb-subset-cff2.cc \ + $(harfbuzz_root)/src/hb-subset-input.cc \ + $(harfbuzz_root)/src/hb-subset-plan.cc \ + $(harfbuzz_root)/src/hb-subset.cc \ + $(harfbuzz_root)/src/hb-ucd.cc \ + $(harfbuzz_root)/src/hb-unicode.cc \ + $(harfbuzz_root)/src/hb-warning.cc diff --git a/native/tizen/libSkiaSharp/project_def.prop b/native/tizen/libSkiaSharp/project_def.prop new file mode 100644 index 0000000000..bc8b63fb2b --- /dev/null +++ b/native/tizen/libSkiaSharp/project_def.prop @@ -0,0 +1,52 @@ +type = sharedLib +profile = mobile-4.0 + +skia_root = ../../../externals/skia + +USER_LIB_DIRS = $(skia_root)/out/tizen/$(BUILD_ARCH) + +USER_LIBS = skia + +USER_LINK_OPTS = -Wl,--gc-sections + +APPNAME = SkiaSharp + +USER_INC_DIRS = $(skia_root)/src/c \ + $(skia_root)/src/core \ + $(skia_root)/src/xml \ + $(skia_root)/include/c \ + $(skia_root)/include/core \ + $(skia_root)/include/codec \ + $(skia_root)/include/effects \ + $(skia_root)/include/encode \ + $(skia_root)/include/pathops \ + $(skia_root)/include/gpu \ + $(skia_root)/include/config \ + $(skia_root)/include/xml \ + $(skia_root)/include/svg \ + $(skia_root)/include/utils \ + $(skia_root)/include/ports \ + $(skia_root)/include/private \ + $(skia_root)/include/images \ + $(skia_root)/include/xml \ + $(skia_root)/include/xamarin + +USER_DEFS = SK_INTERNAL SK_GAMMA_APPLY_TO_A8 \ + SK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0 SK_SUPPORT_GPU=1 \ + SK_BUILD_FOR_UNIX SKIA_C_DLL SKIA_IMPLEMENTATION=1 \ + NDEBUG SK_BUILD_FOR_TIZEN + +USER_CPP_DEFS = $(USER_DEFS) + +USER_C_OPTS = -fPIC -g -fno-exceptions -fstrict-aliasing -Wall -Wextra \ + -Winit-self -Wpointer-arith -Wsign-compare -Wno-unused-parameter \ + -Werror -Os -ffunction-sections -fdata-sections -fno-rtti + +USER_CPP_OPTS = $(USER_C_OPTS) -std=c++11 -fno-threadsafe-statics -Wnon-virtual-dtor + +USER_SRCS = $(skia_root)/src/xamarin/sk_xamarin.cpp \ + $(skia_root)/src/xamarin/SkiaKeeper.c \ + $(skia_root)/src/xamarin/sk_managedstream.cpp \ + $(skia_root)/src/xamarin/SkManagedStream.cpp \ + $(skia_root)/src/xamarin/sk_manageddrawable.cpp \ + $(skia_root)/src/xamarin/SkManagedDrawable.cpp diff --git a/native/tvos/build.cake b/native/tvos/build.cake new file mode 100644 index 0000000000..e21829c2ed --- /dev/null +++ b/native/tvos/build.cake @@ -0,0 +1,74 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native/tvos")); + +#load "../../cake/native-shared.cake" +#load "../../cake/xcode.cake" + +Task("libSkiaSharp") + .IsDependentOn("git-sync-deps") + .WithCriteria(IsRunningOnMac()) + .Does(() => +{ + Build("appletvsimulator", "x86_64", "x64"); + Build("appletvos", "arm64", "arm64"); + + CopyDirectory(OUTPUT_PATH.Combine("arm64/libSkiaSharp.framework"), OUTPUT_PATH.Combine("libSkiaSharp.framework")); + DeleteFile(OUTPUT_PATH.CombineWithFilePath("libSkiaSharp.framework/libSkiaSharp")); + RunLipo(OUTPUT_PATH, "libSkiaSharp.framework/libSkiaSharp", new [] { + (FilePath) "x86_64/libSkiaSharp.framework/libSkiaSharp", + (FilePath) "arm64/libSkiaSharp.framework/libSkiaSharp" + }); + + void Build(string sdk, string arch, string skiaArch) + { + if (Skip(arch)) return; + + GnNinja($"tvos/{arch}", "skia", + $"is_official_build=true skia_enable_tools=false " + + $"target_os='tvos' target_cpu='{skiaArch}' " + + $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + + $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + + $"extra_cflags=[ '-DSK_BUILD_FOR_TVOS', '-DSKIA_C_DLL', '-mtvos-version-min=9.0' ] " + + $"extra_ldflags=[ '-Wl,tvos_version_min=9.0' ]"); + + RunXCodeBuild("libSkiaSharp/libSkiaSharp.xcodeproj", "libSkiaSharp", sdk, arch); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyDirectory($"libSkiaSharp/bin/{CONFIGURATION}/{arch}/{CONFIGURATION}-{sdk}", outDir); + + StripSign(outDir.CombineWithFilePath("libSkiaSharp.framework")); + } +}); + +Task("libHarfBuzzSharp") + .WithCriteria(IsRunningOnMac()) + .Does(() => +{ + Build("appletvsimulator", "x86_64"); + Build("appletvos", "arm64"); + + RunLipo(OUTPUT_PATH, "libHarfBuzzSharp.a", new [] { + (FilePath) "x86_64/libHarfBuzzSharp.a", + (FilePath) "arm64/libHarfBuzzSharp.a" + }); + + void Build(string sdk, string arch) + { + if (Skip(arch)) return; + + RunXCodeBuild("libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj", "libHarfBuzzSharp", sdk, arch); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyDirectory($"libHarfBuzzSharp/bin/{CONFIGURATION}/{arch}/{CONFIGURATION}-{sdk}", outDir); + + StripSign(outDir.CombineWithFilePath("libHarfBuzzSharp.a")); + } +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp"); + +RunTarget(TARGET); diff --git a/native-builds/libHarfBuzzSharp_tvos/config.h b/native/tvos/libHarfBuzzSharp/config.h similarity index 100% rename from native-builds/libHarfBuzzSharp_tvos/config.h rename to native/tvos/libHarfBuzzSharp/config.h diff --git a/native-builds/libHarfBuzzSharp_tvos/libHarfBuzzSharp.xcodeproj/project.pbxproj b/native/tvos/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj similarity index 84% rename from native-builds/libHarfBuzzSharp_tvos/libHarfBuzzSharp.xcodeproj/project.pbxproj rename to native/tvos/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj index 72a2e6dec3..795321d947 100644 --- a/native-builds/libHarfBuzzSharp_tvos/libHarfBuzzSharp.xcodeproj/project.pbxproj +++ b/native/tvos/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj @@ -75,62 +75,62 @@ /* Begin PBXFileReference section */ 341E97BC1EB3CE10008E2876 /* libHarfBuzzSharp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libHarfBuzzSharp.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 3460E10D22BD90080022F04C /* hb-subset-input.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-input.cc"; path = "../../externals/harfbuzz/src/hb-subset-input.cc"; sourceTree = ""; }; - 3460E10E22BD90080022F04C /* hb-subset-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-plan.cc"; path = "../../externals/harfbuzz/src/hb-subset-plan.cc"; sourceTree = ""; }; - 3460E10F22BD90090022F04C /* hb-subset-cff-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff-common.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff-common.cc"; sourceTree = ""; }; - 3460E11022BD90090022F04C /* hb-subset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset.cc"; path = "../../externals/harfbuzz/src/hb-subset.cc"; sourceTree = ""; }; - 3460E11122BD90090022F04C /* hb-ucd.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ucd.cc"; path = "../../externals/harfbuzz/src/hb-ucd.cc"; sourceTree = ""; }; - 3460E11222BD90090022F04C /* hb-subset-cff1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff1.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff1.cc"; sourceTree = ""; }; - 3460E11322BD90090022F04C /* hb-subset-cff2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff2.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff2.cc"; sourceTree = ""; }; - 34F57AC5233ED12B00427BE9 /* hb-ot-metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-metrics.h"; path = "../../externals/harfbuzz/src/hb-ot-metrics.h"; sourceTree = ""; }; - 34F57AC6233ED12B00427BE9 /* hb-ot-metrics.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-metrics.hh"; path = "../../externals/harfbuzz/src/hb-ot-metrics.hh"; sourceTree = ""; }; - 34F57AC7233ED12B00427BE9 /* hb-ot-metrics.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-metrics.cc"; path = "../../externals/harfbuzz/src/hb-ot-metrics.cc"; sourceTree = ""; }; - 34F57AC8233ED12B00427BE9 /* hb-ot-meta.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-meta.cc"; path = "../../externals/harfbuzz/src/hb-ot-meta.cc"; sourceTree = ""; }; - 34F57AC9233ED12B00427BE9 /* hb-ot-meta-table.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-meta-table.hh"; path = "../../externals/harfbuzz/src/hb-ot-meta-table.hh"; sourceTree = ""; }; - 34F57ACA233ED12B00427BE9 /* hb-ot-meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-meta.h"; path = "../../externals/harfbuzz/src/hb-ot-meta.h"; sourceTree = ""; }; - 34F64BA121FA5F4F008FBDBD /* hb-ot-cff1-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff1-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-cff1-table.cc"; sourceTree = ""; }; - 34F64BA221FA5F4F008FBDBD /* hb-ot-shape-complex-indic-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-indic-table.cc"; sourceTree = ""; }; - 34F64BA321FA5F4F008FBDBD /* hb-ot-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-font.cc"; path = "../../externals/harfbuzz/src/hb-ot-font.cc"; sourceTree = ""; }; - 34F64BA421FA5F4F008FBDBD /* hb-ot-color.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-color.cc"; path = "../../externals/harfbuzz/src/hb-ot-color.cc"; sourceTree = ""; }; - 34F64BA621FA5F4F008FBDBD /* hb-ot-shape-complex-thai.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-thai.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-thai.cc"; sourceTree = ""; }; - 34F64BA721FA5F4F008FBDBD /* hb-blob.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-blob.cc"; path = "../../externals/harfbuzz/src/hb-blob.cc"; sourceTree = ""; }; - 34F64BA821FA5F4F008FBDBD /* hb-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-map.cc"; path = "../../externals/harfbuzz/src/hb-map.cc"; sourceTree = ""; }; - 34F64BA921FA5F4F008FBDBD /* hb-ot-shape-complex-use-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-use-table.cc"; sourceTree = ""; }; - 34F64BAA21FA5F4F008FBDBD /* hb-ot-shape-complex-use.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-use.cc"; sourceTree = ""; }; - 34F64BAB21FA5F4F008FBDBD /* hb-buffer-serialize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer-serialize.cc"; path = "../../externals/harfbuzz/src/hb-buffer-serialize.cc"; sourceTree = ""; }; - 34F64BAC21FA5F4F008FBDBD /* hb-ot-shape-complex-vowel-constraints.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-vowel-constraints.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc"; sourceTree = ""; }; - 34F64BAD21FA5F4F008FBDBD /* hb-aat-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-map.cc"; path = "../../externals/harfbuzz/src/hb-aat-map.cc"; sourceTree = ""; }; - 34F64BAE21FA5F4F008FBDBD /* hb-ot-shape-normalize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-normalize.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-normalize.cc"; sourceTree = ""; }; - 34F64BAF21FA5F4F008FBDBD /* hb-unicode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-unicode.cc"; path = "../../externals/harfbuzz/src/hb-unicode.cc"; sourceTree = ""; }; - 34F64BB021FA5F4F008FBDBD /* hb-warning.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-warning.cc"; path = "../../externals/harfbuzz/src/hb-warning.cc"; sourceTree = ""; }; - 34F64BB121FA5F4F008FBDBD /* hb-ot-shape-complex-myanmar.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-myanmar.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-myanmar.cc"; sourceTree = ""; }; - 34F64BB221FA5F4F008FBDBD /* hb-ot-shape-complex-hangul.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hangul.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-hangul.cc"; sourceTree = ""; }; - 34F64BB321FA5F4F008FBDBD /* hb-ot-shape-fallback.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-fallback.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-fallback.cc"; sourceTree = ""; }; - 34F64BB421FA5F4F008FBDBD /* hb-ot-cff2-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff2-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-cff2-table.cc"; sourceTree = ""; }; - 34F64BB521FA5F4F008FBDBD /* hb-ot-shape-complex-hebrew.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hebrew.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-hebrew.cc"; sourceTree = ""; }; - 34F64BB621FA5F4F008FBDBD /* hb-ot-shape-complex-arabic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-arabic.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-arabic.cc"; sourceTree = ""; }; - 34F64BB721FA5F50008FBDBD /* hb-ot-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape.cc"; sourceTree = ""; }; - 34F64BB821FA5F50008FBDBD /* hb-ot-var.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-var.cc"; path = "../../externals/harfbuzz/src/hb-ot-var.cc"; sourceTree = ""; }; - 34F64BB921FA5F50008FBDBD /* hb-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape.cc"; path = "../../externals/harfbuzz/src/hb-shape.cc"; sourceTree = ""; }; - 34F64BBA21FA5F50008FBDBD /* hb-ot-shape-complex-khmer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-khmer.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-khmer.cc"; sourceTree = ""; }; - 34F64BBB21FA5F50008FBDBD /* hb-set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-set.cc"; path = "../../externals/harfbuzz/src/hb-set.cc"; sourceTree = ""; }; - 34F64BBC21FA5F50008FBDBD /* hb-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-face.cc"; path = "../../externals/harfbuzz/src/hb-face.cc"; sourceTree = ""; }; - 34F64BBD21FA5F50008FBDBD /* hb-shaper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shaper.cc"; path = "../../externals/harfbuzz/src/hb-shaper.cc"; sourceTree = ""; }; - 34F64BBE21FA5F50008FBDBD /* hb-ot-shape-complex-indic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-indic.cc"; sourceTree = ""; }; - 34F64BBF21FA5F50008FBDBD /* hb-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-common.cc"; path = "../../externals/harfbuzz/src/hb-common.cc"; sourceTree = ""; }; - 34F64BC021FA5F50008FBDBD /* hb-ot-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-layout.cc"; path = "../../externals/harfbuzz/src/hb-ot-layout.cc"; sourceTree = ""; }; - 34F64BC121FA5F50008FBDBD /* hb-aat-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-layout.cc"; path = "../../externals/harfbuzz/src/hb-aat-layout.cc"; sourceTree = ""; }; - 34F64BC221FA5F50008FBDBD /* hb-ot-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-face.cc"; path = "../../externals/harfbuzz/src/hb-ot-face.cc"; sourceTree = ""; }; - 34F64BC421FA5F50008FBDBD /* hb-fallback-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-fallback-shape.cc"; path = "../../externals/harfbuzz/src/hb-fallback-shape.cc"; sourceTree = ""; }; - 34F64BC521FA5F50008FBDBD /* hb-shape-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape-plan.cc"; path = "../../externals/harfbuzz/src/hb-shape-plan.cc"; sourceTree = ""; }; - 34F64BC621FA5F50008FBDBD /* hb-ot-math.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-math.cc"; path = "../../externals/harfbuzz/src/hb-ot-math.cc"; sourceTree = ""; }; - 34F64BC721FA5F50008FBDBD /* hb-ot-tag.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-tag.cc"; path = "../../externals/harfbuzz/src/hb-ot-tag.cc"; sourceTree = ""; }; - 34F64BC821FA5F50008FBDBD /* hb-ot-shape-complex-default.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-default.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-default.cc"; sourceTree = ""; }; - 34F64BC921FA5F51008FBDBD /* hb-static.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-static.cc"; path = "../../externals/harfbuzz/src/hb-static.cc"; sourceTree = ""; }; - 34F64BCA21FA5F51008FBDBD /* hb-ot-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-map.cc"; path = "../../externals/harfbuzz/src/hb-ot-map.cc"; sourceTree = ""; }; - 34F64BCB21FA5F51008FBDBD /* hb-ot-name.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-name.cc"; path = "../../externals/harfbuzz/src/hb-ot-name.cc"; sourceTree = ""; }; - 34F64BCC21FA5F51008FBDBD /* hb-buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer.cc"; path = "../../externals/harfbuzz/src/hb-buffer.cc"; sourceTree = ""; }; - 34F64BCD21FA5F51008FBDBD /* hb-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-font.cc"; path = "../../externals/harfbuzz/src/hb-font.cc"; sourceTree = ""; }; + 3460E10D22BD90080022F04C /* hb-subset-input.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-input.cc"; path = "../../../externals/harfbuzz/src/hb-subset-input.cc"; sourceTree = ""; }; + 3460E10E22BD90080022F04C /* hb-subset-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-plan.cc"; path = "../../../externals/harfbuzz/src/hb-subset-plan.cc"; sourceTree = ""; }; + 3460E10F22BD90090022F04C /* hb-subset-cff-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff-common.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff-common.cc"; sourceTree = ""; }; + 3460E11022BD90090022F04C /* hb-subset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset.cc"; path = "../../../externals/harfbuzz/src/hb-subset.cc"; sourceTree = ""; }; + 3460E11122BD90090022F04C /* hb-ucd.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ucd.cc"; path = "../../../externals/harfbuzz/src/hb-ucd.cc"; sourceTree = ""; }; + 3460E11222BD90090022F04C /* hb-subset-cff1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff1.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff1.cc"; sourceTree = ""; }; + 3460E11322BD90090022F04C /* hb-subset-cff2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff2.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff2.cc"; sourceTree = ""; }; + 34F57AC5233ED12B00427BE9 /* hb-ot-metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-metrics.h"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.h"; sourceTree = ""; }; + 34F57AC6233ED12B00427BE9 /* hb-ot-metrics.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-metrics.hh"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.hh"; sourceTree = ""; }; + 34F57AC7233ED12B00427BE9 /* hb-ot-metrics.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-metrics.cc"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.cc"; sourceTree = ""; }; + 34F57AC8233ED12B00427BE9 /* hb-ot-meta.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-meta.cc"; path = "../../../externals/harfbuzz/src/hb-ot-meta.cc"; sourceTree = ""; }; + 34F57AC9233ED12B00427BE9 /* hb-ot-meta-table.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-meta-table.hh"; path = "../../../externals/harfbuzz/src/hb-ot-meta-table.hh"; sourceTree = ""; }; + 34F57ACA233ED12B00427BE9 /* hb-ot-meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-meta.h"; path = "../../../externals/harfbuzz/src/hb-ot-meta.h"; sourceTree = ""; }; + 34F64BA121FA5F4F008FBDBD /* hb-ot-cff1-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff1-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-cff1-table.cc"; sourceTree = ""; }; + 34F64BA221FA5F4F008FBDBD /* hb-ot-shape-complex-indic-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-indic-table.cc"; sourceTree = ""; }; + 34F64BA321FA5F4F008FBDBD /* hb-ot-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-font.cc"; path = "../../../externals/harfbuzz/src/hb-ot-font.cc"; sourceTree = ""; }; + 34F64BA421FA5F4F008FBDBD /* hb-ot-color.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-color.cc"; path = "../../../externals/harfbuzz/src/hb-ot-color.cc"; sourceTree = ""; }; + 34F64BA621FA5F4F008FBDBD /* hb-ot-shape-complex-thai.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-thai.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-thai.cc"; sourceTree = ""; }; + 34F64BA721FA5F4F008FBDBD /* hb-blob.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-blob.cc"; path = "../../../externals/harfbuzz/src/hb-blob.cc"; sourceTree = ""; }; + 34F64BA821FA5F4F008FBDBD /* hb-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-map.cc"; path = "../../../externals/harfbuzz/src/hb-map.cc"; sourceTree = ""; }; + 34F64BA921FA5F4F008FBDBD /* hb-ot-shape-complex-use-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-use-table.cc"; sourceTree = ""; }; + 34F64BAA21FA5F4F008FBDBD /* hb-ot-shape-complex-use.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-use.cc"; sourceTree = ""; }; + 34F64BAB21FA5F4F008FBDBD /* hb-buffer-serialize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer-serialize.cc"; path = "../../../externals/harfbuzz/src/hb-buffer-serialize.cc"; sourceTree = ""; }; + 34F64BAC21FA5F4F008FBDBD /* hb-ot-shape-complex-vowel-constraints.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-vowel-constraints.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc"; sourceTree = ""; }; + 34F64BAD21FA5F4F008FBDBD /* hb-aat-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-map.cc"; path = "../../../externals/harfbuzz/src/hb-aat-map.cc"; sourceTree = ""; }; + 34F64BAE21FA5F4F008FBDBD /* hb-ot-shape-normalize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-normalize.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-normalize.cc"; sourceTree = ""; }; + 34F64BAF21FA5F4F008FBDBD /* hb-unicode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-unicode.cc"; path = "../../../externals/harfbuzz/src/hb-unicode.cc"; sourceTree = ""; }; + 34F64BB021FA5F4F008FBDBD /* hb-warning.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-warning.cc"; path = "../../../externals/harfbuzz/src/hb-warning.cc"; sourceTree = ""; }; + 34F64BB121FA5F4F008FBDBD /* hb-ot-shape-complex-myanmar.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-myanmar.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-myanmar.cc"; sourceTree = ""; }; + 34F64BB221FA5F4F008FBDBD /* hb-ot-shape-complex-hangul.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hangul.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-hangul.cc"; sourceTree = ""; }; + 34F64BB321FA5F4F008FBDBD /* hb-ot-shape-fallback.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-fallback.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-fallback.cc"; sourceTree = ""; }; + 34F64BB421FA5F4F008FBDBD /* hb-ot-cff2-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff2-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-cff2-table.cc"; sourceTree = ""; }; + 34F64BB521FA5F4F008FBDBD /* hb-ot-shape-complex-hebrew.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hebrew.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-hebrew.cc"; sourceTree = ""; }; + 34F64BB621FA5F4F008FBDBD /* hb-ot-shape-complex-arabic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-arabic.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-arabic.cc"; sourceTree = ""; }; + 34F64BB721FA5F50008FBDBD /* hb-ot-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape.cc"; sourceTree = ""; }; + 34F64BB821FA5F50008FBDBD /* hb-ot-var.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-var.cc"; path = "../../../externals/harfbuzz/src/hb-ot-var.cc"; sourceTree = ""; }; + 34F64BB921FA5F50008FBDBD /* hb-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape.cc"; path = "../../../externals/harfbuzz/src/hb-shape.cc"; sourceTree = ""; }; + 34F64BBA21FA5F50008FBDBD /* hb-ot-shape-complex-khmer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-khmer.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-khmer.cc"; sourceTree = ""; }; + 34F64BBB21FA5F50008FBDBD /* hb-set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-set.cc"; path = "../../../externals/harfbuzz/src/hb-set.cc"; sourceTree = ""; }; + 34F64BBC21FA5F50008FBDBD /* hb-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-face.cc"; path = "../../../externals/harfbuzz/src/hb-face.cc"; sourceTree = ""; }; + 34F64BBD21FA5F50008FBDBD /* hb-shaper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shaper.cc"; path = "../../../externals/harfbuzz/src/hb-shaper.cc"; sourceTree = ""; }; + 34F64BBE21FA5F50008FBDBD /* hb-ot-shape-complex-indic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-indic.cc"; sourceTree = ""; }; + 34F64BBF21FA5F50008FBDBD /* hb-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-common.cc"; path = "../../../externals/harfbuzz/src/hb-common.cc"; sourceTree = ""; }; + 34F64BC021FA5F50008FBDBD /* hb-ot-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-layout.cc"; path = "../../../externals/harfbuzz/src/hb-ot-layout.cc"; sourceTree = ""; }; + 34F64BC121FA5F50008FBDBD /* hb-aat-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-layout.cc"; path = "../../../externals/harfbuzz/src/hb-aat-layout.cc"; sourceTree = ""; }; + 34F64BC221FA5F50008FBDBD /* hb-ot-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-face.cc"; path = "../../../externals/harfbuzz/src/hb-ot-face.cc"; sourceTree = ""; }; + 34F64BC421FA5F50008FBDBD /* hb-fallback-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-fallback-shape.cc"; path = "../../../externals/harfbuzz/src/hb-fallback-shape.cc"; sourceTree = ""; }; + 34F64BC521FA5F50008FBDBD /* hb-shape-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape-plan.cc"; path = "../../../externals/harfbuzz/src/hb-shape-plan.cc"; sourceTree = ""; }; + 34F64BC621FA5F50008FBDBD /* hb-ot-math.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-math.cc"; path = "../../../externals/harfbuzz/src/hb-ot-math.cc"; sourceTree = ""; }; + 34F64BC721FA5F50008FBDBD /* hb-ot-tag.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-tag.cc"; path = "../../../externals/harfbuzz/src/hb-ot-tag.cc"; sourceTree = ""; }; + 34F64BC821FA5F50008FBDBD /* hb-ot-shape-complex-default.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-default.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-default.cc"; sourceTree = ""; }; + 34F64BC921FA5F51008FBDBD /* hb-static.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-static.cc"; path = "../../../externals/harfbuzz/src/hb-static.cc"; sourceTree = ""; }; + 34F64BCA21FA5F51008FBDBD /* hb-ot-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-map.cc"; path = "../../../externals/harfbuzz/src/hb-ot-map.cc"; sourceTree = ""; }; + 34F64BCB21FA5F51008FBDBD /* hb-ot-name.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-name.cc"; path = "../../../externals/harfbuzz/src/hb-ot-name.cc"; sourceTree = ""; }; + 34F64BCC21FA5F51008FBDBD /* hb-buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer.cc"; path = "../../../externals/harfbuzz/src/hb-buffer.cc"; sourceTree = ""; }; + 34F64BCD21FA5F51008FBDBD /* hb-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-font.cc"; path = "../../../externals/harfbuzz/src/hb-font.cc"; sourceTree = ""; }; 34F64BFF21FA5F81008FBDBD /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; /* End PBXFileReference section */ diff --git a/native-builds/libSkiaSharp_tvos/libSkiaSharp.xcodeproj/project.pbxproj b/native/tvos/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj similarity index 84% rename from native-builds/libSkiaSharp_tvos/libSkiaSharp.xcodeproj/project.pbxproj rename to native/tvos/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj index ba551d6b3e..2e7e069f66 100644 --- a/native-builds/libSkiaSharp_tvos/libSkiaSharp.xcodeproj/project.pbxproj +++ b/native/tvos/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj @@ -32,19 +32,19 @@ 344D83F91E76CF0300C6D598 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; 344D83FB1E76CF0700C6D598 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; 344D83FD1E76CF0C00C6D598 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 34838CE920569A14009CB8D9 /* WinRTCompat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WinRTCompat.cpp; path = ../../../externals/skia/src/xamarin/WinRTCompat.cpp; sourceTree = ""; }; - 34838CEA20569A14009CB8D9 /* sk_managedstream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_managedstream.cpp; path = ../../../externals/skia/src/xamarin/sk_managedstream.cpp; sourceTree = ""; }; - 34838CEB20569A14009CB8D9 /* SkManagedStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedStream.cpp; path = ../../../externals/skia/src/xamarin/SkManagedStream.cpp; sourceTree = ""; }; - 34838CEC20569A14009CB8D9 /* sk_xamarin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_xamarin.cpp; path = ../../../externals/skia/src/xamarin/sk_xamarin.cpp; sourceTree = ""; }; - 34838CEE20569A14009CB8D9 /* SkiaKeeper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkiaKeeper.c; path = ../../../externals/skia/src/xamarin/SkiaKeeper.c; sourceTree = ""; }; - 34838CF820569A1A009CB8D9 /* SkManagedStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedStream.h; path = ../../../externals/skia/include/xamarin/SkManagedStream.h; sourceTree = ""; }; - 34838CF920569A1A009CB8D9 /* sk_managedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_managedstream.h; path = ../../../externals/skia/include/xamarin/sk_managedstream.h; sourceTree = ""; }; - 34838CFB20569A1A009CB8D9 /* sk_xamarin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_xamarin.h; path = ../../../externals/skia/include/xamarin/sk_xamarin.h; sourceTree = ""; }; - 34838CFC20569A1A009CB8D9 /* WinRTCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WinRTCompat.h; path = ../../../externals/skia/include/xamarin/WinRTCompat.h; sourceTree = ""; }; - 34A5548021D405F000F06E1B /* SkManagedDrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedDrawable.cpp; path = ../../../externals/skia/src/xamarin/SkManagedDrawable.cpp; sourceTree = ""; }; - 34A5548121D405F000F06E1B /* sk_manageddrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_manageddrawable.h; path = ../../../externals/skia/include/xamarin/sk_manageddrawable.h; sourceTree = ""; }; - 34A5548221D405F000F06E1B /* sk_manageddrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_manageddrawable.cpp; path = ../../../externals/skia/src/xamarin/sk_manageddrawable.cpp; sourceTree = ""; }; - 34A5548321D405F000F06E1B /* SkManagedDrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedDrawable.h; path = ../../../externals/skia/include/xamarin/SkManagedDrawable.h; sourceTree = ""; }; + 34838CE920569A14009CB8D9 /* WinRTCompat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WinRTCompat.cpp; path = ../../../../externals/skia/src/xamarin/WinRTCompat.cpp; sourceTree = ""; }; + 34838CEA20569A14009CB8D9 /* sk_managedstream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_managedstream.cpp; path = ../../../../externals/skia/src/xamarin/sk_managedstream.cpp; sourceTree = ""; }; + 34838CEB20569A14009CB8D9 /* SkManagedStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedStream.cpp; path = ../../../../externals/skia/src/xamarin/SkManagedStream.cpp; sourceTree = ""; }; + 34838CEC20569A14009CB8D9 /* sk_xamarin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_xamarin.cpp; path = ../../../../externals/skia/src/xamarin/sk_xamarin.cpp; sourceTree = ""; }; + 34838CEE20569A14009CB8D9 /* SkiaKeeper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkiaKeeper.c; path = ../../../../externals/skia/src/xamarin/SkiaKeeper.c; sourceTree = ""; }; + 34838CF820569A1A009CB8D9 /* SkManagedStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedStream.h; path = ../../../../externals/skia/include/xamarin/SkManagedStream.h; sourceTree = ""; }; + 34838CF920569A1A009CB8D9 /* sk_managedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_managedstream.h; path = ../../../../externals/skia/include/xamarin/sk_managedstream.h; sourceTree = ""; }; + 34838CFB20569A1A009CB8D9 /* sk_xamarin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_xamarin.h; path = ../../../../externals/skia/include/xamarin/sk_xamarin.h; sourceTree = ""; }; + 34838CFC20569A1A009CB8D9 /* WinRTCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WinRTCompat.h; path = ../../../../externals/skia/include/xamarin/WinRTCompat.h; sourceTree = ""; }; + 34A5548021D405F000F06E1B /* SkManagedDrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedDrawable.cpp; path = ../../../../externals/skia/src/xamarin/SkManagedDrawable.cpp; sourceTree = ""; }; + 34A5548121D405F000F06E1B /* sk_manageddrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_manageddrawable.h; path = ../../../../externals/skia/include/xamarin/sk_manageddrawable.h; sourceTree = ""; }; + 34A5548221D405F000F06E1B /* sk_manageddrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_manageddrawable.cpp; path = ../../../../externals/skia/src/xamarin/sk_manageddrawable.cpp; sourceTree = ""; }; + 34A5548321D405F000F06E1B /* SkManagedDrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedDrawable.h; path = ../../../../externals/skia/include/xamarin/SkManagedDrawable.h; sourceTree = ""; }; 34C0C90520573CD300DFDB22 /* libSkiaSharp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libSkiaSharp.h; sourceTree = ""; }; /* End PBXFileReference section */ @@ -333,27 +333,27 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_ENABLE_CPP_RTTI = NO; HEADER_SEARCH_PATHS = ( - ../../externals/skia/src/c, - ../../externals/skia/src/core, - ../../externals/skia/src/xml, - ../../externals/skia/include/private, - ../../externals/skia/include/c, - ../../externals/skia/include/core, - ../../externals/skia/include/codec, - ../../externals/skia/include/effects, - ../../externals/skia/include/encode, - ../../externals/skia/include/pathops, - ../../externals/skia/include/utils, - ../../externals/skia/include/ports, - ../../externals/skia/include/gpu, - ../../externals/skia/include/config, - ../../externals/skia/include/xml, - ../../externals/skia/include/svg, + ../../../externals/skia/src/c, + ../../../externals/skia/src/core, + ../../../externals/skia/src/xml, + ../../../externals/skia/include/private, + ../../../externals/skia/include/c, + ../../../externals/skia/include/core, + ../../../externals/skia/include/codec, + ../../../externals/skia/include/effects, + ../../../externals/skia/include/encode, + ../../../externals/skia/include/pathops, + ../../../externals/skia/include/utils, + ../../../externals/skia/include/ports, + ../../../externals/skia/include/gpu, + ../../../externals/skia/include/config, + ../../../externals/skia/include/xml, + ../../../externals/skia/include/svg, ); INFOPLIST_FILE = libSkiaSharp/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "../../externals/skia/out/tvos/$(ARCHS)"; + LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/tvos/$(ARCHS)"; OTHER_LDFLAGS = ( "-all_load", "-lskia", @@ -374,27 +374,27 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_ENABLE_CPP_RTTI = NO; HEADER_SEARCH_PATHS = ( - ../../externals/skia/src/c, - ../../externals/skia/src/core, - ../../externals/skia/src/xml, - ../../externals/skia/include/private, - ../../externals/skia/include/c, - ../../externals/skia/include/core, - ../../externals/skia/include/codec, - ../../externals/skia/include/effects, - ../../externals/skia/include/encode, - ../../externals/skia/include/pathops, - ../../externals/skia/include/utils, - ../../externals/skia/include/ports, - ../../externals/skia/include/gpu, - ../../externals/skia/include/config, - ../../externals/skia/include/xml, - ../../externals/skia/include/svg, + ../../../externals/skia/src/c, + ../../../externals/skia/src/core, + ../../../externals/skia/src/xml, + ../../../externals/skia/include/private, + ../../../externals/skia/include/c, + ../../../externals/skia/include/core, + ../../../externals/skia/include/codec, + ../../../externals/skia/include/effects, + ../../../externals/skia/include/encode, + ../../../externals/skia/include/pathops, + ../../../externals/skia/include/utils, + ../../../externals/skia/include/ports, + ../../../externals/skia/include/gpu, + ../../../externals/skia/include/config, + ../../../externals/skia/include/xml, + ../../../externals/skia/include/svg, ); INFOPLIST_FILE = libSkiaSharp/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "../../externals/skia/out/tvos/$(ARCHS)"; + LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/tvos/$(ARCHS)"; OTHER_LDFLAGS = ( "-all_load", "-lskia", diff --git a/native-builds/libSkiaSharp_tvos/libSkiaSharp/Info.plist b/native/tvos/libSkiaSharp/libSkiaSharp/Info.plist similarity index 100% rename from native-builds/libSkiaSharp_tvos/libSkiaSharp/Info.plist rename to native/tvos/libSkiaSharp/libSkiaSharp/Info.plist diff --git a/native-builds/libSkiaSharp_tvos/libSkiaSharp/libSkiaSharp.h b/native/tvos/libSkiaSharp/libSkiaSharp/libSkiaSharp.h similarity index 100% rename from native-builds/libSkiaSharp_tvos/libSkiaSharp/libSkiaSharp.h rename to native/tvos/libSkiaSharp/libSkiaSharp/libSkiaSharp.h diff --git a/source/SkiaSharp.Views.Interop.UWP/PropertySetExtensions.cpp b/native/uwp/SkiaSharp.Views.Interop.UWP/PropertySetExtensions.cpp similarity index 100% rename from source/SkiaSharp.Views.Interop.UWP/PropertySetExtensions.cpp rename to native/uwp/SkiaSharp.Views.Interop.UWP/PropertySetExtensions.cpp diff --git a/source/SkiaSharp.Views.Interop.UWP/PropertySetExtensions.h b/native/uwp/SkiaSharp.Views.Interop.UWP/PropertySetExtensions.h similarity index 100% rename from source/SkiaSharp.Views.Interop.UWP/PropertySetExtensions.h rename to native/uwp/SkiaSharp.Views.Interop.UWP/PropertySetExtensions.h diff --git a/source/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.filters b/native/uwp/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.filters similarity index 100% rename from source/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.filters rename to native/uwp/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.filters diff --git a/source/SkiaSharp.Views.Interop.UWP.sln b/native/uwp/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.sln similarity index 93% rename from source/SkiaSharp.Views.Interop.UWP.sln rename to native/uwp/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.sln index b7753bf9b3..77684fa158 100644 --- a/source/SkiaSharp.Views.Interop.UWP.sln +++ b/native/uwp/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.27703.2047 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SkiaSharp.Views.Interop.UWP", "SkiaSharp.Views.Interop.UWP\SkiaSharp.Views.Interop.UWP.vcxproj", "{D3C01B6D-F4ED-4E58-BC6E-B0F07DD98022}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SkiaSharp.Views.Interop.UWP", "SkiaSharp.Views.Interop.UWP.vcxproj", "{D3C01B6D-F4ED-4E58-BC6E-B0F07DD98022}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/source/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.vcxproj b/native/uwp/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.vcxproj similarity index 100% rename from source/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.vcxproj rename to native/uwp/SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.vcxproj diff --git a/source/SkiaSharp.Views.Interop.UWP/pch.cpp b/native/uwp/SkiaSharp.Views.Interop.UWP/pch.cpp similarity index 100% rename from source/SkiaSharp.Views.Interop.UWP/pch.cpp rename to native/uwp/SkiaSharp.Views.Interop.UWP/pch.cpp diff --git a/source/SkiaSharp.Views.Interop.UWP/pch.h b/native/uwp/SkiaSharp.Views.Interop.UWP/pch.h similarity index 100% rename from source/SkiaSharp.Views.Interop.UWP/pch.h rename to native/uwp/SkiaSharp.Views.Interop.UWP/pch.h diff --git a/native/uwp/build.cake b/native/uwp/build.cake new file mode 100644 index 0000000000..29e2529c02 --- /dev/null +++ b/native/uwp/build.cake @@ -0,0 +1,114 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath ANGLE_PATH = MakeAbsolute(ROOT_PATH.Combine("externals/angle")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native/uwp")); + +#load "../../cake/native-shared.cake" +#load "../../cake/msbuild.cake" + +Task("libSkiaSharp") + .IsDependentOn("git-sync-deps") + .WithCriteria(IsRunningOnWindows()) + .Does(() => +{ + Build("Win32", "x86", "x86"); + Build("x64", "x64", "x64"); + Build("ARM", "arm", "ARM"); + // Build("ARM64", "arm64", "ARM64"); + + void Build(string arch, string skiaArch, string dir) + { + if (Skip(arch)) return; + + GnNinja($"uwp/{arch}", "SkiaSharp", + $"is_official_build=true skia_enable_tools=false " + + $"target_os='winrt' target_cpu='{skiaArch}' " + + $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + + $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + + $"extra_cflags=[ " + + $" '-DSKIA_C_DLL', '/MD', '/EHsc', '/Z7', " + + $" '-DWINAPI_FAMILY=WINAPI_FAMILY_APP', '-DSK_BUILD_FOR_WINRT', '-DSK_HAS_DWRITE_1_H', '-DSK_HAS_DWRITE_2_H', '-DNO_GETENV' ] " + + $"extra_ldflags=[ '/DEBUG:FULL', '/APPCONTAINER', 'WindowsApp.lib' ]"); + + var outDir = OUTPUT_PATH.Combine(dir); + EnsureDirectoryExists(outDir); + CopyFileToDirectory(SKIA_PATH.CombineWithFilePath($"out/uwp/{arch}/libSkiaSharp.dll"), outDir); + CopyFileToDirectory(SKIA_PATH.CombineWithFilePath($"out/uwp/{arch}/libSkiaSharp.pdb"), outDir); + } +}); + +Task("libHarfBuzzSharp") + .WithCriteria(IsRunningOnWindows()) + .Does(() => +{ + Build("Win32", "x86"); + Build("x64", "x64"); + Build("ARM", "arm"); + // Build("ARM64", "arm64"); + + void Build(string arch, string dir) + { + if (Skip(arch)) return; + + RunMSBuild("libHarfBuzzSharp/libHarfBuzzSharp.sln", platformTarget: arch); + + var outDir = OUTPUT_PATH.Combine(dir); + EnsureDirectoryExists(outDir); + CopyFileToDirectory($"libHarfBuzzSharp/bin/{arch}/{CONFIGURATION}/libHarfBuzzSharp.dll", outDir); + CopyFileToDirectory($"libHarfBuzzSharp/bin/{arch}/{CONFIGURATION}/libHarfBuzzSharp.pdb", outDir); + } +}); + +Task("SkiaSharp.Views.Interop.UWP") + .WithCriteria(IsRunningOnWindows()) + .Does(() => +{ + Build("Win32", "x86"); + Build("x64", "x64"); + Build("ARM", "arm"); + // Build("ARM64", "arm64"); + + void Build(string arch, string dir) + { + if (Skip(arch)) return; + + RunMSBuild("SkiaSharp.Views.Interop.UWP/SkiaSharp.Views.Interop.UWP.sln", platformTarget: arch); + + var outDir = OUTPUT_PATH.Combine(dir); + EnsureDirectoryExists(outDir); + CopyFileToDirectory($"SkiaSharp.Views.Interop.UWP/bin/{arch}/{CONFIGURATION}/SkiaSharp.Views.Interop.UWP.dll", outDir); + CopyFileToDirectory($"SkiaSharp.Views.Interop.UWP/bin/{arch}/{CONFIGURATION}/SkiaSharp.Views.Interop.UWP.pdb", outDir); + } +}); + +Task("ANGLE") + .Does(() => +{ + if (!FileExists(ANGLE_PATH.CombineWithFilePath("uwp/ANGLE.WindowsStore.nuspec"))) { + var id = "ANGLE.WindowsStore"; + var version = GetVersion(id, "release"); + var angleUrl = $"https://api.nuget.org/v3-flatcontainer/{id.ToLower()}/{version}/{id.ToLower()}.{version}.nupkg"; + var angleRoot = ANGLE_PATH.Combine("uwp"); + var angleNupkg = angleRoot.CombineWithFilePath($"angle_{version}.nupkg"); + + EnsureDirectoryExists(angleRoot); + CleanDirectory(angleRoot); + + DownloadFile(angleUrl, angleNupkg); + Unzip(angleNupkg, angleRoot); + } + + foreach (var arch in new[] { ("arm", "ARM"), ("x86", "Win32"), ("x64", "X64") }) { + var outDir = OUTPUT_PATH.Combine(arch.Item1); + EnsureDirectoryExists(outDir); + CopyFileToDirectory(ANGLE_PATH.CombineWithFilePath($"uwp/bin/UAP/{arch.Item2}/libEGL.dll"), outDir); + CopyFileToDirectory(ANGLE_PATH.CombineWithFilePath($"uwp/bin/UAP/{arch.Item2}/libGLESv2.dll"), outDir); + } +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp") + .IsDependentOn("SkiaSharp.Views.Interop.UWP") + .IsDependentOn("ANGLE"); + +RunTarget(TARGET); diff --git a/native-builds/libHarfBuzzSharp_uwp/config.h b/native/uwp/libHarfBuzzSharp/config.h similarity index 100% rename from native-builds/libHarfBuzzSharp_uwp/config.h rename to native/uwp/libHarfBuzzSharp/config.h diff --git a/native-builds/libHarfBuzzSharp_uwp/libHarfBuzzSharp.sln b/native/uwp/libHarfBuzzSharp/libHarfBuzzSharp.sln similarity index 100% rename from native-builds/libHarfBuzzSharp_uwp/libHarfBuzzSharp.sln rename to native/uwp/libHarfBuzzSharp/libHarfBuzzSharp.sln diff --git a/native/uwp/libHarfBuzzSharp/libHarfBuzzSharp.vcxproj b/native/uwp/libHarfBuzzSharp/libHarfBuzzSharp.vcxproj new file mode 100644 index 0000000000..f0d841264b --- /dev/null +++ b/native/uwp/libHarfBuzzSharp/libHarfBuzzSharp.vcxproj @@ -0,0 +1,420 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {25b54d3d-b0f8-4e7e-8928-ffaf116fcce9} + DynamicLibrary + libHarfBuzzSharp + en-US + 14.0 + true + Windows Store + 10.0.10240.0 + 10.0.10240.0 + 10.0 + + + + DynamicLibrary + true + v141 + + + DynamicLibrary + true + v141 + + + DynamicLibrary + true + v141 + + + DynamicLibrary + false + true + v141 + + + DynamicLibrary + false + true + v141 + + + DynamicLibrary + false + true + v141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + false + + + false + false + + + false + false + + + false + false + + + false + false + + + false + false + + + $(SolutionDir)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\obj\$(Platform)\$(Configuration)\$(ProjectName)\ + + + + NotUsing + false + + HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_WINDLL;%(PreprocessorDefinitions) + $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + 4146;4267;4244 + + + Console + false + false + + + + + NotUsing + false + + HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_WINDLL;%(PreprocessorDefinitions) + $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + 4146;4267;4244 + + + Console + false + false + + + + + NotUsing + false + + HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + 4146;4267;4244 + + + Console + false + false + + + + + NotUsing + false + + HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1;%(ClCompile.PreprocessorDefinitions) + $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + 4146;4267;4244 + + + Console + false + false + + + + + NotUsing + false + + HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_WINDLL;%(PreprocessorDefinitions) + $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + 4146;4267;4244 + + + Console + false + false + + + + + NotUsing + false + + HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_WINDLL;%(PreprocessorDefinitions) + $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + 4146;4267;4244 + + + Console + false + false + + + + + + \ No newline at end of file diff --git a/native/watchos/build.cake b/native/watchos/build.cake new file mode 100644 index 0000000000..1e9f6a5c33 --- /dev/null +++ b/native/watchos/build.cake @@ -0,0 +1,79 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native/watchos")); + +#load "../../cake/native-shared.cake" +#load "../../cake/xcode.cake" + +Task("libSkiaSharp") + .IsDependentOn("git-sync-deps") + .WithCriteria(IsRunningOnMac()) + .Does(() => +{ + Build("watchsimulator", "i386", "x86"); + Build("watchos", "armv7k", "arm"); + Build("watchos", "arm64_32", "arm64"); + + CopyDirectory(OUTPUT_PATH.Combine("armv7k/libSkiaSharp.framework"), OUTPUT_PATH.Combine("libSkiaSharp.framework")); + DeleteFile(OUTPUT_PATH.CombineWithFilePath("libSkiaSharp.framework/libSkiaSharp")); + RunLipo(OUTPUT_PATH, "libSkiaSharp.framework/libSkiaSharp", new [] { + (FilePath) "i386/libSkiaSharp.framework/libSkiaSharp", + (FilePath) "armv7k/libSkiaSharp.framework/libSkiaSharp", + (FilePath) "arm64_32/libSkiaSharp.framework/libSkiaSharp" + }); + + void Build(string sdk, string arch, string skiaArch) + { + if (Skip(arch)) return; + + GnNinja($"watchos/{arch}", "skia", + $"is_official_build=true skia_enable_tools=false " + + $"target_os='watchos' target_cpu='{skiaArch}' " + + $"skia_enable_gpu=false " + + $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true " + + $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + + $"extra_cflags=[ '-DSK_BUILD_FOR_WATCHOS', '-DSKIA_C_DLL', '-mwatchos-version-min=2.0' ] " + + $"extra_ldflags=[ '-Wl,watchos_version_min=2.0' ]"); + + RunXCodeBuild("libSkiaSharp/libSkiaSharp.xcodeproj", "libSkiaSharp", sdk, arch); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyDirectory($"libSkiaSharp/bin/{CONFIGURATION}/{arch}/{CONFIGURATION}-{sdk}", outDir); + + StripSign(outDir.CombineWithFilePath("libSkiaSharp.framework")); + } +}); + +Task("libHarfBuzzSharp") + .WithCriteria(IsRunningOnMac()) + .Does(() => +{ + Build("watchsimulator", "i386"); + Build("watchos", "armv7k"); + Build("watchos", "arm64_32"); + + RunLipo(OUTPUT_PATH, "libHarfBuzzSharp.a", new [] { + (FilePath) "i386/libHarfBuzzSharp.a", + (FilePath) "armv7k/libHarfBuzzSharp.a", + (FilePath) "arm64_32/libHarfBuzzSharp.a" + }); + + void Build(string sdk, string arch) + { + if (Skip(arch)) return; + + RunXCodeBuild("libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj", "libHarfBuzzSharp", sdk, arch); + + var outDir = OUTPUT_PATH.Combine(arch); + EnsureDirectoryExists(outDir); + CopyDirectory($"libHarfBuzzSharp/bin/{CONFIGURATION}/{arch}/{CONFIGURATION}-{sdk}", outDir); + + StripSign(outDir.CombineWithFilePath("libHarfBuzzSharp.a")); + } +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp"); + +RunTarget(TARGET); diff --git a/native-builds/libHarfBuzzSharp_watchos/config.h b/native/watchos/libHarfBuzzSharp/config.h similarity index 100% rename from native-builds/libHarfBuzzSharp_watchos/config.h rename to native/watchos/libHarfBuzzSharp/config.h diff --git a/native-builds/libHarfBuzzSharp_watchos/libHarfBuzzSharp.xcodeproj/project.pbxproj b/native/watchos/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj similarity index 84% rename from native-builds/libHarfBuzzSharp_watchos/libHarfBuzzSharp.xcodeproj/project.pbxproj rename to native/watchos/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj index 7ebaae7f50..72ea259309 100644 --- a/native-builds/libHarfBuzzSharp_watchos/libHarfBuzzSharp.xcodeproj/project.pbxproj +++ b/native/watchos/libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj/project.pbxproj @@ -75,63 +75,63 @@ /* Begin PBXFileReference section */ 341E97BC1EB3CE10008E2876 /* libHarfBuzzSharp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libHarfBuzzSharp.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 34F57ACD233ED14300427BE9 /* hb-ot-meta.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-meta.cc"; path = "../../externals/harfbuzz/src/hb-ot-meta.cc"; sourceTree = ""; }; - 34F57ACE233ED14400427BE9 /* hb-ot-metrics.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-metrics.hh"; path = "../../externals/harfbuzz/src/hb-ot-metrics.hh"; sourceTree = ""; }; - 34F57ACF233ED14400427BE9 /* hb-ot-metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-metrics.h"; path = "../../externals/harfbuzz/src/hb-ot-metrics.h"; sourceTree = ""; }; - 34F57AD0233ED14400427BE9 /* hb-ot-metrics.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-metrics.cc"; path = "../../externals/harfbuzz/src/hb-ot-metrics.cc"; sourceTree = ""; }; - 34F57AD1233ED14400427BE9 /* hb-ot-meta-table.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-meta-table.hh"; path = "../../externals/harfbuzz/src/hb-ot-meta-table.hh"; sourceTree = ""; }; - 34F57AD2233ED14400427BE9 /* hb-ot-meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-meta.h"; path = "../../externals/harfbuzz/src/hb-ot-meta.h"; sourceTree = ""; }; + 34F57ACD233ED14300427BE9 /* hb-ot-meta.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-meta.cc"; path = "../../../externals/harfbuzz/src/hb-ot-meta.cc"; sourceTree = ""; }; + 34F57ACE233ED14400427BE9 /* hb-ot-metrics.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-metrics.hh"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.hh"; sourceTree = ""; }; + 34F57ACF233ED14400427BE9 /* hb-ot-metrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-metrics.h"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.h"; sourceTree = ""; }; + 34F57AD0233ED14400427BE9 /* hb-ot-metrics.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-metrics.cc"; path = "../../../externals/harfbuzz/src/hb-ot-metrics.cc"; sourceTree = ""; }; + 34F57AD1233ED14400427BE9 /* hb-ot-meta-table.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = "hb-ot-meta-table.hh"; path = "../../../externals/harfbuzz/src/hb-ot-meta-table.hh"; sourceTree = ""; }; + 34F57AD2233ED14400427BE9 /* hb-ot-meta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "hb-ot-meta.h"; path = "../../../externals/harfbuzz/src/hb-ot-meta.h"; sourceTree = ""; }; 34F64C0521FA5FC6008FBDBD /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; - 34F64D0F21FA6047008FBDBD /* hb-ot-cff1-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff1-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-cff1-table.cc"; sourceTree = ""; }; - 34F64D1021FA6047008FBDBD /* hb-ot-shape-complex-indic-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-indic-table.cc"; sourceTree = ""; }; - 34F64D1121FA6047008FBDBD /* hb-ot-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-font.cc"; path = "../../externals/harfbuzz/src/hb-ot-font.cc"; sourceTree = ""; }; - 34F64D1221FA6047008FBDBD /* hb-ot-color.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-color.cc"; path = "../../externals/harfbuzz/src/hb-ot-color.cc"; sourceTree = ""; }; - 34F64D1421FA6047008FBDBD /* hb-ot-shape-complex-thai.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-thai.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-thai.cc"; sourceTree = ""; }; - 34F64D1521FA6047008FBDBD /* hb-blob.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-blob.cc"; path = "../../externals/harfbuzz/src/hb-blob.cc"; sourceTree = ""; }; - 34F64D1621FA6047008FBDBD /* hb-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-map.cc"; path = "../../externals/harfbuzz/src/hb-map.cc"; sourceTree = ""; }; - 34F64D1721FA6047008FBDBD /* hb-ot-shape-complex-use-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-use-table.cc"; sourceTree = ""; }; - 34F64D1821FA6047008FBDBD /* hb-ot-shape-complex-use.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-use.cc"; sourceTree = ""; }; - 34F64D1921FA6047008FBDBD /* hb-buffer-serialize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer-serialize.cc"; path = "../../externals/harfbuzz/src/hb-buffer-serialize.cc"; sourceTree = ""; }; - 34F64D1A21FA6047008FBDBD /* hb-ot-shape-complex-vowel-constraints.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-vowel-constraints.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc"; sourceTree = ""; }; - 34F64D1B21FA6047008FBDBD /* hb-aat-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-map.cc"; path = "../../externals/harfbuzz/src/hb-aat-map.cc"; sourceTree = ""; }; - 34F64D1C21FA6047008FBDBD /* hb-ot-shape-normalize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-normalize.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-normalize.cc"; sourceTree = ""; }; - 34F64D1D21FA6047008FBDBD /* hb-unicode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-unicode.cc"; path = "../../externals/harfbuzz/src/hb-unicode.cc"; sourceTree = ""; }; - 34F64D1E21FA6047008FBDBD /* hb-warning.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-warning.cc"; path = "../../externals/harfbuzz/src/hb-warning.cc"; sourceTree = ""; }; - 34F64D1F21FA6047008FBDBD /* hb-ot-shape-complex-myanmar.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-myanmar.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-myanmar.cc"; sourceTree = ""; }; - 34F64D2021FA6047008FBDBD /* hb-ot-shape-complex-hangul.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hangul.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-hangul.cc"; sourceTree = ""; }; - 34F64D2121FA6047008FBDBD /* hb-ot-shape-fallback.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-fallback.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-fallback.cc"; sourceTree = ""; }; - 34F64D2221FA6047008FBDBD /* hb-ot-cff2-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff2-table.cc"; path = "../../externals/harfbuzz/src/hb-ot-cff2-table.cc"; sourceTree = ""; }; - 34F64D2321FA6047008FBDBD /* hb-ot-shape-complex-hebrew.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hebrew.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-hebrew.cc"; sourceTree = ""; }; - 34F64D2421FA6047008FBDBD /* hb-ot-shape-complex-arabic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-arabic.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-arabic.cc"; sourceTree = ""; }; - 34F64D2521FA6047008FBDBD /* hb-ot-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape.cc"; sourceTree = ""; }; - 34F64D2621FA6047008FBDBD /* hb-ot-var.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-var.cc"; path = "../../externals/harfbuzz/src/hb-ot-var.cc"; sourceTree = ""; }; - 34F64D2721FA6047008FBDBD /* hb-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape.cc"; path = "../../externals/harfbuzz/src/hb-shape.cc"; sourceTree = ""; }; - 34F64D2821FA6047008FBDBD /* hb-ot-shape-complex-khmer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-khmer.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-khmer.cc"; sourceTree = ""; }; - 34F64D2921FA6047008FBDBD /* hb-set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-set.cc"; path = "../../externals/harfbuzz/src/hb-set.cc"; sourceTree = ""; }; - 34F64D2A21FA6048008FBDBD /* hb-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-face.cc"; path = "../../externals/harfbuzz/src/hb-face.cc"; sourceTree = ""; }; - 34F64D2B21FA6048008FBDBD /* hb-shaper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shaper.cc"; path = "../../externals/harfbuzz/src/hb-shaper.cc"; sourceTree = ""; }; - 34F64D2C21FA6048008FBDBD /* hb-ot-shape-complex-indic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-indic.cc"; sourceTree = ""; }; - 34F64D2D21FA6048008FBDBD /* hb-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-common.cc"; path = "../../externals/harfbuzz/src/hb-common.cc"; sourceTree = ""; }; - 34F64D2E21FA6048008FBDBD /* hb-ot-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-layout.cc"; path = "../../externals/harfbuzz/src/hb-ot-layout.cc"; sourceTree = ""; }; - 34F64D2F21FA6048008FBDBD /* hb-aat-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-layout.cc"; path = "../../externals/harfbuzz/src/hb-aat-layout.cc"; sourceTree = ""; }; - 34F64D3021FA6048008FBDBD /* hb-ot-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-face.cc"; path = "../../externals/harfbuzz/src/hb-ot-face.cc"; sourceTree = ""; }; - 34F64D3221FA6048008FBDBD /* hb-fallback-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-fallback-shape.cc"; path = "../../externals/harfbuzz/src/hb-fallback-shape.cc"; sourceTree = ""; }; - 34F64D3321FA6048008FBDBD /* hb-shape-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape-plan.cc"; path = "../../externals/harfbuzz/src/hb-shape-plan.cc"; sourceTree = ""; }; - 34F64D3421FA6048008FBDBD /* hb-ot-math.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-math.cc"; path = "../../externals/harfbuzz/src/hb-ot-math.cc"; sourceTree = ""; }; - 34F64D3521FA6048008FBDBD /* hb-ot-tag.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-tag.cc"; path = "../../externals/harfbuzz/src/hb-ot-tag.cc"; sourceTree = ""; }; - 34F64D3621FA6048008FBDBD /* hb-ot-shape-complex-default.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-default.cc"; path = "../../externals/harfbuzz/src/hb-ot-shape-complex-default.cc"; sourceTree = ""; }; - 34F64D3721FA6048008FBDBD /* hb-static.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-static.cc"; path = "../../externals/harfbuzz/src/hb-static.cc"; sourceTree = ""; }; - 34F64D3821FA6048008FBDBD /* hb-ot-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-map.cc"; path = "../../externals/harfbuzz/src/hb-ot-map.cc"; sourceTree = ""; }; - 34F64D3921FA6048008FBDBD /* hb-ot-name.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-name.cc"; path = "../../externals/harfbuzz/src/hb-ot-name.cc"; sourceTree = ""; }; - 34F64D3A21FA6048008FBDBD /* hb-buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer.cc"; path = "../../externals/harfbuzz/src/hb-buffer.cc"; sourceTree = ""; }; - 34F64D3B21FA6048008FBDBD /* hb-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-font.cc"; path = "../../externals/harfbuzz/src/hb-font.cc"; sourceTree = ""; }; - 34FEAAF522BD8FAB007299F0 /* hb-subset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset.cc"; path = "../../externals/harfbuzz/src/hb-subset.cc"; sourceTree = ""; }; - 34FEAAF622BD8FAB007299F0 /* hb-subset-input.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-input.cc"; path = "../../externals/harfbuzz/src/hb-subset-input.cc"; sourceTree = ""; }; - 34FEAAF722BD8FAC007299F0 /* hb-subset-cff1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff1.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff1.cc"; sourceTree = ""; }; - 34FEAAF822BD8FAC007299F0 /* hb-ucd.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ucd.cc"; path = "../../externals/harfbuzz/src/hb-ucd.cc"; sourceTree = ""; }; - 34FEAAF922BD8FAC007299F0 /* hb-subset-cff-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff-common.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff-common.cc"; sourceTree = ""; }; - 34FEAAFA22BD8FAC007299F0 /* hb-subset-cff2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff2.cc"; path = "../../externals/harfbuzz/src/hb-subset-cff2.cc"; sourceTree = ""; }; - 34FEAAFB22BD8FAC007299F0 /* hb-subset-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-plan.cc"; path = "../../externals/harfbuzz/src/hb-subset-plan.cc"; sourceTree = ""; }; + 34F64D0F21FA6047008FBDBD /* hb-ot-cff1-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff1-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-cff1-table.cc"; sourceTree = ""; }; + 34F64D1021FA6047008FBDBD /* hb-ot-shape-complex-indic-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-indic-table.cc"; sourceTree = ""; }; + 34F64D1121FA6047008FBDBD /* hb-ot-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-font.cc"; path = "../../../externals/harfbuzz/src/hb-ot-font.cc"; sourceTree = ""; }; + 34F64D1221FA6047008FBDBD /* hb-ot-color.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-color.cc"; path = "../../../externals/harfbuzz/src/hb-ot-color.cc"; sourceTree = ""; }; + 34F64D1421FA6047008FBDBD /* hb-ot-shape-complex-thai.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-thai.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-thai.cc"; sourceTree = ""; }; + 34F64D1521FA6047008FBDBD /* hb-blob.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-blob.cc"; path = "../../../externals/harfbuzz/src/hb-blob.cc"; sourceTree = ""; }; + 34F64D1621FA6047008FBDBD /* hb-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-map.cc"; path = "../../../externals/harfbuzz/src/hb-map.cc"; sourceTree = ""; }; + 34F64D1721FA6047008FBDBD /* hb-ot-shape-complex-use-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-use-table.cc"; sourceTree = ""; }; + 34F64D1821FA6047008FBDBD /* hb-ot-shape-complex-use.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-use.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-use.cc"; sourceTree = ""; }; + 34F64D1921FA6047008FBDBD /* hb-buffer-serialize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer-serialize.cc"; path = "../../../externals/harfbuzz/src/hb-buffer-serialize.cc"; sourceTree = ""; }; + 34F64D1A21FA6047008FBDBD /* hb-ot-shape-complex-vowel-constraints.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-vowel-constraints.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc"; sourceTree = ""; }; + 34F64D1B21FA6047008FBDBD /* hb-aat-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-map.cc"; path = "../../../externals/harfbuzz/src/hb-aat-map.cc"; sourceTree = ""; }; + 34F64D1C21FA6047008FBDBD /* hb-ot-shape-normalize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-normalize.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-normalize.cc"; sourceTree = ""; }; + 34F64D1D21FA6047008FBDBD /* hb-unicode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-unicode.cc"; path = "../../../externals/harfbuzz/src/hb-unicode.cc"; sourceTree = ""; }; + 34F64D1E21FA6047008FBDBD /* hb-warning.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-warning.cc"; path = "../../../externals/harfbuzz/src/hb-warning.cc"; sourceTree = ""; }; + 34F64D1F21FA6047008FBDBD /* hb-ot-shape-complex-myanmar.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-myanmar.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-myanmar.cc"; sourceTree = ""; }; + 34F64D2021FA6047008FBDBD /* hb-ot-shape-complex-hangul.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hangul.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-hangul.cc"; sourceTree = ""; }; + 34F64D2121FA6047008FBDBD /* hb-ot-shape-fallback.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-fallback.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-fallback.cc"; sourceTree = ""; }; + 34F64D2221FA6047008FBDBD /* hb-ot-cff2-table.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-cff2-table.cc"; path = "../../../externals/harfbuzz/src/hb-ot-cff2-table.cc"; sourceTree = ""; }; + 34F64D2321FA6047008FBDBD /* hb-ot-shape-complex-hebrew.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-hebrew.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-hebrew.cc"; sourceTree = ""; }; + 34F64D2421FA6047008FBDBD /* hb-ot-shape-complex-arabic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-arabic.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-arabic.cc"; sourceTree = ""; }; + 34F64D2521FA6047008FBDBD /* hb-ot-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape.cc"; sourceTree = ""; }; + 34F64D2621FA6047008FBDBD /* hb-ot-var.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-var.cc"; path = "../../../externals/harfbuzz/src/hb-ot-var.cc"; sourceTree = ""; }; + 34F64D2721FA6047008FBDBD /* hb-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape.cc"; path = "../../../externals/harfbuzz/src/hb-shape.cc"; sourceTree = ""; }; + 34F64D2821FA6047008FBDBD /* hb-ot-shape-complex-khmer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-khmer.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-khmer.cc"; sourceTree = ""; }; + 34F64D2921FA6047008FBDBD /* hb-set.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-set.cc"; path = "../../../externals/harfbuzz/src/hb-set.cc"; sourceTree = ""; }; + 34F64D2A21FA6048008FBDBD /* hb-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-face.cc"; path = "../../../externals/harfbuzz/src/hb-face.cc"; sourceTree = ""; }; + 34F64D2B21FA6048008FBDBD /* hb-shaper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shaper.cc"; path = "../../../externals/harfbuzz/src/hb-shaper.cc"; sourceTree = ""; }; + 34F64D2C21FA6048008FBDBD /* hb-ot-shape-complex-indic.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-indic.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-indic.cc"; sourceTree = ""; }; + 34F64D2D21FA6048008FBDBD /* hb-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-common.cc"; path = "../../../externals/harfbuzz/src/hb-common.cc"; sourceTree = ""; }; + 34F64D2E21FA6048008FBDBD /* hb-ot-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-layout.cc"; path = "../../../externals/harfbuzz/src/hb-ot-layout.cc"; sourceTree = ""; }; + 34F64D2F21FA6048008FBDBD /* hb-aat-layout.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-aat-layout.cc"; path = "../../../externals/harfbuzz/src/hb-aat-layout.cc"; sourceTree = ""; }; + 34F64D3021FA6048008FBDBD /* hb-ot-face.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-face.cc"; path = "../../../externals/harfbuzz/src/hb-ot-face.cc"; sourceTree = ""; }; + 34F64D3221FA6048008FBDBD /* hb-fallback-shape.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-fallback-shape.cc"; path = "../../../externals/harfbuzz/src/hb-fallback-shape.cc"; sourceTree = ""; }; + 34F64D3321FA6048008FBDBD /* hb-shape-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-shape-plan.cc"; path = "../../../externals/harfbuzz/src/hb-shape-plan.cc"; sourceTree = ""; }; + 34F64D3421FA6048008FBDBD /* hb-ot-math.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-math.cc"; path = "../../../externals/harfbuzz/src/hb-ot-math.cc"; sourceTree = ""; }; + 34F64D3521FA6048008FBDBD /* hb-ot-tag.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-tag.cc"; path = "../../../externals/harfbuzz/src/hb-ot-tag.cc"; sourceTree = ""; }; + 34F64D3621FA6048008FBDBD /* hb-ot-shape-complex-default.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-shape-complex-default.cc"; path = "../../../externals/harfbuzz/src/hb-ot-shape-complex-default.cc"; sourceTree = ""; }; + 34F64D3721FA6048008FBDBD /* hb-static.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-static.cc"; path = "../../../externals/harfbuzz/src/hb-static.cc"; sourceTree = ""; }; + 34F64D3821FA6048008FBDBD /* hb-ot-map.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-map.cc"; path = "../../../externals/harfbuzz/src/hb-ot-map.cc"; sourceTree = ""; }; + 34F64D3921FA6048008FBDBD /* hb-ot-name.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ot-name.cc"; path = "../../../externals/harfbuzz/src/hb-ot-name.cc"; sourceTree = ""; }; + 34F64D3A21FA6048008FBDBD /* hb-buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-buffer.cc"; path = "../../../externals/harfbuzz/src/hb-buffer.cc"; sourceTree = ""; }; + 34F64D3B21FA6048008FBDBD /* hb-font.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-font.cc"; path = "../../../externals/harfbuzz/src/hb-font.cc"; sourceTree = ""; }; + 34FEAAF522BD8FAB007299F0 /* hb-subset.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset.cc"; path = "../../../externals/harfbuzz/src/hb-subset.cc"; sourceTree = ""; }; + 34FEAAF622BD8FAB007299F0 /* hb-subset-input.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-input.cc"; path = "../../../externals/harfbuzz/src/hb-subset-input.cc"; sourceTree = ""; }; + 34FEAAF722BD8FAC007299F0 /* hb-subset-cff1.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff1.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff1.cc"; sourceTree = ""; }; + 34FEAAF822BD8FAC007299F0 /* hb-ucd.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-ucd.cc"; path = "../../../externals/harfbuzz/src/hb-ucd.cc"; sourceTree = ""; }; + 34FEAAF922BD8FAC007299F0 /* hb-subset-cff-common.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff-common.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff-common.cc"; sourceTree = ""; }; + 34FEAAFA22BD8FAC007299F0 /* hb-subset-cff2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-cff2.cc"; path = "../../../externals/harfbuzz/src/hb-subset-cff2.cc"; sourceTree = ""; }; + 34FEAAFB22BD8FAC007299F0 /* hb-subset-plan.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "hb-subset-plan.cc"; path = "../../../externals/harfbuzz/src/hb-subset-plan.cc"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ diff --git a/native-builds/libSkiaSharp_watchos/libSkiaSharp.xcodeproj/project.pbxproj b/native/watchos/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj similarity index 84% rename from native-builds/libSkiaSharp_watchos/libSkiaSharp.xcodeproj/project.pbxproj rename to native/watchos/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj index 70c10aabea..3f0a86fdbd 100644 --- a/native-builds/libSkiaSharp_watchos/libSkiaSharp.xcodeproj/project.pbxproj +++ b/native/watchos/libSkiaSharp/libSkiaSharp.xcodeproj/project.pbxproj @@ -33,19 +33,19 @@ 344D83FB1E76CF0700C6D598 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; 344D83FD1E76CF0C00C6D598 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 34C0C90720573CE000DFDB22 /* libSkiaSharp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libSkiaSharp.h; sourceTree = ""; }; - 34EA43E521D4060600F9A3DA /* SkManagedDrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedDrawable.h; path = ../../../externals/skia/include/xamarin/SkManagedDrawable.h; sourceTree = ""; }; - 34EA43E621D4060600F9A3DA /* sk_manageddrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_manageddrawable.h; path = ../../../externals/skia/include/xamarin/sk_manageddrawable.h; sourceTree = ""; }; - 34EA43E721D4060600F9A3DA /* sk_manageddrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_manageddrawable.cpp; path = ../../../externals/skia/src/xamarin/sk_manageddrawable.cpp; sourceTree = ""; }; - 34EA43E821D4060600F9A3DA /* SkManagedDrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedDrawable.cpp; path = ../../../externals/skia/src/xamarin/SkManagedDrawable.cpp; sourceTree = ""; }; - 34EC5FF120569A4B00F57982 /* WinRTCompat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WinRTCompat.cpp; path = ../../../externals/skia/src/xamarin/WinRTCompat.cpp; sourceTree = ""; }; - 34EC5FF220569A4B00F57982 /* sk_managedstream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_managedstream.cpp; path = ../../../externals/skia/src/xamarin/sk_managedstream.cpp; sourceTree = ""; }; - 34EC5FF320569A4B00F57982 /* SkManagedStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedStream.cpp; path = ../../../externals/skia/src/xamarin/SkManagedStream.cpp; sourceTree = ""; }; - 34EC5FF420569A4B00F57982 /* sk_xamarin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_xamarin.cpp; path = ../../../externals/skia/src/xamarin/sk_xamarin.cpp; sourceTree = ""; }; - 34EC5FF620569A4B00F57982 /* SkiaKeeper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkiaKeeper.c; path = ../../../externals/skia/src/xamarin/SkiaKeeper.c; sourceTree = ""; }; - 34EC600020569A5000F57982 /* SkManagedStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedStream.h; path = ../../../externals/skia/include/xamarin/SkManagedStream.h; sourceTree = ""; }; - 34EC600120569A5000F57982 /* sk_managedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_managedstream.h; path = ../../../externals/skia/include/xamarin/sk_managedstream.h; sourceTree = ""; }; - 34EC600320569A5000F57982 /* sk_xamarin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_xamarin.h; path = ../../../externals/skia/include/xamarin/sk_xamarin.h; sourceTree = ""; }; - 34EC600420569A5000F57982 /* WinRTCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WinRTCompat.h; path = ../../../externals/skia/include/xamarin/WinRTCompat.h; sourceTree = ""; }; + 34EA43E521D4060600F9A3DA /* SkManagedDrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedDrawable.h; path = ../../../../externals/skia/include/xamarin/SkManagedDrawable.h; sourceTree = ""; }; + 34EA43E621D4060600F9A3DA /* sk_manageddrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_manageddrawable.h; path = ../../../../externals/skia/include/xamarin/sk_manageddrawable.h; sourceTree = ""; }; + 34EA43E721D4060600F9A3DA /* sk_manageddrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_manageddrawable.cpp; path = ../../../../externals/skia/src/xamarin/sk_manageddrawable.cpp; sourceTree = ""; }; + 34EA43E821D4060600F9A3DA /* SkManagedDrawable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedDrawable.cpp; path = ../../../../externals/skia/src/xamarin/SkManagedDrawable.cpp; sourceTree = ""; }; + 34EC5FF120569A4B00F57982 /* WinRTCompat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WinRTCompat.cpp; path = ../../../../externals/skia/src/xamarin/WinRTCompat.cpp; sourceTree = ""; }; + 34EC5FF220569A4B00F57982 /* sk_managedstream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_managedstream.cpp; path = ../../../../externals/skia/src/xamarin/sk_managedstream.cpp; sourceTree = ""; }; + 34EC5FF320569A4B00F57982 /* SkManagedStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkManagedStream.cpp; path = ../../../../externals/skia/src/xamarin/SkManagedStream.cpp; sourceTree = ""; }; + 34EC5FF420569A4B00F57982 /* sk_xamarin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sk_xamarin.cpp; path = ../../../../externals/skia/src/xamarin/sk_xamarin.cpp; sourceTree = ""; }; + 34EC5FF620569A4B00F57982 /* SkiaKeeper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkiaKeeper.c; path = ../../../../externals/skia/src/xamarin/SkiaKeeper.c; sourceTree = ""; }; + 34EC600020569A5000F57982 /* SkManagedStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkManagedStream.h; path = ../../../../externals/skia/include/xamarin/SkManagedStream.h; sourceTree = ""; }; + 34EC600120569A5000F57982 /* sk_managedstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_managedstream.h; path = ../../../../externals/skia/include/xamarin/sk_managedstream.h; sourceTree = ""; }; + 34EC600320569A5000F57982 /* sk_xamarin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sk_xamarin.h; path = ../../../../externals/skia/include/xamarin/sk_xamarin.h; sourceTree = ""; }; + 34EC600420569A5000F57982 /* WinRTCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WinRTCompat.h; path = ../../../../externals/skia/include/xamarin/WinRTCompat.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -334,27 +334,27 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_ENABLE_CPP_RTTI = NO; HEADER_SEARCH_PATHS = ( - ../../externals/skia/src/c, - ../../externals/skia/src/core, - ../../externals/skia/src/xml, - ../../externals/skia/include/private, - ../../externals/skia/include/c, - ../../externals/skia/include/core, - ../../externals/skia/include/codec, - ../../externals/skia/include/effects, - ../../externals/skia/include/encode, - ../../externals/skia/include/pathops, - ../../externals/skia/include/utils, - ../../externals/skia/include/ports, - ../../externals/skia/include/gpu, - ../../externals/skia/include/config, - ../../externals/skia/include/xml, - ../../externals/skia/include/svg, + ../../../externals/skia/src/c, + ../../../externals/skia/src/core, + ../../../externals/skia/src/xml, + ../../../externals/skia/include/private, + ../../../externals/skia/include/c, + ../../../externals/skia/include/core, + ../../../externals/skia/include/codec, + ../../../externals/skia/include/effects, + ../../../externals/skia/include/encode, + ../../../externals/skia/include/pathops, + ../../../externals/skia/include/utils, + ../../../externals/skia/include/ports, + ../../../externals/skia/include/gpu, + ../../../externals/skia/include/config, + ../../../externals/skia/include/xml, + ../../../externals/skia/include/svg, ); INFOPLIST_FILE = libSkiaSharp/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "../../externals/skia/out/watchos/$(ARCHS)"; + LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/watchos/$(ARCHS)"; OTHER_LDFLAGS = ( "-all_load", "-lskia", @@ -376,27 +376,27 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_ENABLE_CPP_RTTI = NO; HEADER_SEARCH_PATHS = ( - ../../externals/skia/src/c, - ../../externals/skia/src/core, - ../../externals/skia/src/xml, - ../../externals/skia/include/private, - ../../externals/skia/include/c, - ../../externals/skia/include/core, - ../../externals/skia/include/codec, - ../../externals/skia/include/effects, - ../../externals/skia/include/encode, - ../../externals/skia/include/pathops, - ../../externals/skia/include/utils, - ../../externals/skia/include/ports, - ../../externals/skia/include/gpu, - ../../externals/skia/include/config, - ../../externals/skia/include/xml, - ../../externals/skia/include/svg, + ../../../externals/skia/src/c, + ../../../externals/skia/src/core, + ../../../externals/skia/src/xml, + ../../../externals/skia/include/private, + ../../../externals/skia/include/c, + ../../../externals/skia/include/core, + ../../../externals/skia/include/codec, + ../../../externals/skia/include/effects, + ../../../externals/skia/include/encode, + ../../../externals/skia/include/pathops, + ../../../externals/skia/include/utils, + ../../../externals/skia/include/ports, + ../../../externals/skia/include/gpu, + ../../../externals/skia/include/config, + ../../../externals/skia/include/xml, + ../../../externals/skia/include/svg, ); INFOPLIST_FILE = libSkiaSharp/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = "../../externals/skia/out/watchos/$(ARCHS)"; + LIBRARY_SEARCH_PATHS = "../../../externals/skia/out/watchos/$(ARCHS)"; OTHER_LDFLAGS = ( "-all_load", "-lskia", diff --git a/native-builds/libSkiaSharp_watchos/libSkiaSharp/Info.plist b/native/watchos/libSkiaSharp/libSkiaSharp/Info.plist similarity index 100% rename from native-builds/libSkiaSharp_watchos/libSkiaSharp/Info.plist rename to native/watchos/libSkiaSharp/libSkiaSharp/Info.plist diff --git a/native-builds/libSkiaSharp_watchos/libSkiaSharp/libSkiaSharp.h b/native/watchos/libSkiaSharp/libSkiaSharp/libSkiaSharp.h similarity index 100% rename from native-builds/libSkiaSharp_watchos/libSkiaSharp/libSkiaSharp.h rename to native/watchos/libSkiaSharp/libSkiaSharp/libSkiaSharp.h diff --git a/native/windows/build.cake b/native/windows/build.cake new file mode 100644 index 0000000000..d2eb02157a --- /dev/null +++ b/native/windows/build.cake @@ -0,0 +1,66 @@ +DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); +DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native")); + +DirectoryPath LLVM_HOME = Argument("llvm", EnvironmentVariable("LLVM_HOME") ?? "C:/Program Files/LLVM"); + +#load "../../cake/native-shared.cake" +#load "../../cake/msbuild.cake" + +string VARIANT = BUILD_VARIANT ?? "windows"; + +Task("libSkiaSharp") + .IsDependentOn("git-sync-deps") + .WithCriteria(IsRunningOnWindows()) + .Does(() => +{ + Build("Win32", "x86", "x86"); + Build("x64", "x64", "x64"); + + void Build(string arch, string skiaArch, string dir) + { + if (Skip(arch)) return; + + var clang = string.IsNullOrEmpty(LLVM_HOME.FullPath) ? "" : $"clang_win='{LLVM_HOME}' "; + + GnNinja($"{VARIANT}/{arch}", "SkiaSharp", + $"is_official_build=true skia_enable_tools=false " + + $"target_os='win' target_cpu='{skiaArch}' " + + clang + + $"skia_use_icu=false skia_use_sfntly=false skia_use_piex=true skia_use_dng_sdk=true " + + $"skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false " + + $"extra_cflags=[ '-DSKIA_C_DLL', '/MT', '/EHsc', '/Z7' ] " + + $"extra_ldflags=[ '/DEBUG:FULL' ] " + + ADDITIONAL_GN_ARGS); + + var outDir = OUTPUT_PATH.Combine($"{VARIANT}/{dir}"); + EnsureDirectoryExists(outDir); + CopyFileToDirectory(SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libSkiaSharp.dll"), outDir); + CopyFileToDirectory(SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libSkiaSharp.pdb"), outDir); + } +}); + +Task("libHarfBuzzSharp") + .WithCriteria(IsRunningOnWindows()) + .Does(() => +{ + Build("Win32", "x86"); + Build("x64", "x64"); + + void Build(string arch, string dir) + { + if (Skip(arch)) return; + + RunMSBuild("libHarfBuzzSharp/libHarfBuzzSharp.sln", platformTarget: arch); + + var outDir = OUTPUT_PATH.Combine($"{VARIANT}/{dir}"); + EnsureDirectoryExists(outDir); + CopyFileToDirectory($"libHarfBuzzSharp/bin/{arch}/{CONFIGURATION}/libHarfBuzzSharp.dll", outDir); + CopyFileToDirectory($"libHarfBuzzSharp/bin/{arch}/{CONFIGURATION}/libHarfBuzzSharp.pdb", outDir); + } +}); + +Task("Default") + .IsDependentOn("libSkiaSharp") + .IsDependentOn("libHarfBuzzSharp"); + +RunTarget(TARGET); diff --git a/native-builds/libHarfBuzzSharp_windows/config.h b/native/windows/libHarfBuzzSharp/config.h similarity index 100% rename from native-builds/libHarfBuzzSharp_windows/config.h rename to native/windows/libHarfBuzzSharp/config.h diff --git a/native-builds/libHarfBuzzSharp_windows/libHarfBuzzSharp.sln b/native/windows/libHarfBuzzSharp/libHarfBuzzSharp.sln similarity index 100% rename from native-builds/libHarfBuzzSharp_windows/libHarfBuzzSharp.sln rename to native/windows/libHarfBuzzSharp/libHarfBuzzSharp.sln diff --git a/native/windows/libHarfBuzzSharp/libHarfBuzzSharp.vcxproj b/native/windows/libHarfBuzzSharp/libHarfBuzzSharp.vcxproj new file mode 100644 index 0000000000..8bcc04ae21 --- /dev/null +++ b/native/windows/libHarfBuzzSharp/libHarfBuzzSharp.vcxproj @@ -0,0 +1,362 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 15.0 + {AFE6308E-9F79-4F9D-85BF-B68E8DEE2F13} + Win32Proj + libHarfBuzzSharp + 8.1 + + + + DynamicLibrary + true + v140 + Unicode + + + DynamicLibrary + false + v140 + true + Unicode + + + DynamicLibrary + true + v140 + Unicode + + + DynamicLibrary + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + $(SolutionDir)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\obj\$(Platform)\$(Configuration)\$(ProjectName)\ + + + + + + Level3 + Disabled + HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;_USRDLL;HARFBUZZ_EXPORTS;%(PreprocessorDefinitions) + $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + 4267;4244 + MultiThreadedDebug + $(IntDir) + + + Windows + + + + + + + Level3 + Disabled + HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;_DEBUG;_WINDOWS;_USRDLL;HARFBUZZ_EXPORTS;%(PreprocessorDefinitions) + $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + 4267;4244 + MultiThreadedDebug + + + Windows + + + + + Level3 + + + MaxSpeed + true + true + HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;_USRDLL;HARFBUZZ_EXPORTS;%(PreprocessorDefinitions) + $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + 4267;4244 + MultiThreaded + + + Windows + true + true + + + + + Level3 + + + MaxSpeed + true + true + HAVE_CONFIG_H;HB_EXTERN=__declspec (dllexport) extern;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_WARNINGS;NDEBUG;_WINDOWS;_USRDLL;HARFBUZZ_EXPORTS;%(PreprocessorDefinitions) + $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories) + 4267;4244 + MultiThreaded + + + Windows + true + true + + + + + + + + \ No newline at end of file diff --git a/nuget/HarfbuzzSharp.nuspec b/nuget/HarfbuzzSharp.nuspec index 01f28a528f..91a0bd253e 100644 --- a/nuget/HarfbuzzSharp.nuspec +++ b/nuget/HarfbuzzSharp.nuspec @@ -93,7 +93,6 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release - diff --git a/nuget/SkiaSharp.NativeAssets.Linux.NoDependencies.nuspec b/nuget/SkiaSharp.NativeAssets.Linux.NoDependencies.nuspec index 8682cc7f62..011a262521 100644 --- a/nuget/SkiaSharp.NativeAssets.Linux.NoDependencies.nuspec +++ b/nuget/SkiaSharp.NativeAssets.Linux.NoDependencies.nuspec @@ -50,7 +50,7 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release - + diff --git a/nuget/SkiaSharp.NativeAssets.NanoServer.nuspec b/nuget/SkiaSharp.NativeAssets.NanoServer.nuspec new file mode 100644 index 0000000000..2fcfb53ddb --- /dev/null +++ b/nuget/SkiaSharp.NativeAssets.NanoServer.nuspec @@ -0,0 +1,54 @@ + + + + + + SkiaSharp.NativeAssets.NanoServer + SkiaSharp - Native Assets for Microsoft Nano Server + 1.0.0 + +SkiaSharp is a cross-platform 2D graphics API for .NET platforms based on Google's Skia Graphics Library. +It provides a comprehensive 2D API that can be used across mobile, server and desktop models to render images. + +This variation of the Windows native assets includes the build of libSkiaSharp.dll that does not make use of the typeface subsetting when creating XPS documents (CreateFontPackage from FONTSUB.dll). + + +SkiaSharp is a cross-platform 2D graphics API for .NET platforms that can be used across mobile, server and desktop models to render images. + + +Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release notes. + + https://go.microsoft.com/fwlink/?linkid=868515 + https://go.microsoft.com/fwlink/?linkid=868516 + xamarin graphics ios android linux windows uwp tvos watchos macos tizen cross-platform skiasharp + + + https://go.microsoft.com/fwlink/?linkid=868514 + Microsoft + Microsoft + true + © Microsoft Corporation. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/nuget/SkiaSharp.nuspec b/nuget/SkiaSharp.nuspec index e2a1ed5dea..f01cdca83e 100644 --- a/nuget/SkiaSharp.nuspec +++ b/nuget/SkiaSharp.nuspec @@ -100,7 +100,6 @@ Please visit https://go.microsoft.com/fwlink/?linkid=868517 to view the release - diff --git a/scripts/azure-pipelines.yml b/scripts/azure-pipelines.yml index d384fea933..e54c0a0efe 100644 --- a/scripts/azure-pipelines.yml +++ b/scripts/azure-pipelines.yml @@ -129,6 +129,16 @@ stages: vmImage: $(VM_IMAGE_WINDOWS) target: externals-windows additionalArgs: --buildarch=x64 + - template: azure-templates-bootstrapper.yml # Build Native NanoServer|x64 (Windows) + parameters: + name: native_win32_x64_nanoserver_windows + displayName: Build Native NanoServer|x64 (Windows) + vmImage: $(VM_IMAGE_WINDOWS) + target: externals-nanoserver + additionalArgs: --buildarch=x64 + preBuildSteps: + - pwsh: dotnet tool install -g nano-api-scan + displayName: Install nano-api-scan # NATIVE JOBS - MAC - template: azure-templates-bootstrapper.yml # Build Native Android|x86 (macOS) parameters: @@ -197,28 +207,15 @@ stages: vmImage: $(VM_IMAGE_LINUX) docker: scripts/Docker/ubuntu16/amd64 target: externals-linux - postBuildSteps: - - bash: | - find output/native/linux -type f -name "*.so" -print0 | xargs -0 ldd -v - displayName: List the dependencies for the native binaries - - bash: | - find output/native/linux -type f -name "*.so" -print0 | xargs -0 readelf -Ws | grep GLOBAL - displayName: List the exported symbols for the native binaries + additionalArgs: --buildarch=x64 - template: azure-templates-bootstrapper.yml # Build Native Linux [No Dependencies] (Linux) parameters: name: native_linux_nodependencies_linux displayName: Build Native Linux [No Dependencies] (Linux) vmImage: $(VM_IMAGE_LINUX) docker: scripts/Docker/ubuntu16/amd64 - target: externals-linux - additionalArgs: --additionalGnArgs="skia_use_fontconfig=false" - postBuildSteps: - - bash: | - find output/native/linux -type f -name "*.so" -print0 | xargs -0 ldd -v - displayName: List the dependencies for the native binaries - - bash: | - find output/native/linux -type f -name "*.so" -print0 | xargs -0 readelf -Ws | grep GLOBAL - displayName: List the exported symbols for the native binaries + target: externals-linuxnodeps + additionalArgs: --buildarch=x64 - template: azure-templates-bootstrapper.yml # Build Native Tizen (Linux) parameters: name: native_tizen_linux @@ -236,7 +233,8 @@ stages: name: managed_windows displayName: Build Managed (Windows) vmImage: $(VM_IMAGE_WINDOWS) - target: libs-only + target: libs + additionalArgs: --exclusive requiredArtifacts: - native_android_x86_windows - native_android_x64_windows @@ -250,12 +248,14 @@ stages: - native_uwp_arm64_windows - native_win32_x86_windows - native_win32_x64_windows + - native_win32_x64_nanoserver_windows - template: azure-templates-bootstrapper.yml # Build Managed (macOS) parameters: name: managed_macos displayName: Build Managed (macOS) vmImage: $(VM_IMAGE_MAC) - target: libs-only + target: libs + additionalArgs: --exclusive requiredArtifacts: - native_android_x86_macos - native_android_x64_macos @@ -273,18 +273,10 @@ stages: displayName: Build Managed (Linux) vmImage: $(VM_IMAGE_LINUX) packages: $(MANAGED_LINUX_PACKAGES) - target: libs-only + target: libs + additionalArgs: --exclusive requiredArtifacts: - native_linux_linux - - native_tizen_linux - - template: azure-templates-bootstrapper.yml # Build Managed [No Dependencies] (Linux) - parameters: - name: managed_nodependencies_linux - displayName: Build Managed [No Dependencies] (Linux) - vmImage: $(VM_IMAGE_LINUX) - packages: $(MANAGED_LINUX_PACKAGES) - target: libs-only - requiredArtifacts: - native_linux_nodependencies_linux - native_tizen_linux @@ -292,99 +284,29 @@ stages: displayName: Package NuGets dependsOn: managed jobs: - - template: azure-templates-bootstrapper.yml # Package NuGets [No Dependencies] - parameters: - name: package_nodependencies_windows - displayName: Package NuGets [No Dependencies] - vmImage: $(VM_IMAGE_WINDOWS) - target: nuget-only - additionalArgs: --packall=true - shouldPublish: false - requiredArtifacts: - - managed_nodependencies_linux - - managed_macos - - managed_windows - postBuildSteps: - - pwsh: | - $platforms = (Get-ChildItem -Path ./output/native/*) | Where-Object { $_.Name -NotMatch "linux" } - Write-Host "Removing the following platforms:" - $platforms | Foreach-Object { Write-Host $_.Name } - $platforms | ForEach-Object { Remove-Item -Path $_ -Recurse -Force } - $nupkgs = (Get-ChildItem -Path ./output/nugets/*) | Where-Object { $_.Name -NotMatch "NoDependencies" } - Write-Host "Removing the following packages:" - $nupkgs | Foreach-Object { Write-Host $_.Name } - $nupkgs | ForEach-Object { Remove-Item -Path $_ -Recurse -Force } - displayName: Remove all unrelated files - - task: PublishBuildArtifacts@1 - displayName: Publish the native-nodependencies artifacts - inputs: - artifactName: native-nodependencies - pathToPublish: 'output/native' - - task: PublishBuildArtifacts@1 - displayName: Publish the nuget-nodependencies artifacts - inputs: - artifactName: nuget-nodependencies - pathToPublish: 'output/nugets' - template: azure-templates-bootstrapper.yml # Package NuGets parameters: name: package_windows displayName: Package NuGets vmImage: $(VM_IMAGE_WINDOWS) - target: nuget-only - additionalArgs: --packall=true + target: nuget + additionalArgs: --packall=true --exclusive shouldPublish: false requiredArtifacts: - managed_linux - managed_macos - managed_windows postBuildSteps: - - pwsh: | - $nupkgs = (Get-ChildItem -Path ./output/nugets/*) | Where-Object { $_.Name -Match "NoDependencies" } - Write-Host "Removing the following packages:" - $nupkgs | Foreach-Object { Write-Host $_.Name } - $nupkgs | ForEach-Object { Remove-Item -Path $_ -Recurse -Force } - displayName: Remove all unrelated files - task: PublishBuildArtifacts@1 - displayName: Publish the native-default artifacts + displayName: Publish the native artifacts inputs: - artifactName: native-default + artifactName: native pathToPublish: 'output/native' - task: PublishBuildArtifacts@1 - displayName: Publish the nuget-default artifacts + displayName: Publish the nuget artifacts inputs: - artifactName: nuget-default + artifactName: nuget pathToPublish: 'output/nugets' - - job: package # Combine Packaged NuGets - displayName: Combine Packaged NuGets - dependsOn: - - package_nodependencies_windows - - package_windows - pool: - name: $(VM_IMAGE_LINUX) - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download the nuget-nodependencies artifacts - inputs: - artifactName: nuget-nodependencies - downloadPath: 'download-temp' - - task: DownloadBuildArtifacts@0 - displayName: Download the nuget-default artifacts - inputs: - artifactName: nuget-default - downloadPath: 'download-temp' - - pwsh: | - New-Item '.\output\nugets' -Type Directory -Force | Out-Null - Get-ChildItem '.\download-temp\nuget-nodependencies\' | Copy-Item -Destination '.\output\nugets' -Recurse -Force - Get-ChildItem '.\download-temp\nuget-default\' | Copy-Item -Destination '.\output\nugets' -Recurse -Force - Remove-Item '.\download-temp\' -Recurse -Force - displayName: Move the nuget-* artifacts to the output directory - - task: PublishBuildArtifacts@1 - displayName: Publish the nuget artifacts - inputs: - artifactName: nuget - pathToPublish: 'output/nugets' - - bash: ./scripts/validate-linux-nugets.sh - displayName: Validate the Linux NuGet packages - ${{ if eq(variables['System.TeamProject'], 'devdiv') }}: - stage: signing @@ -412,6 +334,7 @@ stages: requiredArtifacts: - native_win32_x86_windows - native_win32_x64_windows + - native_win32_x64_nanoserver_windows postBuildSteps: - task: PublishTestResults@2 displayName: Publish the .NET Framework test results @@ -465,6 +388,7 @@ stages: shouldPublish: false requiredArtifacts: - native_linux_linux + - native_linux_nodependencies_linux postBuildSteps: - task: PublishTestResults@2 displayName: Publish the Mono test results @@ -480,33 +404,8 @@ stages: testResultsFormat: xUnit testResultsFiles: 'tests/SkiaSharp.NetCore.Tests/**/TestResults.xml' testRunTitle: 'Linux .NET Core Tests' - - template: azure-templates-bootstrapper.yml # Tests [No Dependencies] (Linux) - parameters: - name: tests_nodependencies_linux - displayName: Tests [No Dependencies] (Linux) - vmImage: $(VM_IMAGE_LINUX) - packages: $(MANAGED_LINUX_PACKAGES) - retryCount: 3 - target: tests - additionalArgs: --skipExternals="all" --unsupportedTests="Category=MatchCharacter" - shouldPublish: false - requiredArtifacts: - - native_linux_nodependencies_linux - postBuildSteps: - - task: PublishTestResults@2 - displayName: Publish the Mono test results - condition: always() - inputs: - testResultsFormat: xUnit - testResultsFiles: 'tests/SkiaSharp.Desktop.Tests/**/TestResults.xml' - testRunTitle: 'Linux [No Dependencies] Mono Tests' - - task: PublishTestResults@2 - displayName: Publish the .NET Core test results - condition: always() - inputs: - testResultsFormat: xUnit - testResultsFiles: 'tests/SkiaSharp.NetCore.Tests/**/TestResults.xml' - testRunTitle: 'Linux [No Dependencies] .NET Core Tests' + # TODO: add tests for linux no dependencies + # TODO: add tests for windows nano server - stage: samples displayName: Build Samples @@ -573,6 +472,7 @@ stages: postBuildSteps: - task: PublishBuildArtifacts@1 displayName: Publish the samples artifacts + condition: always() inputs: artifactName: samples pathToPublish: 'output' @@ -588,7 +488,7 @@ stages: displayName: Run Code Checks # condition: and(always(), eq('refs/heads/master', variables['Build.SourceBranch'])) vmImage: $(VM_IMAGE_WINDOWS) - target: externals-init + target: git-sync-deps shouldPublish: false postBuildSteps: - task: CredScan@2 diff --git a/scripts/validate-linux-nugets.sh b/scripts/validate-linux-nugets.sh deleted file mode 100755 index 03ffdb27e4..0000000000 --- a/scripts/validate-linux-nugets.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -echo "Starting package validation..." - -rm -rf temp-tests -mkdir -p temp-tests - -for f in $(find ./output/nugets -iname 'SkiaSharp.NativeAssets.Linux.*.nupkg'); do - - if [[ $f =~ "NoDependencies" ]]; then - echo "Validating no-dependencies package $f..." - unzip -joq $f runtimes/linux-x64/native/libSkiaSharp.so -d temp-tests - ldd temp-tests/libSkiaSharp.so | grep -q fontconfig - if [[ $? == 0 ]]; then - echo "Package DID contain a dependency on fontconfig." - exit 1 - fi - else - echo "Validating normal package $f..." - unzip -joq $f runtimes/linux-x64/native/libSkiaSharp.so -d temp-tests - ldd temp-tests/libSkiaSharp.so | grep -q fontconfig - if [[ $? != 0 ]]; then - echo "Package DID NOT contain a dependency on fontconfig." - exit 1 - fi - fi - -done - -rm -rf temp-tests - -echo "All packages are valid."