110 lines
5.2 KiB
C#
110 lines
5.2 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using HybridCLR.Editor;
|
|
using HybridCLR.Editor.Commands;
|
|
using HybridCLR.Editor.Settings;
|
|
using Newtonsoft.Json;
|
|
using UnityEditor;
|
|
using UnityEditor.Build.Reporting;
|
|
using UnityEngine;
|
|
|
|
public static class VerifyHybridClrGeneration
|
|
{
|
|
public static async Task<string> VerifyCallbacks()
|
|
{
|
|
BuildReport report = BuildReport.GetLatestReport();
|
|
if (report == null || report.summary.platform != BuildTarget.WebGL)
|
|
throw new Exception("A WebGL build report is required");
|
|
string bee = Environment.GetEnvironmentVariable("BEE_BUILD_THREADS");
|
|
string binaryen = Environment.GetEnvironmentVariable("BINARYEN_CORES");
|
|
var callbacks = new AOT.Editor.HybridCLR.WebGlBuildConcurrency();
|
|
try
|
|
{
|
|
Environment.SetEnvironmentVariable("BEE_BUILD_THREADS", null);
|
|
Environment.SetEnvironmentVariable("BINARYEN_CORES", null);
|
|
callbacks.OnPreprocessBuild(report);
|
|
RequireEnvironment("4", "4");
|
|
callbacks.OnPostprocessBuild(report);
|
|
RequireEnvironment(null, null);
|
|
|
|
Environment.SetEnvironmentVariable("BEE_BUILD_THREADS", "6");
|
|
Environment.SetEnvironmentVariable("BINARYEN_CORES", "2");
|
|
callbacks.OnPreprocessBuild(report);
|
|
callbacks.OnPostprocessBuild(report);
|
|
RequireEnvironment("6", "2");
|
|
|
|
Environment.SetEnvironmentVariable("BEE_BUILD_THREADS", null);
|
|
Environment.SetEnvironmentVariable("BINARYEN_CORES", null);
|
|
callbacks.OnPreprocessBuild(report);
|
|
// Simulate an aborted build that never invokes its postprocess callback.
|
|
await Task.Delay(250);
|
|
RequireEnvironment(null, null);
|
|
return "PASS: WebGL worker defaults, successful cleanup, explicit overrides, failed-build idle cleanup";
|
|
}
|
|
finally
|
|
{
|
|
callbacks.OnPostprocessBuild(report);
|
|
Environment.SetEnvironmentVariable("BEE_BUILD_THREADS", bee);
|
|
Environment.SetEnvironmentVariable("BINARYEN_CORES", binaryen);
|
|
}
|
|
}
|
|
|
|
static void RequireEnvironment(string bee, string binaryen)
|
|
{
|
|
if (Environment.GetEnvironmentVariable("BEE_BUILD_THREADS") != bee ||
|
|
Environment.GetEnvironmentVariable("BINARYEN_CORES") != binaryen)
|
|
throw new Exception("Unexpected build worker environment");
|
|
}
|
|
|
|
public static string GenerateAll()
|
|
{
|
|
string previousBee = Environment.GetEnvironmentVariable("BEE_BUILD_THREADS");
|
|
string previousBinaryen = Environment.GetEnvironmentVariable("BINARYEN_CORES");
|
|
DateTime started = DateTime.UtcNow;
|
|
try
|
|
{
|
|
Debug.Log("[VerifyHybridClrGeneration] Verify standard Generate All and project build callbacks");
|
|
PrebuildCommand.GenerateAll();
|
|
string directory = SettingsUtil.GetAssembliesPostIl2CppStripDir(EditorUserBuildSettings.activeBuildTarget);
|
|
string[] dlls = Directory.GetFiles(directory, "*.dll");
|
|
if (dlls.Length == 0) throw new Exception("No stripped AOT DLLs generated");
|
|
string[] generated = {
|
|
Path.Combine(SettingsUtil.GeneratedCppDir, "MethodBridge.cpp"),
|
|
Path.Combine(SettingsUtil.GeneratedCppDir, "UnityVersion.h"),
|
|
Path.Combine(Application.dataPath, HybridCLRSettings.Instance.outputLinkFile),
|
|
Path.Combine(Application.dataPath, HybridCLRSettings.Instance.outputAOTGenericReferenceFile)
|
|
};
|
|
foreach (string file in generated)
|
|
if (!File.Exists(file) || new FileInfo(file).Length == 0 || File.GetLastWriteTimeUtc(file) < started)
|
|
throw new Exception("Missing or stale generated file: " + file);
|
|
if (Environment.GetEnvironmentVariable("BEE_BUILD_THREADS") != previousBee ||
|
|
Environment.GetEnvironmentVariable("BINARYEN_CORES") != previousBinaryen)
|
|
throw new Exception("Build worker environment was not restored");
|
|
string output = Path.GetFullPath(Path.Combine(Application.dataPath, "../../Tools/output/hybridclr_genall"));
|
|
Directory.CreateDirectory(output);
|
|
string result = JsonConvert.SerializeObject(new {
|
|
passed = true,
|
|
target = EditorUserBuildSettings.activeBuildTarget.ToString(),
|
|
startedUtc = started,
|
|
completedUtc = DateTime.UtcNow,
|
|
beeBuildThreads = 4,
|
|
binaryenCores = 4,
|
|
environmentRestored = true,
|
|
generatedFiles = generated.Select(Path.GetFullPath).ToArray(),
|
|
aotDirectory = Path.GetFullPath(directory),
|
|
aotDllCount = dlls.Length,
|
|
aotDlls = dlls.Select(Path.GetFileName).ToArray()
|
|
}, Formatting.Indented);
|
|
File.WriteAllText(Path.Combine(output, "generate_all.json"), result);
|
|
return result;
|
|
}
|
|
finally
|
|
{
|
|
Environment.SetEnvironmentVariable("BEE_BUILD_THREADS", previousBee);
|
|
Environment.SetEnvironmentVariable("BINARYEN_CORES", previousBinaryen);
|
|
}
|
|
}
|
|
}
|