Skip to content

Commit 64ea876

Browse files
committed
Promote aarch64-pc-windows-msvc to Tier 1
1 parent 3a35580 commit 64ea876

File tree

1 file changed

+209
-0
lines changed

1 file changed

+209
-0
lines changed
Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
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#0000](https://github.com/rust-lang/rust/issues/0000)
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

Comments
 (0)