目标和动机
2020 年,我们推出了新的 build 模板,用于定义软件包、组件及其测试。新模板更贴切地反映了项目的架构目标和方向。它们取代了 2016 年之前的旧模板,主要是 package()
、test_package()
和 unittest_package()
。
新模板的一些优势包括:
- 减少重复,语法更简洁。根据将旧目标迁移到新模板的经验,新定义的行数减少了 30%-50%。
- 组件可以定义一次,然后在多个软件包中使用。例如,在参与产品定义的正式版软件包的定义中重复使用同一组件,以及在包含组件与其他组件之间的集成测试的软件包中重复使用同一组件。
- 由于组件和软件包可以单独定义,因此构建系统知道哪些依赖项属于哪个组件,因此可以为您执行更复杂的构建时验证,自动检测错误并提供更清晰的反馈。
- 系统支持更多原生用例,而无需使用特殊语法。
例如,包含驱动程序、额外数据文件或共享库的软件包不需要特殊语法,只需在定义要让组件使用的功能或软件包要包含的内容的 build 目标上添加
deps
即可。 - 您可以更轻松地定义不需要手动编写组件清单 (
.cml
文件) 的简单测试。 - 文档更完善,涵盖更多语言和用例。
迁移到新模板后,我们的 build 定义会变得更易于阅读和更实用,并有助于清理与打包相关的底层技术债务,这些债务仅仅是为了服务于旧版 package()
模板而保留。请帮助我们将所有旧模板的用途都替换为新模板,以便我们继续处理。
技术背景
请参阅有关构建组件的指南。
建议具备处理 BUILD.gn
文件的一般经验,但这并不是完全必要的。请参阅 GN 参考指南。
如何提供帮助
选择任务
建议您先从 "deprecated_package"
组下的 //build/BUILD.gn
列表开始。
找到一个您熟悉的目录,或随机选择一个目录。在此目录的 BUILD.gn
文件中,您可能会看到使用旧模板的 build 目标,例如:
package("foo") {
...
}
执行任务
在您选择的目录中,移除 BUILD.gn
文件中模板 package()
、test_package()
或 unittest_package()
的所有用法。请注意,文件中可能还会使用其他模板来封装这些模板。请删除 //build/BUILD.gn
中的关联行,然后检查您是否仍然能够生成 build(运行 fx gen
,然后检查 GN 是否成功生成了没有错误的 Ninja 文件),以确保您已解决所有问题。
完成任务
准备更改时,请务必从列出了您清理掉的目录的 //build/BUILD.gn
中移除所有行。
将代码审核发送给包含要更改的 build 定义的目录的所有者,或发送给下列自愿帮助进行这些迁移的人员:
- shayba@google.com
- xbhatnag@google.com
新志愿者?请将您自己添加到名单中!
示例
- 464409:[时间] 将所有软件包和测试迁移到新的 build 规则
- 464407:[build] 将 //src/sys/lib 中的测试迁移到新的 build 规则
- 464410:[build] 将 //src/sys 中的软件包迁移到新的 build 规则
- 473597:[会话] 将所有软件包和测试迁移到新的 build 规则
赞助商
如有疑问或需要了解最新状态,请与我们联系: