mirror of
https://github.com/beefytech/Beef.git
synced 2025-07-04 15:26:00 +02:00
Start of wasm support
This commit is contained in:
parent
053b302d42
commit
b7b065855d
22 changed files with 487 additions and 35 deletions
|
@ -252,6 +252,13 @@ list(APPEND LLVM_LIBS
|
|||
${LLVM_LIB}/libLLVMAArch64AsmParser.a
|
||||
${LLVM_LIB}/libLLVMAArch64Disassembler.a
|
||||
|
||||
${LLVM_LIB}/libLLVMWebAssemblyInfo.a
|
||||
${LLVM_LIB}/libLLVMWebAssemblyAsmPrinter.a
|
||||
${LLVM_LIB}/libLLVMWebAssemblyDesc.a
|
||||
${LLVM_LIB}/libLLVMWebAssemblyCodeGen.a
|
||||
${LLVM_LIB}/libLLVMWebAssemblyAsmParser.a
|
||||
${LLVM_LIB}/libLLVMWebAssemblyDisassembler.a
|
||||
|
||||
${LLVM_LIB}/libLLVMSupport.a
|
||||
${LLVM_LIB}/libLLVMDemangle.a)
|
||||
|
||||
|
|
|
@ -1374,7 +1374,8 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule)
|
|||
CheckModuleStringRefs(module, bfModule, lastModuleRevision, foundStringIds, dllNameSet, dllMethods, stringValueEntries);
|
||||
|
||||
if ((module->mHasForceLinkMarker) &&
|
||||
((!isHotCompile) || (module->mHadHotObjectWrites)))
|
||||
((!isHotCompile) || (module->mHadHotObjectWrites)) &&
|
||||
(mOptions.mPlatformType != BfPlatformType_Wasm))
|
||||
forceLinkValues.Add(bfModule->CreateForceLinkMarker(module, NULL));
|
||||
}
|
||||
|
||||
|
@ -1593,7 +1594,8 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule)
|
|||
{
|
||||
SmallVector<BfIRType, 2> paramTypes;
|
||||
auto dtorFuncType = bfModule->mBfIRBuilder->CreateFunctionType(voidType, paramTypes, false);
|
||||
dtorFunc = bfModule->mBfIRBuilder->CreateFunction(dtorFuncType, BfIRLinkageType_External, "BfCallAllStaticDtors");
|
||||
String dtorName = (mOptions.mPlatformType == BfPlatformType_Wasm) ? "BeefDone" : "BfCallAllStaticDtors";
|
||||
dtorFunc = bfModule->mBfIRBuilder->CreateFunction(dtorFuncType, BfIRLinkageType_External, dtorName);
|
||||
bfModule->SetupIRMethod(NULL, dtorFunc, false);
|
||||
bfModule->mBfIRBuilder->SetActiveFunction(dtorFunc);
|
||||
auto entryBlock = bfModule->mBfIRBuilder->CreateBlock("entry", true);
|
||||
|
@ -1669,8 +1671,11 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule)
|
|||
else
|
||||
{
|
||||
SmallVector<BfIRType, 2> paramTypes;
|
||||
paramTypes.push_back(int32Type);
|
||||
paramTypes.push_back(nullPtrType);
|
||||
if (mOptions.mPlatformType != BfPlatformType_Wasm)
|
||||
{
|
||||
paramTypes.push_back(int32Type);
|
||||
paramTypes.push_back(nullPtrType);
|
||||
}
|
||||
mainFuncType = bfModule->mBfIRBuilder->CreateFunctionType(int32Type, paramTypes, false);
|
||||
mainFunc = bfModule->mBfIRBuilder->CreateFunction(mainFuncType, BfIRLinkageType_External, "BeefMain");
|
||||
bfModule->SetupIRMethod(NULL, mainFunc, false);
|
||||
|
@ -1686,7 +1691,7 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule)
|
|||
SmallVector<BfIRType, 2> paramTypes;
|
||||
paramTypes.push_back(int32Type);
|
||||
paramTypes.push_back(nullPtrType);
|
||||
auto setCmdLineFuncType = bfModule->mBfIRBuilder->CreateFunctionType(int32Type, paramTypes, false);
|
||||
auto setCmdLineFuncType = bfModule->mBfIRBuilder->CreateFunctionType(voidType, paramTypes, false);
|
||||
|
||||
auto setCmdLineFunc = bfModule->mBfIRBuilder->CreateFunction(setCmdLineFuncType, BfIRLinkageType_External, "BfpSystem_SetCommandLine");
|
||||
bfModule->SetupIRMethod(NULL, setCmdLineFunc, false);
|
||||
|
@ -1922,12 +1927,15 @@ void BfCompiler::CreateVData(BfVDataModule* bfModule)
|
|||
bfModule->mBfIRBuilder->SetInsertPoint(deinitBlock);
|
||||
}
|
||||
|
||||
bfModule->mBfIRBuilder->CreateCall(dtorFunc, SizedArray<BfIRValue, 0>());
|
||||
|
||||
BfModuleMethodInstance shutdownMethod = bfModule->GetInternalMethod("Shutdown");
|
||||
if (shutdownMethod)
|
||||
if (mOptions.mPlatformType != BfPlatformType_Wasm)
|
||||
{
|
||||
bfModule->mBfIRBuilder->CreateCall(shutdownMethod.mFunc, SizedArray<BfIRValue, 0>());
|
||||
bfModule->mBfIRBuilder->CreateCall(dtorFunc, SizedArray<BfIRValue, 0>());
|
||||
|
||||
BfModuleMethodInstance shutdownMethod = bfModule->GetInternalMethod("Shutdown");
|
||||
if (shutdownMethod)
|
||||
{
|
||||
bfModule->mBfIRBuilder->CreateCall(shutdownMethod.mFunc, SizedArray<BfIRValue, 0>());
|
||||
}
|
||||
}
|
||||
|
||||
if (deinitSkipBlock)
|
||||
|
@ -8726,7 +8734,7 @@ static BfPlatformType GetPlatform(StringView str)
|
|||
}
|
||||
|
||||
bool hasLinux = false;
|
||||
|
||||
|
||||
for (auto elem : str.Split('-'))
|
||||
{
|
||||
if (elem == "linux")
|
||||
|
@ -8739,6 +8747,8 @@ static BfPlatformType GetPlatform(StringView str)
|
|||
return BfPlatformType_iOS;
|
||||
else if ((elem == "android") || (elem == "androideabi"))
|
||||
return BfPlatformType_Android;
|
||||
else if ((elem == "wasm32") || (elem == "wasm64"))
|
||||
return BfPlatformType_Wasm;
|
||||
}
|
||||
|
||||
if (hasLinux)
|
||||
|
@ -8769,6 +8779,10 @@ BF_EXPORT void BF_CALLTYPE BfCompiler_SetOptions(BfCompiler* bfCompiler, BfProje
|
|||
options->mMachineType = BfMachineType_AArch64;
|
||||
else if (options->mTargetTriple.StartsWith("armv"))
|
||||
options->mMachineType = BfMachineType_ARM;
|
||||
else if (options->mTargetTriple.StartsWith("wasm32"))
|
||||
options->mMachineType = BfMachineType_Wasm32;
|
||||
else if (options->mTargetTriple.StartsWith("wasm64"))
|
||||
options->mMachineType = BfMachineType_Wasm64;
|
||||
else
|
||||
options->mMachineType = BfMachineType_x64; // Default
|
||||
|
||||
|
@ -8870,4 +8884,3 @@ BF_EXPORT void BF_CALLTYPE BfCompiler_ForceRebuild(BfCompiler* bfCompiler)
|
|||
bfCompiler->mOptions.mForceRebuildIdx++;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1688,7 +1688,8 @@ void BfContext::UpdateRevisedTypes()
|
|||
|
||||
int wantPtrSize;
|
||||
if ((mCompiler->mOptions.mMachineType == BfMachineType_x86) |
|
||||
(mCompiler->mOptions.mMachineType == BfMachineType_ARM))
|
||||
(mCompiler->mOptions.mMachineType == BfMachineType_ARM) ||
|
||||
(mCompiler->mOptions.mMachineType == BfMachineType_Wasm32))
|
||||
wantPtrSize = 4;
|
||||
else
|
||||
wantPtrSize = 8;
|
||||
|
|
|
@ -4608,4 +4608,11 @@ void BfIRCodeGen::StaticInit()
|
|||
LLVMInitializeAArch64AsmPrinter();
|
||||
//LLVMInitializeAArch64Parser();
|
||||
//LLVMInitializeX86Disassembler();
|
||||
|
||||
LLVMInitializeWebAssemblyTargetInfo();
|
||||
LLVMInitializeWebAssemblyTarget();
|
||||
LLVMInitializeWebAssemblyTargetMC();
|
||||
LLVMInitializeWebAssemblyAsmPrinter();
|
||||
LLVMInitializeWebAssemblyAsmParser();
|
||||
LLVMInitializeWebAssemblyDisassembler();
|
||||
}
|
|
@ -6567,6 +6567,7 @@ BfIRFunction BfModule::GetBuiltInFunc(BfBuiltInFuncType funcTypeId)
|
|||
switch (funcTypeId)
|
||||
{
|
||||
case BfBuiltInFuncType_PrintF:
|
||||
paramTypes.Add(nullPtrType);
|
||||
funcType = mBfIRBuilder->CreateFunctionType(int32Type, paramTypes, true);
|
||||
func = mBfIRBuilder->CreateFunction(funcType, BfIRLinkageType_External, "PrintF");
|
||||
break;
|
||||
|
|
|
@ -215,6 +215,7 @@ enum BfPlatformType
|
|||
BfPlatformType_macOS,
|
||||
BfPlatformType_iOS,
|
||||
BfPlatformType_Android,
|
||||
BfPlatformType_Wasm
|
||||
};
|
||||
|
||||
enum BfMachineType
|
||||
|
@ -223,7 +224,9 @@ enum BfMachineType
|
|||
BfMachineType_x86,
|
||||
BfMachineType_x64,
|
||||
BfMachineType_ARM,
|
||||
BfMachineType_AArch64
|
||||
BfMachineType_AArch64,
|
||||
BfMachineType_Wasm32,
|
||||
BfMachineType_Wasm64,
|
||||
};
|
||||
|
||||
enum BfToolsetType
|
||||
|
|
|
@ -171,7 +171,7 @@
|
|||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>DebugFull</GenerateDebugInformation>
|
||||
<OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile>
|
||||
<AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMTransformUtils.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMAggressiveInstCombine.lib;LLVMX86Info.lib;LLVMX86Utils.lib;LLVMX86AsmPrinter.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64AsmPrinter.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64AsmParser.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMAsmPrinter.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMAsmParser.lib;LLVMARMDisassembler.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMTransformUtils.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMAggressiveInstCombine.lib;LLVMX86Info.lib;LLVMX86Utils.lib;LLVMX86AsmPrinter.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64AsmPrinter.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64AsmParser.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMAsmPrinter.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMAsmParser.lib;LLVMARMDisassembler.lib;LLVMWebAssemblyInfo.lib;LLVMWebAssemblyAsmPrinter.lib;LLVMWebAssemblyDesc.lib;LLVMWebAssemblyCodeGen.lib;LLVMWebAssemblyAsmParser.lib;LLVMWebAssemblyDisassembler.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>..\extern\llvm_win64_8_0_1\Debug\lib; ..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\lib;..\extern\curl\deps\lib;..\extern\jemalloc_win\x64\debug</AdditionalLibraryDirectories>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>
|
||||
|
@ -230,7 +230,7 @@
|
|||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<OutputFile>$(SolutionDir)\IDE\dist\$(TargetName).dll</OutputFile>
|
||||
<AdditionalLibraryDirectories>..\extern\llvm_win64_8_0_1\Release\lib; ..\extern\curl\builds\libcurl-vc15-x64-release-static-zlib-static-ipv6-sspi-winssl\lib;..\extern\curl\deps\lib;..\extern\jemalloc_win\x64\release</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMTransformUtils.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMAggressiveInstCombine.lib;LLVMX86Info.lib;LLVMX86Utils.lib;LLVMX86AsmPrinter.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64AsmPrinter.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64AsmParser.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMAsmPrinter.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMAsmParser.lib;LLVMARMDisassembler.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>rpcrt4.lib;cabinet.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;libcurl_a.lib;wininet.lib;LLVMMCDisassembler.lib;LLVMSupport.lib;LLVMMC.lib;LLVMObject.lib;LLVMCore.lib;LLVMBitReader.lib;LLVMAsmParser.lib;LLVMMCParser.lib;LLVMCodeGen.lib;LLVMTarget.lib;LLVMScalarOpts.lib;LLVMInstCombine.lib;LLVMSelectionDAG.lib;LLVMProfileData.lib;LLVMTransformUtils.lib;LLVMAnalysis.lib;LLVMAsmPrinter.lib;LLVMBitWriter.lib;LLVMVectorize.lib;LLVMipo.lib;LLVMInstrumentation.lib;LLVMDebugInfoDWARF.lib;LLVMDebugInfoPDB.lib;LLVMDebugInfoCodeView.lib;LLVMGlobalISel.lib;LLVMBinaryFormat.lib;LLVMLTO.lib;LLVMPasses.lib;LLVMLinker.lib;LLVMIRReader.lib;LLVMDemangle.lib;LLVMAggressiveInstCombine.lib;LLVMX86Info.lib;LLVMX86Utils.lib;LLVMX86AsmPrinter.lib;LLVMX86Desc.lib;LLVMX86CodeGen.lib;LLVMX86AsmParser.lib;LLVMX86Disassembler.lib;LLVMAArch64Info.lib;LLVMAArch64Utils.lib;LLVMAArch64AsmPrinter.lib;LLVMAArch64Desc.lib;LLVMAArch64CodeGen.lib;LLVMAArch64AsmParser.lib;LLVMAArch64Disassembler.lib;LLVMARMInfo.lib;LLVMARMUtils.lib;LLVMARMAsmPrinter.lib;LLVMARMDesc.lib;LLVMARMCodeGen.lib;LLVMARMAsmParser.lib;LLVMARMDisassembler.lib;LLVMWebAssemblyInfo.lib;LLVMWebAssemblyAsmPrinter.lib;LLVMWebAssemblyDesc.lib;LLVMWebAssemblyCodeGen.lib;LLVMWebAssemblyAsmParser.lib;LLVMWebAssemblyDisassembler.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<FullProgramDatabaseFile>true</FullProgramDatabaseFile>
|
||||
<ImportLibrary>$(SolutionDir)\IDE\dist\$(TargetName).lib</ImportLibrary>
|
||||
|
|
|
@ -6,20 +6,20 @@
|
|||
<LocalDebuggerCommand>..\IDE\dist\IDE.exe</LocalDebuggerCommand>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LocalDebuggerCommandArguments>-launch="C:\Beef\IDE\mintest\build\Debug_Win64\mintest\mintest.exe" -- These are the args</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerCommandArguments>-proddir=c:\beef\ide\mintest</LocalDebuggerCommandArguments>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommand>$(SolutionDir)\dist\BeefIDE_d.exe</LocalDebuggerCommand>
|
||||
<LocalDebuggerWorkingDirectory>$(SolutionDir)\dist</LocalDebuggerWorkingDirectory>
|
||||
<LocalDebuggerCommand>$(SolutionDir)IDE\dist\BeefIDE_d.exe</LocalDebuggerCommand>
|
||||
<LocalDebuggerWorkingDirectory>$(SolutionDir)IDE\dist</LocalDebuggerWorkingDirectory>
|
||||
<LocalDebuggerEnvironment>_NO_DEBUG_HEAP=1</LocalDebuggerEnvironment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LocalDebuggerCommand>$(SolutionDir)\dist\IDE_bf.exe</LocalDebuggerCommand>
|
||||
<LocalDebuggerCommand>$(SolutionDir)IDE\dist\BeefIDE.exe</LocalDebuggerCommand>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommandArguments>-proddir=c:\beef\IDE\Tests\Rando 2>StdErr.txt </LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerWorkingDirectory>$(SolutionDir)\dist</LocalDebuggerWorkingDirectory>
|
||||
<LocalDebuggerCommandArguments>-proddir=c:\beef\IDE\mintest</LocalDebuggerCommandArguments>
|
||||
<LocalDebuggerWorkingDirectory>$(SolutionDir)IDE\dist</LocalDebuggerWorkingDirectory>
|
||||
<LocalDebuggerEnvironment>_NO_DEBUG_HEAP=1</LocalDebuggerEnvironment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ShowAllFiles>true</ShowAllFiles>
|
||||
<ShowAllFiles>false</ShowAllFiles>
|
||||
</PropertyGroup>
|
||||
</Project>
|
Loading…
Add table
Add a link
Reference in a new issue