CmdBuildHybridclr.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. //using HybridCLR.Editor;
  2. //using HybridCLR.Editor.Commands;
  3. //using HybridCLR.Editor.Installer;
  4. //using XGame.Editor.Framework.Compiler;
  5. //using Kailash.Framework.Definition;
  6. //using System;
  7. //using System.IO;
  8. //using System.Runtime.InteropServices;
  9. //using UnityEditor;
  10. //namespace XGame.Editor.Build
  11. //{
  12. // [BuildCommand((uint)BuildCommandPriority.BuildHybridclr)]
  13. // class CmdBuildHybridclr : BaseBuildCommand, ICommandExecuterAsync
  14. // {
  15. // public void Execute()
  16. // {
  17. // BuildErrorCode code = BuildErrorCode.CmdCompleted;
  18. // if (Context.config.scriptImpl != ScriptingImplementation.IL2CPP)
  19. // {
  20. // SettingsUtil.Enable = false;
  21. // this.Completed(code);
  22. // return;
  23. // }
  24. // try
  25. // {
  26. // BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
  27. // DeleteKailashDir();
  28. // DeleteAOTRoot(target);
  29. // PrebuildCommand.GenerateAll();
  30. // CompilerHotfixDlls();
  31. // MergeAOTAssemblies(target);
  32. // DeleteTempProj(target);
  33. // }
  34. // catch (Exception e)
  35. // {
  36. // BuildLog.Error($"CmdBuildHybridclr failed. \nError: {e.Message}\nStackTrace: {e.StackTrace}");
  37. // code = BuildErrorCode.BuildHybridclrError;
  38. // }
  39. // finally
  40. // {
  41. // this.Completed(code);
  42. // }
  43. // }
  44. // void DeleteKailashDir()
  45. // {
  46. // string dir = FileDefine.KailashDirectory.StreamingPath;
  47. // if (Directory.Exists(dir))
  48. // Directory.Delete(dir, true);
  49. // Directory.CreateDirectory(dir);
  50. // }
  51. // void DeleteAOTRoot(BuildTarget target)
  52. // {
  53. // var root = Path.Combine(SettingsUtil.ProjectDir, SettingsUtil.GetAssembliesPostIl2CppStripDir(target));
  54. // if (Directory.Exists(root))
  55. // Directory.Delete(root, true);
  56. // Directory.CreateDirectory(root);
  57. // }
  58. // void CompilerHotfixDlls()
  59. // {
  60. // switch (Context.config.publishType)
  61. // {
  62. // case PublishType.Debug:
  63. // CompilerEntrance.CompileDebug();
  64. // break;
  65. // case PublishType.Release:
  66. // case PublishType.Profiler:
  67. // CompilerEntrance.CompileRelease();
  68. // break;
  69. // default:
  70. // break;
  71. // }
  72. // }
  73. // unsafe void MergeAOTAssemblies(BuildTarget target)
  74. // {
  75. // const int INT32_SIZE = 4;
  76. // var root = Path.Combine(SettingsUtil.ProjectDir, SettingsUtil.GetAssembliesPostIl2CppStripDir(target));
  77. // var files = Directory.GetFiles(root, "*.dll");
  78. // var totalSize = 0;
  79. // totalSize += INT32_SIZE;
  80. // foreach (var file in files)
  81. // {
  82. // totalSize += INT32_SIZE;
  83. // totalSize += (int)(new FileInfo(file).Length);
  84. // }
  85. // var count = files.Length;
  86. // var metadata = new byte[totalSize];
  87. // fixed (byte* ptr = metadata)
  88. // {
  89. // var pointer = ptr;
  90. // // write total count;
  91. // *(int*)pointer = count;
  92. // pointer += INT32_SIZE;
  93. // // write any file
  94. // foreach (var file in files)
  95. // {
  96. // var bytes = File.ReadAllBytes(file);
  97. // var length = bytes.Length;
  98. // *(int*)pointer = length;
  99. // pointer += INT32_SIZE;
  100. // Marshal.Copy(bytes, 0, new IntPtr(pointer), length);
  101. // pointer += length;
  102. // }
  103. // // write kailash.metadata file
  104. // File.WriteAllBytes(FileDefine.MetadataForAOTAssemblies.StreamingPath, metadata);
  105. // }
  106. // }
  107. // void DeleteTempProj(BuildTarget target)
  108. // {
  109. // string tempProject = $"{SettingsUtil.HybridCLRDataDir}/StrippedAOTDllsTempProj/{target}";
  110. // if (Directory.Exists(tempProject))
  111. // Directory.Delete(tempProject, true);
  112. // }
  113. // }
  114. //}