鸿蒙编译子系统详解(八)hb env、clean、tool、help

1.5.5 hb其他

除了编译相关的hb set和hb build,hb还有其他模块。

1.5.5.1 hb env

env主要是打印编译环境信息。

env的相关源码与set、build类似:

  • build/hb/modules/interface/env_module_interface.py
  • build/hb/modules/ohos_env_module.py
  • build/hb/resolver/env_args_resolver.py
  • build/hb/resources/args/default/envargs.json

run()源码:

def run(self):self.env_check()self.env_install()

env的参数:

参数名称

说明

默认值

check

检查运行环境下的全部依赖

true

install

安装所有依赖

false

env_check():

解析参数check,调用resolve_check()函数,检查文件build/scripts/build_package_list.json列出的软件,提示错误。

读取文件ohos_config.json,打印保存的参数。

env_install():

执行脚本build/build_scripts/env_setup.sh,但该脚本运行时有错误,不建议将该参数设置为true。

1.5.5.2 hb clean

clean的功能是清除编译生成的文件

 相关源码:

build/hb/modules/interface/clean_module_interface.py

build/hb/modules/ohos_clean_module.py

build/hb/resolver/clean_args_resolver.py

build/hb/resources/args/default/cleanargs.json

run()的源码:

def run(self):
    self.clean_regular()
    self.clean_deep()

clean的参数分为两个阶段REGULAR和DEEP,对应函数clean_regular()和clean_deep(),参数如下:

参数名称

说明

阶段

默认值

clean-args

清除上次编译产生的所有参数

REGULAR

true

clean-all

清除所有的producer

DEEP

false

clean-out-product

清除out/rk3568目录

DEEP

false

clean-ccache

清除.ccache目录

DEEP

false

参数解析:

  • clean-args:resolve_clean_args()

删除out/hb_args下的json文件

  • clean-out-product:resolve_clean_out_product()

删除输出目录out_path

  • clean-ccache:resolve_clean_ccache()

删除.ccache目录

  • clean-all:resolve_clean_all()

删除输出目录,删除.ccache目录

1.5.5.3 hb tool

tool提供编译工具。

相关的源码:

build/hb/modules/interface/tool_module_interface.py

build/hb/modules/ohos_tool_module.py

build/hb/resolver/tool_args_resolver.py

build/hb/resources/args/default/toolargs.json

run()源码:

def run(self):
    if self.args_dict['ls'].arg_value:
        self.list_targets()
    elif self.args_dict['desc'].arg_value:
        self.desc_targets()
    elif self.args_dict['path'].arg_value:
        self.path_targets()
    elif self.args_dict['refs'].arg_value:
        self.refs_targets()
    elif self.args_dict['format'].arg_value:
        self.format_targets()
    elif self.args_dict['clean'].arg_value:
        self.clean_targets()
    else:
        Arg.get_help(ModuleType.TOOL)

tool的功能分为ls、desc、path、refs、format、clean。

各功能源码:

def list_targets(self):
    self.args_resolver.resolve_arg(self.args_dict['ls'], self)
def desc_targets(self):
    self.args_resolver.resolve_arg(self.args_dict['desc'], self)
def path_targets(self):
    self.args_resolver.resolve_arg(self.args_dict['path'], self)
def refs_targets(self):
    self.args_resolver.resolve_arg(self.args_dict['refs'], self)
def format_targets(self):
    self.args_resolver.resolve_arg(self.args_dict['format'], self)
def clean_targets(self):
    self.args_resolver.resolve_arg(self.args_dict['clean'], self)

tool的参数如下:

参数名称

说明

阶段

默认值

ls

列出与给定目录匹配的所有目标

prebuild

[]

desc

显示给定目标或配置的信息

prebuild

[]

path

查找两个目标之间的依赖路径

prebuild

[]

refs

查找反向依赖

prebuild

[]

format

格式化.gn文件

prebuild

[]

clean

删除输出目录中除args.gn以外的内容

prebuild

  • ls:resolve_list_targets()

源码:

