生成的代码输出指南

本文档简要介绍了查看生成的 FIDL 绑定代码的方法。如需了解有关如何将 FIDL 定义转换为目标语言代码的一般信息,请参阅绑定参考文档

全程使用 FIDL 库 fuchsia.io 作为运行示例。该类在 //sdk/fidl/fuchsia.io 中进行了定义。

查看生成的代码

本部分介绍如何直接访问生成的代码文件。

GN build

如果您想查看为 Fuchsia build 中的特定目标生成的输出,可以先构建相关目标,然后在 build 输出中检查生成的文件。本部分中的说明假定目标是使用标准 fidl GN 模板定义的,并且 build 目录已设置为默认路径 (out/default)。fx status 可用于查找当前的 build 目录。

您可以在 fidling 工具链中的 GN build 中找到大多数 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

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

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

查看生成的文档

Rust

Fuchsia 中使用的所有 Rust crate 的文档(包括 FIDL 库的 Rust 绑定)在线托管在 fuchsia-docs.firebaseapp.com 上。您可以使用 fx rustdoc 生成离线文档。