36 lines
1.5 KiB
Markdown
36 lines
1.5 KiB
Markdown
# Flatbuffers Intermediate Representation {#intermediate_representation}
|
|
|
|
We use [reflection.fbs](https://github.com/google/flatbuffers/blob/master/reflection/reflection.fbs)
|
|
as our intermediate representation. `flatc` parses `.fbs` files, checks them for
|
|
errors and stores the resulting data in this IR, outputting `.bfbs` files.
|
|
Since this IR is a Flatbuffer, you can load and use it at runtime for runtime
|
|
reflection purposes.
|
|
|
|
There are some quirks:
|
|
- Tables and Structs are serialized as `Object`s.
|
|
- Unions and Enums are serialized as `Enum`s.
|
|
- It is the responsibility of the code generator to check the `advanced_features`
|
|
field of `Schema`. These mark the presence of new, backwards incompatible,
|
|
schema features. Code generators must error if generating a schema with
|
|
unrecognized advanced features.
|
|
- Filenames are relative to a "project root" denoted by "//" in the path. This
|
|
may be specified in flatc with `--bfbs-filenames=$PROJECT_ROOT`, or it will be
|
|
inferred to be the directory containing the first provided schema file.
|
|
|
|
|
|
## Invocation
|
|
You can invoke it like so
|
|
```{.sh}
|
|
flatc -b --schema ${your_fbs_files}
|
|
```
|
|
This generates `.bfbs` (binary flatbuffer schema) files.
|
|
|
|
Some information is not included by default. See the `--bfbs-filenames` and
|
|
`--bfbs-comments` flags. These may be necessary for code-generators, so they can
|
|
add documentation and maybe name generated files (depending on the generator).
|
|
|
|
|
|
TODO(cneo): Flags to output bfbs as flexbuffers or json.
|
|
|
|
TODO(cneo): Tutorial for building a flatc plugin.
|