@staticmethod
def resolve_list_targets(target_arg: Arg, tool_module: ToolModuleInterface):
    out_dir = ''
    args_list = []for arg in target_arg.arg_value:if '-' not in arg and len(out_dir) == 0:
            out_dir = argelse:
            args_list.append(arg)
    tool_module.gn.execute_gn_cmd(
        cmd_type=CMDTYPE.LS, out_dir=out_dir, args_list=args_list)

执行gn ls 命令,列出所有目标。ls命令的子参数如下:

子参数名称

说明

阶段

默认值

all-toolchains

工具链

prebuild

false

as

列出不同格式的目标。可选值:buildfile、label、output

prebuild

testonly

测试,可选值true、false

prebuild

false

type

按类型显示,类型:action、copy、executable、group、loadable_module、shared_library、source_set、static_library

prebuild

all-toolchains:

列出所有在 gn 配置中定义的工具链。

例如:

python build/hb/main.py tool --ls out/rk3568 --all-toolchains=true

as:
  1. --as=buildfiles:列出所有的 BUILD 文件的路径。
  2. --as=label:列出目标的标签。
  3. --as=outout:列出输出文件。

例如:

python build/hb/main.py tool --ls out/rk3568 --as=buildfiles
python build/hb/main.py tool --ls out/rk3568 --as=label
python build/hb/main.py tool --lout/rk3568 --as=output

testonly:

列出testonly标记的目标

例如

python build/hb/main.py tool --ls out/rk3568 --testonly=true

type:

按照目标类型显示

action    :                         一次性执行脚本的动作

copy      :                         拷贝

executable:                     可执行程序

group    :          组

loadable_module: 可加载模块

shared_library     :   动态库

source_set          :   源码集

static_library        :   静态库

例如,列出//base/startup/init下所有的可执行程序

python build/hb/main.py tool --ls out/rk3568 //base/startup/init/* --type=executable

  • desc:resolve_desc_targets()

执行gn desc命令,打印目标的描述信息,包括defines、cflags、deps、libs、outputs等。

源码:

@staticmethod
def resolve_desc_targets(target_arg: Arg, tool_module: ToolModuleInterface):
    out_dir = ''
    args_list = []for arg in target_arg.arg_value:if ':' in arg:
            try:
                component_name, module_name = arg.split(':')
                args_list.append(ComponentUtil.get_component_module_full_name(
                    out_dir, component_name, module_name))
            except Exception:
                raise OHOSException('Invalid desc args: {} ,need <component:module>'.format(arg))elif '-' not in arg and len(out_dir) == 0:
            out_dir = arg
        else:
            args_list.append(arg)
    tool_module.gn.execute_gn_cmd(cmd_type=CMDTYPE.DESC, out_dir=out_dir, args_list=args_list)

解析输入的组件名称和模块名称过程:

扫描out/rk3568/build_configs目录下的所有子目录,匹配组件名称与子文件夹名称是否相同,从子目录下的BUILD.gn文件中读取相关信息。

例如电话子系统中的ril_adapter:ril_vendor,解析后为//base/telephony/ril_adapter/services/vendor:ril_vendor。

python build/hb/main.py tool out/rk3568 --desc ril_adapter:ril_vendor

  • path:resolve_path_targets()

执行gn path命令,打印两个目标之间的依赖路径项。

源码与desc类似。

这里组件与模块名称的格式与desc保持一致,需要与out/rk3568/build_configs目录下的名称保持一致。

例如:

python build/hb/main.py tool out/rk3568 --path ril_adapter:hril hilog:libhilog

  • refs:resolve_refs_targets()

执行gn refs命令,打印反向依赖项。列出依赖于目标的所有目标项。

源码与desc类似。

例如:

python build/hb/main.py tool out/rk3568 --refs ril_adapter:hril 

  • format:resolve_format_targets()

执行gn format命令,格式化gn文件。

    @staticmethod
    def resolve_format_targets(target_arg: Arg, tool_module: ToolModuleInterface):
        tool_module.gn.execute_gn_cmd(cmd_type=CMDTYPE.FORMAT, args_list=target_arg.arg_value)

