build:基于Gn和ninja的编译构建框架项目

暂无描述

分支442Tags56
文件最后提交记录最后更新时间
update .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md. Signed-off-by: oh_ci <maguangsheng1@huawei.com>10 个月前
sbom适配 Signed-off-by: xingyihang <xingyihang1@huawei.com> Change-Id: I2e1a886d81ae0bc8c3c787bc13f1f6872f1c6a74 2 个月前
feat: build系统添加host_product主机模式编译支持 ## 新增功能 为OpenHarmony构建系统添加主机模式(host mode)编译支持,允许在主机上编译工具链而无需完整的设备配置。 ## 主要变更 ### 1. 构建配置优化 - 添加 is_host_productcompile_mode 参数支持 - 优化 device_company 和 device_build_path 配置,支持可选定义 - 新增 common_cross_packages 分组,支持主机模式依赖管理 ### 2. Python构建脚本优化 - **hb/resolver/build_args_resolver.py**: 增强构建参数解析,支持主机模式 - **hb/resolver/set_args_resolver.py**: 优化参数设置逻辑 - **hb/resources/config.py**: 更新配置处理 - **hb/services/loader.py**: 增强模块加载,支持主机产品 - **hb/services/preloader.py**: 添加主机模式预加载支持 - **hb/util/loader/load_bundle_file.py**: 优化bundle文件加载 - **hb/util/loader/load_ohos_build.py**: 更新ohos构建加载逻辑 - **hb/util/preloader/preloader_process_data.py**: 优化预加载处理 - **hb/util/product_util.py**: 增强产品工具函数 ### 3. GN构建配置 - **common/BUILD.gn**: 添加 common_cross_packages 模板 - **config/components/musl/BUILD.gn**: 优化 musl 组件配置 - **core/gn/BUILD.gn**: 更新 gn 工具链配置 - **ohos.gni**: 添加主机模式相关变量 - **ohos/packages/BUILD.gn**: 新增 packages 构建支持 - **ohos/packages/modules_install.py**: 更新模块安装逻辑 - **rust/rustc_toolchain.gni**: 更新 Rust 工具链配置 - **templates/idl/ohos_idl.gni**: 更新 IDL 配置 ## 技术细节 - 主机模式不需要设备板级信息和内核配置 - 支持标准的 packages 和 images 构建语义 - 保持与现有构建流程的完全兼容 ## 文件变更 - 20个文件变更,480行新增,206行删除 ## 测试计划 - ✅ 本地构建测试通过 - ✅ 主机模式编译验证正确 - ✅ 与其他组件逻辑保持一致 Co-Authored-By: Agent Signed-off-by: handyohos <zhangxiaotian@huawei.com> Change-Id: Id323814f4d68c69a8cb55097179a05bc9a394f6d 26 天前
Update RCPC Feature Activation Approach Signed-off-by: zzhang85 <925889398@qq.com> 12 天前
feat: build系统添加host_product主机模式编译支持 ## 新增功能 为OpenHarmony构建系统添加主机模式(host mode)编译支持,允许在主机上编译工具链而无需完整的设备配置。 ## 主要变更 ### 1. 构建配置优化 - 添加 is_host_productcompile_mode 参数支持 - 优化 device_company 和 device_build_path 配置,支持可选定义 - 新增 common_cross_packages 分组,支持主机模式依赖管理 ### 2. Python构建脚本优化 - **hb/resolver/build_args_resolver.py**: 增强构建参数解析,支持主机模式 - **hb/resolver/set_args_resolver.py**: 优化参数设置逻辑 - **hb/resources/config.py**: 更新配置处理 - **hb/services/loader.py**: 增强模块加载,支持主机产品 - **hb/services/preloader.py**: 添加主机模式预加载支持 - **hb/util/loader/load_bundle_file.py**: 优化bundle文件加载 - **hb/util/loader/load_ohos_build.py**: 更新ohos构建加载逻辑 - **hb/util/preloader/preloader_process_data.py**: 优化预加载处理 - **hb/util/product_util.py**: 增强产品工具函数 ### 3. GN构建配置 - **common/BUILD.gn**: 添加 common_cross_packages 模板 - **config/components/musl/BUILD.gn**: 优化 musl 组件配置 - **core/gn/BUILD.gn**: 更新 gn 工具链配置 - **ohos.gni**: 添加主机模式相关变量 - **ohos/packages/BUILD.gn**: 新增 packages 构建支持 - **ohos/packages/modules_install.py**: 更新模块安装逻辑 - **rust/rustc_toolchain.gni**: 更新 Rust 工具链配置 - **templates/idl/ohos_idl.gni**: 更新 IDL 配置 ## 技术细节 - 主机模式不需要设备板级信息和内核配置 - 支持标准的 packages 和 images 构建语义 - 保持与现有构建流程的完全兼容 ## 文件变更 - 20个文件变更,480行新增,206行删除 ## 测试计划 - ✅ 本地构建测试通过 - ✅ 主机模式编译验证正确 - ✅ 与其他组件逻辑保持一致 Co-Authored-By: Agent Signed-off-by: handyohos <zhangxiaotian@huawei.com> Change-Id: Id323814f4d68c69a8cb55097179a05bc9a394f6d 26 天前
refactor(dfx): remove crypto_utils.py and add conditional import Remove crypto_utils.py for security reasons. Update build_trace_uploader.py to conditionally import crypto_utils only when extra_request_header_encryption_key is configured in dfx_config.json. Co-Authored-By: Agent Signed-off-by: Luming <luming29@huawei.com> 1 个月前
update: 更新文件 bundle.json条件编译配置指导.md Signed-off-by: handyohos <zhangxiaotian@huawei.com>8 天前
refactor: 移除冗余的 is_host_product 条件属性 is_host_product 是从 compile_mode 派生的属性(compile_mode == 'host'), 作为条件是冗余的,直接使用 compile_mode 即可。 Co-Authored-By: Agent <noreply@anthropic.com> Signed-off-by: handyohos <zhangxiaotian@huawei.com> Change-Id: I60616e92b786f820be71875158b0f4e7e7611c99 12 天前
!6573 merge master into master update: 更新文件 README_zh.md Created-by: mr_zhao_cn Commit-by: mr_zhao_cn Merged-by: ohci1 Description: ### 相关的Issue ### 原因(目的、解决的问题等) ### 描述(做了什么,变更了什么) ### 测试用例(新增、改动、可能影响的功能) ### 是否需要同步至release(如: monthly_20221018,OpenHarmony-3.2-Beta5 ... )分支? 必须选择一项(在MarkDown模式下用[x]替换[ ]即可勾选对应选项): - [ ] 是,需要同步的分支: - [x] 否 理由: ### 是否需要刷新社区文档? [编译构建社区文档](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-build-all.md) - [ ] 是,刷新社区文档pr链接: - [x] 否 ### 是否已执行L0用例 - [ ] 已验证 - [ ] 不涉及。如不涉及,请写明理由 See merge request: openharmony/build!65732 个月前
test Signed-off-by: 周才杰 <cjzhou97@gmail.com> 1 年前
UP Signed-off-by: flying <pengmengjie1@huawei.com>1 年前
update taihe 1.12.1 Signed-off-by: lyujiayi <lyujiayi@huawei.com> Co-Authored-By: NA 17 天前
修复门禁偶现的python预下载问题 Signed-off-by: mr_zhao_cn <zhaohang44@huawei.com> 18 天前
feat: build系统添加host_product主机模式编译支持 ## 新增功能 为OpenHarmony构建系统添加主机模式(host mode)编译支持,允许在主机上编译工具链而无需完整的设备配置。 ## 主要变更 ### 1. 构建配置优化 - 添加 is_host_productcompile_mode 参数支持 - 优化 device_company 和 device_build_path 配置,支持可选定义 - 新增 common_cross_packages 分组,支持主机模式依赖管理 ### 2. Python构建脚本优化 - **hb/resolver/build_args_resolver.py**: 增强构建参数解析,支持主机模式 - **hb/resolver/set_args_resolver.py**: 优化参数设置逻辑 - **hb/resources/config.py**: 更新配置处理 - **hb/services/loader.py**: 增强模块加载,支持主机产品 - **hb/services/preloader.py**: 添加主机模式预加载支持 - **hb/util/loader/load_bundle_file.py**: 优化bundle文件加载 - **hb/util/loader/load_ohos_build.py**: 更新ohos构建加载逻辑 - **hb/util/preloader/preloader_process_data.py**: 优化预加载处理 - **hb/util/product_util.py**: 增强产品工具函数 ### 3. GN构建配置 - **common/BUILD.gn**: 添加 common_cross_packages 模板 - **config/components/musl/BUILD.gn**: 优化 musl 组件配置 - **core/gn/BUILD.gn**: 更新 gn 工具链配置 - **ohos.gni**: 添加主机模式相关变量 - **ohos/packages/BUILD.gn**: 新增 packages 构建支持 - **ohos/packages/modules_install.py**: 更新模块安装逻辑 - **rust/rustc_toolchain.gni**: 更新 Rust 工具链配置 - **templates/idl/ohos_idl.gni**: 更新 IDL 配置 ## 技术细节 - 主机模式不需要设备板级信息和内核配置 - 支持标准的 packages 和 images 构建语义 - 保持与现有构建流程的完全兼容 ## 文件变更 - 20个文件变更,480行新增,206行删除 ## 测试计划 - ✅ 本地构建测试通过 - ✅ 主机模式编译验证正确 - ✅ 与其他组件逻辑保持一致 Co-Authored-By: Agent Signed-off-by: handyohos <zhangxiaotian@huawei.com> Change-Id: Id323814f4d68c69a8cb55097179a05bc9a394f6d 26 天前
add action override and depfile pass https://gitee.com/openharmony/build/issues/ICT96D Signed-off-by: hosted <chenyadong18@huawei.com> 9 个月前
!6703 merge feature/host-product-clean into master feat: build系统添加host_product主机模式编译支持 Created-by: handyohos Commit-by: handyohos Merged-by: openharmony_ci Description: 关联Issue: https://gitcode.com/handyohos/build/issues/5 ## 功能需求 为OpenHarmony构建系统添加主机模式(host mode)编译支持,允许在主机上编译工具链而无需完整的设备配置。 ## 主要变更 ### 1. 构建配置优化 - 添加 is_host_productcompile_mode 参数支持 - 优化 device_company 和 device_build_path 配置,支持可选定义 - 新增 common_cross_packages 分组,支持主机模式依赖管理 ### 2. Python构建脚本优化 - **hb/resolver/build_args_resolver.py**: 增强构建参数解析,支持主机模式 - **hb/resolver/set_args_resolver.py**: 优化参数设置逻辑 - **hb/resources/config.py**: 更新配置处理 - **hb/services/loader.py**: 增强模块加载,支持主机产品 - **hb/services/preloader.py**: 添加主机模式预加载支持 - **hb/util/loader/load_bundle_file.py**: 优化bundle文件加载 - **hb/util/loader/load_ohos_build.py**: 更新ohos构建加载逻辑 - **hb/util/preloader/preloader_process_data.py**: 优化预加载处理 - **hb/util/product_util.py**: 增强产品工具函数 ### 3. GN构建配置 - **common/BUILD.gn**: 添加 common_cross_packages 模板 - **config/components/musl/BUILD.gn**: 优化 musl 组件配置 - **core/gn/BUILD.gn**: 更新 gn 工具链配置 - **ohos.gni**: 添加主机模式相关变量 - **ohos/packages/BUILD.gn**: 新增 packages 构建支持 - **ohos/packages/modules_install.py**: 更新模块安装逻辑 - **rust/rustc_toolchain.gni**: 更新 Rust 工具链配置 - **templates/idl/ohos_idl.gni**: 更新 IDL 配置 ## 技术细节 - 主机模式不需要设备板级信息和内核配置 - 支持标准的 packages 和 images 构建语义 - 保持与现有构建流程的完全兼容 ## 文件变更 - 20个文件变更,480行新增,206行删除 ## 测试计划 - ✅ 本地构建测试通过 - ✅ 主机模式编译验证正确 - ✅ 与其他组件逻辑保持一致 See merge request: openharmony/build!670325 天前
!6703 merge feature/host-product-clean into master feat: build系统添加host_product主机模式编译支持 Created-by: handyohos Commit-by: handyohos Merged-by: openharmony_ci Description: 关联Issue: https://gitcode.com/handyohos/build/issues/5 ## 功能需求 为OpenHarmony构建系统添加主机模式(host mode)编译支持,允许在主机上编译工具链而无需完整的设备配置。 ## 主要变更 ### 1. 构建配置优化 - 添加 is_host_productcompile_mode 参数支持 - 优化 device_company 和 device_build_path 配置,支持可选定义 - 新增 common_cross_packages 分组,支持主机模式依赖管理 ### 2. Python构建脚本优化 - **hb/resolver/build_args_resolver.py**: 增强构建参数解析,支持主机模式 - **hb/resolver/set_args_resolver.py**: 优化参数设置逻辑 - **hb/resources/config.py**: 更新配置处理 - **hb/services/loader.py**: 增强模块加载,支持主机产品 - **hb/services/preloader.py**: 添加主机模式预加载支持 - **hb/util/loader/load_bundle_file.py**: 优化bundle文件加载 - **hb/util/loader/load_ohos_build.py**: 更新ohos构建加载逻辑 - **hb/util/preloader/preloader_process_data.py**: 优化预加载处理 - **hb/util/product_util.py**: 增强产品工具函数 ### 3. GN构建配置 - **common/BUILD.gn**: 添加 common_cross_packages 模板 - **config/components/musl/BUILD.gn**: 优化 musl 组件配置 - **core/gn/BUILD.gn**: 更新 gn 工具链配置 - **ohos.gni**: 添加主机模式相关变量 - **ohos/packages/BUILD.gn**: 新增 packages 构建支持 - **ohos/packages/modules_install.py**: 更新模块安装逻辑 - **rust/rustc_toolchain.gni**: 更新 Rust 工具链配置 - **templates/idl/ohos_idl.gni**: 更新 IDL 配置 ## 技术细节 - 主机模式不需要设备板级信息和内核配置 - 支持标准的 packages 和 images 构建语义 - 保持与现有构建流程的完全兼容 ## 文件变更 - 20个文件变更,480行新增,206行删除 ## 测试计划 - ✅ 本地构建测试通过 - ✅ 主机模式编译验证正确 - ✅ 与其他组件逻辑保持一致 See merge request: openharmony/build!670325 天前
Add cangjie gn template Change-Id: Ie9680b4050052f65b17352849deb10bebb3833a5 Signed-off-by: zhoujing <zhoujing106@huawei.com> 8 个月前
使用本地安装gcc工具 Co-Authored-By: Agent Signed-off-by: wangmeng <wangmeng259@huawei.com> Change-Id: I5d842feb095ef8ecf6566d05d93aaf57b715b58d 1 个月前
#4375 告警优化 Signed-off-by: xuezhou_yan <yangang20@huawei.com> 3 个月前
update OpenHarmony 2.0 Canary 4 年前
update: 更新文件 .gitignore Signed-off-by: acorwa <jiangzhiqing4@h-partners.com>4 个月前
update OpenHarmony 2.0 Canary 4 年前
添加版权和许可证信息,修改build.sh命令 Co-authored-by: Yuenuan <yuwx@mails.neu.edu.cn> Signed-off-by: qixi3 <zhaoxb1@mails.neu.edu.cn> Signed-off-by: Yuenuan <yuwx@mails.neu.edu.cn> 9 个月前
切换gitcode Signed-off-by: kun-kun <linyuye@huawei.com>5 个月前
IssueNo: https://gitee.com/openharmony/build/issues/IBT10H Signed-off-by: liangxinyan <liangxinyan2@huawei.com> 1 年前
Update RCPC Feature Activation Approach Signed-off-by: zzhang85 <925889398@qq.com> 12 天前
使用feature对外提供产品可配置编译参数入口(缺省编译参数为"-O2") Signed-off-by: lfSeanDragon <18309220525@163.com>9 个月前
clear ninja environment issue: https://gitee.com/openharmony/build/issues/I8FWU2 Signed-off-by: chenyadong <chenyadong18@huawei.com> 2 年前
添加qemu arm64 virt平台显示驱动和子系统组件支持 为OpenHarmony构建系统添加qemu arm64 virt平台的显示驱动和 子系统组件配置支持。 主要修改内容: 1. 编译白名单更新(compile_standard_whitelist.json) - 添加qemu显示驱动的依赖白名单: - display_composer_vendor - libdisplay_buffer_vdi_impl - libdisplay_buffer_vendor - libdisplay_composer_vdi_impl 2. 子系统组件配置(subsystem_components_whitelist.json) - 添加device_arm64_virt子系统组件 - 添加product_arm64_virt子系统组件 技术背景: - 支持qemu arm64 virt full平台的显示驱动编译 - 完善虚拟化设备的子系统组件映射 - 与之前提交的device/qemu仓库的arm64 virt full平台配置配套 影响范围:qemu arm64 virt平台构建配置 关联PR:device_qemu#316 Co-Authored-By: Agent <noreply@anthropic.com> Signed-off-by: handyohos <zhangxiaotian@huawei.com> Change-Id: I4a489a1f4928ebb8bae7a5b13c35e556a9e8eeb4 21 天前
fix graphics_effect bundle compilation non-standard Signed-off-by: qinxikui <qinxikui3@h-partners.com> Co-Authored-By: Agent 1 个月前
删除feature白名单ui_lite Signed-off-by: lixinpeng <lixinpeng10@huawei.com> 1 年前
fix: Modify format Signed-off-by: 杨鹏昊 <yangpenghao1@h-partners.com> 1 年前
白名单路径更新 Signed-off-by: wangmengOnlineCode <wangmeng259@huawei.com> 8 个月前
feat: build系统添加host_product主机模式编译支持 ## 新增功能 为OpenHarmony构建系统添加主机模式(host mode)编译支持,允许在主机上编译工具链而无需完整的设备配置。 ## 主要变更 ### 1. 构建配置优化 - 添加 is_host_productcompile_mode 参数支持 - 优化 device_company 和 device_build_path 配置,支持可选定义 - 新增 common_cross_packages 分组,支持主机模式依赖管理 ### 2. Python构建脚本优化 - **hb/resolver/build_args_resolver.py**: 增强构建参数解析,支持主机模式 - **hb/resolver/set_args_resolver.py**: 优化参数设置逻辑 - **hb/resources/config.py**: 更新配置处理 - **hb/services/loader.py**: 增强模块加载,支持主机产品 - **hb/services/preloader.py**: 添加主机模式预加载支持 - **hb/util/loader/load_bundle_file.py**: 优化bundle文件加载 - **hb/util/loader/load_ohos_build.py**: 更新ohos构建加载逻辑 - **hb/util/preloader/preloader_process_data.py**: 优化预加载处理 - **hb/util/product_util.py**: 增强产品工具函数 ### 3. GN构建配置 - **common/BUILD.gn**: 添加 common_cross_packages 模板 - **config/components/musl/BUILD.gn**: 优化 musl 组件配置 - **core/gn/BUILD.gn**: 更新 gn 工具链配置 - **ohos.gni**: 添加主机模式相关变量 - **ohos/packages/BUILD.gn**: 新增 packages 构建支持 - **ohos/packages/modules_install.py**: 更新模块安装逻辑 - **rust/rustc_toolchain.gni**: 更新 Rust 工具链配置 - **templates/idl/ohos_idl.gni**: 更新 IDL 配置 ## 技术细节 - 主机模式不需要设备板级信息和内核配置 - 支持标准的 packages 和 images 构建语义 - 保持与现有构建流程的完全兼容 ## 文件变更 - 20个文件变更,480行新增,206行删除 ## 测试计划 - ✅ 本地构建测试通过 - ✅ 主机模式编译验证正确 - ✅ 与其他组件逻辑保持一致 Co-Authored-By: Agent Signed-off-by: handyohos <zhangxiaotian@huawei.com> Change-Id: Id323814f4d68c69a8cb55097179a05bc9a394f6d 26 天前
update sdk version Signed-off-by: weichaox <wangweichao2@huawei.com> Change-Id: Ia2e61e17d671243844f1bba20ca078286da17b25 4 年前
Update RCPC Feature Activation Approach Signed-off-by: zzhang85 <925889398@qq.com> 12 天前
update taihe version to 1.13.1 Signed-off-by: Jemtaly <Jemtaly@outlook.com> 11 天前
update: 更新文件 prebuilts_config.py 优化 Signed-off-by: mr_zhao_cn <zhaohang44@h-partners.com>14 天前
从配置文件中获取sdk版本 Signed-off-by: mr_zhao_cn <zhaohang44@huawei.com> 3 个月前
npm并行下载优化 Signed-off-by: mr_zhao_cn <zhaohang44@huawei.com> revert merge request: npm并行下载优化 3be81a444d3784c87fdfde7ae30b92d4d75ee9dd This revert merge request !63025 个月前
使用本地安装gcc工具 Co-Authored-By: Agent Signed-off-by: wangmeng <wangmeng259@huawei.com> Change-Id: I5d842feb095ef8ecf6566d05d93aaf57b715b58d 1 个月前
Description: rewrite python3 script Issue: https://gitee.com/openharmony/build/issues/I8GF0N Test: build Signed-off-by: xxlight <xiaoxiaoliang2@huawei.com> Change-Id: I32138cac0169abb5f0092c0c3602bf4d1e1b4d37 2 年前
[新需求]: 报错日志提取加强 & 编译日志敏感信息隐藏 https://gitee.com/openharmony/build/issues/ICVJ9K Signed-off-by: hosted <chenyadong18@huawei.com> 8 个月前
添加qemu arm64 virt平台显示驱动和子系统组件支持 为OpenHarmony构建系统添加qemu arm64 virt平台的显示驱动和 子系统组件配置支持。 主要修改内容: 1. 编译白名单更新(compile_standard_whitelist.json) - 添加qemu显示驱动的依赖白名单: - display_composer_vendor - libdisplay_buffer_vdi_impl - libdisplay_buffer_vendor - libdisplay_composer_vdi_impl 2. 子系统组件配置(subsystem_components_whitelist.json) - 添加device_arm64_virt子系统组件 - 添加product_arm64_virt子系统组件 技术背景: - 支持qemu arm64 virt full平台的显示驱动编译 - 完善虚拟化设备的子系统组件映射 - 与之前提交的device/qemu仓库的arm64 virt full平台配置配套 影响范围:qemu arm64 virt平台构建配置 关联PR:device_qemu#316 Co-Authored-By: Agent <noreply@anthropic.com> Signed-off-by: handyohos <zhangxiaotian@huawei.com> Change-Id: I4a489a1f4928ebb8bae7a5b13c35e556a9e8eeb4 21 天前
add bus subsystem Signed-off-by: hwymlgitcode <yangmingliang9@huawei.com> Change-Id: Ic09f376c0290f982d578d2ffb339495d6319ad43 1 个月前
modify. Signed-off-by: <zhouke35@huawei.com>. Signed-off-by: zhouke <zhouke35@huawei.com> 2 年前
IssueNo: IssueNo: https://gitcode.com/openharmony/build/issues/4118 Signed-off-by: liangxinyan <liangxinyan2@huawei.com> 6 个月前
test.gni bugfix Signed-off-by: huanghun_forward <huangguohui6@huawei.com> 2 个月前
del libffi gilb Signed-off-by: lishuo <lishuo92@h-partners.com> 10 个月前
update: 更新文件 version.gni Signed-off-by: laojifuli <maguangsheng1@h-partners.com>7 天前
fixed code checking issues Signed-off-by: weichaox <wangweichao2@huawei.com> Change-Id: Ifd94db8c84af9dd94225b9e600780cc31cbdedf3 4 年前

