💌 所属专栏:【鸿蒙系统】
😀 作 者:我是夜阑的狗🐶
🚀 个人简介:一个正在努力学技术的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随手笔记】
- 🤩 【大数据学习笔记(华为云)】
- 🦄 【程序错误解决方法(建议收藏)】
- 🚀 【软件安装教程】
订阅更多,你们将会看到更多的优质内容!!