I installed Rust on my Raspberry pi3 but when i tried hello-world example from this page.
https://rustwasm.github.io/book/hello-world.html
it shows this error
pi@raspberrypi:~/RustTuts/hello-world $
cargo +nightly build --target wasm32-unknown-unknown --release --verbose
Compiling hello-world v0.1.0 (file:///home/pi/RustTuts/hello-world)
Running `rustc --crate-name hello_world src/lib.rs --crate-type cdylib --emit=dep-info,link -C opt-level=3 -C metadata=c2b67d4c4ad89cb4 --out-dir /home/pi/RustTuts/hello-world/target/wasm32-unknown-unknown/release/deps --target wasm32-unknown-unknown -L dependency=/home/pi/RustTuts/hello-world/target/wasm32-unknown-unknown/release/deps -L dependency=/home/pi/RustTuts/hello-world/target/release/deps`
error: linker `rust-lld` not found ] 0/1: hello-world
|
= note: No such file or directory (os error 2)
error: aborting due to previous error
error: Could not compile `hello-world`.
Caused by:
process didn't exit successfully: `rustc --crate-name hello_world src/lib.rs --crate-type cdylib --emit=dep-info,link -C opt-level=3 -C metadata=c2b67d4c4ad89cb4 --out-dir /home/pi/RustTuts/hello-world/target/wasm32-unknown-unknown/release/deps --target wasm32-unknown-unknown -L dependency=/home/pi/RustTuts/hello-world/target/wasm32-unknown-unknown/release/deps -L dependency=/home/pi/RustTuts/hello-world/target/release/deps` (exit code: 101)
Hm, there was some changes around this recently: https://github.com/intermezzOS/kernel/commit/f341033d342481c07b63dd0acf714a223e47d05f
But that's in target specs, which you don't have.
What's your `rustc +nightly --version'?
pi@raspberrypi:~ $ rustc +nightly --version
rustc 1.29.0-nightly (64f7de921 2018-07-12)
Looks like docs are outdated, could you try installing llvm-tools-preview
component?
rustup component add llvm-tools-preview --toolchain=nightly
I'm seeing the same thing. This may be specific to the arm toolchains since it doesn't occur on my x64 linux machine.
@mati865 I installed llvm-tools-preview
but error remains the same
pi@raspberrypi:~/RustTuts/hello-world $ rustup component add llvm-tools-preview --toolchain=nightly
info: downloading component 'llvm-tools-preview'
332.7 KiB / 332.7 KiB (100 %) 135.7 KiB/s ETA: 0 s
info: installing component 'llvm-tools-preview'
pi@raspberrypi:~/RustTuts/hello-world $ cargo +nightly build --target wasm32-unknown-unknown --release --verbose
Compiling hello-world v0.1.0 (file:///home/pi/RustTuts/hello-world)
Running `rustc --crate-name hello_world src/lib.rs --crate-type cdylib --emit=dep-info,link -C opt-level=3 -C metadata=c2b67d4c4ad89cb4 --out-dir /home/pi/RustTuts/hello-world/target/wasm32-unknown-unknown/release/deps --target wasm32-unknown-unknown -L dependency=/home/pi/RustTuts/hello-world/target/wasm32-unknown-unknown/release/deps -L dependency=/home/pi/RustTuts/hello-world/target/release/deps`
error: linker `rust-lld` not found ] 0/1: hello-world
|
= note: No such file or directory (os error 2)
error: aborting due to previous error
error: Could not compile `hello-world`.
Caused by:
process didn't exit successfully: `rustc --crate-name hello_world src/lib.rs --crate-type cdylib --emit=dep-info,link -C opt-level=3 -C metadata=c2b67d4c4ad89cb4 --out-dir /home/pi/RustTuts/hello-world/target/wasm32-unknown-unknown/release/deps --target wasm32-unknown-unknown -L dependency=/home/pi/RustTuts/hello-world/target/wasm32-unknown-unknown/release/deps -L dependency=/home/pi/RustTuts/hello-world/target/release/deps` (exit code: 101)
Indeed issue affects arm but not x86.
For x86_64 rust-lld
is located in /rust-nightly-x86_64-unknown-linux-gnu/rustc/lib/rustlib/x86_64-unknown-linux-gnu/bin/
while on arm /rust-nightly-x86_64-unknown-linux-gnu/rustc/lib/rustlib/x86_64-unknown-linux-gnu/bin/
doesn't even exist.
the directory does exist on mine, but that was after I installed the llvm tools. It doesn't contain the rust-lld though so I'm guessing it doesn't ship on arm. I wonder if that's an underlying issue with lld or it just hasn't been packaged into rust for arm yet.
Edit: I found out why it isn't built: --enable-full-tools
isn't passed in for arm builds.
As per https://github.com/rust-lang/rust/pull/48125 rust-lld
is shipped only for Tier 1 platforms.
If somebody knows if it's fine to enable it for ARMs builds it's @japaric
@mati865
If somebody knows if it's fine to enable it for ARMs builds it's @japaric
actually that would be @alexcrichton. If it were for me I would enable LLD everywhere it can be built but I don't know how that would affect CI time.
PR #48125 says:
Like Emscripten the LLD target is currently only enabled for Tier 1 platforms,
notably OSX/Windows/Linux, and will need to be installed manually for compiling
to wasm on other platforms.
So you would have to install LLD on ARM Linux if want to compile to wasm. After #51936 you would have to pass -C linker=lld
to rustc to use system LLD, or we would have to add logic to rustc to make it fallback to system LLD if rust-lld is not available in the sysroot. However, system LLD may not work if it's "too old" (e.g. installed via package manager) because, as of #51966, the wasm target expects LLD ~7.0.
Yes currently we unfortunately don't have enough time on CI to produce these artifacts for all platforms, only those with self-hosted compilers (which build one fewer compiler than the cross-compiled platforms)
Bah... compiling rust-lld on a rpi3 might prove difficult/more time consuming that on CI. 馃槶
I've run into this problem in that I can't generate wasm on arm64.
I'm testing this change to the build flags to see just how long Travis will take: https://github.com/vielmetti/rust/pull/1/commits/684f997e40038729d865e6e0cab59b8f50b99f79
Based on https://github.com/Plume-org/Plume/issues/394 I can recommend this script as being suitable for installing the lld dependency:
https://github.com/mcrosson/Plume/blob/master/script/wasm-deps.sh
and then you invoke with RUSTFLAGS="-C linker=lld" cargo build
per the example at
https://github.com/mcrosson/Plume/blob/master/script/plume-front.sh
The note in the PR at https://github.com/Plume-org/Plume/pull/402 says
For the record, LLVM 8 lld is good enough, but LLVM 7 lld isn't. In Nix, one can just add llvmPackages_8.lld
to nativeBuildInputs
and set RUSTFLAGS = "-C linker=lld";
in the derivation.
I'm going to close this as it's not really an actionable issue at this point.
@alexcrichton I know the Rust's CI situation has changed a bit since this issue was first opened. Is it still the case that there isn't enough CI time available to build LLVM tools for (at least some) tier 2 platforms?
Unfortunately we haven't had any major changes to CI in the meantime.
Most helpful comment
Based on https://github.com/Plume-org/Plume/issues/394 I can recommend this script as being suitable for installing the lld dependency:
https://github.com/mcrosson/Plume/blob/master/script/wasm-deps.sh
and then you invoke with
RUSTFLAGS="-C linker=lld" cargo build
per the example athttps://github.com/mcrosson/Plume/blob/master/script/plume-front.sh
The note in the PR at https://github.com/Plume-org/Plume/pull/402 says