编译构建

简介

编译构建子系统提供了一个基于Gn和ninja的编译构建框架。

根据产品配置,编译生成对应的镜像包。其中编译构建流程为:

  1. 使用Gn配置构建目标。
  2. Gn运行后会生成ninja文件。
  3. 通过运行ninja来执行编译任务。

图 1 编译构建子系统架构图

目录

/build                           # 编译构建主目录

├── __pycache__                   
├── build_scripts/                # 编译相关的python脚本
├── common/                       
├── config/                       # 编译相关的配置项
├── core
│   ├── gn/                       # 编译入口BUILD.gn配置
│   └── build_scripts/            
├── docs                          
├── gn_helpers.py*                
├── lite/                         # hb和preloader入口                      
├── misc/                         
├── ohos                          # OpenHarmony编译打包流程配置
│   ├── kits                      # kits编译打包模板和处理流程
│   ├── ndk                       # ndk模板和处理流程
│   ├── notice                    # notice模板和处理流程
│   ├── packages                  # 版本打包模板和处理流程
│   ├── sa_profile                # sa模板和处理流程
│   ├── sdk                       # sdk模板和处理流程,包括sdk中包含的模块配置
│   └── testfwk                   # 测试相关的处理
├── ohos.gni*                     # 汇总了常用的gni文件,方便各个模块一次性import
├── ohos_system.prop              
├── ohos_var.gni*                 
├── prebuilts_download.sh*        # 预编译脚本
├── print_python_deps.py*         
├── scripts/                      
├── subsystem_config.json         
├── subsystem_config_example.json 
├── templates/                    # c/c++编译模板定义
├── test.gni*                     
├── toolchain                     # 编译工具链配置
├── tools                         # 常用工具
├── version.gni                   
├── zip.py*                       

