回复
鸿蒙的编译构建子系统
风在云颠
发布于 2021-8-30 15:59
浏览
0收藏
简介
编译构建子系统提供了一个基于Gn和ninja的编译构建框架。
根据产品配置,编译生成对应的镜像包。其中编译构建流程为:
- 使用Gn配置构建目标。
- Gn运行后会生成ninja文件。
- 通过运行ninja来执行编译任务。
目录
/build # 编译构建主目录
├── config # 编译相关的配置项
├── core
│ └── gn # 编译入口BUILD.gn配置
├── loader # 各个部件配置加载、模板生成
├── ohos # OpenHarmony编译打包流程配置
│ ├── kits # kits编译打包模板和处理流程
│ ├── ndk # ndk模板和处理流程
│ ├── notice # notice模板和处理流程
│ ├── packages # 版本打包模板和处理流程
│ ├── sa_profile # sa模板和处理流程
│ ├── sdk # sdk模板和处理流程,包括sdk中包含的模块配置
│ └── testfwk # 测试相关的处理
├── scripts # 编译相关的python脚本
├── templates # c/c++编译模板定义
└── toolchain # 编译工具链配置
约束与限制
- 编译环境需要Ubuntu18.04及以上版本。
- 安装编译所需的程序包。
安装命令:
sudo apt-get install binutils git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4
说明
1.代码根目录下执行全量版本的编译命令:
./build.sh --product-name {product_name}
编译结果镜像输出在 out/ohos-arm-relese/packages/phone/images/目录下。
2.编译命令支持选项:
--product-name # 必须 编译的产品名称,如:Hi3516DV300
--build-target # 可选 指定编译目标,可以指定多个
--gn-args # 可选 gn参数,支持指定多个
--ccache # 可选 编译使用ccache,需要本地安装ccache
--sparse-image # 可选 生成sparse镜像,需要本地安装img2simg,默认镜像为raw
3.在已有部件中增加模块。
支持的模板类型:
ohos_executable
ohos_shared_library
ohos_static_library
ohos_source_set
# 预编译模板:
ohos_prebuilt_executable
ohos_prebuilt_shared_library
ohos_prebuilt_etc
在模块目录下配置BUILD.gn,根据类型选择对应的模板。
例子:
ohos_shared_library示例:
import("//build/ohos.gni")
ohos_shared_library("helloworld") {
sources = []
include_dirs = []
cflags = []
cflags_c = []
cflags_cc = []
ldflags = []
configs = []
deps =[] # 部件内模块依赖
# 跨部件模块依赖定义,
# 定义格式为 "部件名:模块名称"
# 这里依赖的模块必须是依赖的部件声明在inner_kits中的模块
external_deps = [
"part_name:module_name",
]
output_name = "" # 可选,模块输出名
output_extension = "" # 可选,模块名后缀
module_install_dir = "" #可选,缺省在/system/lib64或/system/lib下, 模块安装路径,模块安装路径,从system/,vendor/后开始指定
relative_install_dir = "" #可选,模块安装相对路径,相对于/system/lib64或/system/lib;如果有module_install_dir配置时,该配置不生效
part_name = "" # 必选,所属部件名称
}
ohos_executable示例:
ohos_executable模板属性和ohos_shared_library基本一致
注意:可执行模块(即ohos_executable模板定义的)默认是不安装的,如果要安装,需要指定install_enable = true
ohos_prebuilt_etc示例:
import("//build/ohos.gni")
ohos_prebuilt_etc("etc_file") {
source = "file"
deps = [] # 部件内模块依赖
module_install_dir = "" #可选,模块安装路径,从system/,vendor/后开始指定
relative_install_dir = "" #可选,模块安装相对路径,相对于system/etc;如果有module_install_dir配置时,该配置不生效
part_name = "" # 必选,所属部件名称
}
4.部件配置。
部件配置在所属子系统的根目录下的 ohos.build文件中,一个子系统可以配置多个部件。
一个部件包含module_list、inner_kits、system_kits、test_list四个部分的声明:
- module_list:部件包含的模块列表
- inner_kits:部件提供其它部件的接口
- system_kits:部件提供给生成应用的接口
- test_list:部件对应模块的测试用例
ohos.build中各个配置,都只是声明,具体的模块配置还是在对应的BUILD.gn中。
ohos-sdk编译。
编译命令:
./build.sh --product-name ohos-sdk --ccache
结果输出:
out/ohos-arm64-release/packages/ohos-sdk/
ohos-sdk模块配置:
build/ohos/sdk/ohos_sdk_description_std.json
常见问题说明
如何将一个模块编译并打包到版本中?
- 模块要指定part_name,指定它归属的部件,一个模块只能属于一个部件;
- 部件的模块,要在部件配置的module_list中,或者可以被module_list中的模块依赖到;
- 部件要加到对应产品的部件列表中;
相关仓
编译构建子系统
build
分类
build-master.zip 406.08K 18次下载
已于2021-8-30 15:59:56修改
赞
收藏
回复
相关推荐