从Java生成LLVM代码

gex*_*ide 19 java code-generation llvm

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

也就是说,我希望Java代码编译成LLVM.我只想要一个用于代码生成的LLVM库,我可以从Java调用它.通常的LLVM库是C,所以我不能使用它.

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

nd.*_*nd. 18

快速搜索llvm java api绑定发现了几个看起来非常合适的项目:

所有这些库都使用JNI来访问C-API,因此在任何情况下都有LLVM本身的DLL或SO文件.


Cod*_*oka 7

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

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

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


Ada*_*sta 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接口.