目标和动力
过去,Fuchsia 的构建系统包含一个内部构建系统,用于构建我们称之为 Zircon 的部分代码。这包括 Zircon 内核和相关库,以及在某个时间点在组织或技术上与内核或内核工作者关联的代码。
所有 build 定义现已迁移到单个系统,但一些 build 定义仍沿用先前系统的旧版系统。特别是,还有两个适用于 build 模板的旧版封装容器:
zx_library()
zx_host_tool()
这些模板会使用一些额外的逻辑封装其他常见的 build 模板,以便在 Zircon 中强制实施 C++ 代码和头文件的通用结构。随着时间的推移,它们不断演变,能够承载其他逻辑(例如将工件发布到 SDK),而这种逻辑也是通过其他模板实现的,因此具有重复性,可能会让人感到困惑。最后,一些最常见的用例可通过标准 GN 目标类型实现,这些类型更常见且文档也更详尽。
技术背景
我们建议您最好拥有使用 BUILD.gn
文件的一般经验,但这并非强制要求。
请参阅 GN 参考指南。
如何提供帮助
选择任务
首先,在 build 文件中查找 zx_library
或 zx_host_tool
的任何实例。
zx_library("foo") {
...
}
或者,还有一份许可名单,列出仍在使用旧模板的所有现有目录,无论是直接还是通过其他封装容器。您可以在 //build/BUILD.gn
中找到许可名单。在“"deprecated_zx_wrapper_allowlist"
”组下。
执行任务
使用其他模板重写使用 zx_*
封装容器的目标。
将 zx_library
替换为以下项之一:
source_set
sdk_source_set
static_library
sdk_static_library
shared_library
sdk_shared_library
尽可能使用内置目标类型
zx_library
通常可以替换为 source_set
或 static_library
,尤其是对于不会关联到内核的代码而言。
通常,zx_host_tool
可替换为内置 executable
规则,将其与主机工具链配合使用,就像通常用于构建主机二进制文件一样。
executable("my-host-tool") {
sources = [
"main.cc",
...
]
...
}
# To build as a host tool, append the string "($host_toolchain)" to the
# dependency
group(...) {
deps = [
":my-host-tool($host_toolchain)",
...
]
}
如果 SDK 中使用了该工具,那么您可能还需要定义一个 sdk_atom
目标。//build/sdk/sdk_host_tool.gni
中提供了一个便捷封装容器,专门用于实现此目的。
定义公开标头
zx_library
模板提供了实用且方便的逻辑来定义 C/C++ 头文件,以供其从属项公开使用。此逻辑还促进了 C/C++ 包含内容的一致源代码布局。
现在,您可以使用专用模板完成同样的操作。在此之前,您需要定义以下内容:
import("//build/unification/zx_library.gni")
zx_library("foo_headers") {
sdk = "source"
sources = []
sdk_headers = [ "foo.h" ]
}
source_set("foo_client") {
sources = [ "foo.cc" ]
deps = [ ":foo_headers" ]
}
而应定义:
import("//build/cpp/library_headers.gni")
library_headers("foo_headers") {
headers = [ "foo.h" ]
}
source_set("foo_client") {
sources = [ "foo.cc" ]
public_deps = [ ":foo_headers" ]
}
另请参阅:474231:[build] Add library_headers() template。
完成任务
在准备更改时,请务必从列出您已清理的目录的 //build/BUILD.gn
中移除所有行。
按照常规流程将更改送审。
示例
赞助商
如有疑问或想了解最新状态,请与我们联系: