使用libclang和LLVM C进行即时编译

Joe*_*oel 5 jit llvm llvm-clang llvm-c++-api libclang

我有一个能够生成C语言代码的软件,希望在即时编译环境中使用。据我了解,LLVM / Clang是可行的方法,为了项目的可维护性,我想使用llvm和Clang的C API(libclang)。

我开始使用创建一个libclang上下文,clang_createIndex并使用一个翻译单元创建一个createTranslationUnitFromSourceFile(很高兴能够避免通过文件系统,而是将源代码作为字符串传递)。但是我几乎被困在那里。如何从libclang转换单元转到LLVM“执行引擎”,这似乎是JIT所需要的?还是使用C API甚至无法做到这一点?

Ste*_*unk 0

学习如何使用代码体的最佳方法是研究所提供的示例。

有一些教程介绍如何利用 clang/llvm 工具编译 C++ 代码并发出 LLVM-IR、将 LLVM-IR 编译为 LLVM 位代码以及执行该 LLVM 位代码。要学习将此功能合并到我们的应用程序中,所需要做的就是研究这些工具的执行路径,找到实现我们想要的功能的方法序列。

下面是一个使用示例工具将 cpp 文件编译为 llvm-bitcode 并执行它的示例。

clang++ -c -O3 -emit-llvm main.cpp -o main.bc
lli main.bc

这是一个很好的开始,我们可以查看工具背后的源代码,并研究参数概述的执行路径。由于这些工具只是公开 llvm/clang 库中可用的底层功能的接口,我们可以将其添加到项目中,因此浅层地遵循执行路径将为我们提供一系列库可用方法,我们可以在应用程序中调用这些方法来完成相同的任务结果。

一旦简单地建立了库方法的序列,您就可以深入研究将各个库方法分解为其底层功能,并通过相对较小的一组修改来梳理出我们想要的确切行为,而不是尝试从接地。