鸿蒙编译子系统详解(八)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 = arg
        else:
            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函数。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值