總覽
Fuchsia 建構系統的目標是建構開機映像檔和可更新 適用於各種裝置的套件為此,系統會使用 GN (一種中繼建構) 產生 Ninja 使用的建構檔案, 實際執行建構作業
請注意,Zircon 使用不同的建構系統,但仍然使用 GN 和 Ninja
開始使用
如果您不熟悉 Fuchsia 的建構系統和 GN,請參閱使用 GN 建構,概述 GN 建構系統的基本原則。
主面板和產品
生成圖片的內容是由 以及他們最基本 Fchsia 開始配置的產品 建構應用程式主面板和產品會定義用於定義套件的依附元件組合 映像檔、更新與套件存放區中的執行個體 看板和產品文件的結構和結構 並且妥善運用這些建構設定
套書
套裝組合是來源樹狀結構中一部分的相關套件群組,
例如所有工具或所有測試如需套裝組合的總覽,請參閱
套裝組合。一組頂層套件定義於
//bundles
。
建立目標
建構目標是在分散所有來源的 BUILD.gn
檔案中定義
。這些檔案使用類似 Python 的語法來宣告可建構的物件:
import("//build/some/template.gni")
my_template("foo") {
name = "foo"
extra_options = "//my/foo/options"
deps = [
"//some/random/framework",
"//some/other/random/framework",
]
}
可用的指令 (使用 gn cli 工具叫用) 和構建 (內建目標)
宣告類型) 定義,於 GN 參考資料中定義。另有
您也可以在「目錄」下的 .gni
檔案中
//build
專案。
Fuchsia 定義許多自訂範本 支援定義和建構 Fuchsia 特有的文物。
執行建構作業
最簡單的方法是透過 fx
工具,如
FX 工作流程。繼續閱讀
fx
實際執行的操作。
本文件的其餘部分會假設 gn
和 ninja
指令為
可在 PATH
中使用。您可以在
「prebuilt/third_party/gn/<platform>
」和
prebuilt/third_party/ninja/<platform>
。此外,如果
如果不想修改 PATH
,可以在所有叫用前方加上前置字串
搭配 fx
,也就是 fx gn
或 fx ninja
。
產生步驟
請先選擇主機板和產品,設定主要建構構件 建構:
fx gn gen $(fx get-build-dir) --args='import("//boards/x64.gni") import("//products/core.gni")'
這項操作會建立包含 Ninja 的建構目錄 (通常是 out/default
)
檔案。
對等的 fx set
指令如下:
fx set core.x64
如要查看所有 GN 建構引數的清單,請執行:
fx gn args $(fx get-build-dir) --list
如需 select_variant
引數的說明文件,請參閱「Variants」一文。
建構步驟
下一步是使用 Ninja 執行實際建構作業:
fx ninja -C $(fx get-build-dir)
這是 fx build
剛剛執行的內容。
重新建構中
如要在修改某些來源後重建樹狀結構,只需重新執行
建構步驟。即使您將 BUILD.gn
檔案修改為 GN 新增,也適用相同情況
如果建構檔案發生變更,Ninja 目標就會更新 Ninja 目標!維持不變
適用於設定版本的其他檔案。任何來源變更
需要手動撤銷「Gen 步驟」才會是建構錯誤。
。
提示與秘訣
檢查 GN 目標的內容
fx gn desc $(fx get-build-dir) //path/to/my:target
尋找對 GN 目標的參照
fx gn refs $(fx get-build-dir) //path/to/my:target
參照建構主機的目標
必須建構多種主機工具 (有些在建構作業中使用) 成品
如要從模組檔案參照主機工具鍊的建構目標:
//path/to/target(//build/toolchain:host_x64)
從 BUILD.gn
中參照主機工具鍊的建構目標
檔案:
//path/to/target($host_toolchain)
只建立特定目標
如果目標在 GN 建構檔案中定義為 //foo/bar/blah:dash
,該目標
及其依附元件
fx ninja -C $(fx get-build-dir) -j64 foo/bar/blah:dash
請注意,這僅適用於預設工具鍊中的目標。
探索忍者目標
GN 針對 Ninja 產生的大量文件提供詳盡文件。說明文件是 可透過以下裝置瀏覽:
fx gn help ninja_rules
您也可以瀏覽目前在輸出內容中定義的 Ninja 目標組合 目錄,當中包含:
fx ninja -C $(fx get-build-dir) -t browse
請注意,出現 Ninja 目標不代表將會針對 Ninja 建立目標 需要依附於「default」目標
瞭解 Ninja 的功用
將 -d explain
新增至 Ninja 指令,藉此說明 Pod 的每個步驟
對建構時間問題進行偵錯
執行建構作業時,Ninja 會保留可用於產生的記錄檔 建構程序的視覺化效果:
- 刪除輸出目錄,這是為了確保記錄檔僅代表 打造新版本
- 按照平常的方法執行建構作業;
- 取得 https://github.com/nico/ninjatracing。
- 執行
ninjatracing <output directory>/.ninja_log > trace.json
; - 在 Chrome 的
about:tracing
中載入產生的 JSON 檔案。
疑難排解
我的 GN 目標沒有在建置!
請確定其匯總至模組檔案中定義的標籤,否則即建構 系統就會忽略它
GN 抱怨缺少「sysroot
」的抱怨。
您可能忘了執行「Build step」(建構步驟) 的兩個指令。
TODO(pylaligand):顯示預設目標路徑的指令
內部 GN 設定
TODO(pylaligand):.gn、預設目標、GN 標籤插入