当前位置: 首页 > news >正文

【鸿蒙系统】 ---OpenHarmony加快本地编译(二)

请添加图片描述

  • 💌 所属专栏:【鸿蒙系统】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的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随手笔记】
  • 🤩 【大数据学习笔记(华为云)】
  • 🦄 【程序错误解决方法(建议收藏)】
  • 🚀 【软件安装教程】



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

http://www.lryc.cn/news/324264.html

相关文章:

  • centos配置natapp 自动配置
  • sell脚本多行合成一行
  • 部署prometheus 监控k8s集群
  • 两个基本功不足导致的bug
  • 【算法每日一练]-图论(保姆级教程篇16 树的重心 树的直径)#树的直径 #会议 #医院设置
  • Qt播放音乐代码示例
  • 多线程应用中的性能优化:创建合适的线程数
  • 本地运行环境工具UPUPWANK(win)和Navicat数据库管理工具
  • LeetCode 每日一题 2024/3/18-2024/3/24
  • Unity 鼠标拖拽3D物体跟随移动的方法
  • 数据分析-Pandas分类数据的类别排序和顺序
  • 利用 Claude 3 on Amazon Bedrock 和 Streamlit 的“终极组合”,开发智能对话体验
  • Golang基础 Label标签与goto跳转
  • 二进制王国(蓝桥杯备赛)【sort/cmp的灵活应用】
  • 活用C语言之宏定义应用大全
  • 【源码】I.MX6ULL移植OpenCV
  • pytorch深度学习——dataset(附数据集下载)
  • springboot+vue考试管理系统
  • 自动驾驶建图--道路边缘生成方案探讨
  • 图片编辑器中实现文件上传的三种方式和二进制流及文件头校验文件类型
  • 深度学习,CRNN+CTC和Attention OCR你更青睐哪一种?
  • 飞桨AI应用@riscv OpenKylin
  • 在MongoDB建模1对N关系的基本方法
  • C++基础之运算符重载(十一)
  • 初始Java篇(JavaSE基础语法)(2)(逻辑控制)
  • 家用路由器和企业路由器的区别?
  • Gin简介(Go web基础知识)
  • HBase的Bulk Load流程
  • vue中图片替换 遇到问题
  • Android 观察者模式