从Java生成LLVM代码

时间:2012-09-10 20:06:18

标签: java code-generation llvm

我想使用Java的LLVM代码生成框架。

即,我想要将Java代码编译成LLVM。我只想要一个用于代码生成的LLVM库,我可以从Java调用它。通常的LLVM库是C,所以我不能使用它。

有没有Java端口?如果不是,那么最简单的方法是什么呢?将API包装到JNI中?

3 个答案:

答案 0 :(得分:17)

快速搜索 llvm java api bindings ,结果显示了几个看起来很合适的项目:

所有这些库都使用JNI来访问C-API,因此无论如何你都拥有LLVM本身的DLL或SO文件。

答案 1 :(得分:7)

使用基于当前LLVM v3.6的更多最新信息回答问题。您的选择是:

  • RoboVM LLVM Java绑定RoboVM项目的一部分,支持当前的LLVM v3.6(GPL许可证)。
  • LLVM-J转移到Github并支持LLVM v3.0(MIT许可证)。
  • 支持LLVM v3.2(LGBL许可证)的JLLVM。

如果GPL许可对您没用,那么您一定要选择RoboVM。这是一个活跃的项目,对最新的LLVM版本提供强大的支持。 JLLVM和LLVM-J不再处于活动状态,因此您需要使用它们进行一些额外的工作。

答案 2 :(得分:5)

从Java访问C库的最简单方法是JNA。您创建了一个与您希望使用的C API部分同构的Java接口,然后JNA完成其余的工作。这意味着您只需在API更改时更新与您直接相关的方法。

https://github.com/twall/jna/blob/master/README.md

SWIG更难使用,但如果你发现自己需要提高性能,那么JNA可能是一个死胡同。 JLLVM是一个基于SWIG的工具,因此您可以考虑引用它或为自己的目的分配它。

不要使用基本的JNI - 在SWIG或JNA之间进行选择。

盲目地依赖历史最少的第三方包装是一个冒险的主张,但如果你故意将这样一个项目当作一个起点,你就不会出错。

使用这两种技术,你偶尔会不得不四处寻找枚举常数。如果从头文件中读取它们并不容易,那么您将需要编写一个简单的C程序来打印出您感兴趣的常量,这样您就可以手动将它们复制到Java接口。