废弃了 zx*

目标和动力

过去,Fuchsia 的构建系统包含一个内部构建系统,用于构建 代码子集,我们粗略地称之为 Zircon。这包括 Zircon 内核和相关库,以及在某个时间点 与内核或负责相关工作的人员 在内核上正常运行

此后,所有 build 定义都已迁移到单个系统,但一些 build 定义仍然沿用了以前系统的旧版系统。 具体而言,构建模板仍然存在两个旧版封装容器:

  • zx_library()
  • zx_host_tool()

这些模板通过一些额外的逻辑封装了其他常见的构建模板 它旨在强制使用 C++ 代码和头文件的通用结构, 锆石。随着时间的推移,它们已经演变到可承载其他逻辑,例如用于发布 软件工件发送到 SDK,这也可以通过其他模板实现, 重复的内容,可能会让人感到困惑。最后,一些最常见的应用场景 可以通过标准的 GN 目标类型来实现,这些目标类型更加熟悉且 记录。

技术背景

建议具备使用 BUILD.gn 文件的一般经验,但不建议这样做 但这完全是必要的 请参阅 GN 参考指南。

如何提供帮助

选择任务

首先,在 build 文件中查找 zx_libraryzx_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_setstatic_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 列出您清理的目录

按照常规流程将更改送审。

示例

赞助商

如有疑问或需要更新状态,欢迎与我们联系: