美文网首页
Android编译使用ccache减少编译时间

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

作者: 枫叶问路 | 来源:发表于2017-05-02 16:32 被阅读830次

    第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=/<path_of_your_choice>/.ccache 

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

    export CCACHE_DIR=<path-to-your-cache-directory>

    注:配置.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=<ccache缓存路径>

    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减少编译时间

          本文链接:https://www.haomeiwen.com/subject/rvactxtx.html