產生的程式碼輸出指南

本文件將概述如何查看產生的 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.hwire_types.ccwire_messaging.hwire_messaging.ccwire.hwire_test_base.h 用於使用線路類型,以及 natural_types.hnatural_types.ccnatural_messaging.hnatural_messaging.cctest_base.hfidl.h (適用於使用自然型別) 旁邊顯示出幾種電線類型

common_types.hmarkers.h 由線路和自然類型共用。

舉例來說,使用 fuchsia.io 搭配 C++ 繫結時,系統會建立以下項目: 檔案:

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.cccpp/fidl.hcpp/fidl_test_base.h
  • C 會輸出 c/fidl.client.cc/fidl.server.cfidl.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 程式庫在網路上託管於 fuchsia-docs.firebaseapp.com. 你可以使用 fx rustdoc 產生離線文件。