AOTReferenceGeneratorCommand.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. public static class AOTReferenceGeneratorCommand
  13. {
  14. [MenuItem("HybridCLR/Generate/AOTGenericReference", priority = 102)]
  15. public static void CompileAndGenerateAOTGenericReference()
  16. {
  17. BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
  18. CompileDllCommand.CompileDll(target);
  19. GenerateAOTGenericReference(target);
  20. }
  21. public static void GenerateAOTGenericReference(BuildTarget target)
  22. {
  23. var gs = SettingsUtil.HybridCLRSettings;
  24. List<string> hotUpdateDllNames = SettingsUtil.HotUpdateAssemblyNames;
  25. using (AssemblyReferenceDeepCollector collector = new AssemblyReferenceDeepCollector(MetaUtil.CreateHotUpdateAndAOTAssemblyResolver(target, hotUpdateDllNames), hotUpdateDllNames))
  26. {
  27. var analyzer = new Analyzer(new Analyzer.Options
  28. {
  29. MaxIterationCount = Math.Min(20, gs.maxGenericReferenceIteration),
  30. Collector = collector,
  31. });
  32. analyzer.Run();
  33. var writer = new GenericReferenceWriter();
  34. writer.Write(analyzer.AotGenericTypes.ToList(), analyzer.AotGenericMethods.ToList(), $"{Application.dataPath}/{gs.outputAOTGenericReferenceFile}");
  35. AssetDatabase.Refresh();
  36. }
  37. }
  38. }
  39. }