Skip to content

Commit 1811971

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

File tree

1 file changed

+180
-0
lines changed

1 file changed

+180
-0
lines changed
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
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+
> The target maintainer team must include at least 3 developers.
39+
40+
There is an existing [Windows team for Rust][windows-team] and, within Microsoft, Arm64 Windows is
41+
considered to be a Tier 1 target for internal Rust usage.
42+
43+
> The target must build and pass tests reliably in CI, for all components that Rust's CI considers
44+
> mandatory.
45+
> The target must not disable an excessive number of tests or pieces of tests in the testsuite in
46+
> order to do so. This is a subjective requirement.
47+
48+
[The `dist-aarch64-msvc` CI job has been running reliably for over 4 years now][promote-tier-2],
49+
and I have [new CI jobs working where Rust is built and tested on Arm64 Windows runners][ci-draft-pr].
50+
51+
> The target must provide as much of the Rust standard library as is feasible and appropriate to
52+
> provide.
53+
54+
The full Standard Library is available.
55+
56+
> Building the target and running the testsuite for the target must not take substantially longer
57+
> than other targets, and should not substantially raise the maintenance burden of the CI
58+
> infrastructure.
59+
60+
[A `try` run of the new CI jobs completed in under 2 hours.][try-job]
61+
62+
> If running the testsuite requires additional infrastructure (such as physical systems running the
63+
> target), the target maintainers must arrange to provide such resources to the Rust project, to the
64+
> satisfaction and approval of the Rust infrastructure team.
65+
> Such resources may be provided via cloud systems, via emulation, or via physical hardware.
66+
67+
The new CI jobs use the free [`windows-11-arm` runners provided by GitHub][runner-announcement].
68+
69+
> Tier 1 targets must not have a hard requirement for signed, verified, or otherwise "approved"
70+
> binaries. Developers must be able to build, run, and test binaries for the target on systems they
71+
> control, or provide such binaries for others to run. (Doing so may require enabling some
72+
> appropriate "developer mode" on such systems, but must not require the payment of any additional
73+
> fee or other consideration, or agreement to any onerous legal agreements.)
74+
75+
There are no differences between x64 and Arm64 Windows in this regard.
76+
77+
> All requirements for tier 2 apply.
78+
79+
Going through the Tier 2 policies:
80+
81+
> The target must not place undue burden on Rust developers not specifically concerned with that
82+
> target. Rust developers are expected to not gratuitously break a tier 2 target, but are not
83+
> expected to become experts in every tier 2 target, and are not expected to provide target-specific
84+
> implementations for every tier 2 target.
85+
86+
Understood.
87+
88+
> The target must provide documentation for the Rust community explaining how to build for the
89+
> target using cross-compilation, and explaining how to run tests for the target. If at al
90+
> possible, this documentation should show how to run Rust programs and tests for the target using
91+
> emulation, to allow anyone to do so. If the target cannot be feasibly emulated, the documentation
92+
> should explain how to obtain and work with physical hardware, cloud systems, or equivalent.
93+
> The target must document its baseline expectations for the features or versions of CPUs, operating
94+
> systems, libraries, runtime environments, and similar.
95+
96+
Understood, as part of the promotion PR I will add a page to Platform Support.
97+
98+
> The code generation backend for the target should not have deficiencies that invalidate Rust
99+
> safety properties, as evaluated by the Rust compiler team.
100+
101+
There are no known deficiencies in LLVM's support for Arm64 Windows.
102+
103+
> If the target supports C code, and the target has an interoperable calling convention for C code,
104+
> the Rust target must support that C calling convention for the platform via `extern "C"`. The C
105+
> calling convention does not need to be the default Rust calling convention for the target,
106+
> however.
107+
108+
`extern "C"` correctly works for calling C code.
109+
110+
> Tier 2 targets should, if at all possible, support cross-compiling. Tier 2 targets should not
111+
> require using the target as the host for builds, even if the target supports host tools.
112+
113+
`aarch64-pc-windows-msvc` can be cross-compiled from x86 and x64 Windows, or other platforms that
114+
can run those tools.
115+
116+
> In addition to the legal requirements for all targets (specified in the tier 3 requirements),
117+
> because a tier 2 target typically involves the Rust project building and supplying various
118+
> compiled binaries, incorporating the target and redistributing any resulting compiled binaries
119+
> (e.g. built libraries, host tools if any) must not impose any onerous license requirements on any
120+
> members of the Rust project, including infrastructure team members and those operating CI systems.
121+
122+
There are no such license requirements for Arm64 Windows code.
123+
124+
> Tier 2 targets must not impose burden on the authors of pull requests, or other developers in the
125+
> community, to ensure that tests pass for the target.
126+
127+
Understood.
128+
129+
> The target maintainers should regularly run the testsuite for the target, and should fix any test
130+
> failures in a reasonably timely fashion.
131+
132+
Understood, and this will be automated once promoted to Tier 1.
133+
134+
# Drawbacks
135+
[drawbacks]: #drawbacks
136+
137+
The `windows-11-arm` runners provided by GitHub are relatively new, and so we do not know what the
138+
availability or reliability of these runners will be.
139+
140+
# Rationale and alternatives
141+
[rationale-and-alternatives]: #rationale-and-alternatives
142+
143+
`aarch64-pc-windows-msvc` could be left as a Tier 2 with Host Tools target, but given the importance
144+
of this target to Microsoft and the increasing usage of Arm64 by Windows users, it will become more
145+
and more likely that issues with this target will need to be treated as critical. Catching issues
146+
early in development will prevent the need to Beta and Stable backports.
147+
148+
# Prior art
149+
[prior-art]: #prior-art
150+
151+
- [RFC 2959][rfc-2959] promoted `aarch64-unknown-linux-gnu` to Tier 1.
152+
- [RFC 3671][rfc-3671] promoted `aarch64-apple-darwin` to Tier 1.
153+
- [`stdarch` has been using using `windows-11-arm` runners][stdarch-pr] since early May.
154+
- LLVM has dedicated [Arm64 Windows builders][llvm-builders].
155+
156+
# Unresolved questions
157+
[unresolved-questions]: #unresolved-questions
158+
159+
None.
160+
161+
# Future possibilities
162+
[future-possibilities]: #future-possibilities
163+
164+
* Adding Arm64 Windows jobs to more Rust repos, such as `cargo`.
165+
* Promoting `arm64ec-pc-windows-msvc` to Tier 1.
166+
* Add a `aarch64-pc-windows-gnu` target.
167+
* Promote `aarch64-pc-windows-gnullvm` to Tier 1.
168+
169+
[ci-draft-pr]: https://github.com/rust-lang/rust/pull/140136
170+
[llvm-builders]: https://lab.llvm.org/buildbot/#/builders/161
171+
[platform-support]: https://github.com/rust-lang/rust/blob/e3892a40a9d06034fdf2432a9d3d29fa97726299/src/doc/rustc/src/platform-support.md?plain=1#:~:text=aarch64%2Dpc%2Dwindows%2Dmsvc
172+
[promote-tier-2]: https://github.com/rust-lang/rust/pull/75914
173+
[rfc-2959]: https://rust-lang.github.io/rfcs/2959-promote-aarch64-unknown-linux-gnu-to-tier1.html
174+
[rfc-3671]: https://rust-lang.github.io/rfcs/3671-promote-aarch64-apple-darwin-to-tier-1.html
175+
[runner-announcement]: https://github.com/orgs/community/discussions/155713
176+
[stdarch-pr]: https://github.com/rust-lang/stdarch/pull/1785
177+
[survey-2024]: https://blog.rust-lang.org/2025/02/13/2024-State-Of-Rust-Survey-results
178+
[tier-1-policy]: https://doc.rust-lang.org/rustc/target-tier-policy.html#tier-1-target-policy
179+
[try-job]: https://github.com/rust-lang-ci/rust/actions/runs/14871501014
180+
[windows-team]: https://github.com/rust-lang/team/blob/055aa9ddb4e9a10c760042baa54da71b1585a821/teams/windows.toml

0 commit comments

Comments
 (0)