GraalVM LLVM ランタイム

GraalVM LLVMランタイムは、LLVMビットコードに変換できるプログラミング言語を実行できます。これには、C/C++、Fortranなどの言語が含まれます。

通常LLVMベースの言語に使用される静的コンパイルとは異なり、GraalVMのlliツールの実装は、まずLLVMビットコードを解釈し、次にGraalコンパイラを使用してプログラムのホット部分を動的にコンパイルします。これにより、GraalVMでサポートされている動的言語とのシームレスな相互運用が可能になります。

はじめに #

GraalVM LLVMランタイムは、スタンドアロン配布版として提供されています。Oracle GraalVMまたはGraalVM Community Editionに基づいたスタンドアロン版をダウンロードできます。

  1. お使いのオペレーティングシステム用のLLVM 24.0スタンドアロン版をダウンロードしてください。

  2. アーカイブの解凍

    注:macOS Catalina以降を使用している場合は、quarantine属性を削除する必要がある場合があります。

     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
    

これで、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ビットコードはプラットフォーム依存です。プログラムは適切なプラットフォーム用にビットコードにコンパイルする必要があります。

さらに読む #

お問い合わせ