blob: 66115902b79ca9d2fa4b3628755a5559cd4835e8 [file] [log] [blame] [view]
# Generated code output guide
This document outlines the approaches available for viewing generated FIDL
bindings code. For general information about how FIDL definitions get converted
to target language code, refer to the [bindings reference][bindings-ref].
## Viewing generated code
If you would like to look at the generated output for a specific target in the
Fuchsia build, you can first build the target in question, then inspect the
generated files in the build output. The instructions in this section assume
that the target is defined using the standard [`fidl` GN template][fidl-gn],
and that the out directory is at the default path (`out/default`).
### GN build
The root of the FIDL output in the GN build for a library `fuchsia.examples` defined in
directory `sdk/fidl` is:
out/default/fidling/gen/sdk/fidl/fuchsia.examples
#### HLCPP, LLCPP, and C {#c-family}
The C family bindings are further generated into a `fuchsia/examples` subdirectory, which comes from the library name. From
there:
- HLCPP outputs `cpp/fidl.cc`, `cpp/fidl.h`, and `cpp/fidl_test_base.h`.
- LLCPP outputs `llcpp/fidl.cc` and `llcpp/fidl.h`.
- C outputs `c/fidl.client.c`, `c/fidl.server.c`, and `fidl.h`.
For example, using `fuchsia.io` with the HLCPP bindings creates the
following files:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/cpp/fidl.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/cpp/fidl.h
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/cpp/fidl_test_base.h
and using `fuchsia.io` with the LLCPP bindings creates the following files:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/llcpp/fidl.cc
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia/io/llcpp/fidl.h
#### Rust {#rust}
The Rust bindings output is contained in a single file in the root directory.
For example, `fuchsia.io` is generated to the following file:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fidl_fuchsia_io.rs
#### Go {#go}
Go bindings are generated into an `impl.go` file located in a subdirectory in
the root directory. For example, building `fuchsia.io` generates the following file:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io.fidl/impl.go
#### JSON IR
The JSON IR is generated to the root directory:
out/default/fidling/gen/sdk/fidl/fuchsia.io/fuchsia.io.fidl.json
### Dart {#dart}
The FIDL package for a library named `fuchsia.examples`, defined in the directory
`sdk/fuchsia.examples` is:
out/default/dartlang/gen/sdk/fidl/fuchsia.examples/fuchsia.examples_package
The first instance of `fuchsia.examples` comes from the path, whereas the second
comes from the library name, so the general pattern would be:
out/default/dartlang/gen/[path to FIDL library]/[FIDL library name]_package
Within the package, `lib/fidl_async.dart` contains the bindings code.
`lib/fidl_test.dart` contains utilities for [testing][dart-testing].
## Using fidlbolt
For ad hoc examples or existing FIDL files, another option is to use the
`fidlbolt` tool. By pasting the desired FIDL content into fidlbolt, it is
possible to view the output for each binding, as well as for the JSON IR.
`fidlbolt` also supports importing libraries defined in the sdk, so that
the FIDL code can use e.g. `using fuchsia.io;` to refer to IDK libraries.
## Viewing generated documentation
### Rust
It is possible to generate documentation for generated Rust bindings using
[`fx rustdoc`][rustdoc].
<!-- xrefs -->
[bindings-ref]: /docs/reference/fidl/bindings/overview.md
[fidl-gn]: /build/fidl/fidl.gni
[rustdoc]: /docs/development/languages/rust/fidl_crates.md#documentation
[dart-testing]: /docs/reference/fidl/bindings/dart-bindings.md#test-scaffolding