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