OpenHarmony多套源码编译过程中自定义ccache相关目录解决缓存冲突导致的时间过长问题
写作背景
OpenHarmony编译框架中提供了ccache,第一次编译OpenHarmony之后,第二次编译时间极大缩短。
但是在使用一台服务器上维护多个产品多个OpenHarmony版本经常会遇到一个问题,编译完了a产品的b版本后编译c产品的d版本时,由于ccache不匹配的原因。导致编译耗时非常长。然后又编译a产品的b版本,ccache缓存又不匹配,编译时间又非常长。
这时候有两种方法可以解决,一种是不删out,但是ccache缓存还是不匹配。一种是每套源码都单独使用一个docker去编,维护多个docker,但是实际上维护多个docker,还是在维护多个ccache缓存。
为了解决多套源码在同一台服务器上的编译问题,最好的方法是为每套源码单独维护一个ccache缓存目录
步骤
# 进入oh源码根目录
cd oh_src
# 源码下创建ccache相关的目录(当然可以创建在任何读者想创建的地方)
mkdir -p .ccache/ccache_local
mkdir -p .ccache/ccache_base
mkdir -p .ccache/ccache_dir
mkdir -p .ccache/ccache_temp
# 导出环境变量(注意:这里使用的是相对路径)
export CCACHE_LOCAL_DIR=$(pwd)/.ccache/ccache_local
export CCACHE_BASE=$(pwd)/.ccache/ccache_base
export CCACHE_LOG_SUFFIX=ohos
export CCACHE_DIR=$(pwd)/.ccache/ccache_dir
export CCACHE_TEMPDIR=$(pwd)/.ccache/ccache_temp
# 查看环境变量
echo "CCACHE_LOCAL_DIR=$CCACHE_LOCAL_DIR"
echo "CCACHE_BASE=$CCACHE_BASE"
echo "CCACHE_DIR=$CCACHE_DIR"
echo "CCACHE_TEMPDIR=$CCACHE_TEMPDIR"
# 然后正常编译产品
rm -rf out && ./build.sh --product-name xxx --ccache
当然也可以直接把以上步骤修改到build.sh编译脚本里面去。可以参考笔者的修改 https://gitee.com/cix_oh/cix_p1_oh/commit/cfba948484b028e129981d16ee44023040b01e73
经过测试笔者交替去编译多套oh源码,彼此之间ccache不冲突不会产生影响


原理
oh源码中 build/hb/resolver/build_args_resolver.py中获取的全部都是服务器中ccache的默认路径,这样会导致一个问题。多套源码交替编译时,由于使用的是ccache默认路径,缓存是不匹配的,等于重新第一次编译。

笔者实测5.0.0至6.0是可以自定义ccache缓存目录的。除非oh修改策略(当然笔者在此建议oh编译框架中不要使用ccache默认路径,而是在源码目录自定义一个ccache目录规避笔者今天在文章中谈及的问题)
笔者实测6.0r自定义的ccache目录是14GB,5.0是9.5GB,实际并不大。

更多推荐
所有评论(0)