我想编写一个 C++ 函数,它接受一个llvm::Module
已经链接的 ,并将其输出到一个可执行文件。它应该使用 llvm/clang API,而不是分叉一个进程并调用命令行 clang。
查看 llvm/clang 源代码后,我发现最接近的是将 a 输出Module
到 .o 文件。例如,llc 工具 (tools/llc/llc.cpp) 通过调用TargetMachine::addPassesToEmitFile(...)
.
另一种方法是将Module
.bc 文件写入,然后创建一个CompilerInstance
并调用ExecuteCompilerInvocation
(如在 tools/clang/tools/driver/cc1_main.cpp 中)。但是还有文件 I/O 的开销。
那么,我是在要求一些可能的东西,还是我必须求助于替代方案?
编辑:(当然这是可能的。它发生在clang源代码的某个地方,我只是找不到它。)