LLVM 筆記
如果想要使用 LLVM 來當作其中的 library 的話,其實沒有什麼相當統一的文件,最快的方式就是看別人的 code 及 mailing list,所以我想這會是非常困難的做戰方式 XD
這次有兩件事要筆記,第一件事,盡量不要嘗試自己編譯 llvm-gcc ,這實在是不好編,我編成功沒幾次 XD,建議直接使用 binary 檔,人生會快樂些。
第二件事,如果想要使用 LLVM 裡面的 header file 的話,請使用 llvm-config,以下面的 code 來說
#include "llvm/LLVMContext.h" #include "llvm/LLVMContext.h" #include "llvm/Module.h" #include "llvm/Bitcode/ReaderWriter.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/raw_ostream.h" #include <string> using namespace llvm; int main(int argc, const char *argv[]){ std::string filename = (argc>2)? argv[1]:"test.bc"; std::string error; LLVMContext Context; MemoryBuffer *buffer = MemoryBuffer::getFile(filename); Module *module = ParseBitcodeFile(buffer, Context); outs() << *module << "\n"; return 0; }
llvm-config 雖然這只是讀一個 bc 檔之後然後輸出,但是中間會用到 llvm-objects 檔時,我們可以使用 llvm-config 來處理,而 llvm-config 的功能就是幫你生成要連結的函式庫及生成餵給 g++ 東西,如果想要知道更多細節,記得 man llvm-cofig,以這個檔為例,我們可以下這樣子的 command 去 compile
g++ -c -g -O2 -Wall main.cpp -o main.o `llvm-config --cxxflags --ldflags --libs nativecodegen bitreader bitwriter` g++ -g -O2 -Wall main.o -o llvm_test `llvm-config --cxxflags --ldflags --libs nativecodegen bitreader bitwriter`
至於用到什麼 Function/ Class 就該 include 那個檔案,目前我是用暴力法在 llvm doxygen 裡面尋找了 XD。
至於 llvm-config 有多少 lib 可以寫,可以使用 llvm-config --components 來看,得到的結果會相當的壯觀 XDXD
$ llvm-config --components all alpha ...
---
是該會用 cmake 了 XD