native/ios/build.cake (104 lines of code) (raw):

DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../..")); DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native")); #load "../../scripts/cake/native-shared.cake" #load "../../scripts/cake/xcode.cake" string VARIANT = (BUILD_VARIANT ?? "ios").ToLower(); string GetDeploymentTarget(string arch) { switch (VARIANT) { case "maccatalyst": return "13.1"; default: return "11.0"; } } Task("libSkiaSharp") .IsDependentOn("git-sync-deps") .WithCriteria(IsRunningOnMacOs()) .Does(() => { if (VARIANT == "ios") { Build("iphonesimulator", "x86_64", "x64"); Build("iphonesimulator", "arm64", "arm64"); Build("iphoneos", "arm64", "arm64"); // Build("iphoneos", "arm64", "arm64", "arm64e"); SafeCopy( $"libSkiaSharp/bin/{CONFIGURATION}/iphonesimulator/x86_64.xcarchive", OUTPUT_PATH.Combine($"ios/libSkiaSharp/x86_64.xcarchive")); CreateFatFramework(OUTPUT_PATH.Combine("ios/libSkiaSharp")); CreateFatFramework(OUTPUT_PATH.Combine("iossimulator/libSkiaSharp")); } else if (VARIANT == "maccatalyst") { Build("macosx", "x86_64", "x64"); Build("macosx", "arm64", "arm64"); CreateFatVersionedFramework(OUTPUT_PATH.Combine("maccatalyst/libSkiaSharp")); } void Build(string sdk, string arch, string skiaArch, string xcodeArch = null) { if (Skip(arch)) return; xcodeArch = xcodeArch ?? arch; var isSim = sdk.EndsWith("simulator"); var platform = VARIANT; if (VARIANT == "ios" && isSim) platform += "simulator"; GnNinja($"{platform}/{xcodeArch}", "skia modules/skottie", $"target_cpu='{skiaArch}' " + $"target_os='{VARIANT}' " + $"min_{VARIANT}_version='{GetDeploymentTarget(arch)}' " + $"ios_use_simulator={(isSim ? "true" : "false")} " + $"skia_use_harfbuzz=false " + $"skia_use_icu=false " + $"skia_use_metal=true " + $"skia_use_piex=true " + $"skia_use_sfntly=false " + $"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 " + $"skia_enable_skottie=true " + $"extra_cflags=[ '-DSKIA_C_DLL', '-DHAVE_ARC4RANDOM_BUF' ] " + ADDITIONAL_GN_ARGS); RunXCodeBuild("libSkiaSharp/libSkiaSharp.xcodeproj", "libSkiaSharp", sdk, xcodeArch, properties: new Dictionary<string, string> { { $"{VARIANT.ToUpper()}_DEPLOYMENT_TARGET_VERSION", GetDeploymentTarget(arch) }, { $"SKIA_PLATFORM", platform }, }); SafeCopy( $"libSkiaSharp/bin/{CONFIGURATION}/{sdk}/{xcodeArch}.xcarchive", OUTPUT_PATH.Combine($"{platform}/libSkiaSharp/{xcodeArch}.xcarchive")); } }); Task("libHarfBuzzSharp") .WithCriteria(IsRunningOnMacOs()) .Does(() => { if (VARIANT == "ios") { Build("iphonesimulator", "x86_64"); Build("iphonesimulator", "arm64"); Build("iphoneos", "arm64"); // Build("iphoneos", "arm64e"); SafeCopy( $"libHarfBuzzSharp/bin/{CONFIGURATION}/iphonesimulator/x86_64.xcarchive", OUTPUT_PATH.Combine($"ios/libHarfBuzzSharp/x86_64.xcarchive")); CreateFatFramework(OUTPUT_PATH.Combine("ios/libHarfBuzzSharp")); CreateFatFramework(OUTPUT_PATH.Combine("iossimulator/libHarfBuzzSharp")); } else if (VARIANT == "maccatalyst") { Build("macosx", "x86_64"); Build("macosx", "arm64"); CreateFatVersionedFramework(OUTPUT_PATH.Combine("maccatalyst/libHarfBuzzSharp")); } void Build(string sdk, string arch, string xcodeArch = null) { if (Skip(arch)) return; xcodeArch = xcodeArch ?? arch; var isSim = sdk.EndsWith("simulator"); var platform = VARIANT; if (VARIANT == "ios" && isSim) platform += "simulator"; RunXCodeBuild("libHarfBuzzSharp/libHarfBuzzSharp.xcodeproj", "libHarfBuzzSharp", sdk, xcodeArch, properties: new Dictionary<string, string> { { $"{VARIANT.ToUpper()}_DEPLOYMENT_TARGET_VERSION", GetDeploymentTarget(arch) }, }); SafeCopy( $"libHarfBuzzSharp/bin/{CONFIGURATION}/{sdk}/{xcodeArch}.xcarchive", OUTPUT_PATH.Combine($"{platform}/libHarfBuzzSharp/{xcodeArch}.xcarchive")); } }); Task("Default") .IsDependentOn("libSkiaSharp") .IsDependentOn("libHarfBuzzSharp"); RunTarget(TARGET);