CCACHE

1. android自帶的ccache版本號(2.4版本號)過低,是無法支持以上的功能的,須要使用新版ccache。
2. 最新的ccache請到http://ccache.samba.org/download.html下載
3. 下載解壓之後,在linux底下進入ccache文件夾,執行:
  ./configure
  ./make
  ./strip --strip-all ccache
4. 之後就能夠在ccache文件夾下看到ccache文件,拿這個文件替換掉codebase裏的alps/prebuilts/misc/linux-x86/ccache/ccache文件。
5. 請反覆運行第4步將全部codebase的ccache替換掉(保證全部使用ccache緩存的ccache都是最新版本號,由於不同版本號的ccache生成的緩存無法共享!)
6. 全部須要共享的用戶請加入下面環境變量:
  export CCACHE_DIR=<ccache緩存路徑>
  export CACHE_UMASK=002
  unset CCACHE_HARDLINK
  能夠將以上加入到$HOME/.bashrc,保證打開的終端都已經載入以上的環境變量。當中<ccache緩存路徑>請替換爲指定的絕對路徑(必須是須要共享的用戶都能讀寫的)。比方:/proj/.ccache
  注意:因爲多人同一時候寫ccache緩存可能引起IO帶寬不夠反而減少效率,強烈建議server編譯能夠按第6步配置,可是其它共享用戶最好在第6步的基礎上添加export CCACHE_READONLY=1僅僅僅讀緩存內容。
7. 設置好第6步後,又一次登入終端使環境變量生效,然後創建<ccache緩存路徑>,設置<ccache緩存路徑>的共享權限,在終端輸入:find $CCACHE_DIR -type d | xargs chmod g+s
8. 完畢前面的步驟後,就能夠開始共享使用了,注意ccache空間要足夠大,否則反而拉長編譯時間。假設遇到問題能夠參考ccache的使用說明:http://ccache.samba.org/manual.html
 
 
 

ccache(“compiler cache”的縮寫)是一個編譯器緩存,該工具會高速緩存編譯生成的信息,並在編譯的特定部分使用高速緩存的信息, 比如頭文件,這樣就節省了通常使用cpp解析這些信息所需要的時間。如果某頭文件中包含對其他頭文件的引用,ccache會用那個文件的 cpp-parsed版本來取代include聲明。
ccache只是將最終的文本拷貝到文件中,使得它可以立即被編譯,而不是真正去讀取、理解並解釋其內容。
ccache是以空間換取速度,ccache非常適合經常make clean(或刪除out目錄)後重新編譯的情況。
ccache是經過嚴格編寫的。能確保至少在編譯結果的正確性上和直接使用make所得到的結果完全一致。甚至不同工程使用的ccache也能保證其正確性。

配置方法如下:
1、 安裝ccache

sudo apt-get install ccache
1
2、在~/.bashrc中添加(或者/etc/profile文件中):

#ccache
export USE_CCACHE=1
export CCACHE_SLOPPINESS=file_macro,include_file_mtime,time_macros
export CCACHE_UMASK=002
1
2
3
4
然後執行以下命令使之在新的終端裏生效

source .bashrc
1
默認情況下cache(緩存)會保存在~/.ccache目錄下,如果主目錄位於NFS或其他非本地文件系統上, 設置cache目錄位置:

//home/XXXXXX/.ccache   XXXXXX是你的用戶名
export CCACHE_DIR=<path-to-your-cache-directory>
1
2
注:配置.bashrc後注意source改文件,否則cache(緩存)會保存在~/.ccache目錄下,而不是你設置的目錄。

3、查看ccache版本信息

ccache --version
1
ccache版本對比工程目錄 alps/prebuilts/misc/linux-x86/ccache下的ccache文件是否是同一個版本,需要使用android源碼prebuilts目錄下面的ccache工具初始化該文件夾,
推薦的cache目錄大小爲50-100GB,在命令行執行以下命令:
若不是同一版本

/prebuilts/misc/linux-x86/ccache/   ./ccache -M 50G
1
若是同一版本

任意路徑下: ccache -M 100G   //設置ccache大小爲100G
1
ccache的大小是一個動態的值,每次改變.ccache文件的位置,max cache size都會被初始化

該設置會保存到CCACHE_DIR中,且該命令是長效的,不會因系統重啓而失效。使用ccache第一次編譯後能夠明顯提高make clean以後再次的編譯速度。

4、查看ccahe使用情況

$ watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s 
1
以上命令需要在你所下載的代碼的根目錄下面執行

備註:使用ccache之後,第一次編譯會時間久一點,之後每次編譯速度都會有提升
5、 創建一個工程目錄
這個目錄專門用來存放工程文件,若已有無需創建,例如~/workspace

6、 把腳本放在該目錄下

ccache腳本下載路徑

修改權限

chmod 777 mk.perl
1
7、開始編譯
每次編譯之前都在工程目錄~/workspace下打開終端
執行./mk.perl +project文件,文件路徑要求是源碼根目錄(如MTK的alps等)上一級

執行成功後會有success提示
8、第一次執行腳本會產生創建一個project_common文件,及一個隱藏文件.project.log,注意不能刪除這兩個文件,否則導致mk.perl失效
9、進入project_common 開始編譯
10、若要還原工程代碼,執行

./mk.perl
1
若要編譯其他工程,步驟同上7即可,新的工程會加入到project_common文件中,舊的文件會回到原來的目錄

11、相關問題解答

如何知道自己多個工程在公用一個ccache
通過命令
watch -n1 -d ccache -s
1
如果每次編譯都有ccache hit (direct) 增加就說明在公用

若把工程放在不同磁盤是否可以設置多個工程路徑
可以,只需要把mk.perl腳本放到新的工程路徑下
但不建議設置過多工程路徑,會導致ccache過於臃腫
ccache加速效果好嗎
最終結果由硬件性能和軟件性能決定
建議使用告訴固態硬盤,並將ccache文件放在高速固態中
ccache如何清除
使用ccache -C 清除ccache
使用ccache -Z 清除計數
————————————————
版權聲明:本文爲CSDN博主「flyfly_程序猴」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_34787560/article/details/89467776

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章