【鸿蒙系统】 ---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.mzph.cn/news/767286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别分类效果基本介绍模型描述程序设计参考…

sqlalchemy和moke生成实体类(一)

前言 如果通过java生成实体类,可以通过mybatis或者mybatis-plus的generator。 而sqlalchemy也可以生成实体类,通过sqlalcodegen或者flask-sqlalcodegen。 使用flask-sqlalcodegen生成实体类 建表 建立学生表,如下。 create table stude…

【Android】系统启动流程分析 —— init 进程启动过程

本文基于 Android 14.0.0_r2 的系统启动流程分析。 一、概述 init 进程属于一个守护进程,准确的说,它是 Linux 系统中用户控制的第一个进程,它的进程号为 1,它的生命周期贯穿整个 Linux 内核运行的始终。Android 中所有其它的进程…

Machine Learning - Logistic Regression

目录 一、Activation Function Why introduce activation functions? There are several commonly used activation functions: 二、Sigmoid: 三、Logistic Regression Model: 四、Implementation of logistic regression: 五、Decis…

unity 多屏幕操作

想了解基础操作请移步:(重点是大佬写的好,这里就不再赘述) Unity 基础 之 使用 Display 简单的实现 多屏幕显示的效果_unity display-CSDN博客 在panel上也可以通过获取 Canvas,来达到切换多屏幕的操作, …

Pear-rec:一键开启多功能捕捉分享,告别繁琐操作!

Pear-rec:一键捕捉每一刻,让每一次分享变得简单高效 - 精选真开源,释放新价值。 概览 Pear-rec是一款采用先进的Electron框架构建,并以ReactJS为前端技术基础的跨平台桌面应用,专注于提供全方位的屏幕捕捉与媒体处理功…

【C++】类与对象(下篇)

在本篇博客中,作者将会讲解类与对象的最后一篇。 一.再谈构造函数 在类与对象(上篇)中,我们讲到了构造函数,其实构造函数就是给每个成员变量进行赋值!!! 仅仅只是赋值而已&#xf…

阿里云2核4G服务器支持多少人在线?2C4G多少钱一年?

2核4G服务器支持多少人在线?阿里云服务器网账号下的2核4G服务器支持20人同时在线访问,然而应用不同、类型不同、程序效率不同实际并发数也不同,2核4G服务器的在线访问人数取决于多个变量因素。 阿里云2核4G服务器多少钱一年?2核4…

地宫取宝dfs

分析: 矩阵里的每一个位置都有标记,要求的问题是:有几种方法能完成这个规定。 那么,我们只需要计算从开始(1,1)到最后(n,m)的深度优先搜索中,有几个是满足要求的即为正确答案。 有个要求是,如果一个格子中…

Docker-镜像仓库

Docker ⛅Docker-Registry🌠分类🌠镜像仓库工作机制🌠常用的镜像仓库🌠镜像仓库命令☃️docker login☃️docker pull☃️docker push☃️docker search☃️docker logout 🌠镜像命令[部分]☃️docker images☃️docke…

Git工具的详细使用

一、环境说明 [rootgit ~]# getenforce Disabled [rootgit ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (d…

网络安全实训Day9

写在前面 访问控制和防火墙桌面端安全检测与防御 网络安全实训-网络安全技术 网络安全概述 访问控制 定义:通过定义策略和规则来限制哪些流量能经过防火墙,哪些流量不能通过。本质是包过滤 可以匹配的元素 IP协议版本 源区域和目的区域 源IP地址和目…

【赠书活动】Python编程 从入门到实践 第3版(图灵出品)(文末送书-进行中)

编辑推荐 适读人群 :本书适合对Python感兴趣的所有读者阅读。 编程入门就选蟒蛇书! 【经典】Python入门经典,常居Amazon等编程类图书TOP榜 【畅销】热销全球,以12个语种发行,影响超过 250 万读者 【口碑】好评如潮…

2-dubbo源码 : 源码环境搭建

好的开始是成功的一半,阅读源码也是一样。 很多同学在下定决心阅读一个开源框架之后,就一头扎进去,迷失在代码“迷宫”中。此时,有同学意识到,需要一边 Debug 一边看;然后又有一批同学在搭建源码环境的时候…

学习C++是否有必要学习Boost库?

C作为一门强大且灵活的编程语言,在软件开发领域有着广泛的应用。而在C的学习过程中,Boost库是一个经常被提及的重要资源。那么,对于C的学习者而言,是否有必要投入精力去学习Boost库呢?本文将就此问题展开详尽讨论。 一…

论文:Zero-Shot Entity Linking by Reading Entity Descriptions翻译笔记(阅读实体描述、实体链接)

文章目录 论文题目:通过阅读实体描述实现零样本实体链接摘要1 介绍2 零点实体链接2.1 审查: 实体链接2.2 任务定义2.3 与其他 EL 任务的关系 3 数据集构建4 实体链接模型4.1 生成候选4.2 候选排序 5 适应目标世界6 实验6.1 基线6.2 对未知实体和新世界6.…

C++例子

#include<iostream> using namespace std;//抽象类 //抽象cpu类 class CPU { public:virtual void calcuate()0; }; //抽象显卡类 class VideoCard { public:virtual void display()0; }; //抽象内存条类 class Memory { public:virtual void storage()0;};//电脑类 clas…

【计算机网络】物理层

文章目录 第二章 物理层一、 物理层的基本概念1. 物理层接口特性 二、数据通信基础1. 典型的数据通信模型2. 数据通信相关术语3. 设计数据通信系统要考虑的3个问题4. 三种通信方式5. 串行传输&并行传输6. 同步传输&异步传输7. 码元8. 数字通信系统数据传输速率的两种表…

rpc详解rpc框架

文章目录 概述rpc的优点组件工作流程&RPC的底层原理RPC的底层原理 RPC框架rpc框架优点RPC 的实现基础RPC的应用场景RPC使用了哪些关键技术rpc 调用异常一般怎么处理rpc和http的区别为什么RPC要比HTTP更快一些Dubbo和openfeign 区别远程调用RPC框架传输协议传输速度 概述 在…

MySQL:存储过程

1. 概念 MySQL中的存储过程指的是存储在数据库中的SQL语句集合。当创建好存储过程后&#xff0c;在运行时提供所需参数&#xff0c;存储过程就可以以代码指定的方式使用参数执行并返回值。 存储过程的特点包括&#xff1a; 封装与复用&#xff1a;可以把某一业务SQL封装在存储过…