BUILD.gn 构建规则区别(L1/L2/L3)
OpenHarmony L1 系统(即轻量系统,small system) 与标准系统(L2/L3)在 BUILD.gn 构建规则 上的核心区别
一、两类规则的根本区别
|
类型 |
使用场景 |
调用层 |
特征 |
|
GN 原生规则(不带前缀) |
L1/Lite 系统(如轻量内核、Hi3861、Hi3516DV300 小系统) |
GN 内置 |
直接生成 .a、.so、可执行文件,无 OpenHarmony 扩展逻辑 |
|
OHOS 扩展规则(带 ohos_ 前缀) |
L2/L3 标准系统(如带 Linux 内核或 AOSP 基座的系统) |
由 build/ohos/ohos_var.gni 定义 |
除 GN 原生行为外,还会执行 OHOS 特定逻辑(如 bundle 输出路径、部件依赖、签名、模块打包等) |
二、规则区别详细分析
shared_library vs ohos_shared_library
| 项目 | shared_library("xxx") | ohos_shared_library("xxx") |
| 定义位置 | GN 原生 | OpenHarmony 扩展宏 |
| 产物类型 | 生成 .so | 生成 .so 并注册到 OHOS 模块体系 |
| 安装路径 | out/xxx/lib | 自动进入 system/lib 或 vendor/lib |
| 元信息(bundle.json) | 不处理 | 自动关联 bundle.json 组件信息 |
| 编译依赖 | 手动 deps 指定 | 可通过 external_deps 引用其他子系统组件 |
| 典型用途 | 小系统组件(如内核、驱动、liteos 模块) | 标准系统的服务、应用、动态库 |
在 L1 系统中:
由于没有 bundle.json / 子系统模块化体系,也没有 system/vendor 分区概念,因此只需要使用原生 shared_library 即可。
static_library vs ohos_static_library
| 项目 | static_library | ohos_static_library |
| 产物 | .a 文件 | .a 文件(但会纳入 OHOS 构建系统) |
| 作用 | 模块静态链接 | 可被其他 ohos_xxx 规则依赖 |
| 是否注册到系统 | 否 | 是 |
| L1 场景是否可用 | 推荐使用 | 通常不需要 |
lite_component 与 lite_library 这两个是 LiteOS / L1 专用规则,由 build/lite 下的模板定义,
作用类似于 ohos_xxx,但针对小系统裁剪过。
| 规则 | 说明 | 功能特点 |
| lite_component | L1 的逻辑组件定义,支持依赖描述、模块组装 | 类似于标准系统的 subsystem 级注册 |
| lite_library | L1 的轻量库构建规则,封装了 static_library 或 shared_library | 适配小系统的编译路径和安装路径规则 |
举例:
lite_library("wifiservice") {
sources = [ "wifi_service.c" ]
deps = [ "//foundation/communication/wifi_lite:core" ]
}
表示构建一个 L1 环境可用的轻量库。
三、为什么 L1 系统都用不带 ohos 前缀的?
因为 L1 系统不依赖 HAP/Bundle 框架,也没有完整的部件描述系统(bundle.json、external_deps、part_name 等),
而 ohos_shared_library / ohos_static_library 的模板内部强依赖这些全量系统机制。
在 L1 中,只需纯 GN 构建逻辑 + LiteOS 驱动/服务注册体系
OpenHarmony 官方文档:https://gitee.com/openharmony/build 构建系统主仓
更多推荐

所有评论(0)