本頁說明如何找出及尋找 FIDL 檔案 (用戶端) 在主體機器中建構 Fuchsia 專案的資料庫並建構構件 使用 Fuchsia SDK 搭配 Bazel 建構系統。
在實際工作環境中開發 Fuchsia 元件 以 Fuchsia SDK 為基礎的開發環境,開發人員會使用以下方式 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 指令,列出其中的 FIDL 目標 以 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 套件中 建構容器
已納入所有用戶端程式庫、標頭檔案 (.h
) 和預先建立的檔案 (.so
)
您可以在下列目錄中找到以 Bazel-and-Fuchsia-SDK 為基礎的專案中。
畫面中有以下特徵:
<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 建構系統會編譯目標
軟體 (在 BUILD.bazel
檔案中指定),並產生下列內容
建構構件:
- Fuchsia 套件 (
.far
) - 包含 新建構的 Fuchsia 元件和二進位檔 (例如驅動程式庫二進位檔)。 - 偵錯符號:必須授予這項權限,才能將偵錯訊息符號化 和記錄檔
產生這些建構構件的確切位置,
開發環境的運作情況,取決於 Fuchsia 專案的設定。
如要找出這些位置,請檢查專案的 Bazel 設定
建構系統舉例來說,根據預設,SDK 驅動程式庫範例存放區
(fuchsia-drivers
) 會儲存 Bazel 建構構件
位於主機的 $HOME/.cache/bazel
目錄中。
使用 Bazel 指令列出建構構件
您也可以使用 Bazel 指令,列出及尋找所有建構成果: 以 Bazel 和 Fuchsia SDK 為基礎的開發中特定的 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
指令可用來產生 Fuchsia/arm64
x64
主體機器上的構件
然而,其中一個問題是改變方法太多
執行 Bazel 的建構作業設定舉例來說
適用於特定 Fuchsia CPU 架構的 --config=fuchsia_arm64
而非使用上述的 --cpu=aarch64
旗標實際做法取決於
.bazelrc
檔案中專案設定。
FIDL 檔案和用戶端程式庫從 Fuchsia 來源樹狀結構到 Fuchsia-SDK 專案的流程
圖 1. 檔案和程式庫從 Fuchsia 來源到各種資料的流動 以 Bazel-and-Fuchsia-SDK 為基礎的 Fuchsia 專案。
以下順序說明部分 FIDL 檔案和用戶端程式庫
從 Fuchsia 來源樹狀結構 (fuchsia.git
) 中選取後成為
適用於以 Bazel-and-Fuchsia-SDK 為基礎的專案:
- Fuchsia 來源樹狀結構建立了新版本 Fuchsia IDK (整合商開發套件), 包含 FIDL 檔案、程式庫、標頭等項目的集合。
- Fuchsia IDK 與 Bazel 建構系統整合之後, 建立新版本的 Fuchsia SDK
- 新的 Fuchsia SDK 已發布,可供專案使用 整合商
- 專案整合商請下載最新的 Fuchsia SDK 和 將 SDK 的所有或選取內容發布至 Fuchsia 專案 存放區 (通常透過自動化作業)。
- 開發人員可以存取 Fuchsia SDK 的新內容 更新開發環境 (然後下載 變更。
這些 FIDL 檔案和用戶端的目錄結構和配置 Fuchsia 專案中的程式庫可能各有不同,尤其是在 使用 Bazel 以外的不同建構系統