dstaley / is-windows-on-arm-ready

https://iswindowsonarmready.netlify.app/
22 stars 7 forks source link

Rust supports Windows on Arm #4

Closed woachk closed 3 years ago

woachk commented 4 years ago

Firefox is supported and is on production for Windows on Arm. One of its big dependencies is Rust.

dstaley commented 4 years ago

Rust is in an interesting position because rustup isn't distributed as an ARM64 binary. I'm not sure what toolchain gets installed when you run the installer linked on this page. If it gives you the ARM64 toolchain, I'll merge this, but if it requires additional steps to install the ARM64 version then it doesn't meet the acceptance criteria listed in the README.

woachk commented 4 years ago

@dstaley it just requires:

rustup target add aarch64-pc-windows-msvc

tbh, that shouldn't count as an additional step beyond the normal ones :)

dstaley commented 4 years ago

I know it's a small step, but my goal with the project was to highlight applications that are shipping ARM64 versions by default. My thinking was that I'd only light up an application if you could follow the exact same steps on both an x86 and an ARM64 machine and get the respective versions. If the x86 version of Rust doesn't require the user to run the command you've listed, then the ARM64 version would need to work without the command in order to mark it as available.

That being said, I'm surprised the installer doesn't default to the correct toolchain, and I'll be filing an issue with rustup later today.

Furthermore, I'm hesitant to mark Rust as available since it looks like rustc and cargo aren't available for aarch64-pc-windows-msvc. I'm not familiar enough with Rust to fully understand what that means, but the fact that the platform support page is explicit in denoting whether a platform supports those gives me pause.

wezm commented 4 years ago

Furthermore, I'm hesitant to mark Rust as available since it looks like rustc and cargo aren't available for aarch64-pc-windows-msvc. I'm not familiar enough with Rust to fully understand what that means, but the fact that the platform support page is explicit in denoting whether a platform supports those gives me pause.

The rustc and cargo columns in that table indicate whether rustc and cargo are built for that platform when landing changes. I.e. continuous integration. It doesn’t indicate whether rustc and cargo are available or not.

Landing changes to the rust-lang/rust repository's master branch is gated on platforms building. For some platforms only the standard library is compiled, but for others rustc and cargo are too.

xobs commented 4 years ago

From my understanding, what it means is that you can target aarch64-pc-windows-msvc, however as you say rustc and cargo are not yet available.

For starters, they are not in the list of standalone installers. In fact, there aren't any installers on that list that don't already have a tickmark in both the cargo and rustc column.

What you get by running rustup target add aarch64-pc-windows-msvc is an x86_64 or i686 compiler that has the ability to build for aarch64, but it does not get you a compiler that is running natively.

There is currently an open issue about rustc being unable to produce binaries when run natively on aarch64: https://github.com/rust-lang/rust/issues/72881 so native binaries certainly won't be available until that's fixed, and even then it needs to be integrated into the release builders.

tleasor commented 4 years ago

rustc is now working as a native ARM64 binary when cross-compiled from source. Once I've commited the necessary fixes upstream, I'll look into getting supported added to the release builders.

ZHOUYue67 commented 3 years ago

It seems that support will arrived with v1.49.0

https://github.com/rust-lang/rust/pull/77902