约束与限制

  • 编译环境需要Ubuntu18.04及以上版本。

  • 安装编译所需的程序包。

    安装命令:

    sudo apt-get install bison ccache default-jdk flex gcc-arm-linux-gnueabi gcc-arm-none-eabi  genext2fs liblz4-tool libssl-dev libtinfo5 mtd-utils mtools openssl ruby scons unzip u-boot-tools  zip
    

说明

代码根目录下执行全量版本的编译命令

```
./build.sh --product-name {product_name}
```

编译结果镜像输出在 out/${device_name}/packages/phone/images/目录下。

编译命令支持选项

```
-h, --help                                        # 显示帮助信息并退出
--source-root-dir=SOURCE_ROOT_DIR                 # 指定路径
--product-name=PRODUCT_NAME                       # 指定产品名
--device-name=DEVICE_NAME                         # 指定装置名称
--target-cpu=TARGET_CPU                           # 指定cpu
--target-os=TARGET_OS                             # 指定操作系统
-T BUILD_TARGET, --build-target=BUILD_TARGET      # 指定编译目标,可以指定多个
--gn-args=GN_ARGS                                 # gn参数,支持指定多个
--ninja-args=NINJA_ARGS                           # ninja参数,支持指定多个
-v, --verbose                                     # 生成时显示所有命令行
--keep-ninja-going                                # 让ninja持续到1000000个工作失败
--jobs=JOBS                                       # 指定编译线程数
--export-para=EXPORT_PARA
--build-only-gn                                   # 只做gn解析,不运行ninja
--ccache                                          # 可选  编译使用ccache,需要本地安装ccache
--fast-rebuild                                    # 快速重建,default=False
--log-level=LOG_LEVEL                             # 指定编译期间的日志级别','三个级别可选:debug, info and error,default='info'
--device-type=DEVICE_TYPE                         # 指定设备类型,default='default'
--build-variant=BUILD_VARIANT                     # 指定设备操作模式,default='user'
```

