//using HybridCLR.Editor; //using HybridCLR.Editor.Commands; //using HybridCLR.Editor.Installer; //using XGame.Editor.Framework.Compiler; //using Kailash.Framework.Definition; //using System; //using System.IO; //using System.Runtime.InteropServices; //using UnityEditor; //namespace XGame.Editor.Build //{ // [BuildCommand((uint)BuildCommandPriority.BuildHybridclr)] // class CmdBuildHybridclr : BaseBuildCommand, ICommandExecuterAsync // { // public void Execute() // { // BuildErrorCode code = BuildErrorCode.CmdCompleted; // if (Context.config.scriptImpl != ScriptingImplementation.IL2CPP) // { // SettingsUtil.Enable = false; // this.Completed(code); // return; // } // try // { // BuildTarget target = EditorUserBuildSettings.activeBuildTarget; // DeleteKailashDir(); // DeleteAOTRoot(target); // PrebuildCommand.GenerateAll(); // CompilerHotfixDlls(); // MergeAOTAssemblies(target); // DeleteTempProj(target); // } // catch (Exception e) // { // BuildLog.Error($"CmdBuildHybridclr failed. \nError: {e.Message}\nStackTrace: {e.StackTrace}"); // code = BuildErrorCode.BuildHybridclrError; // } // finally // { // this.Completed(code); // } // } // void DeleteKailashDir() // { // string dir = FileDefine.KailashDirectory.StreamingPath; // if (Directory.Exists(dir)) // Directory.Delete(dir, true); // Directory.CreateDirectory(dir); // } // void DeleteAOTRoot(BuildTarget target) // { // var root = Path.Combine(SettingsUtil.ProjectDir, SettingsUtil.GetAssembliesPostIl2CppStripDir(target)); // if (Directory.Exists(root)) // Directory.Delete(root, true); // Directory.CreateDirectory(root); // } // void CompilerHotfixDlls() // { // switch (Context.config.publishType) // { // case PublishType.Debug: // CompilerEntrance.CompileDebug(); // break; // case PublishType.Release: // case PublishType.Profiler: // CompilerEntrance.CompileRelease(); // break; // default: // break; // } // } // unsafe void MergeAOTAssemblies(BuildTarget target) // { // const int INT32_SIZE = 4; // var root = Path.Combine(SettingsUtil.ProjectDir, SettingsUtil.GetAssembliesPostIl2CppStripDir(target)); // var files = Directory.GetFiles(root, "*.dll"); // var totalSize = 0; // totalSize += INT32_SIZE; // foreach (var file in files) // { // totalSize += INT32_SIZE; // totalSize += (int)(new FileInfo(file).Length); // } // var count = files.Length; // var metadata = new byte[totalSize]; // fixed (byte* ptr = metadata) // { // var pointer = ptr; // // write total count; // *(int*)pointer = count; // pointer += INT32_SIZE; // // write any file // foreach (var file in files) // { // var bytes = File.ReadAllBytes(file); // var length = bytes.Length; // *(int*)pointer = length; // pointer += INT32_SIZE; // Marshal.Copy(bytes, 0, new IntPtr(pointer), length); // pointer += length; // } // // write kailash.metadata file // File.WriteAllBytes(FileDefine.MetadataForAOTAssemblies.StreamingPath, metadata); // } // } // void DeleteTempProj(BuildTarget target) // { // string tempProject = $"{SettingsUtil.HybridCLRDataDir}/StrippedAOTDllsTempProj/{target}"; // if (Directory.Exists(tempProject)) // Directory.Delete(tempProject, true); // } // } //}