zx_* 包裝函式已淘汰

目標與動力

過去, Fuchsia 的建構系統包含內部建構系統,用於建構一組鬆散稱為 Zircon 的程式碼。其中包括 Zircon 核心和相關程式庫,以及特定時間點的程式碼,與核心或核心人員的工作相關。

所有建構定義均已遷移至單一系統,但某些建構定義仍會沿用舊版系統的舊版。尤其是建構範本中仍然有兩個舊版包裝函式:

  • zx_library()
  • zx_host_tool()

這些範本會納入其他常見的建構範本與一些額外的邏輯,該範本旨在在 Zircon 中強制執行 C++ 程式碼和標頭的通用結構。經過一段時間後,這些邏輯不斷進化,以便納入其他邏輯 (例如將構件發布至 SDK),而其他範本也能夠執行這個邏輯,因此會造成重複且可能造成混淆。最後,標準 GN 目標類型可透過較熟悉且詳盡的說明文件,實現部分最常見的用途。

技術背景

我們建議對 BUILD.gn 檔案的一般使用經驗,但並非必要。請參閱 GN 參考資料指南。

如何提供幫助

選取工作

首先,在建構檔案中尋找 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,尤其是不會連結至核心的程式碼。

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] 新增程式庫_headers() 範本

完成工作

準備變更時,請務必從 //build/BUILD.gn 列出您清除的目錄中移除任何行。

使用一般程序將變更送審。

範例

贊助者

提問或詢問最新進度:

  • <數字>@google.com