Where is the source code of Rust target components? - rust

When I run
rustup target install wasm32-unknown-unknown
it states
info: downloading component 'rust-std' for 'wasm32-unknown-unknown'
This means that prebuilt binary components are being downloaded. Where is the source code of these components?

You can install the rust-src rustup component for a toolchain, which will be located in $RUSTUP_INSTALLATION_DIRECTORY/toolchains/$TOOLCHAIN/lib/rustlib/src/rust.
The official source code for the Rust project is on GitHub at https://github.com/rust-lang/rust/. The standard library is currently located in the library/std subdirectory, although this has changed over time.
See also:
Where does rustup install itself to?

Related

is it possible to override the source when using rust command to update

I am using rustup to update the rust version, is it possible to specify the source in the command line like this?
rustup update --source http://rustup.com
I already know how to config the mirror url in .cargo/config, I just want to switch the source in temporary in the command lne. Seems no way to do this from official document:
➜ .cargo rustup update --help
rustup-update
Update Rust toolchains and rustup
USAGE:
rustup update [FLAGS] [toolchain]...
FLAGS:
--force Force an update, even if some components are missing
--force-non-host Install toolchains that require an emulator. See https://github.com/rust-
lang/rustup/wiki/Non-host-toolchains
-h, --help Prints help information
--no-self-update Don't perform self update when running the `rustup update` command
ARGS:
<toolchain>... Toolchain name, such as 'stable', 'nightly', or '1.8.0'. For more information see `rustup help
toolchain`
DISCUSSION:
With no toolchain specified, the `update` command updates each of
the installed toolchains from the official release channels, then
updates rustup itself.
If given a toolchain argument then `update` updates that
toolchain, the same as `rustup toolchain install`.

Installing latest rust nightly complains about missing rls component

Trying to compile: https://github.com/SergioBenitez/Rocket/tree/master/examples/hello
Cargo.toml
[dependencies]
rocket = "0.4.10"
Complains that I need rust nightly
$ cargo build
...
Error: Rocket (core) requires a more recent version of rustc.
Installed version: 1.54.0 (2021-05-17)
Minimum required: 1.54.0-nightly (2021-05-18)
I have done a local directory override
$ rustup override set nightly
I am running nightly 2021-05-17 but I need 2021-05-18
$ rustup show
...
active toolchain
----------------
nightly-x86_64-unknown-linux-gnu (directory override for '/<redacted>')
rustc 1.54.0-nightly (3e99439f4 2021-05-17)
I've tried all sorts of commands to get a more recent nightly
$ rustup update
$ rustup update nightly
$ rustup toolchain install nightly-2021-05-18
There is some weird stuff when I do rustup update nightly
$ rustup update nightly
info: syncing channel updates for 'nightly-x86_64-unknown-linux-gnu'
info: latest update on 2021-05-23, rust version 1.54.0-nightly (e4ca1662f 2021-05-22)
info: skipping nightly which is missing installed component 'rls'
info: syncing channel updates for 'nightly-2021-05-22-x86_64-unknown-linux-gnu'
info: latest update on 2021-05-22, rust version 1.54.0-nightly (5dc8789e3 2021-05-21)
info: skipping nightly which is missing installed component 'rls'
info: syncing channel updates for 'nightly-2021-05-21-x86_64-unknown-linux-gnu'
info: latest update on 2021-05-21, rust version 1.54.0-nightly (40d230204 2021-05-20)
info: skipping nightly which is missing installed component 'rls'
info: syncing channel updates for 'nightly-2021-05-20-x86_64-unknown-linux-gnu'
info: latest update on 2021-05-20, rust version 1.54.0-nightly (f94942d84 2021-05-19)
info: skipping nightly which is missing installed component 'rls'
info: syncing channel updates for 'nightly-2021-05-19-x86_64-unknown-linux-gnu'
info: latest update on 2021-05-19, rust version 1.54.0-nightly (4e3e6db01 2021-05-18)
info: skipping nightly which is missing installed component 'rls'
info: syncing channel updates for 'nightly-2021-05-18-x86_64-unknown-linux-gnu'
nightly-x86_64-unknown-linux-gnu unchanged - rustc 1.54.0-nightly (3e99439f4 2021-05-17)
Complains about skipping nightly which is missing installed component 'rls' and I have no idea how to resolve this
Any help would be appreciated
Sorry for the wall of text, see The solution to your problem below if you only want a quick fix. You might also look at the rustup book, it contains information about this type of problem.
You are trying to install a nightly version of Rust. In nightly versions, the availability of non-essential components of Rust, such as the Rust Language Server (or short rls) is not guaranteed – if they fail to build, the nightly is shipped without them. You can see here that rls indeed was not part of the last few nightlies. The last day a nightly was shipped with rls was 2021-05-18, which is a build from the day before, so 2021-05-17 (a bit irritating, but this seems to be accepted behavior).
Your rustup installation seems to be configured to include rls. Therefore, when you tell rustup to update your nightly toolchain, rustup selects the newest nightly containing rls. There are no such nightlies newer than your currently installed nightly-2021-05-17, therefore, rustup does not update the toolchain.
The solution to your problem
If you don't need rls (it's only necessary for auto-completion in IDEs and stuff like that), there are multiple solutions to your problem:
You can remove the rls component from your nightly toolchain: rustup component remove --toolchain nightly rls
The rustup book also has some more solutions:
If [a previously installed component] is missing, rustup will automatically search for an older release that contains the required components. There are several ways to change this behavior:
Use the --force flag to rustup toolchain install to force it to install the most recent version even if there is a missing component.
Use the --profile flag to rustup toolchain install to use a different profile that does not contain the missing component. For example, --profile=minimal should always work, as the minimal set is required to exist. See the Profiles chapter for more detail.
Install a specific date that contains the components you need. For example, rustup toolchain install nightly-2020-07-27. You can then use overrides to pin to that specific release.
If you do need rls, you are in a bit of a tight spot. You might want to use a override for your project, in effect using different Rust builds for building your code and for running rls. However, this will probably not work – rls may need to build your project dependencies for autocompletion, and Rocket will not allow that with older nightlies. I don't really have a solution for this case – you may need to stay on an older version of Rocket or stop using rls for now, until there is a newer Rust nightly shipping with rls again.

