Skip to content

Add shared toolchain directories #4967

Description

@Rx1513

Problem you are trying to solve

Hello!

As a package maintainer, I want to package different Rust toolchain distributions, such as stable, nightly, specific stable versions, or custom forks (for example, the ESP toolchain). To make this practical, some kind of toolchain multiplexer is needed. While I could write a minimal multiplexer myself, it would lack many useful features.

On the other hand, I could use rustup, which is widely adopted and well supported. However, its main drawback is poor integration with OS package managers. There is no automatic way to make a system-provided Rust toolchain available through rustup. Although it is possible to manually link a system toolchain, there is no mechanism to keep it synchronized with updates from the package manager.

As a user, I want to be able to use both the system-provided toolchain and the official Rust toolchain. For example, I may use one for day-to-day development and the other for feature testing or validation or in some cases I may want to use local distribution infrastructure. Which is possible but with some extra work.

Solution you'd like

To solve these issues, a separate shared directory managed by external tools could be added.

rustup should automatically discover toolchains from the shared directory.

Toolchains in RUSTUP_HOME should take precedence over toolchains from the shared directory. If a local toolchain shadows a shared toolchain with the same name, this should be clearly indicated. For example:

rustup default alt
info: shared toolchain overridden by `RUSTUP_HOME` toolchain
info: default toolchain set to alt

This feature should be opt-in. It should be possible to enable it through user or system configuration, or with an environment variable.

rustup toolchain list should clearly indicate which toolchains belong to which mechanism. For example:

$ rustup toolchain list
shared toolchains:
alt-1.90 (default)
alt-1.92
alt-nightly-1.95 (shadowed)
esp (shadowed)

local:
stable
alt-nightly-1.95
esp (active)
nightly
$ rustup toolchain list -v
shared toolchains (/usr/lib64/rust-toolchains/):
alt-1.90 (default) /usr/lib64/rust-toolchains/alt-1.90/
alt-1.92 /usr/lib64/rust-toolchains/alt-1.92/
alt-nightly-1.95 (shadowed) /usr/lib64/rust-toolchains/alt-nightly-1.95/
esp (shadowed) /usr/lib64/rust-toolchains/esp

local (/home/user/.rustup):
stable /home/user/.rustup/toolchains/stable
alt-nightly-1.95 /home/user/.rustup/toolchains/alt-nightly-1.95
esp (active) /home/user/RPM/BUILD/rust-esp/build/host/stage1
nightly /home/user/.rustup/toolchains/nightly

Notes

Related to #313, #1085, and #2383.

Unresolved problem:
Should this feature provide a mechanism for specifying multiple shared directories, or should it support only a single shared directory?

I have some initial work in progress, so I would like to implement this feature.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions