基于LLVM&clang的cpp工具開發(fā)-1 環(huán)境安裝

本系列文章的運(yùn)行環(huán)境基于CentOS 6.3 x86_64葫督,gcc 5.2.0,cmake version 3.15.0匣椰, glibc 2.23.2裆熙,后文不再贅述。

LLVM&clang簡介

LLVM是一組編譯工具鏈集合禽笑,值得注意的是入录,LLVM并不是誰的縮寫,其中的VM與virtual machine也沒有關(guān)系佳镜。如官網(wǎng)所述僚稿,LLVM就是這個(gè)項(xiàng)目的名稱,沒有其他含義蟀伸。
clang(讀音/klaNG/蚀同,音同可浪)是LLVM的一個(gè)子項(xiàng)目(sub-project)。 它是一個(gè)C系語言編譯前端望蜡,同時(shí)clang還提供了以下三種面向開發(fā)者的擴(kuò)展方式:

  • C Library libclang 唤崭,libclang是一套穩(wěn)定的(stable)但對AST控制不夠全面的C Libray
  • C++ Library libtooling,libtooling是一套對AST控制全面但卻不夠穩(wěn)定的C++ Library脖律,不穩(wěn)定指的是無前后兼容保證谢肾,接口經(jīng)常變化(包括函數(shù)名稱、函數(shù)參數(shù)列表)
  • plugin小泉, C++接口芦疏,主要針對單次編譯的單個(gè)文件冕杠,比如可用于實(shí)現(xiàn)一個(gè)自定義風(fēng)格的代碼檢查工具

不同的業(yè)務(wù)目標(biāo),可以在以上三種做出選擇酸茴,本系列最終目的是完成中大型項(xiàng)目的代碼索引分预,所以選擇基于libtooling進(jìn)行開發(fā)。

安裝

源碼下載

由于libtooling的不穩(wěn)定因素薪捍,我們決定采用最新的LLVM8.0-release版本笼痹。
分別下載LLVM源碼clang源碼酪穿、clang-tools-extra源碼并解壓凳干。由于LLVM各個(gè)工程共享了很多CMake配置,因此需要調(diào)整他們的位置被济,
假設(shè)LLVM救赐、clang、clang-tools-extra源碼解壓后被放置在 LLVM_SRC_ROOT, CLANG_SRC_ROOT,CLANG_TOOLS_EXTRA_ROOT只磷,那么需要進(jìn)行如下的目錄調(diào)整

#set these 3 env
export LLVM_SRC_ROOT=/path/to/your/llvm
export CLANG_SRC_ROOT=/path/to/your/cfe #clang-src
export CLANG_TOOLS_EXTRA_ROOT=/path/to/your/clang-tools-extra

#will use 3 env defined above
mv ${CLANG_SRC_ROOT} ${LLVM_SRC_ROOT}/tools/clang
mv ${CLANG_TOOLS_EXTRA_ROOT} ${LLVM_SRC_ROOT}/tools/clang/tools/extra

使用ln -s TARGET LINK的方式建立兩個(gè)軟鏈也可達(dá)到類似的收益经磅。

除了上面的方式,官方提供了cmake 宏 LLVM_ENABLE_PROJECTS钮追,可以不將clang等源碼目錄移動到llvm下:

  1. 將clang解壓至 ${LLVM_SRC_ROOT}/..预厌,即llvm-src的平級目錄, 命名為clang
  2. 將extra-tool也解壓到llvm平級目錄,命名為clang-tools-extra
  3. 在${LLVM_SRC_ROOT}/build下元媚,cmake -DLLVM_ENABLE_PROJECTS=clang -G "Unix Makefiles" .., 這時(shí)配乓, LLVM_TOOL_CLANG_TOOLS_EXTRA_BUILD 會被設(shè)置成ON,繼續(xù)編譯: make clang && make clangd惠毁。

編譯安裝

先決條件

最新的LLVM需要CMake. Version 3.4.3,下文假設(shè)合適版本的cmake已經(jīng)正確安裝崎页,此外編譯LLVM鞠绰,最好磁盤剩余80G以上空間。

編譯前空間:

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 5.0G 14G 28% /
tmpfs 7.8G 11M 7.8G 1% /dev/shm
/dev/vdb 233G 8.6G 212G 4% /home

編譯后剩余空間:

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 5.0G 14G 28% /
tmpfs 7.8G 11M 7.8G 1% /dev/shm
/dev/vdb 233G 82G 139G 38% /home

粗略的空間估算, 由于進(jìn)行的是LLVM全系列編譯飒焦,硬盤消耗約80G, 如沒有如此多的空間蜈膨,可根據(jù)需要只編譯某一部分,比如 在cmake build時(shí)牺荠,僅執(zhí)行make clang翁巍。

假設(shè)CMake和CXX(比如g++)是工作的,直接按照官方文檔編譯即可, 編譯比較耗時(shí)休雌,為了加速灶壶,可以設(shè)置-j并發(fā)參數(shù),參考如下build命令的注釋內(nèi)容,即使加速杈曲,也需要小時(shí)級別耗時(shí)(視機(jī)器配置和負(fù)荷有所不同)驰凛。

cd ${LLVM_SRC_ROOT}
mkdir -p build
cd build
cmake ${LLVM_SRC_ROOT}
CPU_NUM=`getconf _NPROCESSORS_ONLN`
cmake --build . # to speed up ,  -j <num> is recommended, say : cmake --build . -j  ${CPU_NUM} || cmake --build .
#if compile successfully, install
cmake -DCMAKE_INSTALL_PREFIX=/path/where/llvm/installed  -P cmake_install.cmake

如以上均正確返回胸懈,再double check一下,環(huán)境變量等是否正確

$ clang++ --version
clang version 8.0.0 (tags/RELEASE_800/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/M23/local/llvm/bin

檢查一下LLVM的某項(xiàng)配置:

$ llvm-config --cxxflags
-I/home/M23/local/llvm/include -std=c++11 -fno-exceptions -fno-rtti -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS

在上面的步驟中恰响,我們還下載了clang-tools-extra趣钱, 如果需要編譯clangd等extra-tool, 則需要在cmake調(diào)用中增加 -DLLVM_TOOL_CLANG_TOOLS_EXTRA_BUILD=ON, 然后 make clangd即可胚宦。

至此首有,我們成功安裝了clang開發(fā)所需的基礎(chǔ)環(huán)境。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枢劝,一起剝皮案震驚了整個(gè)濱河市井联,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呈野,老刑警劉巖低矮,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異被冒,居然都是意外死亡军掂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門昨悼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝗锥,“玉大人,你說我怎么就攤上這事率触≈找椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵葱蝗,是天一觀的道長穴张。 經(jīng)常有香客問我,道長两曼,這世上最難降的妖魔是什么皂甘? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮悼凑,結(jié)果婚禮上偿枕,老公的妹妹穿的比我還像新娘。我一直安慰自己户辫,他們只是感情好渐夸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渔欢,像睡著了一般墓塌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天桃纯,我揣著相機(jī)與錄音酷誓,去河邊找鬼。 笑死态坦,一個(gè)胖子當(dāng)著我的面吹牛盐数,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伞梯,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玫氢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谜诫?” 一聲冷哼從身側(cè)響起漾峡,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喻旷,沒想到半個(gè)月后生逸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡且预,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年槽袄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锋谐。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡遍尺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涮拗,到底是詐尸還是另有隱情乾戏,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布三热,位于F島的核電站鼓择,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏就漾。R本人自食惡果不足惜惯退,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望从藤。 院中可真熱鬧,春花似錦锁蠕、人聲如沸夷野。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悯搔。三九已至,卻和暖如春舌仍,著一層夾襖步出監(jiān)牢的瞬間妒貌,已是汗流浹背通危。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灌曙,地道東北人菊碟。 一個(gè)月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像在刺,于是被迫代替她去往敵國和親逆害。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容