Is Rust ARM Cortex-A7 ready?

Hello, I am not sure that I am posting on the right section of the forum.

I am in the process of choosing the programming language that I'll use to develop a Linux application for the FreedomBox (Dual Core ARM Cortex-A7 processor).

I hesitate between Go and Rust. But since I already know Go, I'd like to try Rust.

However, I just want to make sure that I will be able to cross compiler from my Intel x86_64 GNU/Linux workstation without losing time because of problems related to cross compilation.

Note : I am an old programmer that started as a C developer for real time embedded systems (under VxWorks, LynxOS). But then I went to the information system area and started using Perl, PHP, Python, Java, JavaScript... and now Go. I just want to develop a free, security oriented, applications that can run on the FreedomBox (and Intel workstations/servers as well). I have to cross compile... but I don't want to fight with the compiler since my goal is to write this application.

By reading the Rust documentation, it seems to me that it's OK. ARM Cortex-A7 is supported. However, it's not entirely clear (I haven't played with cross compilation for 20 years... and it was with GCC).

Please could you confirm I am right when I think that cross compilation from Intel x86_64 GNU/Linux to ARM Cortex-A7 GNU/Linux is supported ?

Best regards,

Denis

Short Answer:

Yes, you should be able to cross-compile.

The only time I've ever had a less-than-perfect experience with cross-compilation is when I've used a dependency which links to a native library, and that's because the native library's build system is crap didn't support cross-compilation.

Long Answer:

An ARM A7 running Linux would use the armv7-unknown-linux-gnueabihf target triple, which is a tier 2 target.

The wording in the docs is deliberately conservative, but this is what they say about tier 2 targets is:

Tier 2 targets can be thought of as "guaranteed to build". The Rust project builds official binary releases for each tier 2 target, and automated builds ensure that each tier 2 target builds after each change. Automated tests are not always run so it's not guaranteed to produce a working build, but tier 2 targets often work to quite a good degree and patches are always welcome!

i.e.

  • rustc is able to compile to that target architecture
  • You can use rustup to fetch pre-compiled versions of libcore (the core, platform-agnostic parts of the standard library - doesn't even assume an allocator is present) and libstd (the OS-aware bits of the standard library)
  • The standard library is guaranteed to be available, but they won't necessarily run its test suite as part of CI

For applications which use pure Rust this is more than sufficient, plus a lot of the more popular crates which call into native libraries will even be set up to provide a nice cross-compilation experience.

1 Like

Hello Michael-F-Bryan,

Thank you for your great answer.

It should be fine for me since I only need to use pure Rust.

Best regards,

Denis

1 Like

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.