"rustup target [add, install]" should guide towards successful compilation. · Issue #1483 · rust-lang/rustup (original) (raw)

The README says:

Note that rustup target add only installs the Rust standard library for a given target. There are typically other tools necessary to cross-compile, particularly a linker. For example, to cross compile to Android the Android NDK must be installed. In the future, rustup will provide assistance installing the NDK components as well.

Witnessing myself and my colleagues, most users will:

Having everything work out of the box would obviously be the best case.

In lack of that, since the steps for a given host x target combination are similar, there should be clear and simple instructions printed right at the end of an rustup installation, at least for the most common combinations.

What I would have liked (simplified):

> rustup target install aarch64-linux-android

info: component 'rust-std' for target 'aarch64-linux-android' installed.

warning: To successfully compile for `aarch64-linux-android` on `macos` you also 
need the linker from a cross compilation toolchain. In the majority of cases these steps 
are needed:

INSTALL TOOLCHAIN
- Run `brew install [package]`
- (Alternatively) install [URL] 

CONFIGURE TOOLCHAIN
- Locate the file `make-standalone-toolchain.sh`, part of the toolchain.
- Run `make-standalone-toolchain.sh --arch=aarch64-linux-android`

CONFIGURE CARGO
- In your `.cargo/config` set:

[target.aarch64-linux-android]
linker = "[PATH_TO_STANDALONE_TOOLCHAIN]/aarch64-linux-android/bin/aarch64-linux-android-clang"

Other host x target combinations should have these steps modified accordingly.

If the steps for a given host x target are unclear / ambiguous, rustup should print exactly that as part of the INSTALL TOOLCHAIN and CONFIGURE TOOLCHAIN instructions.