目标和动力
过去,Fuchsia 的构建系统包含一个内部构建系统,用于构建 代码子集,我们粗略地称之为 Zircon。这包括 Zircon 内核和相关库,以及在某个时间点 与内核或负责相关工作的人员 在内核上正常运行
此后,所有 build 定义都已迁移到单个系统,但一些 build 定义仍然沿用了以前系统的旧版系统。 具体而言,构建模板仍然存在两个旧版封装容器:
zx_library()
zx_host_tool()
这些模板通过一些额外的逻辑封装了其他常见的构建模板 它旨在强制使用 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
,
尤其是针对无法链接到内核的代码。
通常,可以使用内置的 executable
规则替换 zx_host_tool
,方法是使用以下代码:
将其与主机工具链配合使用,就像通常用于构建主机二进制文件一样。
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++ include 升级了一致的源布局。
现在,您可以使用专用模板完成相同的操作。之前地点 您需要定义:
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] 添加了 library_headers() 模板。
完成任务
在准备更改时,请务必从
//build/BUILD.gn
列出您清理的目录
按照常规流程将更改送审。
示例
赞助商
如有疑问或需要更新状态,欢迎与我们联系: