1. 寫在前面
現(xiàn)在出去面試受神,啟動優(yōu)化是繞不開的抛猖,到底我們的 APP
該如何去進行優(yōu)化呢 ?在優(yōu)化之前我們必須要先了解 LLVM
鼻听,在上篇博客中已經介紹了LLVM
和 Clang
命令的使用财著。
本篇博客將手把手教大家税朴,自定義一個
Clang
插件庆尘。
2. LLVM下載
編寫Clang
插件之前,需要先下載LLVM
偷遗,Clang
是LLVM
的子項目醉拓,然后再進行LLVM
的編譯伟姐。
2.1 下載LLVM
有些人下載LLVM
完成之后,可能會遇到cmake
編譯報錯的情況亿卤,報錯信息如下:
cmake
編譯報錯是因為鏡像地址變了愤兵,由原來的git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm/llvm.git
變成了git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project.git
,通過在 GitHub
上面搜索 llvm
也可以發(fā)現(xiàn)確實是地址變了排吴。如下圖所示:
llvm GitHub
地址: https://github.com/llvm/llvm-project
由于受到我們國內網絡的限制秆乳,我們需要借助鏡像下載
LLVM
的源碼。
https://mirror.tuna.tsinghua.edu.cn/help/llvm-project.git/
- 下載
LLVM
2.1.1 完整版,包含子倉庫
使用如下命令下載LLVM
完整版
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project.git
2.1.2 不完整版屹堰,不包含子倉庫
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project/llvm.git
我這里是下載的完整版肛冶,不完整版的下載找不到對應的倉庫,但有的人可以下載双藕,目前我還找不到具體的原因淑趾。
2.2 下載Clang
??下載完整版不需要下面的這些步驟,這是針對不包含子倉庫的操作
- 在
LLVM
的tools
目錄下下載Clang
cd llvm/tools
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project/clang.git
- 在
LLVM
的projects
目錄下忧陪,還需要去下載compiler-rt
,libcxx
近范,libcxxabi
嘶摊。
cd ../projects
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project/compiler-rt.git
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project/libcxx.git
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project/libcxxabi.git
- 在
Clang
的tools
下安裝clang-tools-extra
工具
cd clang/tools
git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project/clang-tools-extra.git
3.LLVM編譯
由于最新的LLVM
只支持cmake
來編譯了,所以我們還需要安裝brew
和cmake
來支持我們的編譯工作评矩。
- 檢查是否安裝了
cmake
從圖中可以看出叶堆,我電腦上是沒有安裝
cmake
的,那么現(xiàn)在就去安裝一下斥杜,使用 brew install cmake
虱颗。
- 安裝
cmake
安裝
cmake
報錯了,對于上面圖中的問題蔗喂,我們應嘗試回收權限忘渔,解決方案如下:
- 首先打開終端,然后輸入:
sudo chown -R whoami:admin /usr/local/bin
- 接著系統(tǒng)會提醒你輸入密碼缰儿,輸入密碼回車之后接著輸入:
sudo chown -R whoami:admin /usr/local/share
回收權限之后畦粮,安裝
cmake
成功了,接下來就是去編譯 llvm
了乖阵。
3.1 不完整版編譯
mkdir llvm_build // 在llvm所在目錄新建文件夾
cd llvm_build // 進入llvm_build
cmake -G Xcode ../llvm // 編譯成Xcode項目
3.2 完整版編譯
完整版編譯使用如下命令:
cd llvm-project // 進入完整llvm文件夾
mkdir llvm_build // 新建文件llvm_build
cd llvm_build // 進入llvm_build
cmake -G <generator> [options] ../llvm // 編譯成Xcode項目宣赔,具體命令看下面
- LLVM GitHub 編譯配置
比較常見的構建系統(tǒng)生成器(generator
):
-
Ninja
:大多數(shù)LLVM開發(fā)人員都使用Ninja。 -
Unix Makefiles
:用于生成與make兼容的并行makefile瞪浸。 -
Visual Studio
:用于生成Visual Studio項目和解決方案儒将。 -
Xcode
:用于生成Xcode
項目。
這里generator
我們選擇Xcode
对蒲,-DLLVM_ENABLE_PROJECTS
就是需要編譯的子項目钩蚊,這里我們需要加上clang
,compiler-rt
齐蔽,libcxx
两疚,libcxxabi
,clang-tools-extra
含滴。
cmake -G Xcode -DLLVM_ENABLE_PROJECTS='libcxx;libcxxabi;clang;clang-tools-extra;compiler-rt' -DLLDB_USE_SYSTEM_DEBUGSERVER=ON -DLLDB_TEST_COMPILER=clang++ -DCMAKE_OSX_SYSROOT=$OSX_COMMANDLINE_SDKROOT ../llvm
我這里編譯時報錯的诱渤,因為我不完整版下載不了,完整版下載了又編譯出錯谈况,搞了一天了勺美,都不知道怎么弄递胧,聽網上說是要設置 默認的
shell
為 zsh
,命令如下:進入終端執(zhí)行
echo 'export OSX_COMMANDLINE_SDKROOT="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"' >> ~/.zshrc
然后再執(zhí)行:
source ~/.zshrc
但是我這樣操作是有問題的赡茸,如下:
按這種操作不起作用缎脾,我檢查了我的電腦默認的就是
/bin/zsh
反正折騰了一天也沒有找到方法來解決,有可能是
zsh
的配置有問題占卧,既然不完整的下載不了遗菠,完整的又編譯不了,那么我何不綜合一下华蜒,看看能否解決問題呢辙纬!于是我就嘗試的去做了如下操作。
因為我是下載的完整版的 LLVM
叭喜,里面已經包含了各種子倉庫了贺拣,如下圖:
上面??已經介紹過了不完整的配置過程,那么我就按照這個流程捂蕴,把完整版里面的子倉庫譬涡,拷貝到對應的目錄里面去。
- 把
Clang
拷貝到llvm/tools
目錄下 - 把
compiler-rt
啥辨,libcxx
涡匀,libcxxabi
,拷貝到LLVM
的projects
目錄下 - 把
clang-tools-extra
工具拷貝到Clang
的tools
里面
其實也就是相當于走了一遍不完整LLVM
的下載流程委可,只是不是去網絡下載了渊跋,只是我本地拷貝了需要的子倉庫到對應的目錄下面,那么現(xiàn)在就是萬事俱備只欠東風了着倾,下面??就是見證奇跡的時刻了拾酝。
在
llvm-project/llvm_build
目錄下敲入如下cmake
編譯命令:
cmake -G Xcode ../llvm
奇跡發(fā)生了,在進行編譯了卡者,是的 ! 你沒有看錯蒿囤,它沒有報錯了。
cmake
編譯命令一回車崇决,就開始編譯了材诽,這個過程半個小時起步
,看你的電腦性能了恒傻。這時候風扇慢慢的開始呼呼的響起來了脸侥,CPU
溫度直線上升,如下圖感知一下吧盈厘!
過了
半個多小時
睁枕,編譯完成了,當我想把編譯成功的界面截圖下來的時候。外遇。注簿。。意外發(fā)生了跳仿。诡渴。。菲语。當我沉浸在編譯成功的喜悅之時妄辩,電腦突然就黑屏了
,掛了山上,電腦掛了恩袱,就很突然,電腦直接關機
了胶哲。。潭辈。鸯屿。難受把敢,想哭寄摆,我下意識的用手去摸了一下電腦的散熱區(qū)域,好家伙修赞,我直呼好家伙吧裟铡!可以煎雞蛋了柏副,真 TM燙手肮窗睢!溫度太高了割择,電腦觸發(fā)了保護機制眷篇,直接就關機了。
過了幾分鐘荔泳,待電腦溫度降下來蕉饼,我重新開機了,打開了 LLVM
的編譯目錄llvm_build
玛歌,里面有編譯成功的 Xcode
工程了昧港,這表明是真的編譯成功了,這時候還是有一絲絲的得到安慰的??支子。如下圖所示:
3.3 LLVM的工程編譯
雙擊打開LLVM
編譯后的工程创肥,會彈出如下彈窗(第一次打開會有)
?? 項目
“LLVM”
包含大量target
,可能會導致自動創(chuàng)建大量scheme
。 如果您愿意瓤的,您可以改為僅手動創(chuàng)建您需要的方案休弃。
我們選擇第二個,手動去創(chuàng)建圈膏,就彈出如下界面
我們需要添加
clang
和 clangTooling
塔猾,可以通過輸入我們需要的 clang
和 clangTooling
直接下拉選擇。添加完了
clang
和 clangTooling
之后稽坤,需要在Xcode
的Scheme
里面分別去選擇clang
和 clangTooling
進行編譯丈甸,這個過程也是比較漫長的,至少得 1
個小時以上尿褪,你可以去干點別的事情來打發(fā)時間了睦擂。-
clangTooling
編譯
clangTooling
還是比較快的,我這花了差不多半個小時吧杖玲,內存還有 22G
左右顿仇,CPU 負載
比較高,溫度也比較高摆马,我這插上了外接的風扇來降溫了臼闻。
-
clang
編譯
clang
編譯的時間比較長,得一個多小時囤采,由于編譯之后的體積增大述呐,內存嚴重不足了,發(fā)出了警告??蕉毯。連微信也發(fā)出了內存警告乓搬。- 微信發(fā)出電腦空間不足的警告??
發(fā)出內存不足的警告之后,大概二十分鐘左右代虾,內存是真的不足了进肯,編譯報錯
(No space left on device
)設備內存不足了,設備上沒有剩余空間褐着,我趕緊把一些不需要的東西卸載掉坷澡,又騰出了五六個G 的空間,又開始編譯含蓉,由于之前編譯過了频敛,這次并沒有從零開始,而是很快就編譯完成了馅扣。
llvm
工程編譯完成之后的大小為 23.38G
斟赚,這是真大啊差油!不是一般的大稗志任洞!
4. 總結
-
LLVM
下載的地址變了,可以去GitHub
直接搜索找到最新的地址 -
LLVM
編譯注意事項??:- 電腦空間一定要留足夠发侵,保險起見留個
30G
- 編譯時插上外接風扇給電腦降溫交掏,這個很重要,不然溫度過高刃鳄,電腦會關機的盅弛。
- 電腦空間一定要留足夠发侵,保險起見留個
- 我的
Xcode
版本是Version 12.5
macOS Big Sur 11.4
- 以上內容僅供參考,每個人的電腦環(huán)境不一樣叔锐,可能有差別
- 以上內容只是我自己在編譯
LLVM
的過程中的記錄過程挪鹏,也許你們的過程會比較順利,不會出現(xiàn)我遇到的各種問題愉烙。
5. 寫在后面
未完待續(xù)讨盒。。步责。返顺。。關注我蔓肯,更多內容持續(xù)輸出创南!
下篇將開始
自定義Clang插件(下)——代碼的編寫
敬請期待!
?? 喜歡就點個贊吧????
?? 覺得有收獲的省核,可以來一波 收藏+關注,以免你下次找不到我????
??歡迎大家留言交流昆码,批評指正气忠,
轉發(fā)
請注明出處,謝謝支持赋咽!??