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] 新增 library_headers() 範本

完成工作

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

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

範例

贊助商

如有任何問題或想瞭解最新進度,請與我們聯絡: