I tried to install Rust on my (old) Synology NAS (processsor Feroceon 88FR131 according to ‘cat /proc/cpuinfo’) using the standard way
curl https://sh.rustup.rs -sSf | sh
curl https://sh.rustup.rs -sSf | sh -s – --default-toolchain=nightly -y
I get the same error:
rustup: unknown CPU type: armv5tel
Is there a plan to support this architecture?
Do you need to run the Rust compiler itself on your Synology device, or just compile programs that run on the device?
Running the rustc compiler on armv5te processors is not possible yet, though it looks like this could be fixed if some knowledgeable people have time to work on it. This email describes some of the known issues that currently prevent bootstrapping rustc for armv5te.
However, you may be able to run rustc on a different computer (the “host”), and cross-compile to get binaries that will run on your armv5te system (the “target”). You’ll need to install rustup as usual on the host computer, then run
rustup target add armv5te-unknown-linux-gnueabi. You will also need to install a C toolchain (or at least a linker and libc) that can cross-compile for your target device. This is usually easiest if your host machine is running a Debian-based Linux distribution. This repo has general information and instructions about cross-compiling Rust programs.
Thank you jjpe for the link, and thank you very much mbrubeck for the detailed answer.
I indeed just would like to “compile programs that run on the device” and assumed it would be simpler to compile directly on the NAS.
I also wrongly assumed that if it was not possible to run the rustc compiler on a specific target, then it was not possible to cross-compile for that target (I come from the Java word…).
Additional question on a different matter: I resort to bmi2 instructions in a RUST code (using the nightly version).
When I execute
rustc --print cfg
I see (among others):
But I do not see something like:
even if my x86_64 supports them.
To activate bmi2 instructions, I have to compile using explicitly the bmi2 target-feature:
RUSTFLAGS=’-C target-feature=+bmi,+bmi2’ cargo build --release
Is this an expected behaviour?
yes—rustc, by default, targets a wide range of CPUs, to allow for convenient distribution—so it doesn't optimize specifically for what happens to be the system it compiles on
Note also, depending how old the device and its software (specifically, glibc) is, you may need the
armv5te-unknown-linux-musleabi target instead.
Yes. You can also use
-C target-cpu=native if you're just buiding to run on the compile host only.
rustc --print target-cpus
rustc --print target-features