目標與動力
過去, Fuchsia 的建構系統包含內部建構系統,用於建構一組鬆散稱為 Zircon 的程式碼。其中包括 Zircon 核心和相關程式庫,以及特定時間點的程式碼,與核心或核心人員的工作相關。
所有建構定義均已遷移至單一系統,但某些建構定義仍會沿用舊版系統的舊版。尤其是建構範本中仍然有兩個舊版包裝函式:
zx_library()
zx_host_tool()
這些範本會納入其他常見的建構範本與一些額外的邏輯,該範本旨在在 Zircon 中強制執行 C++ 程式碼和標頭的通用結構。經過一段時間後,這些邏輯不斷進化,以便納入其他邏輯 (例如將構件發布至 SDK),而其他範本也能夠執行這個邏輯,因此會造成重複且可能造成混淆。最後,標準 GN 目標類型可透過較熟悉且詳盡的說明文件,實現部分最常見的用途。
技術背景
我們建議對 BUILD.gn
檔案的一般使用經驗,但並非必要。請參閱 GN 參考資料指南。
如何提供幫助
選取工作
首先,在建構檔案中尋找 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] 新增程式庫_headers() 範本。
完成工作
準備變更時,請務必從 //build/BUILD.gn
列出您清除的目錄中移除任何行。
使用一般程序將變更送審。
範例
贊助者
提問或詢問最新進度: