Android编译使用ccache减少编译时间

第1步:安装ccache工具

在Android源代码目录prebuilts/misc/linux-x86/ccache下面有ccache工具的源代码包拷出来(建议根目录),把它解压,然后参考里面的INSTALL.txt文档。操作如下命令(进入到解压的文件里面执行):

./configure

make

sudo  make  install

第2步:配置ccache环境

在~/.bashrc中添加(或者/etc/profile文件中):

export USE_CCACHE=1

export CCACHE_DIR=//.ccache 

默认情况下cache(缓存)会保存在~/.ccache目录下,如果主目录位于NFS或其他非本地文件系统上, 设置cache目录位置:

export CCACHE_DIR=

注:配置.bashrc后注意source改文件,否则cache(缓存)会保存在~/.ccache目录下,而不是你设置的目录。

第3步: 使用Android源码prebuilts目录下面的ccache工具初始化该文件夹

推荐的cache目录大小为50-100GB,在命令行执行以下命令:

prebuilts/misc/linux-x86/ccache/ccache -M 50G

注:以上命令需要在你所下载的代码的根目录下面执行

该设置会保存到CCACHE_DIR中,且该命令是长效的,不会因系统重启而失效。使用ccache第一次编译后能够明显提高make clean以后再次的编译速度。使用ccache之后,第一次编译会时间久一点,之后每次编译速度都会有提升,降低所有使用gcc的编译时间,大约25%~30%。

第4步:你可以查看ccahe使用情况,看看上面的设置是否有效

ccache  -s

注:可以通过ccache -s查看cache信息,如果满了可以用ccache -C清除所有。在满了状态下编译新codebase,将会旧的那个清除,这会降低效率,所以cache一定要设置正确!

第5步:开启kernel ccache

(1). 以上ccache只对编译android有效,kernel部分需要额外设置才行

(2). 找到alps/kernel/Makefile文件中的

AS      = $(CROSS_COMPILE)as

LD      = $(CROSS_COMPILE)ld

CC      = $(CROSS_COMPILE)gcc

CPP    = $(CC) -E

之后添加如下代码:

ifneq ($(USE_CCACHE),)

export CCACHE_COMPILERCHECK := content

export CCACHE_SLOPPINESS := time_macros,include_file_mtime,file_macro

export CCACHE_BASEDIR := /

ccache := $(strip $(wildcard $(PWD)/../prebuilts/misc/linux-x86/ccache/ccache))

ifdef ccache

ifneq ($(ccache),$(firstword $(CC)))

CC := $(ccache) $(CC)

endif

ccache =

endif

endif

(3). 这样在编译kernel时也可以享受到ccache带来编译时间的缩短。

以上方法优化后大约可降低50%的编译时间,也就是说优化前需要1小时编译时间,优化后半小时就完成了。

第6步: 共享ccache的缓存 (不共享的话忽略此步)

所有需要共享的用户请添加以下环境变量:

export CCACHE_DIR=

exportCACHE_UMASK=002

unsetCCACHE_HARDLINK

可以将以上添加到$HOME/.bashrc,保证打开的终端都已经加载以上的环境变量。其中< ccache缓存路径 >请替换为指定的绝对路径(必须是需要共享的用户都能读写的)。比如:/proj/.ccache

注意:由于多人同时写ccache缓存可能引起IO带宽不够反而降低效率,强烈建议服务器编译可以此配置,但是其他共享用户最好增加下面配置, 仅只读缓存内容。

export CCACHE_READONLY=1

设置好环境变量后,重新登入终端使环境变量生效,然后创建< ccache缓存路径 >,设置< ccache缓存路径 >的共享权限,在终端输入:

find $CCACHE_DIR -type d | xargs chmod g+s

完成前面的步骤后,就可以开始共享使用了,注意ccache空间要足够大,否则反而拉长编译时间。

如果遇到问题可以参考ccache的使用说明:http://ccache.samba.org/manual.html

你可能感兴趣的:(Android编译使用ccache减少编译时间)