| # Using cargo on Fuchsia | |
| Many tools in the Rust ecosystem assume you are using cargo. For tools like | |
| this which don't have a counterpart in our build, there is a utility for | |
| generating `Cargo.toml` files. You can run cargo itself (`cargo check` for | |
| instance) using it. | |
| This functionality is maintained by volunteers. GN and Cargo have some design | |
| mismatches that may result in the generated `Cargo.toml` files not working at | |
| all or needing manual tweaks. Because of this, cargo in the Fuchsia tree is | |
| **not** officially supported; things may break from time to time. | |
| ### Generating `Cargo.toml` files {#cargo-toml-gen} | |
| In order to generate the cargo files based on the build graph of GN, add `--cargo-toml-gen` to | |
| the `fx set` and `fx args` commands. This adds a few seconds at `gn gen` time. For example: | |
| ```sh | |
| fx set --cargo-toml-gen <normal fx args> | |
| ``` | |
| Most editors require the `Cargo.toml` file to be in a location that is adjacent to the `src/` directory. | |
| Symlinks to these files can be generated using the following commands, where | |
| `//garnet/foo/path/to/target:label` is the GN target that you want to work on: | |
| ```sh | |
| fx gen-cargo garnet/foo/path/to/target:some_label | |
| ``` | |
| Note that this label must point to a [`rustc_...` GN template](README.md#build) | |
| (not a Fuchsia package or other GN target). For example: | |
| ``` | |
| rustc_binary("some_label") { | |
| ... | |
| } | |
| ``` | |
| ### Generating .cargo/config files {#cargo-config-gen} | |
| Some plugins require a `.cargo/config` file to allow cargo to operate correctly for Fuchsia | |
| (e.g. to run `cargo check`). To easily generate this file, use the [`fargo`][fargo] tool. | |
| 1. [Install rustup](https://rustup.rs/) | |
| 2. Configure `rustup` to use the Fuchsia Rust toolchain by running: | |
| ```sh | |
| rustup toolchain link fuchsia $($FUCHSIA_DIR/scripts/youcompleteme/paths.py VSCODE_RUST_TOOLCHAIN) | |
| rustup default fuchsia | |
| ``` | |
| 3. Clone and install the `fargo` tool within your `$FUCHSIA_DIR` by following the | |
| [getting started instructions][fargo] for fargo. | |
| 4. Create your config: | |
| ```sh | |
| cd $FUCHSIA_DIR && fargo write-config | |
| # Note the caveats about changing architecture in the fargo readme | |
| # https://fuchsia.googlesource.com/fargo/#creating-a-cargo_config | |
| ``` | |
| [fargo]: https://fuchsia.googlesource.com/fargo/ |