GraalVM LLVMランタイム
GraalVM LLVMランタイムは、LLVMビットコードに変換可能なプログラミング言語を実行できます。これには、C/C++、Fortranなどの言語が含まれます。
LLVMベースの言語で通常使用される静的コンパイルとは対照的に、GraalVMのlli
ツールの実装では、最初にLLVMビットコードを解釈し、次に、Graalコンパイラを使用して、プログラムのホットな部分を動的にコンパイルします。これにより、GraalVMでサポートされている動的言語とのシームレスな相互運用が可能になります。
スタート・ガイド
GraalVM for JDK 21では、GraalVM LLVMランタイムをスタンドアロン・ディストリビューションとして使用できます。Oracle GraalVMまたはGraalVM Community Editionに基づいてスタンドアロンをダウンロードできます。
-
ご使用のオペレーティング・システム用のLLVM 23.1スタンドアロンをダウンロードします:
- ネイティブ・スタンドアロン
- JVMスタンドアロン
-
アーカイブを解凍します:
ノート: macOS Catalina以降を使用している場合は、隔離属性を削除する必要があります:
sudo xattr -r -d com.apple.quarantine <archive>.tar.gz
抽出:
tar -xzf <archive>.tar.gz
-
スタンドアロンには、ネイティブ・ランチャに加えてJVMが付属しています。バージョンをチェックして、GraalVM LLVMランタイムがアクティブであることを確認します。
./path/to/bin/lli --version
これで、LLVMビットコード形式のプログラムを実行できます。
LLVMツールチェーン
さらに、事前構築されたLLVMツールチェーンは、GraalVM LLVMランタイムにバンドルされています。
lli
の--print-toolchain-path
引数を使用してツールチェーンの場所を取得します:./path/to/bin/lli --print-toolchain-path
LLVM_TOOLCHAIN
環境変数を設定します。export LLVM_TOOLCHAIN=$(./path/to/bin/lli --print-toolchain-path)
- 使用可能なツールのリストは、ツールチェーン・パスの内容を参照してください。
ls $LLVM_TOOLCHAIN
これで、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ビットコードはプラットフォームに依存します。プログラムは適切なプラットフォーム用のビットコードにコンパイルする必要があります。