2014-09-05 137 views
3

我想利用一個C++ lambda函數的字符串表示這樣的:C++字符串LLVM IR

string fun = "[](int x) { return x + 5;}"; 
string llvm_ir = clang.get_llvm_ir(fun); // does something like this exist? 

和它使用鏘從C轉換爲LLVM IR ++。有沒有辦法直接使用Clang的內部API來做到這一點?

回答

4

據我所知,沒有穩定的,官方支持的API來執行此操作。 Clang C API提供前端級別信息(源代碼級別)。 Clang工具也沒有提供這一點。

儘管你有很好的選擇。最簡單的方法就是將Clang前端作爲子進程clang -cc1 -emit-llvm ...<other options>進行調用。這將產生一個LLVM IR文件,然後您可以閱讀。在編譯器中這實際上是相當普遍的做法 - Clang驅動程序本身就是這樣做的 - 它調用前端和一些其他工具(如鏈接器),具體取決於具體的編譯任務。另外,如果你覺得你必須有一個編程API,你可以挖掘Clang前端的代碼(上面提到的-cc1調用),看看它是如何實現它,並收集零碎的東西碼。儘管如此,準備編寫大量的腳手架,因爲這些API並非旨在用於外部。

要重申,它可能使用內部API,但是在此路徑之後沒有簡單或推薦的方法。