Build Fuchsia with a custom Rust toolchain
This guide explains how to build Fuchsia with a custom Rust compiler. This is useful if you need to build Fuchsia with a patched compiler, or a compiler built with custom options.
Use another version of Rust
If all you need to do is use a different version than the one currently being used, most of this doc is not necessary. Fuchsia builders build Rust after every change to Rust's main branch.
- Find the commit hash you want to use.
- Run the following commands from your Fuchsia directory:
# Replace COMMIT with the full Rust commit hash.
# This command updates the manifests in the integration repo, which you can
# then commit or revert as necessary.
fx roll-compiler --package rust git_revision:{{ '<var>' }}COMMIT{{ '</var>' }}
# Fetch the package versions you specified and install them in `prebuilt/`.
jiri fetch-packages -local-manifest
- Run the following command to build Fuchsia:
The Fuchsia build now uses the updated compiler.
Note: A clean build is not necessary; the build automatically detects the new compiler version.
Prerequisites
Prior to building Fuchsia with a custom Rust toolchain, you need to do the following:
Note: These instructions are for Debian-based systems, but you should use the correct package manager for your machine.
-
Build a custom Rust toolchain for Fuchsia.
-
Complete the following guide to download the Fuchsia source: Get Fuchsia source code. To confirm that jiri is in your PATH run
jiri -help.
Note: The below commands assume DEV_ROOT is set to the parent directory of
your Fuchsia checkout.
Build Fuchsia with your custom Rust toolchain
-
Change into your Fuchsia directory.
-
Run the following command to use the newly built toolchain:
DEV_ROOT={{ '<var>' }}DEV_ROOT{{ '</var>' }}
fx set core.x64 \
--args=rustc_prefix="\"$DEV_ROOT/rust/install/fuchsia-rust\"" \
--args=rustc_version_string='"1"'
# plus other settings such as:
# --with //bundles:kitchen_sink
# --variant=coverage-rust # to enable coverage profiling of fuchsia binaries
# --variant=host_coverage-rust # to enable coverage profiling of host binaries
Note: rustc_version_string can be any string, and it’s used to force a
recompile after a custom toolchain changes. If you rebuild the toolchain,
change the value so Rust targets get rebuilt.
- Run the following command to rebuild Fuchsia: