本頁說明如何在主體機器上找出 FIDL 檔案、用戶端程式庫,以及在主體機器上使用 Fuchsia SDK 搭配 Bazel 建構系統,為 Fuchsia 專案建構構件。
在以 Fuchsia SDK 為基礎的開發環境中開發 Fuchsia 元件時,開發人員會使用 Fuchsia SDK 中包含的介面和程式庫:
Bazel 建構系統可在開發環境中使用這些介面和程式庫,因此可以在主機上建構含有 Fuchsia 元件的 Fuchsia 套件,並在主機上產生建構構件。
以 Fuchsia SDK 為基礎的專案中的 FIDL 檔案
請先執行 bazel build
指令,在本機專案設定中建立 FIDL 檔案的符號連結,例如:
bazel build @fuchsia_sdk//:ffx
您可以在本機專案結帳頁面的以下目錄中,找到以 Bazel-和-Fuchsia SDK 為基礎的專案所納入的所有 FIDL 檔案 (.fidl
:
<YOUR_PROJECT_CHECKOUT_DIR>/bazel-<PROJECT_NAME>/external/fuchsia_sdk/fidl
如要在主機上找出 <YOUR_PROJECT_CHECKOUT_DIR>/bazel-<PROJECT_NAME>
的絕對路徑,您可以執行 bazel info output_base
指令。
如要進一步瞭解每個 FIDL 介面,請參閱 FIDL 參考資料頁面。
使用 Bazel 指令列出 FIDL 目標
您也可以使用 Bazel 指令,列出以 Bazel-and-Fuchsia SDK 為基礎的開發環境。
如要列出開發環境中可用的 FIDL 目標,請使用下列範本執行 bazel query
指令:
bazel query 'ATTR(<GENERATOR_FUNCTION>, <FUCHSIA_FIDL_LIBRARY>, <PATH>)'
請參閱下列指令範例:
請列出本機專案結帳內容最上方 FIDL 目錄中的所有目標:
$ bazel query '@fuchsia_sdk//fidl/...'
列出特定 FIDL 通訊協定目錄中的所有目標:
$ bazel query '@fuchsia_sdk//fidl/fuchsia.auth/...'
列出最上方 FIDL 目錄中所有產生的 C++ 程式庫:
$ bazel query 'kind(cc_library, @fuchsia_sdk//fidl/...)'
Fuchsia 為每個 FIDL 目標產生多個
cc_library
目標。因此,這些指令通常會輸出一份龐大的清單。請考慮使用grep
指令篩選輸出內容。
以 Fuchsia SDK 為基礎的專案中的用戶端程式庫
Fuchsia SDK 內含 C++ 用戶端程式庫,可在 Fuchsia 可用 API 上提供實用功能和建構模塊。不過,與 FIDL 檔案 (用於描述系統必須在執行階段提供的服務) 不同,用戶端程式庫的程式碼 (無論是原始碼或預先建構的形式) 一律不是 Fuchsia 平台的一部分,因此必須在建構時直接加入 Fuchsia 套件。
在以 Bazel 和-Fuchsia SDK 為基礎的專案中,所有用戶端程式庫、標頭檔案 (.h
) 和預先建構的檔案 (.so
) 都位於本機專案結帳頁面的下列目錄中:
<YOUR_PROJECT_CHECKOUT_DIR>/bazel-<PROJECT_NAME>/external/fuchsia_sdk/arch
<YOUR_PROJECT_CHECKOUT_DIR>/bazel-<PROJECT_NAME>/external/fuchsia_sdk/pkg
如要進一步瞭解每個用戶端程式庫,請參閱標頭檔案中的註解。
透過 Bazel 建構系統建構構件
在以 Bazel 和-Fuchsia SDK 為基礎的開發環境中執行 bazel build
指令時,Bazel 建構系統會編譯目標 Fuchsia 軟體 (在 BUILD.bazel
檔案中指定),並產生下列建構構件:
- Fuchsia 套件 (
.far
):包含新建構的 Fuchsia 元件和二進位檔 (例如驅動程式庫二進位檔)。 - 「偵錯符號」 – 必須針對偵錯訊息和記錄進行符號化處理。
這些建構構件在開發環境中產生的確切位置取決於您的 Fuchsia 專案的設定。如要找出這些位置,請檢查專案 Bazel 建構系統的設定。舉例來說,SDK 驅動程式庫程式範例存放區 (fuchsia-drivers
) 會將 Bazel 建構構件儲存在主體的 $HOME/.cache/bazel
目錄中,
使用 Bazel 指令列出建構構件
您也可以使用 Bazel 指令,在以 Bazel-和-Fuchsia SDK 為基礎的開發環境中,列出並尋找特定 Fuchsia 套件的所有建構構件。
如要列出為開發環境中新建的 Fuchsia 套件產生的所有建構構件,請使用下列範本執行 bazel cquery
指令:
bazel cquery <PATH:TARGET> --output files
更改下列內容:
PATH
:開發環境中目標 Fuchsia 套件的目錄路徑。TARGET
:目標 Fuchsia 套件的標籤。
以下範例指令會輸出為 iwlwifi
驅動程式庫套件產生的建構構件清單:
$ bazel cquery //third_party/iwlwifi/platform:iwlwifi_pkg --output files
附錄
bazel 查詢和 bazel cquery 的差異
bazel query
指令會傳回無法設定目標的相關資訊,因此,無法列出產生的建構構件。另一方面,bazel cquery
指令會傳回在特定建構設定中評估的目標相關資訊。
根據預設,bazel cquery
指令使用的建構設定與您主機系統的架構相符。舉例來說,在 x64
Linux 主機上,bazel cquery
指令會列出 Fuchsia/x64
構件。不過,Bazel 允許使用指令列標記來變更建構設定。例如,bazel cquery --cpu=aarch64
指令可用來列出 x64
主機上的 Fuchsia/arm64
構件。對了,這也適用於 bazel build
指令。舉例來說,bazel build --cpu=aarch64
指令可用來在 x64
主機上產生 Fuchsia/arm64
構件。
然而,其中一個困難性是 Bazel 中的建構設定變更方式有很多種。舉例來說,為特定 Fuchsia CPU 架構進行設定的正確方式可能是使用 --config=fuchsia_arm64
,而不是使用上述的 --cpu=aarch64
標記。這取決於 .bazelrc
檔案中的專案設定。
從 Fuchsia 來源樹狀結構到採用 Fuchsia SDK 型專案的 FIDL 檔案和用戶端程式庫流程
圖 1. 從 Fuchsia 來源到以 Bazel 和-Fuchsia SDK 為基礎的不同 Fuchsia 專案的檔案和程式庫流程。
以下順序說明系統如何從 Fuchsia 來源樹狀結構 (fuchsia.git
) 中選取部分 FIDL 檔案和用戶端程式庫,並在以 Bazel 和-Fuchsia SDK 為基礎的專案中開放使用:
- Fuchsia 來源樹狀結構建構了新版 Fuchsia IDK (整合商開發套件),內含 FIDL 檔案、程式庫、標頭等集合。
- Fuchsia IDK 結合 Bazel 建構系統整合,建立新版 Fuchsia SDK。
- 新版 Fuchsia SDK 已發布,並可供專案整合商使用。
- 專案整合商會下載最新的 Fuchsia SDK,並將所有或所選 SDK 內容發布至他們的 Fuchsia 專案存放區 (通常是透過自動化)。
- 開發人員更新開發環境時,可以存取 Fuchsia SDK 的新內容 (進而下載專案的最新變更)。
這些 FIDL 檔案和用戶端程式庫的目錄結構與版面配置可能會因 Fuchsia 專案而異,特別是當專案使用 Bazel 以外的建構系統時。