20

Java から LLVM コード生成フレームワークを使用したいと考えています。

つまり、Java コードを LLVM にコンパイルしたくありません。Java から呼び出すことができるコード生成用の LLVM ライブラリが必要です。通常の LLVM ライブラリは C であるため、使用できません。

Java ポートはありますか? いいえの場合、とにかくそれを行う最も簡単な方法は何ですか? API を JNI にラップしますか?

4

3 に答える 3

19

llvm Java api bindingsを簡単に検索すると、適切と思われるいくつかのプロジェクトが見つかりました。

これらのライブラリはすべて JNI を使用して C-API にアクセスするため、いずれにしても LLVM 自体の DLL ファイルまたは SO ファイルがあります。

于 2012-09-10T20:41:56.703 に答える
8

現在の LLVM v3.6 に基づく最新情報で質問に答えるには。オプションは次のとおりです。

  • RoboVM LLVM Java バインディングは、現在の LLVM v3.6 (GPL ライセンス) をサポートする RoboVM プロジェクトの一部です。
  • LLVM-Jが Github に移行し、LLVM v3.0 (MIT License) に対応しました。
  • LLVM v3.2 (LGBL ライセンス) をサポートする JLLVM。

GPL ライセンスが問題ない場合は、間違いなく RoboVM を使用する必要があります。これは、最新の LLVM バージョンを強力にサポートするアクティブなプロジェクトです。JLLVM と LLVM-J はアクティブではなくなったため、それらを使用して追加の作業を行う必要があります。

于 2015-04-17T10:04:20.057 に答える
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 のいずれかを選択してください。

歴史がほとんどないサードパーティのラッパーにやみくもに依存するのは危険な提案ですが、そのようなプロジェクトを出発点として意図的に扱うなら、間違いはありません。

どちらのテクノロジでも、ときどき enum 定数を探し回る必要があります。ヘッダー ファイルから簡単に読み取ることができない場合は、必要な定数を出力する単純な C プログラムを作成して、Java インターフェースに手動でコピーできるようにすることをお勧めします。

于 2013-06-01T22:02:09.093 に答える