FIDL 編譯器和工具

編譯器介面

簡介

FIDL 編譯器會分成前端和多個後端。編譯器一次會處理一個程式庫。前端會使用程式庫的 FIDL 宣告 (以及所有遞移依附元件),執行語意分析,並輸出程式庫的中間表示法。後端會使用中繼表示法,並為程式庫產生語言專屬的繫結。

前端

前端是名為 fidlc 的指令列程式。fidlc 編譯器包含下列標記:

  • --json JSON_PATH。如果有這個標記,標記會指示 fidlc 在指定路徑輸出程式庫的中繼表示法。中繼表示法是符合特定結構定義的 JSON。中間表示法會用來輸入各個後端。

  • --name LIBRARY_NAME。如有此標記,會指示 fidlc 驗證編譯的程式庫是否具有指定名稱。這個標記適合用來交叉檢查建構系統中程式庫的宣告內容,以及程式庫的實際內容。

  • --files [FIDL_FILE...]...。每個 --files [FIDL_FILE...] 引數區塊都描述一個程式庫,且所有引數都必須共用相同的頂層程式庫名稱宣告。程式庫必須以依附元件順序呈現,且之後的程式庫可使用先前程式庫的宣告,但反之亦然。系統只會針對最終程式庫產生輸出內容,不會針對每個依附元件產生輸出內容。

所有的標記也可以透過回應檔案提供,並以 @responsefile 表示。位於 responsefile 的檔案內容會解讀為以空白字元分隔的引數清單。回應檔案不能為巢狀結構,而且必須是唯一的引數。

後端

後端是名為 fidlgen 的指令列程式。fidlgen 編譯器包含下列標記:

  • --json。必填。程式庫的中間表示法路徑。中繼表示法是符合特定結構定義的 JSON。

  • --generators。必填。要在指定程式庫上執行的產生器清單 (以半形逗號分隔)。支援的產生器如下:cppgodartrust

  • --output-base。必填。這個產生器產生的檔案的基本檔案名稱。產生器會透過為這個檔案名稱新增副檔名來建立檔案。舉例來說,cpp 後端會產生兩個檔案,一個副檔名為 .h,另一個則為 .cc 副檔名。

  • --include-base。必填。應計算 C 和 C++ #include 方向的基本目錄。舉例來說,當 cpp 後端產生 #include 指令來參照 .cc 檔案中的 .h 檔案時,後端會建立相對於這個目錄的 #include 路徑。

限制

如果是 cpp 後端,產生的 .h 檔案必須能以 #include <fuchsia/cpp/$LIBRARY_NAME.h> 納入,其中 $LIBRARY_NAME 是對應 FIDL 程式庫的名稱。一般來說,這表示 --output-base 旗標的值為 $INCLUDE_BASE/fuchsia/cpp/$LIBRARY_NAME,其中 $INCLUDE_BASE--include-base 標記的值。

室內桌椅

FIDL Linter 是一種指令列程式,可以處理一或多個 FIDL 檔案,並會針對編譯的內容 (技術上有效的 FIDL) 發出警告,但似乎違反 FIDL 樣式指南FIDL API 評分量表中的規則。這套做法會強制執行樣式慣例,並盡可能運用演算法偵測的評分量表。

而可讀性很重要,風格是影響元件。此外,請按照下列指南確保 FIDL API 可跨語言可攜性。

使用 fx lint

Fuchsia 包含 fx lint 指令,可自動為一組指定檔案選取並執行適當的程式碼 Linter。fx lint 會將檔案組合成 .fidl 副檔名,然後再將所有這些檔案一起傳遞至 FIDL Linter 指令 fidl-lint

建議您使用 fx lint 叫用 FIDL Linter,理想情況下,應在上傳新的 FIDL 程式庫或變更現有 FIDL 前執行這項作業。如果沒有引數,fx lint 將在最近 git commit 的所有檔案上執行所有可用的 Linter。

fx lint

如要查看其他可用的選項,請執行以下指令:

fx lint --help

格式設定工具

FIDL 格式器是用來格式化 .fidl 檔案的指令列程式。系統會自動內建於 fx format-code 指令中,可為任何已修改的 FIDL 檔案設定格式:

fx format-code