Fuchsia 建構系統

總覽

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 實際執行的操作。

本文件的其餘部分會假設 gnninja 指令為 可在 PATH 中使用。您可以在 「prebuilt/third_party/gn/<platform>」和 prebuilt/third_party/ninja/<platform>。此外,如果 如果不想修改 PATH,可以在所有叫用前方加上前置字串 搭配 fx,也就是 fx gnfx 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 會保留可用於產生的記錄檔 建構程序的視覺化效果:

  1. 刪除輸出目錄,這是為了確保記錄檔僅代表 打造新版本
  2. 按照平常的方法執行建構作業;
  3. 取得 https://github.com/nico/ninjatracing
  4. 執行 ninjatracing <output directory>/.ninja_log > trace.json
  5. 在 Chrome 的 about:tracing 中載入產生的 JSON 檔案。

疑難排解

我的 GN 目標沒有在建置!

請確定其匯總至模組檔案中定義的標籤,否則即建構 系統就會忽略它

GN 抱怨缺少「sysroot」的抱怨。

您可能忘了執行「Build step」(建構步驟) 的兩個指令。

TODO(pylaligand):顯示預設目標路徑的指令

內部 GN 設定

TODO(pylaligand):.gn、預設目標、GN 標籤插入