Build
There are four GN target templates that should be used for Rust projects:
rustc_library
defines a library and optionally a unit test target. The library can be depended on by other targets.rustc_binary
defines an executable and optionally a unit test target.rustc_test
defines a test-only target.rustc_macro
defines a procedural macro target.
The examples/rust directory has some examples of Rust packages that use these targets, as do the Rust FIDL examples.
See also: Build Fuchsia with a custom Rust toolchain
Cargo.toml
Fuchsia Rust targets are not built with cargo. That said, you can generate Cargo.toml files for use with external tooling. This functionality is not guaranteed to work.
Autogenerated documentation
Once you have a Cargo.toml for your target you can generate and browse HTML documentation for your target and its dependencies by running:
fx rustdoc path/from/fuchsia/root/to/target:label --open
Tests
You can run unit tests on connected devices using fx
, with the fx test
{package name}
command. See Testing Rust code for information
on adding and running tests.
Procedural macros
Procedural macro targets are executed on the host at compile time. Therefore, they cannot depend on other crates that are only available on device, e.g. zircon.
Negative tests, e.g. asserting that a macro fails to compile with a specific error, are currently not supported.
Warnings and errors
By default our build configuration makes all Rust warnings into errors. This requirement can be onerous during development, and on your local machine you may wish to see warnings as warnings and let CQ enforce the hard boundary.
The deny_warnings
GN arg allows you to control this behavior in your development environment.
Setting deny_warnings = false
in fx args
or adding --args=deny_warnings=false
to
your fx set
will allow you to develop locally without being blocked by warnings. You can
add the argument to local/args.gn
in your checkout so that it will be applied
to all builds without needing to type it in your terminal each time.
Style
We don't currently have a style guide for Rust, but you should run fx rustfmt
or fx format-code
before submitting. We mostly use the rustfmt defaults, but
have a couple custom settings.
Rust Idiomatic Usage Review
If you're new to Rust or would like someone to review your changes to validate that your usage of Rust is idiomatic, add "Fuchsia Rust Reviewers" as a reviewer to your CL in Gerrit and a reviewer will be assigned.
Email tq-rust-reviewers@google.com with any issues.
Communication channels
Public discussion happens on the rust-users@fuchsia.dev mailing list.
Existing Fuchsia Rust libraries
Going further
- Editor setup
- Measuring binary bloat
- Managing external dependencies
- Unsafe code
- Unstable features
- Rust FIDL server/client tutorial
- Logging