HybridCLRSettings.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using System.IO;
  2. using UnityEditorInternal;
  3. using UnityEngine;
  4. namespace HybridCLR.Editor.Settings
  5. {
  6. public class HybridCLRSettings : ScriptableObject
  7. {
  8. [Tooltip("enable HybridCLR")]
  9. public bool enable = true;
  10. [Tooltip("use il2cpp in unity editor installation location")]
  11. public bool useGlobalIl2cpp;
  12. [Tooltip("hybridclr repo URL")]
  13. public string hybridclrRepoURL = "https://gitee.com/focus-creative-games/hybridclr";
  14. [Tooltip("il2cpp_plus repo URL")]
  15. public string il2cppPlusRepoURL = "https://gitee.com/focus-creative-games/il2cpp_plus";
  16. [Tooltip("hot update assembly definitions(asd)")]
  17. public AssemblyDefinitionAsset[] hotUpdateAssemblyDefinitions;
  18. [Tooltip("hot update assembly names(without .dll suffix)")]
  19. public string[] hotUpdateAssemblies;
  20. [Tooltip("preserved hot update assembly names(without .dll suffix)")]
  21. public string[] preserveHotUpdateAssemblies;
  22. [Tooltip("output directory of compiling hot update assemblies")]
  23. public string hotUpdateDllCompileOutputRootDir = "HybridCLRData/HotUpdateDlls";
  24. [Tooltip("searching paths of external hot update assemblies")]
  25. public string[] externalHotUpdateAssembliyDirs;
  26. [Tooltip("output directory of stripped AOT assemblies")]
  27. public string strippedAOTDllOutputRootDir = "HybridCLRData/AssembliesPostIl2CppStrip";
  28. [Tooltip("supplementary metadata assembly names(without .dll suffix)")]
  29. public string[] patchAOTAssemblies;
  30. [Tooltip("output file of automatic generated link.xml by scanning hot update assemblies")]
  31. public string outputLinkFile = "HybridCLRGenerate/link.xml";
  32. [Tooltip("output file of automatic generated AOTGenericReferences.cs")]
  33. public string outputAOTGenericReferenceFile = "HybridCLRGenerate/AOTGenericReferences.cs";
  34. [Tooltip("max iteration count of searching generic methods in hot update assemblies")]
  35. public int maxGenericReferenceIteration = 10;
  36. [Tooltip("max iteration count of searching method bridge generic methods in AOT assemblies")]
  37. public int maxMethodBridgeGenericIteration = 10;
  38. private static HybridCLRSettings s_Instance;
  39. public static HybridCLRSettings Instance
  40. {
  41. get
  42. {
  43. if (!s_Instance)
  44. {
  45. LoadOrCreate();
  46. }
  47. return s_Instance;
  48. }
  49. }
  50. private static string GetFilePath()
  51. {
  52. return "ProjectSettings/HybridCLRSettings.asset";
  53. }
  54. public static HybridCLRSettings LoadOrCreate()
  55. {
  56. string filePath = GetFilePath();
  57. Object[] objs = InternalEditorUtility.LoadSerializedFileAndForget(filePath);
  58. s_Instance = objs.Length > 0 ? (HybridCLRSettings)objs[0] : (s_Instance ?? CreateInstance<HybridCLRSettings>());
  59. return s_Instance;
  60. }
  61. public static void Save()
  62. {
  63. if (!s_Instance)
  64. {
  65. return;
  66. }
  67. string filePath = GetFilePath();
  68. string directoryName = Path.GetDirectoryName(filePath);
  69. Directory.CreateDirectory(directoryName);
  70. var obj = new Object[1] { s_Instance };
  71. InternalEditorUtility.SaveToSerializedFileAndForget(obj, filePath, true);
  72. }
  73. }
  74. }