例如:

python build/hb/main.py tool --format base/startup/init/services/BUILD.gn

  • clean:resolve_clean_targets()

执行gn clean命令,删除输出目录中除args.gn和以外的内容。

源码:

    @staticmethod
    def resolve_clean_targets(target_arg: Arg, tool_module: ToolModuleInterface):
        out_dir = ''
        out_dir = target_arg.arg_value  #这里稍微改了一下
        tool_module.gn.execute_gn_cmd(cmd_type=CMDTYPE.CLEAN, out_dir=out_dir)

例如:

python build/hb/main.py tool --clean out/rk3568

1.5.5.4 hb help

help负责打印帮助信息。

读取各个模块argument的json文件,获取帮助信息打印。

主要源码位于build/hb/containers/arg.py文件get_help函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8078.shtml

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

相关文章

2024.5.6 关于 SpringCloud 的基本认知

目录 引言 微服务框架所包含的技术栈 微服务架构演变 单体架构 分布式架构 微服务架构 微服务技术对比 认识 SpringCloud SpringBoot 版本兼容关系 服务拆分和远程调用 服务拆分注意事项 远程调用 引言 微服务是一种框架风格&#xff0c;按照业务板块来划分应用代码…

微信小程序(Taro)获取经纬度并转化为具体城市

1、获取经纬度 申请权限&#xff0c;想要使用微信小程序获取经纬度的方法是要申请该方面的权限。 获取经纬度的方法有很多选择其中一个使用就好。 我使用的是Taro.getFuzzyLocation(&#xff09; 在app.config.js中需要添加设置 requiredPrivateInfos: ["getFuzzyLocat…

群晖上部署农场管理系统farmOS

什么是 farmOS &#xff1f; farmOS 是一个基于 Web 的应用程序&#xff0c;用于农场管理、规划和记录保存。它由志愿者社区开发&#xff0c;旨在为农民、开发人员和研究人员提供一个标准平台。 需要注意的是&#xff0c;群晖内核版本太低会遇到下面的错误&#xff0c;这个 AH0…

高实时、高可靠的微内核操作系统——鸿道Intewell

近年来&#xff0c;我国不断推进工业转型升级&#xff0c;力求实现从传统工业大国向现代工业强国的跨越。想要在新一轮科技革命中“超车”&#xff0c;需要从多个维度进行深度布局和全面发力。 ——科技创新是核心驱动力 积极推动工业结构的优化和升级&#xff0c;通过发展新…

vue脚手架和vite创建的项目的环境配置

开发环境文件 .env.development NODE_ENV"development" # // 开发接口域名 本地测试就用这个 # vue脚手架创建的 VUE_APP_MODE"开发环境" VUE_APP_API_URL http://19527 # vite创建的 # VITE_MODE"开发环境" # VITE_BASE_URL http://1920:9527…

python环比分析日常消费数据掌握月支出增减情况

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.分析 一.前言 月支出是指个人或家庭在一个月内用于消费、投资、储蓄等方面的资金流出总额。它是反映个人或家庭经济状况的重要指标之一,可以帮助人们更好地规划和管理自己的财务。 月支出的构成…

Linux系统(项目管理和LINUX)

目录 一、VMWare安装和使用 1.安装VMware 2.使用VMware 二、常用命令 三、常用配置 环境变量配置&#xff1a; 系统文件配置&#xff1a; 软件包配置&#xff1a; 安全配置&#xff1a; 其他配置&#xff1a; 四、Xshell的使用 安装 Xshell&#xff1a; 启动 Xshe…

《论文阅读》MISC:一个融合COMET的情感支持会话混合策略感知模型 ACL 2022

《论文阅读》MISC:一个融合COMET的情感支持会话混合策略感知模型 ACL 2022 前言简介模型架构Mental State-Enhanced EncoderMixed Strategy Learning ModuleMulti-Factor-Aware Decoder损失函数实验评估问题前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ …

linux设置挂载指定的usb,自动挂载

