我正在使用Mono LLVM(http://www.mono-project.com/Mono:Runtime:Documentation:LLVM),看起来他们在这里使用LLVM作为JIT,而不是真正的代码生成器.但根据文档,他们在生成本机代码之前会通过LLVM-IR:
所以,我想知道是否有任何方法可以捕获第3阶段并使用IR来提供我的LLVM后端.这样我就可以免费获得C#到LLVM-IR前端.
谢谢你的帮助!
Mono的LLVM支持的工作方式是尝试加载libmono-llvm.so从相应的$libdir,例如在OSX/usr/bin/mono将加载/Library/Frameworks/Mono.framework/Libraries/libmono-llvm.dylib。查看mono/mini/mini-llvm.h 中的 LLVM 加载代码,特别是mono_llvm_load()和try_llvm_load()。
因此,看起来如果您将 LLVM 后端命名为mono-llvm,那么在您以mono --llvm. 也就是说,mono_llvm_load()似乎需要从mono-llvm库中进行特定的导出,例如mono_llvm_initand mono_llvm_cleanup,因此我确定您的 LLVM 后端需要一些额外的工作才能允许 Mono 使用它,而且我不确定在哪里可以找到这个输出(除了grep在 Mono 的源代码中对“LLVM”进行 ping 操作……)。
这也意味着 LLVM 后端可能无法从预构建的 Mono 中重用;也就是说,您可能需要构建自己的 mono 才能使用 LLVM 后端,因为预构建的 mono 将提供一个mono-llvm可能无法插入的后端。(我不知道 LLVM 后端的可插拔性如何。)