 所属专栏:【鸿蒙系统】  作  者:我是夜阑的狗  个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!  欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信   

文章目录

前言一、编译“狂飙” 1.添加 –ccache 参数: 2.添加 –fast-rebuild 参数 3.添加 enable_notice_collection=false 参数 4.添加 –build-target 参数 5.添加 --build-only-gn 参数 6.添加 --jobs 参数

总结

前言

  大家好,又见面了,我是夜阑的狗,本文是专栏【鸿蒙系统】专栏的第2篇文章;   今天也要开始学习鸿蒙系统了,开启新的征程,记录最美好的时刻,每天进步一点点。在学习鸿蒙系统过程中,让我最头疼的就是编译速度好慢,从 git 上拉下来的源码编译过程都是全量编译,这让我倍感焦灼,于是就带着问题深入了解一下鸿蒙系统编译过程,学习一下加快 harmony 本地编译的参数;

  专栏地址:【鸿蒙系统】 , 此专栏是我是夜阑的狗对鸿蒙系统编译过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴。   如果文章有什么需要改进的地方还请大佬不吝赐教。

一、编译“狂飙”

  OpenHarmony有两种编译方式,一种是通过hb工具编译,一种是通过build.sh脚本编译。编译时,适当选择添加以下的编译参数可以加快编译的过程。本文将提升build.sh方式编译速度的方法整理如下:

 1.添加 –ccache 参数:

原理:ccache会缓存c/c++编译的编译输出,下一次在编译输入不变的情况下,直接复用缓存的产物。 安装:

  在线安装:执行 sudo apt-get install ccache 命令。

sudo apt-get install ccache

  离线安卓:官网下载,下载二进制文件,把ccache所在路径配置到环境变量。

使用:执行./build.sh –product-name 产品名 –ccache 命令。再在 --ccache 后添加export CCACHE_NOHASHDIR=“true” 和 export CCACHE_SLOPPINESS=“include_file_ctime” (设置ccache在做hash的时候不hash路径、不检查文件的change time)

./build.sh --product-name rk3568 --ccache export CCACHE_NOHASHDIR="true" export CCACHE_SLOPPINESS="include_file_ctime"

 2.添加 –fast-rebuild 参数

原理:编译流程主要分为:preloader->loader->gn->ninja 这四个过程,在本地没有修改gn和产品配置相关文件的前提下,添加 –fast-rebuild 会让你直接从 ninja 编译开始。ninja 直接执行编译链接步骤,跳过前面的产品配置解析和 gn 解析,在 gn 相关脚本没有发生改变的前提下使用。使用:执行./build.sh –product-name 产品名 –fast-rebuild 命令。

./build.sh --product-name rk3568 --fast-rebuild

 3.添加 enable_notice_collection=false 参数

原理:notice file的搜集用于产品化的LICENSE生成,取消收集开源notice的过程,在非产品化场景开发态可关闭,提升编译速度,节省编译~7%时间。OpenHarmony开源软件 Notice收集策略说明。使用:执行./build.sh –product-name 产品名 –gn-args –enable_notice_collection=false –ccache命令。

./build.sh --product-name rk3568 --gn-args enable_notice_collection=false

 4.添加 –build-target 参数

原理:通过编译指定的模块从而加快编译速度。该参数用于指定编译模块,如何找模块的名字:

相关仓下BUILD.gn中关注group、ohos_shared_library、ohos_executable等关键字。./build.sh –product-name 产品名 –build-target 模块名 –build-only-gn生成build.ninja,然后去该文件中查找相关模块名。

使用:执行./build.sh –product-name 产品名 –build-target ark_js_host_linux_tools_packages命令。

 5.添加 --build-only-gn 参数

原理:编译流程主要分为:preloader->loader->gn->ninja 这四个过程,添加 --build-only-gn 参数只会重新执行Preloader、loader、gn,不进行最后的编译动作。

 6.添加 --jobs 参数

原理:为编译添加多线程并发执行。 使用:执行 ./build.sh --product-name {产品名} --jobs=N 命令。

./build.sh --product-name {产品名} --jobs=N

  N为工作线程数(ninja 默认的N是cpu核数+2),根据系统的内核数设置工作线程的默认数。在构建大型项目时,速度可能会受到主线程分派工作和连接依赖关系图的速度的限制。如果有太多的工作线程,主线程就会被耗尽,并且它的整体运行速度会变慢。

总结

  感谢观看,如果有帮助到你,请给文章点个赞和收藏,让更多的人看到。  

  也欢迎你,关注我。  

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!   最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!

更多专栏订阅:

 【LeetCode题解(持续更新中)】 【鸿蒙系统】 【Python脚本笔记】 【Java Web项目构建过程】 【数字图像处理】⚽ 【JavaScript随手笔记】朗 【大数据学习笔记(华为云)】濾 【程序错误解决方法(建议收藏)】 【软件安装教程】

订阅更多,你们将会看到更多的优质内容!!

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: