Skip to content

Commit 9bf9251

Browse files
Csharp code gen (#2311) fix #2305
* 为了避免core对v8的反向依赖,对于要生成的c++代码,添加C#版本的代码生成逻辑。d.ts的生成逻辑挪到v8模块。另外也对js版本的排版进行一些调整(便于前期调试时两边对比) * Generate For Il2cpp C# Gen (all in one with minimum bridge and without wrapper) * 改为通过$"而不是AppendLine来实现 * 生成代码切换到新实现 * 清理原来的实现 * 重构 * 移动dts逻辑到v8模块 * fix ci * 简化逻辑 * 重构 * 抛异常打印栈 * 生成代码的名字空间没修改 * 多余文件 * 多余文件 * 文件移动 * 报错
1 parent fb7a292 commit 9bf9251

30 files changed

+2138
-1271
lines changed

unity/test/dotnet/Src/WrapperGenerator/WrapperGenerate.cs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
using Puerts;
99
using System.Collections.Generic;
1010
using System;
11+
using System.IO;
12+
using System.Text;
1113

1214
[Configure]
1315
public class WrapperGenConfig
@@ -87,13 +89,24 @@ public class PuerGen
8789
{
8890
public static void Main()
8991
{
90-
Puerts.Editor.Generator.FileExporter.ExportWrapper(
91-
TxtLoader.PathToBinDir("../../../Src/StaticWrapper/"),
92-
new TxtLoader()
93-
);
94-
Puerts.Editor.Generator.FileExporter.GenRegisterInfo(
95-
TxtLoader.PathToBinDir("../../../Src/StaticWrapper/"),
96-
new TxtLoader()
97-
);
92+
var outDir = TxtLoader.PathToBinDir("../../../Src/StaticWrapper/");
93+
Directory.CreateDirectory(outDir);
94+
using (StreamWriter textWriter = new StreamWriter(Path.Combine(outDir, "RegisterInfo_Gen.cs"), false, Encoding.UTF8))
95+
{
96+
textWriter.Write(@"namespace PuertsStaticWrap
97+
{
98+
#if !PUERTS_GENERAL
99+
[UnityEngine.Scripting.Preserve]
100+
#endif
101+
public static class PuerRegisterInfo_Gen
102+
{
103+
public static void AddRegisterInfoGetterIntoJsEnv(Puerts.JsEnv jsEnv)
104+
{
105+
}
106+
}
107+
}
108+
");
109+
textWriter.Flush();
110+
}
98111
}
99112
}

unity/test/unity/Assets/Editor/TestBuilder.cs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,15 @@ public static void GenV1()
2020
#if !PUERTS_DISABLE_IL2CPP_OPTIMIZATION
2121
public static void GenV2WithoutWrapper()
2222
{
23-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateEmptyCppWrappers();
24-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateExtensionMethodInfos();
25-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateLinkXML();
26-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateCppPlugin();
27-
//Puerts.Editor.Generator.UnityMenu.GenRegisterInfo();
23+
Puerts.Editor.Generator.UnityMenu.GenV2WithoutWrapper();
2824
}
2925
public static void GenV2()
3026
{
31-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateCppWrappers();
32-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateExtensionMethodInfos();
33-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateLinkXML();
34-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateCppPlugin();
35-
//Puerts.Editor.Generator.UnityMenu.GenRegisterInfo();
27+
Puerts.Editor.Generator.UnityMenu.GenV2();
3628
}
3729
public static void GenMinimumWrappersAndBridge()
3830
{
39-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateMinimumWrappersAndBridge();
40-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateExtensionMethodInfos();
41-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateLinkXML();
42-
PuertsIl2cpp.Editor.Generator.UnityMenu.GenerateCppPlugin();
31+
Puerts.Editor.Generator.UnityMenu.GenMinimumWrappersAndBridge();
4332
}
4433
[MenuItem("PuerTS/Tester/BuildV2")]
4534
public static void BuildWindowsV2() { BuildWindows(true); }

unity/upms/core/Editor/Resources/puerts/templates/il2cppbridge.tpl.mjs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ function genBridgeArgs(parameterSignatures) {
3939
function genBridge(bridgeInfo) {
4040
var parameterSignatures = il2cpp_snippets.listToJsArray(bridgeInfo.ParameterSignatures);
4141
let hasVarArgs = parameterSignatures.length > 0 && parameterSignatures[parameterSignatures.length -1][0] == 'V'
42-
return t`
43-
// ${bridgeInfo.CsName}
42+
return t`// ${bridgeInfo.CsName}
4443
static ${il2cpp_snippets.SToCPPType(bridgeInfo.ReturnSignature)} b_${bridgeInfo.Signature}(void* target, ${parameterSignatures.map((S, i) => `${il2cpp_snippets.SToCPPType(S)} p${i}`).map(s => `${s}, `).join('')}MethodInfo* method) {
4544
// PLog("Running b_${bridgeInfo.Signature}");
4645

unity/upms/core/Editor/Resources/puerts/templates/il2cppfieldwrapper.tpl.mjs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@ function genGetField(fieldWrapperInfo) {
1515
if (il2cpp_snippets.isNullableStruct(signature))
1616
{
1717
return `${code}
18-
${invokePapi('add_return')}(info, NullableConverter<${signature}>::toScript(apis, env, TIret, _src));
19-
`;
18+
${invokePapi('add_return')}(info, NullableConverter<${signature}>::toScript(apis, env, TIret, _src));`;
2019
}
2120
else
2221
{
2322
return `${code}
24-
${invokePapi('add_return')}(info, DataTransfer::CopyValueType<${signature}>(apis, env, *_src, TIret));
25-
`;
23+
${invokePapi('add_return')}(info, DataTransfer::CopyValueType<${signature}>(apis, env, *_src, TIret));`;
2624
}
2725

2826
} else {
@@ -57,8 +55,8 @@ static void ifs_${fieldWrapperInfo.Signature}(struct pesapi_ffi* apis, pesapi_ca
5755
${il2cpp_snippets.getThis(fieldWrapperInfo.ThisSignature)}
5856
5957
${ENDIF()}
60-
// ${fieldWrapperInfo.ReturnSignature}
61-
${il2cpp_snippets.JSValToCSVal(fieldWrapperInfo.ReturnSignature, `${invokePapi('get_arg')}(info, 0)`, "p")}
58+
// ${fieldWrapperInfo.ReturnSignature}
59+
${il2cpp_snippets.JSValToCSVal(fieldWrapperInfo.ReturnSignature, `${invokePapi('get_arg')}(info, 0)`, "p")}
6260
SetFieldValue(${il2cpp_snippets.needThis(fieldWrapperInfo) ? 'self, ': 'nullptr, '}fieldInfo, offset, ${['o', 's', 'p', 'a'].indexOf(fieldWrapperInfo.Signature) != -1 ? 'p' : '&p'});
6361
}`;
6462
}

unity/upms/core/Editor/Resources/puerts/templates/il2cppwrapperdef.tpl.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ ${parameterSignatures.map((x, i) => ` pesapi_value _sv${i} = ${invokePapi('ge
3232
3333
${parameterSignatures.map((x, i) => il2cpp_snippets.JSValToCSVal(x, `_sv${i}`, `p${i}`)).join('\n')}
3434
35-
typedef ${il2cpp_snippets.SToCPPType(wrapperInfo.ReturnSignature)} (*FuncToCall)(${il2cpp_snippets.needThis(wrapperInfo) ? 'void*,' : ''}${parameterSignatures.map((S, i) => `${il2cpp_snippets.SToCPPType(S)} p${i}`).map(s => `${s}, `).join('')}const void* method);
35+
typedef ${il2cpp_snippets.SToCPPType(wrapperInfo.ReturnSignature)} (*FuncToCall)(${il2cpp_snippets.needThis(wrapperInfo) ? 'void*, ' : ''}${parameterSignatures.map((S, i) => `${il2cpp_snippets.SToCPPType(S)} p${i}`).map(s => `${s}, `).join('')}const void* method);
3636
${IF(wrapperInfo.ReturnSignature != 'v')}${il2cpp_snippets.SToCPPType(wrapperInfo.ReturnSignature)} ret = ${ENDIF()}((FuncToCall)methodPointer)(${il2cpp_snippets.needThis(wrapperInfo) ? 'self,' : ''} ${parameterSignatures.map((_, i) => `p${i}, `).join('')} method);
3737
3838
${FOR(parameterSignatures, (x, i) => t`

0 commit comments

Comments
 (0)