This action will force synchronization from OpenHarmony/build, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
编译构建子系统提供了一个基于Gn和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
代码根目录下执行全量版本的编译命令:
./build.sh --product-name {product_name}
编译结果镜像输出在 out/${device_name}/packages/phone/images/目录下。
编译命令支持选项:
--product-name # 必须 编译的产品名称,如:Hi3516DV300
--build-target # 可选 指定编译目标,可以指定多个
--gn-args # 可选 gn参数,支持指定多个
--ccache # 可选 编译使用ccache,需要本地安装ccache
--sparse-image # 可选 生成sparse镜像,需要本地安装img2simg,默认镜像为raw
在已有部件中增加模块。
支持的模板类型:
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配置时,该配置不生效
install_images = [] # 可选,缺省值system,指定模块安装到那个分区镜像中,可以指定多个
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配置时,该配置不生效
install_images = [] # 可选,缺省值system,指定模块安装到那个分区镜像中,可以指定多个
part_name = "" # 必选,所属部件名称
}
部件配置。
部件配置在所属子系统的根目录下的 ohos.build文件中,一个子系统可以配置多个部件。
一个部件包含module_list、inner_kits、system_kits、test_list四个部分的声明:
ohos.build中各个配置,都只是声明,具体的模块配置还是在对应的BUILD.gn中。
ohos-sdk编译。
编译命令:
./build.sh --product-name ohos-sdk --ccache
结果输出:
out/sdk/packages/ohos-sdk/
ohos-sdk模块配置:
build/ohos/sdk/ohos_sdk_description_std.json
如何将一个模块编译并打包到版本中?
编译构建子系统
build
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。