Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions src/building/bootstrapping/writing-tools-in-bootstrap.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,26 @@
There are three types of tools you can write in bootstrap:

- **`Mode::ToolBootstrap`**

Use this for tools that don’t need anything from the in-tree compiler and can run with the stage0 `rustc`.
The output is placed in the "bootstrap-tools" directory. This mode is for general-purpose tools built
entirely with the stage0 compiler, including target libraries and only works for stage 0.
The output is placed in the "bootstrap-tools" directory.
This mode is for general-purpose tools built entirely with the stage0 compiler,
including target libraries, and it only works for stage 0.

- **`Mode::ToolStd`**
Use this for tools that rely on the locally built std. The output goes into the "stageN-tools" directory.

Use this for tools that rely on the locally built std.
The output goes into the "stageN-tools" directory.
This mode is rarely used, mainly for `compiletest` which requires `libtest`.

- **`Mode::ToolRustcPrivate`**
Use this for tools that use the `rustc_private` mechanism, and thus depend on the locally built `rustc` and its rlib artifacts. This is more complex than the other modes because the tool must be built with the same compiler used for `rustc` and placed in the "stageN-tools" directory. When you choose `Mode::ToolRustcPrivate`, `ToolBuild` implementation takes care of this automatically. If you need to use the builder’s compiler for something specific, you can get it from `ToolBuildResult`, which is
returned by the tool's [`Step`].

Use this for tools that use the `rustc_private` mechanism,
and thus depend on the locally built `rustc` and its rlib artifacts.
This is more complex than the other modes because the tool must be built with the same compiler used for `rustc` and placed in the "stageN-tools" directory.
When you choose `Mode::ToolRustcPrivate`, `ToolBuild` implementation takes care of this automatically.
If you need to use the builder’s compiler for something specific,
you can get it from `ToolBuildResult`, which is returned by the tool's [`Step`].

Regardless of the tool type you must return `ToolBuildResult` from the tool’s [`Step`] implementation and use `ToolBuild` inside it.

Expand Down