GraalVM LLVMランタイム
GraalVM LLVMランタイムは、LLVMビットコードに変換可能なプログラミング言語を実行できます。これには、C/C++、Fortranなどの言語が含まれます。
LLVMベースの言語で通常使用される静的コンパイルとは対照的に、GraalVMのlli
ツールの実装では、最初にLLVMビットコードを解釈し、次に、Graalコンパイラを使用して、プログラムのホットな部分を動的にコンパイルします。これにより、GraalVMでサポートされている動的言語とのシームレスな相互運用が可能になります。
LLVMランタイムのインストール
GraalVM 22.2以降、LLVMランタイムは別個のGraalVMコンポーネント内にパッケージ化されています。これはGraalVMアップデータを使用してインストールできます:
$JAVA_HOME/bin/gu install llvm
これにより、GraalVMのlli
の実装が$JAVA_HOME/bin
ディレクトリにインストールされます。LLVMランタイムをインストールすると、LLVMビットコード形式のプログラムをGraalVMで実行できます。
LLVMランタイムのインストールに加えて、次のLLVMツールチェーンを追加できます:
gu install llvm-toolchain
export LLVM_TOOLCHAIN=$(lli --print-toolchain-path)
これで、事前ビルドされたLLVMツールチェーンを介して、GraalVMに付属のclang
を使用してLLVMビットコードにC/C++コードをコンパイルできます。
GraalVMでのLLVMビットコードの実行
LLVMベースの言語をGraalVMで実行するには、ビットコードを埋め込んでバイナリをコンパイルする必要があります。コンパイル・ガイドでは、プログラムをLLVMビットコードにコンパイルする方法および想定されるファイル形式について説明しています。
LLVMビットコード形式のプログラムをGraalVMで実行する構文は、次のとおりです:
lli [LLI options] [GraalVM options] [polyglot options] <bitcode file> [program args]
ここで、<bitcode file>
は、LLVMビットコードが埋め込まれたコンパイル済プログラムです。オプションの詳細は、「LLIコマンドのオプション」を参照するか、lli --help
を使用して参照してください。
たとえば、次のCコードをhello.c
という名前のファイルに入れます:
#include <stdio.h>
int main() {
printf("Hello from GraalVM!\n");
return 0;
}
次に、LLVMビットコードが埋め込まれた実行可能ファイルhello
にhello.c
をコンパイルし、次のように実行します:
$LLVM_TOOLCHAIN/clang hello.c -o hello
lli hello
ノート: LLVMビットコードはプラットフォームに依存します。プログラムは適切なプラットフォーム用のビットコードにコンパイルする必要があります。