命令行工具hb(HarmonyOS|OpenHarmony Build 编译构建系统的缩写)都很熟悉了。这是一个基于gn和ninja的构建系统,以支持OpenHarmony组件化开发为目标,提供以下基本功能:
-
支持按组件拼装产品并编译。
-
独立构建芯片解决方案厂商源码。
-
独立构建单个组件
工具hb对应的开源代码仓为build lite,代码目录如下:
build/lite
├── components # 组件描述文件
├── figure # readme中的图片
├── hb # hb pip安装包源码
├── make_rootfs # 文件系统镜像制作脚本
├── config # 编译配置项
│ ├── component # 组件相关的模板定义
│ ├── kernel # 内核相关的编译配置
│ └── subsystem # 子系统编译配置
├── platform # ld脚本
├── testfwk # 测试编译框架
└── toolchain # 编译工具链配置,包括:编译器路径、编译选项、链接选项等
本文主要梳理build lite 轻量级编译构建系统涉及的配置目录。有些知识点,只能从代码中获取,官方文档里没有提供很详细的说明,希望此文可以对此进行补充。
我们先看些相关的文件的代码片段。
1、build\lite\ohos_var.gni
文件build\lite\ohos_var.gni定义了所有部件的全局变量,该文件还用于读取产品解决方案的配置文件config.json中的配置项,解析为gn变量。该文件被文件
openharmony\build\lite\config\BUILDCONFIG.gn包含导入import。该文件的代码片段如下,我们主要看下配置的目录。⑴处表明如果产品解决方案的配置文件config.json中定义了“vendor_adapter_dir”,则环境变量ohos_vendor_adapter_dir、ohos_board_adapter_dir均设置为所配置的目录。这个是开发板适配目录,从代码中的注释“To be deleted, and will use board config.”可以看出,不建议使用这个配置项,要删除,只是为了兼容,还在继续保留着吧。实现同样功能的配置项是开发板配置文件config.gni中的配置项board_adapter_dir,下文会详细分析。
⑵处为产品适配目录“product_adapter_dir”,一些和产品相关的需要适配的部件,会把适配文件放在在配置的目录内。⑶处third_party_dir用于维护第三方软件的目录,虽然我们都知道openharmony的第三方目录为third_party,部分子系统部件需要明确的指定这个目录。
if (product_path != "") {
product_config = read_file("${product_path}/config.json", "json")
# Board selected by product.
board_name = product_config.board
device_company = product_config.device_company
# Supported kernel: "liteos_a", "liteos_m", "linux"
ohos_kernel_type = product_config.kernel_type
if (defined(product_config.kernel_is_prebuilt)) {
ohos_kernel_is_prebuilt = product_config.kernel_is_prebuilt
}
# To be deleted, and will use board config.
⑴ if (defined(product_config.vendor_adapter_dir)) {
ohos_vendor_adapter_dir = product_config.vendor_adapter_dir
ohos_board_adapter_dir = ohos_vendor_adapter_dir
}
⑵ ohos_product_adapter_dir = product_config.product_adapter_dir
⑶ ohos_third_party_dir = product_config.third_party_dir
}