6

我有一个能够生成我想在即时编译上下文中使用的 C 代码的软件。据我了解,LLVM/Clang 是要走的路,为了项目的可维护性,我想使用 llvm 和 Clang (libclang) 的 C API。

我开始使用创建 libclang 上下文clang_createIndex和使用翻译单元createTranslationUnitFromSourceFile(如果能够避免通过文件系统并将源代码作为字符串传递,那就太好了)。但我几乎被困在那里。如何从 libclang 翻译单元转到 JIT 似乎需要的 LLVM“执行引擎”?或者这甚至不可能使用 C API?

4

1 回答 1

-1

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

有关于如何利用 clang/llvm 工具编译 C++ 代码并发出 LLVM-IR、将 LLVM-IR 编译为 LLVM-Bitcode 以及执行该 LLVM-bitcode 的教程。学习在我们的应用程序中加入这个功能所需要的只是调查这些工具的执行路径,找到完成我们想要的方法的序列。

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

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

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

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

于 2016-09-01T21:53:21.577 回答