配置文件说明

OpenHarmony的配置文件主要有四个。

  1. 每个模块对应的BUILD.gn文件。 可以使用提供的模板,也可以使用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 = ""            # 必选,所属部件名称
    }
    

    更多详细的模板信息请参照模块配置规则

  2. 子系统中bundle.json文件或者ohos.build(看子系统具体支持哪一个,后续将全部用bundle.json)

    bundle.json

    {
       "name": "@ohos/<component_name>",                 # HPM部件英文名称,格式"@组织/部件名称"
       "description": "xxxxxxxxxxxxxxxxxxx",             # 部件功能一句话描述
       "version": "3.1",                                 # 版本号,版本号与OpenHarmony版本号一致
       "license": "MIT",                                 # 部件License
       "publishAs": "code-segment",                      # HPM包的发布方式,当前默认都为code_segment
       "segment": {
           "destPath": ""
       },                                                # 发布类型为code_segment时为必填项,定义发布类型code_segment的代码还原路径(源码路径)
       "dirs": {},                                       # HPM包的目录结构,字段必填内容可以留空
       "scripts": {},                                    # HPM包定义需要执行的脚本,字段必填,值非必填
       "licensePath": "COPYING",
       "readmePath": {
           "en": "README.rst"
       },
       "component": {                                    # 部件属性
           "name": "<component_name>",                   # 部件名称
           "subsystem": "",                              # 部件所属子系统
           "syscap": [],                                 # 部件为应用提供的系统能力
           "features": [],                               # 部件对外的可配置特性列表,一般与build中的sub_component对应,可供产品配置
           "adapted_system_type": [],                    # 轻量(mini)小型(small)和标准(standard),可以是多个
           "rom": "xxxKB"                                # ROM基线,没有基线写当前值
           "ram": "xxxKB",                               # RAM基线,没有基线写当前值
           "deps": {
               "components": [],                         # 部件依赖的其他部件
               "third_party": []                         # 部件依赖的三方开源软件
           },
           "build": {                                    # 编译相关配置
               "sub_component": ["部件包含模块的gn目标"],  # 部件编译入口,新增模块在此处配置
               "inner_kits": [],                         # 部件间接口
               "test": []                                # 部件测试用例编译入口
           }
       }
    }
    

    bundle.json文件定义了子系统包含的部件。每个部件定义它所包含的模块目标component.build.sub_component,以及部件间交互的接口component.build.inner_kits, 测试用例component.build.test_list。部件包含的 模块目标component.build.sub_component是必须要说明的。

    ohos.build

    {
    "parts": {
      "napi": {
        "module_list": [
          "//foundation/arkui/napi:napi_packages"              # 部件包含模块的gn目标
        ],
        "inner_kits": [                                        # 部件间接口
        ],
        "test_list": [                                         # 测试用例
          "//foundation/arkui/napi:napi_packages_test",
          "//foundation/arkui/napi/test/unittest:unittest"
        ]
      }
    
      "新增部件名": {
        "module_list": [
          "部件包含的gn目标"                                    # 部件包含模块的gn目标
        ],
        "inner_kits": [                                        # 部件间接口
        ],
        "test_list": [                                         # 测试用例
          "包含的测试用例",
        ]
      }
    }
    ......
    "subsystem": "ace",                                        # 所属子系统
    }
    

    ohos.build文件包含两个部分,subsystem部分说明了子系统的名称,parts部分定义了该子系统包含的部件,要添加一个部件,需要把该部件对应的内容添加进parts中去。添加的时候需要指明该部件包含的模块module_list,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test_list中说明,inner_kits与test_list没有也可以不添加。

    这两个文件均在对应的子系统根目录下,新增模块均在指定的目录下新增模块的gn目标即可,如果要新增一个部件,则需要在部件目录中新建一个bundle.json或者ohos.build,然后再在//vendor/{product_company}/{product-name}/config.json中添加对应的部件,直接添加到原有部件后即可。具体流程请参照编译构建指导的配置规则新增并编译不同配置,其中详细的介绍了如何添加一个模块、部件或者子系统。

    成功添加验证:

    • 在输出文件夹的对应子系统文件夹下的部件文件夹下的BUILD.gn文件中module_list包含了新建模块的BUILD.gn中定义的目标。
    • 编译完成后打包到image中去,生成对应的so文件或者二进制文件。
  3. vendor\产品厂商\产品名\config.json

    {
      "product_name": "MyProduct",
      "version": "3.0",
      "type": "standard",
      "target_cpu": "arm",
      "ohos_version": "OpenHarmony 1.0",
      "device_company": "MyProductVendor",
      "board": "MySOC",
      "enable_ramdisk": true,
      "subsystems": [
        {
          "subsystem": "ace",
          "components": [
            { "component": "ace_engine_lite", "features":[""] }
          ]
        },
        ...
      ]
    }
    

    指明了产品名,产品厂商,产品设备,版本,要编译的系统类型,以及产品包含的子系统。

  4. build目录下的subsystem_config.json文件。

    {
      "arkui": {
       "path": "foundation/arkui",
       "name": "arkui"
      },
      "ai": {
       "path": "foundation/ai",
       "name": "ai"
      },
      ......
    }
    

    该文件对子系统进行了说明,我们需要该子系统定义中的name与path,分别表示子系统的名称和所在文件夹路径。

ohos-sdk编译

**编译命令:**

``` ./build.sh --product-name ohos-sdk --ccache ```

**结果输出:**

``` out/sdk/packages/ohos-sdk/ ```

**ohos-sdk模块配置:**

``` build/ohos/sdk/ohos_sdk_description_std.json ```

常见问题说明

如何将一个模块编译并打包到版本中?

  • 模块要指定part_name,指定它归属的部件,一个模块只能属于一个部件;
  • 部件的模块,要在部件配置的module_list中,或者可以被module_list中的模块依赖到;
  • 部件要加到对应产品的部件列表中;

FAQ

关于deps和external_deps的使用

标准系统如何添加一个模板并参与编译

标准系统如何修改镜像文件的打包参数

如何跟随系统使用gn编译hap

开源软件Notice收集策略说明

生成开源软件包指南

构建系统编码规范与最佳实践

部件化编译最佳实践

相关仓

编译构建子系统

build_lite

下载使用量

0

项目总下载次数(含Clone、Pull、 zip 包及 release 下载),每日凌晨更新

语言类型

Python93.82%
Shell2.69%
Rust1.37%
C++1.1%
CMake0.5%