- GraalVM for JDK 23 (最新)
- GraalVM for JDK 24 (早期アクセス)
- GraalVM for JDK 21
- GraalVM for JDK 17
- アーカイブ
- 開発ビルド
GraalVM LLVM ランタイム
GraalVM LLVMランタイムは、LLVMビットコードに変換できるプログラミング言語を実行できます。これには、C/C++、Fortranなどの言語が含まれます。
通常LLVMベースの言語に使用される静的コンパイルとは異なり、GraalVMのlli
ツールの実装は、まずLLVMビットコードを解釈し、次にGraalコンパイラを使用してプログラムのホット部分を動的にコンパイルします。これにより、GraalVMでサポートされている動的言語とのシームレスな相互運用が可能になります。
はじめに #
GraalVM LLVMランタイムは、スタンドアロン配布版として提供されています。Oracle GraalVMまたはGraalVM Community Editionに基づいたスタンドアロン版をダウンロードできます。
-
お使いのオペレーティングシステム用のLLVM 24.0スタンドアロン版をダウンロードしてください。
- ネイティブスタンドアロン
- JVMスタンドアロン
-
アーカイブの解凍
注:macOS Catalina以降を使用している場合は、quarantine属性を削除する必要がある場合があります。
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
これで、GraalVM LLVMツールチェーンのclang
を使用して、C/C++コードをLLVMビットコードにコンパイルできます。
LLVMビットコードの実行 #
GraalVM LLVMランタイムでLLVMベースの言語を実行するには、バイナリを埋め込みビットコードでコンパイルする必要があります。コンパイルガイドには、プログラムをLLVMビットコードにコンパイルする方法と、期待されるファイル形式に関する情報が記載されています。
LLVMビットコード形式のプログラムを実行する構文は次のとおりです。
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;
}
次に、hello.c
を埋め込みLLVMビットコードを含む実行ファイルhello
にコンパイルし、次のように実行します。
$LLVM_TOOLCHAIN/clang hello.c -o hello
lli hello
注:LLVMビットコードはプラットフォーム依存です。プログラムは適切なプラットフォーム用にビットコードにコンパイルする必要があります。