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に基づいてスタンドアロンをダウンロードできます。

  1. ご使用のオペレーティング・システム用のLLVM 23.1スタンドアロンをダウンロードします:

  2. アーカイブを解凍します:

    ノート: macOS Catalina以降を使用している場合は、隔離属性を削除する必要があります:

     sudo xattr -r -d com.apple.quarantine <archive>.tar.gz
    

    抽出:

     tar -xzf <archive>.tar.gz
    
  3. スタンドアロンには、ネイティブ・ランチャに加えてJVMが付属しています。バージョンをチェックして、GraalVM LLVMランタイムがアクティブであることを確認します。

     ./path/to/bin/lli --version
    

これで、LLVMビットコード形式のプログラムを実行できます。

LLVMツールチェーン

さらに、事前構築されたLLVMツールチェーンは、GraalVM LLVMランタイムにバンドルされています。

  1. lli--print-toolchain-path引数を使用してツールチェーンの場所を取得します:
     ./path/to/bin/lli --print-toolchain-path
    
  2. LLVM_TOOLCHAIN環境変数を設定します。
     export LLVM_TOOLCHAIN=$(./path/to/bin/lli --print-toolchain-path)
    
  3. 使用可能なツールのリストは、ツールチェーン・パスの内容を参照してください。
     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ビットコードが埋め込まれた実行可能ファイルhellohello.cをコンパイルし、次のように実行します:

$LLVM_TOOLCHAIN/clang hello.c -o hello
lli hello

ノート: LLVMビットコードはプラットフォームに依存します。プログラムは適切なプラットフォーム用のビットコードにコンパイルする必要があります。

その他の情報