• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 编译构建子系统<a name="ZH-CN_TOPIC_0000001162500073"></a>
2
3编译构建子系统提供了一个基于gn和ninja的编译构建框架,主要提供以下功能:
4
5-   构建不同芯片平台的产品,如:Hi3516DV300平台。
6
7-   根据产品配置可以按照组件组装打包产品需要的能力。
8
9## 简介<a name="section175012297491"></a>
10
11在了解编译构建子系统的能力前,应了解如下基本概念:
12
13-   平台
14
15    开发板和内核的组合,不同平台支持的子系统和组件不同。
16
17-   子系统
18
19    OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 \> 子系统 \> 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或组件。子系统是一个逻辑概念,是由对应组件构成的逻辑系统。
20
21-   组件
22
23    对子系统的进一步拆分,可复用的软件单元,它包含源码、配置文件、资源文件和编译脚本;能独立构建,以二进制方式集成,具备独立验证能力的二进制单元。
24
25-   gn
26
27    Generate ninja的缩写,用于产生ninja文件。
28
29-   ninja
30
31    ninja是一个专注于速度的小型构建系统。
32
33
34## 目录
35
36```text
37/build                            # 编译构建主目录
38
39├── __pycache__
40├── build_scripts/                # 编译相关的python脚本
41├── common/
42├── config/                       # 编译相关的配置项
43├── core
44│   ├── gn/                       # 编译入口BUILD.gn配置
45│   └── build_scripts/
46├── docs
47├── gn_helpers.py*
48├── lite/                         # hb和preloader入口
49├── misc/
50├── ohos                          # OpenHarmony编译打包流程配置
51│   ├── kits                      # kits编译打包模板和处理流程
52│   ├── ndk                       # ndk模板和处理流程
53│   ├── notice                    # notice模板和处理流程
54│   ├── packages                  # 版本打包模板和处理流程
55│   ├── sa_profile                # sa模板和处理流程
56│   ├── sdk                       # sdk模板和处理流程,包括sdk中包含的模块配置
57│   └── testfwk                   # 测试相关的处理
58├── ohos.gni*                     # 汇总了常用的gni文件,方便各个模块一次性import
59├── ohos_system.prop
60├── ohos_var.gni*
61├── prebuilts_download.sh*        # 预编译脚本
62├── print_python_deps.py*
63├── scripts/
64├── subsystem_config.json
65├── subsystem_config_example.json
66├── templates/                    # c/c++编译模板定义
67├── test.gni*
68├── toolchain                     # 编译工具链配置
69├── tools                         # 常用工具
70├── version.gni
71├── zip.py*
72```
73
74
75**图 1**  编译构建子系统架构图<a name="fig16488143010409"></a>
76![](figures/build_framework_ZN.png "编译构建子系统架构图")
77
78
79## 运作机制<a name="section193961322175011"></a>
80
81OpenHarmony侧的编译构建流程主要包括以下三个步骤:
82
831. 命令行解析:解析待编译的产品名称,加载相关配置。
84
852. 调用gn: 根据命令行解析的产品名称和编译类型,配置编译工具链和全局的编译选项。
86
873. 执行ninja:启动编译并生成对应的产品版本。
88
89## 轻量和小型系统<a name="section119041639115811"></a>
90
91轻量和小型系统的编译构建相关介绍请见[build\_lite](https://gitee.com/openharmony/build_lite)仓的Readme文档。
92
93## 标准系统<a name="section8750514195912"></a>
94
95标准系统的编译构建相关介绍请见[build](https://gitee.com/openharmony/build)仓的Readme文档。
96
97## 相关仓<a name="section44651652878"></a>
98
99[build\_lite](https://gitee.com/openharmony/build_lite/blob/master/README_zh.md)
100
101[build](https://gitee.com/openharmony/build/blob/master/README_zh.md)
102
103