Compilation 如何将CIL转换为LLVM IR?
我想把C#编译成LLVM-IR。所以我认为将编译后的CIL转换为LLVM IR是我可以尝试的一种方法 我可以使用一些工具,比如vmkit和mono-llvmCompilation 如何将CIL转换为LLVM IR?,compilation,llvm,cil,Compilation,Llvm,Cil,我想把C#编译成LLVM-IR。所以我认为将编译后的CIL转换为LLVM IR是我可以尝试的一种方法 我可以使用一些工具,比如vmkit和mono-llvm 有人在用这个工具吗?或者如何将CIL转换为LLVM?答案取决于您的目标。为什么要将C#翻译成LLVM VMKit被设计为构建虚拟机实现的框架。我相信它在某一点上对CLR有一些支持,但由于支持它的JVM实现而停滞不前。它的目的是从头开始构建VM Mono llvm是一个用llvm后端替换Mono JIT后端的项目。它的目标是提高Mono上JI
有人在用这个工具吗?或者如何将CIL转换为LLVM?答案取决于您的目标。为什么要将C#翻译成LLVM VMKit被设计为构建虚拟机实现的框架。我相信它在某一点上对CLR有一些支持,但由于支持它的JVM实现而停滞不前。它的目的是从头开始构建VM Mono llvm是一个用llvm后端替换Mono JIT后端的项目。它的目标是提高Mono上JIT代码的性能 如果您的目标是使用性能更好的Mono,Mono llvm是一个不错的选择 如果您想从头开始构建整个VM,那么VMKit可能会起作用 如果您只是想实现一个能够生成无CLR依赖项的可执行文件的超前编译器,您可以从以下位置下载LLVM核心库: 基本上,它将CIL转换为LLVMIR的文本表示,然后使用LLVMAPI将其编译为本机代码
我不知道LLVM是否会为您生成对象文件。您可能需要自己生成它们,但这很容易。它基本上只是将机器代码填充到数据结构中,建立字符串、节和符号表,然后将所有内容序列化到磁盘。我想我理解的问题是,您希望使用LLVM IR,就像GCC可以使用gcj编译Java一样 LLVM有一个选项可以直接从您使用的任何前端输出CIL(因此理论上您可以对CIL执行C/C++操作)。以下命令选项:
llc -march=msil
将从(理论上)任何受支持的LLVM前端输出CIL
从C#或CIL到LLVM IR尚未完成(或至少完成)。你需要一个C#前端
有一些C#前端脚手架。支持从未完成,兴趣也随之消退。他们已经转向只支持Java。你可以试试他们的源代码库,看看他们早期的C#工作是否有任何残余,是否可以被改写成完整的C#前端
还要注意的是,您可以在C#中编写自己的C#to LLVM IR编译器(使用或其他方式),并使用来调用LLVM库并创建LLVM IR。有一些很好的信息,比如
现在,编译器即服务()项目已经有了最初的几个CTP版本,Mono也有了Mono.CSharp项目,这一领域也变得有趣起来。尽管我认为Roslyn的功能更加丰富。要从CIL获取LLVM IR代码,您需要使用工具il2bc(另一个名字是C#Native),您可以从下载 您只需要执行一些简单的步骤
Il2Bc.exe <Your DLL>.dll
本机代码如何处理垃圾收集步骤?
Il2Bc.exe helloworld.cs /corelib:CoreLib.dll
Il2Bc.exe CoreLib.dll
llc -filetype=obj -mtriple=i686-w64-mingw32 CoreLib.ll
llc -filetype=obj -mtriple=i686-w64-mingw32 helloworld.ll
g++ -o helloworld.exe helloworld.obj CoreLib.obj -lstdc++ -lgc-lib -march=i686 -L .