如何使用 CCache 进行 Cocos2d-x 编译加速

CCache是C/C++的编译器缓存。当相同的编译被再次编译时,进行检测并通过之前编译的缓存进行编译加速。所以我们可以通过这种方法给Cocos2d-x Android的编译加速。使用这种方法,在i7 CPU的Macbook Pro Retina上编译,我们的Cocos2d-x Android工程编译时间可以从10分钟减少到30秒!!

 

注意:以下操作仅对Mac OS X有效。

 

安装

我们使用homebrew:

 
 
  1. brew install --HEAD ccache 

 

或者通过源码安装:

 
 
  1. git clone https://github.com/jrosdahl/ccache.git 
  2. cd ccache 
  3. ./autogen.sh 
  4. ./configure 
  5. make 
  6. make install 
  7. cp /usr/local/bin/ccache /usr/bin/ 

注意:默认的安装路径是 /usr/local/bin,我们需要拷贝ccache到/usr/bin/,不然ndk-build会找不到并报错

 

如果终端报错说找不到autoheader,这说明我们需要先安装automake:

 

 
 
  1. brew install automake 

但是,如果如果报错是说找不到brew,我们就必须先安装brew:

 
 
  1. ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" 

确保ccache的路径可以被$PATH识别,运行命令:

 
 
  1. ccache 

如果你看到帮助信息,恭喜你,安装成功了!

 

在android上配置编译环境

我们必须先设置以下环境变量来使用ccache:

 

 
 
  1. vim ~/.bash_profile   
  2. Add following lines: 
  3.  
  4. export USE_CCACHE=1 
  5. export NDK_CCACHE=/usr/local/bin/ccache 

 

运行命令行:

 

 
 
  1. ccache -M 10G 

这个命令将缓存大小设置为10G。当然,如果你的硬盘有足够的空间,你也可以将此设置为50G。

 

然后,我们跳转到NDK目录,如果你忘了这个路径,你可以使用以下命令来查看:

 
 
  1. which ndk-build 

以下是我的输出结果:

 
 
  1. /developer/android/android-ndk-r9b/ndk-build 

所以,我的NDK_ROOT是:

 

 
 
  1. /developer/android/android-ndk-r9b 

打开文件:$NDK_ROOT/build/core/default-build-commands.mk

 

找到以下章节并加入ccache,如下:

 

 
 
  1. ifneq ($(findstring ccc-analyzer,$(CC)),) 
  2. TARGET_CC       = $(CC) 
  3. else 
  4. TARGET_CC       = ccache $(TOOLCHAIN_PREFIX)gcc    #Add ccache support 
  5. endif 
  6. TARGET_CFLAGS   = 
  7. TARGET_CONLYFLAGS = 
  8. ifneq ($(findstring c++-analyzer,$(CXX)),) 
  9. TARGET_CXX      = $(CXX) 
  10. else 
  11. TARGET_CXX      = ccache $(TOOLCHAIN_PREFIX)g++ #Add ccache support 
  12. endif 
  13. TARGET_CXXFLAGS = $(TARGET_CFLAGS) -fno-exceptions -fno-rtti 

 

编译cocos2d-x游戏

选择cocos2d-x根目录,运行:

 
 
  1. python build/android-build.py -p 10 cpp-tests 

新建一个终端窗口,运行:

 

 
 
  1. ccache -s 

这个命令会打印出ccache状态,如下:

 

 
 
  1. cache directory                     /Users/heliclei/.ccache 
  2. primary config                      /Users/heliclei/.ccache/ccache.conf 
  3. secondary config      (readonly)    /usr/local/etc/ccache.conf 
  4. cache hit (direct)                 13588 
  5. cache hit (preprocessed)           11145 
  6. cache miss                          696 
  7. called for link                        1 
  8. called for preprocessing              14 
  9. preprocessor error                     1 
  10. can't use precompiled header        129 
  11. no input file                          5 
  12. files in cache                     32222 
  13. cache size                           5.4 GB 
  14. max cache size                      30.0 GB 

 

如果缓存的高速缓存命中(cache hit)和缓存大小(cache size)均为0,这就表示ccache没有运行,我们必须从新检查配置。

 

在Xcode中部署

配置Xcode(5.1)的ccache环境有点麻烦。我确实能调用ccache,但貌似没有增加编译速度。如果你有好的方法解决这个问题,请到github上为本篇教程提交pr!不过我们还是看看设置方法:

 

首先,我们添加2个自定义宏(user-defined macros)到cocos2d_libs的编译选项中:

 

 
 
  1. CC=$(SOURCE_ROOT)/../tools/xcode_ccache_wrapper 
  2. LDPLUSPLUS=$(DT_TOOLCHAIN_DIR)/usr/bin/clang++ 

 

然后,我们需要在$(COCOS2dX_ROOT)/tools/路径下创建名为xcode_ccache_wrapper的脚本:

 

 
 
  1. #!/bin/bash 
  2. export CCACHE_CPP2=yes 
  3. export CCACHE_LOGFILE=~/Desktop/ccache.log 
  4. exec /usr/local/bin/ccache /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -Qunused-arguments "$@" 

 

设置完成,我们就可以快乐的在Xcode中编译了!

 

打开ccache.log可以查看cache工作状态。

 

但问题是,添加cache后,我mbp的Xcocde依旧没有提升编译速度。有可能是我使用的脚本不正确,所以,如果你看到本章节,并知道我的问题出在哪,请到github中提交pr,修正我的错误,并造福广发开发者哦!!

 

来源:Cocos引擎中文网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值