use*_*939 6 cil compilation llvm
我想将C#编译为LLVM IL.所以我认为将已编译的CIL翻译成LLVM IL是我可以尝试的一种方式.
我可以使用一些工具,如vmkit和mono-llvm.
有人使用这个工具吗?或者我怎样才能将CIL翻译成LLVM?
小智 5
要从CIL获取LLVM IR代码,您需要使用工具il2bc(其他名称C#Native),您可以从http://csnative.codeplex.com/下载该工具.
您只需执行一些简单的步骤即可.
Il2Bc.exe <Your DLL>.dll
Run Code Online (Sandbox Code Playgroud)
如果要从中生成可执行文件,则需要编译生成的.ll文件(LLVM IR代码).
例如,您有"Hello World"应用程序
编译它(它将生成一个helloworld.ll文件)
Il2Bc.exe helloworld.cs /corelib:CoreLib.dll
Run Code Online (Sandbox Code Playgroud)为核心库生成LLVM IR文件(它将生成corelib.ll文件)
Il2Bc.exe CoreLib.dll
Run Code Online (Sandbox Code Playgroud)您需要生成一个EXE文件(它将生成一个.EXE文件):
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 .
Run Code Online (Sandbox Code Playgroud)答案取决于您的目标。为什么要将 C# 翻译成 LLVM?
VMKit 被设计为构建虚拟机实现的框架。我相信它曾经对 CLR 提供过一些支持,但这种支持后来停滞不前,转而支持其 JVM 实现。其目的是从头开始构建虚拟机。
Mono-llvm 是一个用 LLVM 后端替换 mono JIT 后端的项目。它的目标是提高 Mono 上 JIT 代码的性能。
如果你的目标是使用 Mono,具有更好的性能,mono-llvm 是一个不错的选择。
如果您想从头开始构建整个虚拟机,那么 VMKit 可能会起作用。
如果您只是想实现一个提前编译器来生成不依赖于 CLR 的可执行文件,则可以从以下位置下载 LLVM 核心库:
基本上,它将 CIL 转换为 LLVM IR 的文本表示,然后使用 LLVM API 将其编译为本机机器代码。
我不知道LLVM是否会为你生成目标文件。您可能必须自己生成它们,但这非常简单。它基本上只是将机器代码填充到数据结构中,构建字符串、节和符号表,然后将所有内容序列化到磁盘。
| 归档时间: |
|
| 查看次数: |
5242 次 |
| 最近记录: |