How can I update the stable toolchain when I get the error "some components unavailable for target i386-apple-ios/armv7s-apple-ios"?

I try to run
rustup update stable
and I get the following output.
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2020-05-07, rust version 1.43.1 (8d69840ab 2020-05-04)
error: some components unavailable for download for channel stable: 'rust-std' for target 'i386-apple-ios', 'rust-std' for target 'armv7s-apple-ios', 'rust-std' for target 'armv7-apple-ios'
If you require these components, please install and use the latest successful build version,
which you can find at <https://rust-lang.github.io/rustup-components-history>.
After determining the correct date, install it with a command such as:
rustup toolchain install nightly-2018-12-27
Then you can use the toolchain with commands such as:
cargo +nightly-2018-12-27 build
While I can install the latest stable toolchain using
rustup toolchain install stable-2020-05-07
That creates a separate toolchain.
rustup toolchain list
stable-2020-05-07-x86_64-unknown-linux-gnu (default)
stable-x86_64-unknown-linux-gnu
nightly-2020-05-07-x86_64-unknown-linux-gnu
I can use this new toolchain as the default (as I am now), but it's going to be a pain moving forward as I can't just use rustup update.
Running rustup toolchain install stable yields the same error.
How can I get the stable Rust toolchain to update via rustup update run?
The Rust team regrets to announce that Rust 1.41.0 (to be released on January 30th, 2020) will be the last release with the current level of support for 32-bit Apple targets. Starting from Rust 1.42.0, those targets will be demoted to Tier 3.
Reducing support for 32-bit Apple targets
You will need to remove those components using rustup component remove. I can't test the exact invocation, but something like:
rustup component remove --toolchain stable --target i386-apple-ios rust-std
rustup component remove --toolchain stable --target armv7s-apple-ios rust-std
rustup component remove --toolchain stable --target armv7-apple-ios rust-std
Once removed, you can update your compiler.

How to install old version of rust-src?

My machine have rust nightly-2020-03-24, I want to compile cross-compile crate core. But the command rustup component add rust-src install newest version of rust-src, which rustc-2020-03-24 can't build (due to new feature llvm-asm). How can I install old version of rust-src?
If not already installed, you can get a specific version of a component by specifying the toolchain when calling rustup (like +stable, +1.44, etc). In your case:
rustup +nightly-2020-03-24 component add rust-src
The source can then be found in ~/.rustup/toolchains/nightly-2020-03-24-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/.

How to solve librustdoc.so missing when using rustbook tool?

I've used
cargo install --git https://github.com/steveklabnik/rustbook.git
to install rustbook successfully, but when I run rustbook I get an error:
rustbook: error while loading shared libraries: librustdoc-c0dcaea09a16c7ec.so: cannot open shared object file: No such file or directory
But I can find out this .so file.
./.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/librustdoc-c0dcaea09a16c7ec.so
./.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustdoc-c0dcaea09a16c7ec.so
How can I let rustbook know the path to librustdoc-c0dcaea09a16c7ec.so?
rustc 1.16.0-nightly (4ecc85beb 2016-12-28)
rustdoc 1.16.0-nightly (4ecc85beb 2016-12-28)
rustup show:
Default host: x86_64-unknown-linux-gnu
nightly-x86_64-unknown-linux-gnu (default)
rustc 1.16.0-nightly (4ecc85beb 2016-12-28)
This appears to be a known issue with rustup (#350, #765), specifically around cargo-installed binaries that were compiled against the nightly toolchain. If your application requires nightly to even compile, there's not much you can do other than rustup run nightly myprogram. This will start the program with the appropriate environment.
If the application doesn't require nightly Rust, then install it using the stable toolchain.
List the directory containing your shared library into /etc/ld.so.conf, or make a symlink from a path already listed there, or from /usr/lib (/usr/local/lib would be preferable, but maybe you have to add it to the list in ld.so.conf, so this would be again case 1).

Resources