There are two GN target templates which should be used for Rust projects:
rustc_library
defines a library which can be used by other targets.rustc_binary
defines an executable.The garnet/examples/rust directory has some examples of Rust packages that use these targets, as do the Rust FIDL examples.
If you want to test out Fuchsia with your own custom-built versions of rustc or cargo, you can set the rustc_prefix
argument to fx set
, like this:
fx set x64 --release --args "rustc_prefix=\"/path/to/bin/dir\""
Fuchsia Rust targets are not built with Cargo during a normal build, and as such, do not require Cargo.toml
files. However, having a Cargo.toml
file for your target is useful for integration with IDEs such as Intellij and VSCode, and for using the fargo
tool to build and test targets without going through a full GN build and run cycle each time.
A Cargo.toml
file can be automatically generated for rustc_library
and rustc_binary
targets based on their .gn file definitions by running:
fx gen-cargo path/from/fuchsia/root/to/target:label
Or, if you're already in a directory with a single Rust target, fx gen-cargo
alone should work too.
You must build the target via a regular Fuchsia build before running this command.
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
You can run unit tests on connected devices using fx
, with the fx run-test {package name}
command, assuming your package in BUILD.gn
has with_unit_tests = true
.
fx run-test
, you can't override package_name="..."
in your package
or test_package
declaration. This issue is tracked by BLD-338.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.
Public discussion happens on the rust@fuchsia.com mailing list. For Googler-only channels, see go/fuchsia-rust-googlers.