建構系統

Fuchsia 建構使用產生 Ninja (GN),這是一個中繼建構系統,該系統產生由 Ninja 使用的建構檔案,以便執行實際建構作業。 建構系統提供工具來設定特定產品和範本的建構作業,以便建構 Fuchsia 目標的程式碼。

建立目標

您可以使用含有專案原始碼的 BUILD.gn 檔案,定義 GN 的個別建構目標。Fuchsia 建構系統提供範本做為 GN 匯入項目 (.gni),以便您宣告 Fuchsia 構件,例如:

  • fuchsia_component():定義一個可執行元件,其中包含資訊清單、程式二進位檔和資源。
  • fuchsia_package():定義套件,其中包含要在套件存放區中發布的一或多個元件。
  • fuchsia_test_package():定義包含測試元件的套件。

以下是包含測試的簡易元件套件的 BUILD.gn 檔案範例:

import("//build/components.gni")

executable("bin") {
  sources = [ "main.cc" ]
}

fuchsia_component("hello-world-component") {
  deps = [ ":bin" ]
  manifest = "meta/hello-world.cml"
}

fuchsia_package("hello-world") {
  deps = [
    ":hello-world-component",
  ]
}

fuchsia_component("hello-world-test-component") {
  testonly = true
  deps = [ ":bin_test" ]
  manifest = "meta/hello-world-bin-test.cml"
}

fuchsia_test_package("hello-world-tests") {
  test_components = [ ":hello-world-test-component" ]
}

由目標名稱和 BUILD.gn 檔案路徑組成的不重複標籤,會識別可參與建構作業的所有內容。在上述範例中,hello-world 目標的標籤可能如下所示://src/examples/basic:hello-world

建構設定

GN 前端會根據所選的 Fuchsia 產品設定設定版本,並收集該版本所需的所有必要套件和元件。這些目標會在整個原始碼樹狀結構中透過不同的 BUILD.gn 檔案定義。GN 步驟的輸出內容是建構目錄中的 Ninja 最佳化操作說明。

執行 fx set 指令設定建構作業時,建構系統會叫用 GN。

fx set minimal.x64

如要調整產品設定或版本可用的套件,您應隨時執行 GN 設定步驟。只要目前設定中的任何 BUILD.gn 檔案有所變更,系統也會在建構期間自動叫用 GN。

主面板與產品

Fuchsia 建構系統會將 Fuchsia 版本的基準設定定義為「產品」和「板型」的組合。這些元素共同構成了您提供給 fx set 的建構設定。

白板定義建構目標的架構,這個架構可能會影響內含驅動程式的項目,並影響裝置專用的核心參數。

本程式碼研究室會鎖定 x64 板,其支援在 x64 架構上執行的 Fuchsia 模擬器 (FEMU)。

產品會定義建構作業產生的軟體設定。這項設定可能包括可用的服務和麵向使用者的體驗。

本程式碼研究室的目標為 minimal_eng 產品。

建構

GN 建構設定完成後,Ninja 會使用產生的建構檔案,並執行適當的編譯、連結和封裝指令,以便產生 Fuchsia 映像檔。

當您執行 fx build 指令來執行目前的建構設定時,建構系統會叫用 Ninja。

fx build

運動:建造極簡

在本練習中,您將從原始碼建構 minimal_eng 產品設定,以便在 x64 模擬器板上執行。

設定版本

minimal 產品和 x64 主面板設定建構環境:

fx set minimal.x64

這個指令會對產品建構設定中定義的一組目標執行 GN,以產生建構操作說明。實際上不會執行建構,而是定義可建構的參數。

檢查建構設定

建構設定後,請使用 fx list-packages 輸出建構知道的套件組合:

fx list-packages

此工具有助於判斷是否需要在建構設定中正確納入所需的套件。

建造 Fuchsia 最少

使用 fx build 建立最低目標:

fx build

重新啟動模擬器

  1. 執行下列指令,關閉目前開啟的所有模擬器執行個體:

    ffx emu stop --all
    
  2. 啟動新的模擬器執行個體:

    ffx emu start --headless
    

    啟動完成後,模擬器會輸出下列訊息並傳回:

    Logging to "$HOME/.local/share/Fuchsia/ffx/emu/instances/fuchsia-emulator/emulator.log"
    Waiting for Fuchsia to start (up to 60 seconds)........
    Emulator is ready.
    

檢查裝置

開啟另一個終端機視窗,然後執行以下指令,顯示裝置目標的詳細資料:

ffx target show

尋找目標輸出的建構設定:

Version: "2000-01-01T12:00:00+00:00"
Product: "minimal_eng"
Board: "x64"
Commit: "2000-01-01T12:00:00+00:00"

請注意,設定會指向剛才在機器上完成的建構作業。

您正在執行自己的 Fuchsia 版本!