本文說明查看產生的 FIDL 繫結程式碼的方法。如要瞭解 FIDL 定義如何轉換為目標語言程式碼,請參閱繫結參考資料。
我們會在整個過程中,使用 FIDL 程式庫 fuchsia.io 做為執行範例。這個介面定義於 //sdk/fidl/fuchsia.io。
查看生成的程式碼
本節說明如何直接存取產生的程式碼檔案。
GN 建構
如要查看 Fuchsia 建構中特定目標產生的輸出內容,請先建構相關目標,然後檢查建構輸出內容中產生的檔案。本節中的操作說明假設目標是使用標準 fidl GN 範本定義,且建構目錄設為預設路徑 (out/default)。fx status 可用於尋找目前的建構目錄。
您可以在 fidling 工具鍊的 GN 建構中找到大部分 FIDL 輸出內容。對於 fuchsia.io,輸出內容的根是 out/default/fidling/gen/sdk/fidl/fuchsia.io。本文件其餘部分會將此稱為根目錄。結構如下:
out/default/fidling/gen/sdk/fidl/fuchsia.io
├── fuchsia.io.fidl.json
└── fuchsia.io
├── fidl_fuchsia_io.rs
├── fuchsia.io.fidl
│ └── impl.go
├── c
│ └── fuchsia
│ └── io
│ └── c
│ ├── fidl.h
│ ├── fidl.client.c
│ └── fidl.server.c
├── cpp
│ └── fidl
│ └── fuchsia.io
│ └── cpp
│ ├── common_types.cc
│ ├── common_types.h
│ ├── driver
│ │ ├── fidl.h
│ │ ├── natural_messaging.cc
│ │ ├── natural_messaging.h
│ │ ├── wire.h
│ │ ├── wire_messaging.cc
│ │ └── wire_messaging.h
│ ├── fidl.h
│ ├── hlcpp_conversion.h
│ ├── markers.h
│ ├── natural_messaging.cc
│ ├── natural_messaging.h
│ ├── natural_types.cc
│ ├── natural_types.h
| ├── test_base.h
│ ├── type_conversions.cc
│ ├── type_conversions.h
│ ├── wire.h
│ ├── wire_messaging.cc
│ ├── wire_messaging.h
│ ├── wire_test_base.h
│ ├── wire_types.cc
│ └── wire_types.h
└── hlcpp
└── fuchsia
└── io
└── cpp
├── fidl.h
├── fidl.cc
└── fidl_test_base.h
許多產生的程式碼路徑似乎都含有重複的目錄名稱,例如 .../fuchsia.io/fuchsia.io/...。這是因為 FIDL 程式庫通常會定義在以程式庫命名的目錄中,且目標會以程式庫命名。第一個 fuchsia.io 來自目錄,第二個則來自 GN 目標名稱。
JSON IR
JSON IR 會在根目錄中生成,並命名為 ${target_name}.fidl.json。舉例來說,使用 fuchsia.io:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io.fidl.json
荒漠油廠
Rust 繫結會在根目錄中產生為 ${target_name}/${rust_name}.rs,其中 ${rust_name} 是從程式庫名稱衍生而來,方法是將點替換為底線。舉例來說,使用 fuchsia.io:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/fidl_fuchsia_io.rs
查看
Go 繫結會在根目錄中產生,並命名為 ${target_name}/${library_name}.fidl/impl.go。舉例來說,使用 fuchsia.io:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/fuchsia.io.fidl/impl.go
C++
新的 C++ 繫結會使用根目錄子目錄中的來源版面配置,並遵循 ${target_name}/${binding_flavor}/fuchsia.io/cpp 模式。
從這裡開始,C++ 會輸出 wire_types.h、wire_types.cc、wire_messaging.h、wire_messaging.cc、wire.h 和 wire_test_base.h,以使用線路型別,並輸出 natural_types.h、natural_types.cc、natural_messaging.h、natural_messaging.cc、test_base.h、fidl.h,以使用自然型別和線路型別。
common_types.h 和 markers.h 在有線和自然類型之間共用。
舉例來說,使用 C++ 繫結的 fuchsia.io 會建立下列檔案:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/markers.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/common_types.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/common_types.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire_types.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire_types.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire_messaging.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire_messaging.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/wire_test_base.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/natural_types.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/natural_types.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/natural_messaging.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/natural_messaging.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/test_base.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/type_conversions.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/type_conversions.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/hlcpp_conversion.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/cpp/fidl/fuchsia.io/cpp/fidl.h
隨著新的 C++ 繫結成形,更多繫結將遵循此模式。 如要瞭解如何產生尚未統一的繫結,請參閱下文。
HLCPP 和 C
系統會在根目錄的子目錄中產生 HLCPP 和 C 繫結,模式為 ${target_name}/${binding_flavor}/fuchsia/io。接著,
- HLCPP 會輸出
cpp/fidl.cc、cpp/fidl.h和cpp/fidl_test_base.h。 - C 會輸出
c/fidl.client.c、c/fidl.server.c和fidl.h。
舉例來說,使用 fuchsia.io 和 HLCPP 繫結會建立下列檔案:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/hlcpp/fuchsia/io/cpp/fidl.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/hlcpp/fuchsia/io/cpp/fidl.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io/hlcpp/fuchsia/io/cpp/fidl_test_base.h
查看產生的說明文件
荒漠油廠
Fuchsia 中使用的所有 Rust Crate (包括 FIDL 程式庫的 Rust 繫結) 的說明文件,都託管在線上:https://fuchsia.dev/go/rustdoc。您可以使用 fx rustdoc-link 產生離線說明文件。