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

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