我想采用C ++ lambda函数的字符串表示形式:
string fun = "[](int x) { return x + 5;}";
string llvm_ir = clang.get_llvm_ir(fun); // does something like this exist?
并使用C ++中的Clang将其转换为LLVM IR。有没有办法直接使用Clang的内部API?
答案 0 :(得分:4)
据我所知,没有稳定的,官方支持的API来执行此操作。 Clang C API提供前端级别信息(源代码级别)。 Clang工具也没有提供此功能。
你确实有很好的选择。最简单的方法是将Clang前端作为子进程clang -cc1 -emit-llvm ...<other options>
调用。这将生成一个LLVM IR文件,然后您可以读取它。它实际上在编译器中很常见 - Clang驱动程序本身就是这样做的 - 它调用前端和一堆其他工具(如链接器),具体取决于具体的编译任务。
或者,如果您认为必须有一个编程API,您可以深入研究Clang前端的代码(上面提到的-cc1
调用)以了解它是如何完成它的,并收集位和代码片段。但是,要准备好编写大量的脚手架,因为这些API并非设计用于外部。
重申一下, 可以使用内部API,但遵循此路径并不容易或推荐。