一、设置指定的USB 在Linux系统中&#xff0c;如果您只想让系统挂载特定的USB设备&#xff0c;而忽略其他的USB设备&#xff0c;可以通过创建自定义的udev规则来实现。以下是设置系统只能挂载指定USB设备的基本步骤&#xff1a; 确定USB设备的属性&#xff1a; 首先&#xff0…

力扣热题100刷题笔记[python]

letcode100 题录地址: https://leetcode.cn/studyplan/top-100-liked/ 注:另外有记忆精简版 [LeetCode热题100_记忆版.md](file:///D:/yingl/文件/notes_-yl/技术精品文章/编程基本功/算法资料汇总/LeetCode热题100_记忆版.md) 哈希 两数之和 思路: 0、用 hash_table =…

LLMs之GPT4ALL:GPT4ALL的简介、安装和使用方法、案例应用之详细攻略

LLMs之GPT4ALL&#xff1a;GPT4ALL的简介、安装和使用方法、案例应用之详细攻略 目录 GPT4ALL的简介 0、新功能 1、特点 2、功能 3、技术报告 GPT4ALL的安装和使用方法 1、安装 2、使用方法 GPT4ALL的案例应用 LLMs之LLaMA3&#xff1a;基于GPT4ALL框架对LLaMA-3实现…

【DeepLearning.AI】吴恩达系列课程——使用ChatGPT API构建系统(持续更新中——)

目录 前言一、Language Models, the Chat Format and Tokens&#xff08;LLM&#xff0c;交互形式&#xff09;1-1、加载api-key1-2、使用辅助函数&#xff08;即指令调整LLM&#xff09;1-2、使用辅助函数&#xff08;聊天格式&#xff09;1-3、辅助函数修改&#xff08;输出字…

Python中的多线程与多进程编程:深入解析与应用

Python中的多线程与多进程编程&#xff1a;深入解析与应用 一、引言 在Python编程中&#xff0c;多线程和多进程是实现并发执行的重要手段。随着计算需求的日益增长&#xff0c;单线程或单进程模型往往难以满足实时响应、高效利用多核CPU等要求。因此&#xff0c;了解并掌握P…

安卓SELinux策略

SELinux策略语言–类型强制(编写TE规则) selinux权限说明及问题解决 Selinux篇3 -TE规则 Android中SeLinux权限 .te文件编写 Android 系统添加SELinux权限 [SeLinux]audit2allow安装与使用 SELinux规则添加进阶

文件各种上传,离不开的表单 [html5]

作为程序员的我们&#xff0c;经常会要用到文件的上传和下载功能。到了需要用的时候&#xff0c;各种查资料。有木有..有木有...。为了方便下次使用&#xff0c;这里来做个总结和备忘。 利用表单实现文件上传 最原始、最简单、最粗暴的文件上传。 前端代码&#xff1a; //方…

LeetCode力扣题目111:多种算法对比实现二叉树的最小深度

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

WPF 图片显示某一部分区域

效果图&#xff1a; 代码&#xff1a; <Image Width"32"HorizontalAlignment"Right"Height"32"Source"../../Resources/Images/BLUEWOLF.jpg"><Image.Clip><PathGeometry><PathFigure StartPoint"32,32&quo…

苍穹外卖项目---------收获以及改进(5-6天)

①HttpClient 核心作用&#xff1a;在java编码中发送http请求 第一步&#xff1a;引入依赖 第二步&#xff1a;使用封装一个工具类 package com.sky.utils;import com.alibaba.fastjson.JSONObject; import org.apache.http.NameValuePair; import org.apache.http.client.co…

Scrapy框架快速入门指南

Scrapy框架快速入门指南 在数据驱动的世界中&#xff0c;快速而高效地抓取数据变得尤为重要。Scrapy是一个快速、简单但功能强大的爬虫框架&#xff0c;能够满足数据抓取的各种需求。今天&#xff0c;我们将快速入门Scrapy&#xff0c;了解如何使用它抓取和提取数据。 目录 …

【北京迅为】《iTOP-3588开发板源码编译手册》-第4章 Android12/Linux设备树简介

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…