|  | 
|  | 1 | +- Feature Name: promote-aarch64-pc-windows-msvc-to-tier-1 | 
|  | 2 | +- Start Date: 2025-05-22 | 
|  | 3 | +- RFC PR: [rust-lang/rfcs#3817](https://github.com/rust-lang/rfcs/pull/3817) | 
|  | 4 | +- Rust Issue: [rust-lang/rust#145671](https://github.com/rust-lang/rust/issues/145671) | 
|  | 5 | + | 
|  | 6 | +# Summary | 
|  | 7 | +[summary]: #summary | 
|  | 8 | + | 
|  | 9 | +Promote aarch64-pc-windows-msvc to Tier 1 with Host Tools. | 
|  | 10 | + | 
|  | 11 | +# Motivation | 
|  | 12 | +[motivation]: #motivation | 
|  | 13 | + | 
|  | 14 | +About [30% of Rust users use Windows][survey-2024], while the majority of these developers and their | 
|  | 15 | +customers are using x64 hardware, the usage of Arm64 Windows has been growing since it was first | 
|  | 16 | +made available in Windows 10, and has been accelerating, especially with the availability of the | 
|  | 17 | +SnapDragon X processors. | 
|  | 18 | + | 
|  | 19 | +# Guide-level explanation | 
|  | 20 | +[guide-level-explanation]: #guide-level-explanation | 
|  | 21 | + | 
|  | 22 | +No changes required: Rust tooling for Arm64 Windows has been available for a while now so this | 
|  | 23 | +doesn't affect the end user experience. | 
|  | 24 | + | 
|  | 25 | +# Reference-level explanation | 
|  | 26 | +[reference-level-explanation]: #reference-level-explanation | 
|  | 27 | + | 
|  | 28 | +Tier 1 targets must adhere to the [Tier 1 Target Policy][tier-1-policy]. Going through these | 
|  | 29 | +requirements point-by-point: | 
|  | 30 | + | 
|  | 31 | +> Tier 1 targets must have substantial, widespread interest within the developer community, and must | 
|  | 32 | +> serve the ongoing needs of multiple production users of Rust across multiple organizations or | 
|  | 33 | +> projects. These requirements are subjective, and determined by consensus of the approving teams. | 
|  | 34 | +
 | 
|  | 35 | +As mentioned above, Windows users comprise a substantial proportion of Rust developers, and Arm64 | 
|  | 36 | +hardware is increasingly being used by them and their customers. | 
|  | 37 | + | 
|  | 38 | +For the past two years, Arm64 PCs have accounted for 10-14% of Windows sales: | 
|  | 39 | +- <https://www.prnewswire.com/news-releases/2025-will-see-ai-pcs-become-the-new-normal-but-arm-based-pcs-will-not-grow-out-of-its-minority-segment-302340341.html> | 
|  | 40 | +- <https://www.counterpointresearch.com/insights/arm-based-pcs-to-nearly-double-market-share-by-2027/> | 
|  | 41 | +- <https://www.tomshardware.com/pc-components/cpus/arm-pc-market-share-shrinks-mercury-research> | 
|  | 42 | + | 
|  | 43 | +Overall, they are estimated to account for 1 to 1.5% of the Windows population: | 
|  | 44 | +- <https://www.canalys.com/insights/arming-your-pc-for-the-upcoming-ai-era> | 
|  | 45 | +- <https://www.techpowerup.com/329255/snapdragon-x-failed-qualcomm-sold-720-000-pcs-in-q3-around-0-8-market-share> | 
|  | 46 | + | 
|  | 47 | +While that's a small relative number, in absolute terms it works out to 140 to 210 million devices. | 
|  | 48 | + | 
|  | 49 | +For Rust itself, per the [Rust download dashboard][download-dashboard] `aarch64-pc-windows-msvc` is | 
|  | 50 | +the third most downloaded rustc non-tier 1 flavor (after x64 and Arm64 Linux musl flavors) and sees | 
|  | 51 | +~3% the number of downloads of `x86_64-pc-windows-msvc`. | 
|  | 52 | + | 
|  | 53 | +> The target maintainer team must include at least 3 developers. | 
|  | 54 | +
 | 
|  | 55 | +`aarch64-pc-windows-msvc` is supported by [the 5 `*-pc-windows-msvc` maintainers][msvc-support]. | 
|  | 56 | + | 
|  | 57 | +> The target must build and pass tests reliably in CI, for all components that Rust's CI considers | 
|  | 58 | +> mandatory. | 
|  | 59 | +> The target must not disable an excessive number of tests or pieces of tests in the testsuite in | 
|  | 60 | +> order to do so. This is a subjective requirement. | 
|  | 61 | +
 | 
|  | 62 | +[The `dist-aarch64-msvc` CI job has been running reliably for over 4 years now][promote-tier-2], | 
|  | 63 | +and I have [new CI jobs working where Rust is built and tested on Arm64 Windows runners][ci-draft-pr]. | 
|  | 64 | + | 
|  | 65 | +The following tests had to be disabled for `aarch64-pc-windows-msvc`: | 
|  | 66 | +- [Tests in `std::fs` that require symlinks][disable-fs]: this is a limitation of the runner image | 
|  | 67 | +  and I've [filed an issue to have it fixed][fix-symlinks]. | 
|  | 68 | +- [Various debug info tests][disable-debuginfo] | 
|  | 69 | +  - `tests/debuginfo/step-into-match.rs`: Stepping out of functions behaves differently. | 
|  | 70 | +  - `tests/debuginfo/type-names.rs`: Arm64 Windows cdb doesn't support JavaScript extensions. I've | 
|  | 71 | +    filed a bug internally with the debugger team to have this fixed. | 
|  | 72 | +  - `tests/ui/runtime/backtrace-debuginfo.rs`: Backtraces are truncated. I've filed | 
|  | 73 | +    [an issue to investigate this][backtrace-issue]. | 
|  | 74 | + | 
|  | 75 | +> The target must provide as much of the Rust standard library as is feasible and appropriate to | 
|  | 76 | +> provide. | 
|  | 77 | +
 | 
|  | 78 | +The full Standard Library is available. | 
|  | 79 | + | 
|  | 80 | +> Building the target and running the testsuite for the target must not take substantially longer | 
|  | 81 | +> than other targets, and should not substantially raise the maintenance burden of the CI | 
|  | 82 | +> infrastructure. | 
|  | 83 | +
 | 
|  | 84 | +[A `try` run of the new CI jobs completed in under 2 hours.][try-job] | 
|  | 85 | + | 
|  | 86 | +> If running the testsuite requires additional infrastructure (such as physical systems running the | 
|  | 87 | +> target), the target maintainers must arrange to provide such resources to the Rust project, to the | 
|  | 88 | +> satisfaction and approval of the Rust infrastructure team. | 
|  | 89 | +> Such resources may be provided via cloud systems, via emulation, or via physical hardware. | 
|  | 90 | +
 | 
|  | 91 | +The new CI jobs use the free [`windows-11-arm` runners provided by GitHub][runner-announcement]. | 
|  | 92 | + | 
|  | 93 | +> Tier 1 targets must not have a hard requirement for signed, verified, or otherwise "approved" | 
|  | 94 | +> binaries. Developers must be able to build, run, and test binaries for the target on systems they | 
|  | 95 | +> control, or provide such binaries for others to run. (Doing so may require enabling some | 
|  | 96 | +> appropriate "developer mode" on such systems, but must not require the payment of any additional | 
|  | 97 | +> fee or other consideration, or agreement to any onerous legal agreements.) | 
|  | 98 | +
 | 
|  | 99 | +There are no differences between x64 and Arm64 Windows in this regard. | 
|  | 100 | + | 
|  | 101 | +> All requirements for tier 2 apply. | 
|  | 102 | +
 | 
|  | 103 | +Going through the Tier 2 policies: | 
|  | 104 | + | 
|  | 105 | +> The target must not place undue burden on Rust developers not specifically concerned with that | 
|  | 106 | +> target. Rust developers are expected to not gratuitously break a tier 2 target, but are not | 
|  | 107 | +> expected to become experts in every tier 2 target, and are not expected to provide target-specific | 
|  | 108 | +> implementations for every tier 2 target. | 
|  | 109 | +
 | 
|  | 110 | +Understood. | 
|  | 111 | + | 
|  | 112 | +> The target must provide documentation for the Rust community explaining how to build for the | 
|  | 113 | +> target using cross-compilation, and explaining how to run tests for the target. If at al | 
|  | 114 | +> possible, this documentation should show how to run Rust programs and tests for the target using | 
|  | 115 | +> emulation, to allow anyone to do so. If the target cannot be feasibly emulated, the documentation | 
|  | 116 | +> should explain how to obtain and work with physical hardware, cloud systems, or equivalent. | 
|  | 117 | +> The target must document its baseline expectations for the features or versions of CPUs, operating | 
|  | 118 | +> systems, libraries, runtime environments, and similar. | 
|  | 119 | +
 | 
|  | 120 | +Understood, as part of the promotion PR I will add a page to Platform Support. | 
|  | 121 | + | 
|  | 122 | +> The code generation backend for the target should not have deficiencies that invalidate Rust | 
|  | 123 | +> safety properties, as evaluated by the Rust compiler team. | 
|  | 124 | +
 | 
|  | 125 | +There are no known deficiencies in LLVM's support for Arm64 Windows. | 
|  | 126 | + | 
|  | 127 | +> If the target supports C code, and the target has an interoperable calling convention for C code, | 
|  | 128 | +> the Rust target must support that C calling convention for the platform via `extern "C"`. The C | 
|  | 129 | +> calling convention does not need to be the default Rust calling convention for the target, | 
|  | 130 | +> however. | 
|  | 131 | +
 | 
|  | 132 | +`extern "C"` correctly works for calling C code. | 
|  | 133 | + | 
|  | 134 | +> Tier 2 targets should, if at all possible, support cross-compiling. Tier 2 targets should not | 
|  | 135 | +> require using the target as the host for builds, even if the target supports host tools. | 
|  | 136 | +
 | 
|  | 137 | +`aarch64-pc-windows-msvc` can be cross-compiled from x86 and x64 Windows, or other platforms that | 
|  | 138 | +can run those tools. | 
|  | 139 | + | 
|  | 140 | +> In addition to the legal requirements for all targets (specified in the tier 3 requirements), | 
|  | 141 | +> because a tier 2 target typically involves the Rust project building and supplying various | 
|  | 142 | +> compiled binaries, incorporating the target and redistributing any resulting compiled binaries | 
|  | 143 | +> (e.g. built libraries, host tools if any) must not impose any onerous license requirements on any | 
|  | 144 | +> members of the Rust project, including infrastructure team members and those operating CI systems. | 
|  | 145 | +
 | 
|  | 146 | +There are no such license requirements for Arm64 Windows code. | 
|  | 147 | + | 
|  | 148 | +> Tier 2 targets must not impose burden on the authors of pull requests, or other developers in the | 
|  | 149 | +> community, to ensure that tests pass for the target. | 
|  | 150 | +
 | 
|  | 151 | +Understood. | 
|  | 152 | + | 
|  | 153 | +> The target maintainers should regularly run the testsuite for the target, and should fix any test | 
|  | 154 | +> failures in a reasonably timely fashion. | 
|  | 155 | +
 | 
|  | 156 | +Understood, and this will be automated once promoted to Tier 1. | 
|  | 157 | + | 
|  | 158 | +# Drawbacks | 
|  | 159 | +[drawbacks]: #drawbacks | 
|  | 160 | + | 
|  | 161 | +The `windows-11-arm` runners provided by GitHub are relatively new, and so we do not know what the | 
|  | 162 | +availability or reliability of these runners will be. | 
|  | 163 | + | 
|  | 164 | +# Rationale and alternatives | 
|  | 165 | +[rationale-and-alternatives]: #rationale-and-alternatives | 
|  | 166 | + | 
|  | 167 | +`aarch64-pc-windows-msvc` could be left as a Tier 2 with Host Tools target, but given the importance | 
|  | 168 | +of this target to Microsoft and the increasing usage of Arm64 by Windows users, it will become more | 
|  | 169 | +and more likely that issues with this target will need to be treated as critical. Catching issues | 
|  | 170 | +early in development will prevent the need to Beta and Stable backports. | 
|  | 171 | + | 
|  | 172 | +# Prior art | 
|  | 173 | +[prior-art]: #prior-art | 
|  | 174 | + | 
|  | 175 | +- [RFC 2959][rfc-2959] promoted `aarch64-unknown-linux-gnu` to Tier 1. | 
|  | 176 | +- [RFC 3671][rfc-3671] promoted `aarch64-apple-darwin` to Tier 1. | 
|  | 177 | +- [`stdarch` has been using using `windows-11-arm` runners][stdarch-pr] since early May. | 
|  | 178 | +- LLVM has dedicated [Arm64 Windows builders][llvm-builders]. | 
|  | 179 | + | 
|  | 180 | +# Unresolved questions | 
|  | 181 | +[unresolved-questions]: #unresolved-questions | 
|  | 182 | + | 
|  | 183 | +None. | 
|  | 184 | + | 
|  | 185 | +# Future possibilities | 
|  | 186 | +[future-possibilities]: #future-possibilities | 
|  | 187 | + | 
|  | 188 | +* Adding Arm64 Windows jobs to more Rust repos, such as `cargo`. | 
|  | 189 | +* Promoting `arm64ec-pc-windows-msvc` to Tier 1. | 
|  | 190 | +* Add a `aarch64-pc-windows-gnu` target. | 
|  | 191 | +* Promote `aarch64-pc-windows-gnullvm` to Tier 1. | 
|  | 192 | + | 
|  | 193 | +[backtrace-issue]: https://github.com/rust-lang/rust/issues/140489 | 
|  | 194 | +[ci-draft-pr]: https://github.com/rust-lang/rust/pull/140136 | 
|  | 195 | +[disable-debuginfo]: https://github.com/rust-lang/rust/pull/140755 | 
|  | 196 | +[disable-fs]: https://github.com/rust-lang/rust/pull/140759 | 
|  | 197 | +[download-dashboard]: https://p.datadoghq.com/sb/3a172e20-e9e1-11ed-80e3-da7ad0900002-60425c7cb1b7beb2e8959a305a301c0c?fromUser=false&refresh_mode=sliding&from_ts=1747503249629&to_ts=1750095249629&live=true | 
|  | 198 | +[fix-symlinks]: https://github.com/actions/partner-runner-images/issues/94 | 
|  | 199 | +[llvm-builders]: https://lab.llvm.org/buildbot/#/builders/161 | 
|  | 200 | +[msvc-support]: https://doc.rust-lang.org/nightly/rustc/platform-support/windows-msvc.html | 
|  | 201 | +[platform-support]: https://github.com/rust-lang/rust/blob/e3892a40a9d06034fdf2432a9d3d29fa97726299/src/doc/rustc/src/platform-support.md?plain=1#:~:text=aarch64%2Dpc%2Dwindows%2Dmsvc | 
|  | 202 | +[promote-tier-2]: https://github.com/rust-lang/rust/pull/75914 | 
|  | 203 | +[rfc-2959]: https://rust-lang.github.io/rfcs/2959-promote-aarch64-unknown-linux-gnu-to-tier1.html | 
|  | 204 | +[rfc-3671]: https://rust-lang.github.io/rfcs/3671-promote-aarch64-apple-darwin-to-tier-1.html | 
|  | 205 | +[runner-announcement]: https://github.com/orgs/community/discussions/155713 | 
|  | 206 | +[stdarch-pr]: https://github.com/rust-lang/stdarch/pull/1785 | 
|  | 207 | +[survey-2024]: https://blog.rust-lang.org/2025/02/13/2024-State-Of-Rust-Survey-results | 
|  | 208 | +[tier-1-policy]: https://doc.rust-lang.org/rustc/target-tier-policy.html#tier-1-target-policy | 
|  | 209 | +[try-job]: https://github.com/rust-lang-ci/rust/actions/runs/14871501014 | 
0 commit comments