123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using HybridCLR.Editor.ABI;
- using HybridCLR.Editor.Template;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using UnityEngine;
- namespace HybridCLR.Editor.Il2CppDef
- {
- public class Il2CppDefGenerator
- {
- public class Options
- {
- public List<string> HotUpdateAssemblies { get; set; }
- public string UnityVersionTemplateFile { get; set; }
- public string UnityVersionOutputFile { get; set; }
- public string AssemblyManifestTemplateFile { get; set; }
- public string AssemblyManifestOutputFile { get; set; }
- public string UnityVersion { get; set; }
- }
- private readonly Options _options;
- public Il2CppDefGenerator(Options options)
- {
- _options = options;
- }
- private static readonly Regex s_unityVersionPat = new Regex(@"(\d+)\.(\d+)\.(\d+)");
- public void Generate()
- {
- GenerateIl2CppConfig();
- GeneratePlaceHolderAssemblies();
- }
- private void GenerateIl2CppConfig()
- {
- var frr = new FileRegionReplace(File.ReadAllText(_options.UnityVersionTemplateFile));
- List<string> lines = new List<string>();
- var match = s_unityVersionPat.Matches(_options.UnityVersion)[0];
- int majorVer = int.Parse(match.Groups[1].Value);
- int minorVer1 = int.Parse(match.Groups[2].Value);
- int minorVer2 = int.Parse(match.Groups[3].Value);
- lines.Add($"#define HYBRIDCLR_UNITY_VERSION {majorVer}{minorVer1.ToString("D2")}{minorVer2.ToString("D2")}");
- lines.Add($"#define HYBRIDCLR_UNITY_{majorVer} 1");
- for (int ver = 2019; ver <= 2023; ver++)
- {
- if (majorVer >= ver)
- {
- lines.Add($"#define HYBRIDCLR_UNITY_{ver}_OR_NEW 1");
- }
- }
- for (int ver = 6000; ver <= 6100; ver++)
- {
- if (majorVer >= ver)
- {
- lines.Add($"#define HYBRIDCLR_UNITY_{ver}_OR_NEW 1");
- }
- }
- #if TUANJIE_1_1_OR_NEWER
- var tuanjieMatch = Regex.Matches(Application.tuanjieVersion, @"(\d+)\.(\d+)\.(\d+)");
- int tuanjieMajorVer = int.Parse(tuanjieMatch[0].Groups[1].Value);
- int tuanjieMinorVer1 = int.Parse(tuanjieMatch[0].Groups[2].Value);
- int tuanjieMinorVer2 = int.Parse(tuanjieMatch[0].Groups[3].Value);
- lines.Add($"#define HYBRIDCLR_TUANJIE_VERSION {tuanjieMajorVer}{tuanjieMinorVer1.ToString("D2")}{tuanjieMinorVer2.ToString("D2")}");
- #elif TUANJIE_2022_3_OR_NEWER
- lines.Add($"#define HYBRIDCLR_TUANJIE_VERSION 10000");
- #endif
- frr.Replace("UNITY_VERSION", string.Join("\n", lines));
- frr.Commit(_options.UnityVersionOutputFile);
- Debug.Log($"[HybridCLR.Editor.Il2CppDef.Generator] output:{_options.UnityVersionOutputFile}");
- }
- private void GeneratePlaceHolderAssemblies()
- {
- var frr = new FileRegionReplace(File.ReadAllText(_options.AssemblyManifestTemplateFile));
- List<string> lines = new List<string>();
- foreach (var ass in _options.HotUpdateAssemblies)
- {
- lines.Add($"\t\t\"{ass}\",");
- }
- frr.Replace("PLACE_HOLDER", string.Join("\n", lines));
- frr.Commit(_options.AssemblyManifestOutputFile);
- Debug.Log($"[HybridCLR.Editor.Il2CppDef.Generator] output:{_options.AssemblyManifestOutputFile}");
- }
- }
- }
|