skiasharp/native/linux/build.cake
Matthew Leibowitz 171e086a89
Update .NET to 8.0 (#2927)
* Update the Dockerfiles
* Use newer Xcode
* Update Blazor WASM Sample
* Update Uno Samples
2024-07-26 00:28:28 +08:00

140 lines
5.2 KiB
C#

DirectoryPath ROOT_PATH = MakeAbsolute(Directory("../.."));
DirectoryPath OUTPUT_PATH = MakeAbsolute(ROOT_PATH.Combine("output/native"));
#load "../../scripts/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 SUPPORT_VULKAN_VAR = Argument("supportVulkan", EnvironmentVariable("SUPPORT_VULKAN") ?? "true");
bool SUPPORT_VULKAN = SUPPORT_VULKAN_VAR == "1" || SUPPORT_VULKAN_VAR.ToLower() == "true";
var VERIFY_EXCLUDED = Argument("verifyExcluded", Argument("verifyexcluded", ""))
.ToLower().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
string CC = Argument("cc", EnvironmentVariable("CC"));
string CXX = Argument("cxx", EnvironmentVariable("CXX"));
string AR = Argument("ar", EnvironmentVariable("AR"));
string VARIANT = string.IsNullOrEmpty(BUILD_VARIANT) ? "linux" : BUILD_VARIANT?.Trim();
if (BUILD_ARCH.Length == 0)
BUILD_ARCH = new [] { "x64" };
var COMPILERS = "";
if (!string.IsNullOrEmpty(CC))
COMPILERS += $"cc='{CC}' ";
if (!string.IsNullOrEmpty(CXX))
COMPILERS += $"cxx='{CXX}' ";
if (!string.IsNullOrEmpty(AR))
COMPILERS += $"ar='{AR}' ";
void CheckDeps(FilePath so)
{
if (VERIFY_EXCLUDED == null || VERIFY_EXCLUDED.Length == 0)
return;
Information($"Making sure that there are no dependencies on: {string.Join(", ", VERIFY_EXCLUDED)}");
RunProcess("readelf", $"-d {so}", out var stdout);
Information(String.Join(Environment.NewLine + " ", stdout));
var needed = stdout
.Where(l => l.Contains("(NEEDED)"))
.ToList();
foreach (var exclude in VERIFY_EXCLUDED) {
if (needed.Any(o => o.Contains(exclude.Trim(), StringComparison.OrdinalIgnoreCase)))
throw new Exception($"{so} contained a dependency on {exclude}.");
}
}
Task("libSkiaSharp")
.IsDependentOn("git-sync-deps")
.WithCriteria(IsRunningOnLinux())
.Does(() =>
{
foreach (var arch in BUILD_ARCH) {
if (Skip(arch)) return;
var soname = GetVersion("libSkiaSharp", "soname");
var map = MakeAbsolute((FilePath)"libSkiaSharp/libSkiaSharp.map");
// This is terrible! But, Alpine (musl) does not define this
// so we are forced to for dng_sdk. If this ever becomes a problem
// for other libraries, we will need to find a better solution.
var wordSize = ReduceArch(arch).EndsWith("64") ? "64" : "32";
var wordSizeDefine = VARIANT.ToLower().StartsWith("alpine")
? $", '-D__WORDSIZE={wordSize}'"
: $"";
GnNinja($"{VARIANT}/{arch}", "SkiaSharp",
$"target_os='linux' " +
$"target_cpu='{arch}' " +
$"skia_enable_ganesh={(SUPPORT_GPU ? "true" : "false")} " +
$"skia_use_harfbuzz=false " +
$"skia_use_icu=false " +
$"skia_use_piex=true " +
$"skia_use_sfntly=false " +
$"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_skottie=true " +
$"skia_use_vulkan={SUPPORT_VULKAN} ".ToLower() +
$"extra_asmflags=[] " +
$"extra_cflags=[ '-DSKIA_C_DLL', '-DHAVE_SYSCALL_GETRANDOM', '-DXML_DEV_URANDOM' {wordSizeDefine} ] " +
$"extra_ldflags=[ '-static-libstdc++', '-static-libgcc', '-Wl,--version-script={map}' ] " +
COMPILERS +
$"linux_soname_version='{soname}' " +
ADDITIONAL_GN_ARGS);
var outDir = OUTPUT_PATH.Combine($"{VARIANT}/{arch}");
EnsureDirectoryExists(outDir);
var so = SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libSkiaSharp.so.{soname}");
CopyFileToDirectory(so, outDir);
CopyFile(so, outDir.CombineWithFilePath("libSkiaSharp.so"));
CheckDeps(so);
}
});
Task("libHarfBuzzSharp")
.IsDependentOn("git-sync-deps")
.WithCriteria(IsRunningOnLinux())
.Does(() =>
{
foreach (var arch in BUILD_ARCH) {
if (Skip(arch)) return;
var soname = GetVersion("HarfBuzz", "soname");
var map = MakeAbsolute((FilePath)"libHarfBuzzSharp/libHarfBuzzSharp.map");
GnNinja($"{VARIANT}/{arch}", "HarfBuzzSharp",
$"target_os='linux' " +
$"target_cpu='{arch}' " +
$"visibility_hidden=false " +
$"extra_asmflags=[] " +
$"extra_cflags=[] " +
$"extra_ldflags=[ '-static-libstdc++', '-static-libgcc', '-Wl,--version-script={map}' ] " +
COMPILERS +
$"linux_soname_version='{soname}' " +
ADDITIONAL_GN_ARGS);
var outDir = OUTPUT_PATH.Combine($"{VARIANT}/{arch}");
EnsureDirectoryExists(outDir);
var so = SKIA_PATH.CombineWithFilePath($"out/{VARIANT}/{arch}/libHarfBuzzSharp.so.{soname}");
CopyFileToDirectory(so, outDir);
CopyFile(so, outDir.CombineWithFilePath("libHarfBuzzSharp.so"));
CheckDeps(so);
}
});
Task("Default")
.IsDependentOn("libSkiaSharp")
.IsDependentOn("libHarfBuzzSharp");
RunTarget(TARGET);