AOTReferenceGeneratorCommand.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using HybridCLR.Editor.AOT;
  2. using HybridCLR.Editor.Meta;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using UnityEditor;
  9. using UnityEngine;
  10. namespace HybridCLR.Editor.Commands
  11. {
  12. using Analyzer = HybridCLR.Editor.AOT.Analyzer;
  13. public static class AOTReferenceGeneratorCommand
  14. {
  15. [MenuItem("HybridCLR/Generate/AOTGenericReference", priority = 102)]
  16. public static void CompileAndGenerateAOTGenericReference()
  17. {
  18. BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
  19. CompileDllCommand.CompileDll(target);
  20. GenerateAOTGenericReference(target);
  21. }
  22. public static void GenerateAOTGenericReference(BuildTarget target)
  23. {
  24. var gs = SettingsUtil.HybridCLRSettings;
  25. List<string> hotUpdateDllNames = SettingsUtil.HotUpdateAssemblyNamesExcludePreserved;
  26. using (AssemblyReferenceDeepCollector collector = new AssemblyReferenceDeepCollector(MetaUtil.CreateHotUpdateAndAOTAssemblyResolver(target, hotUpdateDllNames), hotUpdateDllNames))
  27. {
  28. var analyzer = new Analyzer(new Analyzer.Options
  29. {
  30. MaxIterationCount = Math.Min(20, gs.maxGenericReferenceIteration),
  31. Collector = collector,
  32. });
  33. analyzer.Run();
  34. var writer = new GenericReferenceWriter();
  35. writer.Write(analyzer.AotGenericTypes.ToList(), analyzer.AotGenericMethods.ToList(), $"{Application.dataPath}/{gs.outputAOTGenericReferenceFile}");
  36. AssetDatabase.Refresh();
  37. }
  38. }
  39. }
  40. }