GraalVM LLVM 运行时

GraalVM LLVM 运行时可以执行可以转换为 LLVM 位码的编程语言。这包括 C/C++、Fortran 等语言。

与通常用于基于 LLVM 的语言的静态编译不同,GraalVM 对 lli 工具的实现首先解释 LLVM 位码,然后使用 Graal 编译器动态编译程序的热点部分。这允许与 GraalVM 支持的动态语言无缝互操作。

入门 #

GraalVM LLVM 运行时可以作为独立分发版使用。您可以下载基于 Oracle GraalVM 或 GraalVM 社区版的独立版本。

  1. 下载适用于您操作系统的 LLVM 24.0 独立版本

  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
    

现在您可以使用来自 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 位码是平台相关的。程序必须编译为适合相应平台的位码。

进一步阅读 #

联系我们