hybridclr_unity/Editor/Commands/ReversePInvokeWrapperGenera...

46 lines
1.7 KiB
C#
Raw Normal View History

2022-10-17 12:16:18 +08:00
using HybridCLR.Editor.ABI;
using HybridCLR.Editor.Link;
using HybridCLR.Editor.Meta;
using HybridCLR.Editor.ReversePInvokeWrap;
2022-09-22 08:56:07 +08:00
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
namespace HybridCLR.Editor.Commands
{
public static class ReversePInvokeWrapperGeneratorCommand
{
2022-09-23 14:26:28 +08:00
[MenuItem("HybridCLR/Generate/ReversePInvokeWrapper", priority = 103)]
2022-09-22 08:56:07 +08:00
public static void GenerateReversePInvokeWrapper()
{
2022-10-17 12:16:18 +08:00
CompileDllCommand.CompileDllActiveBuildTarget();
using (var cache = new AssemblyCache(MetaUtil.CreateBuildTargetAssemblyResolver(EditorUserBuildSettings.activeBuildTarget)))
{
var analyzer = new ReversePInvokeWrap.Analyzer(cache, SettingsUtil.HotUpdateAssemblyNames);
analyzer.Run();
2022-10-17 12:16:18 +08:00
string templateCode = File.ReadAllText($"{SettingsUtil.TemplatePathInPackage}/ReversePInvokeMethodStub.cpp");
foreach (PlatformABI abi in Enum.GetValues(typeof(PlatformABI)))
2022-10-17 12:16:18 +08:00
{
string outputFile = $"{SettingsUtil.GeneratedCppDir}/ReversePInvokeMethodStub_{abi}.cpp";
2022-10-17 12:16:18 +08:00
List<ABIReversePInvokeMethodInfo> methods = analyzer.BuildABIMethods(abi);
Debug.Log($"GenerateReversePInvokeWrapper. abi:{abi} wraperCount:{methods.Sum(m => m.Count)} output:{outputFile}");
var generator = new Generator();
generator.Generate(templateCode, abi, methods, outputFile);
}
}
MethodBridgeGeneratorCommand.CleanIl2CppBuildCache();
2022-09-22 08:56:07 +08:00
}
}
}