|
| 1 | +# RFC: Drop MSVC AARCH64 Support |
| 2 | + |
| 3 | +## Metadata |
| 4 | + |
| 5 | +- **RFC Number**: TBD |
| 6 | +- **Title**: Drop MSVC AARCH64 Support |
| 7 | +- **Status**: Draft |
| 8 | + |
| 9 | +## Change Log |
| 10 | + |
| 11 | +- 2026-07-13: Initial RFC created |
| 12 | + |
| 13 | +## Motivation |
| 14 | + |
| 15 | +edk2 has build bindings for MSVC AARCH64 but lacks support for this toolchain in most |
| 16 | +of the repository. The toolchain is not exercised in CI and a full platform cannot be built with |
| 17 | +it without significant downstream overrides. One large blocker is that GAS assembly is not supported |
| 18 | +by the toolchain, but the majority of the AARCH64 assembly code in edk2 is GAS only. |
| 19 | + |
| 20 | +The benefit of MSVC AARCH64 is that it natively produces PE/COFF binaries (and so thereby allowing |
| 21 | +different file and section alignment, PDB debugging, and less processing). However, the newly added |
| 22 | +CLANGPDB AARCH64 also natively produces PE/COFF binaries, is supported on Linux and Windows, uses |
| 23 | +GAS assembly, and is run in CI today. |
| 24 | + |
| 25 | +Pseudo supporting additional toolchains carries maintenance burden and risk, especially as this |
| 26 | +toolchain will never be tested. Consumers should move to CLANGPDB AARCH64 instead and MSVC |
| 27 | +AARCH64 should be removed. |
| 28 | + |
| 29 | +## Technology Background |
| 30 | + |
| 31 | +CLANGPDB AARCH64 support was added to edk2 in https://github.com/tianocore/edk2/pull/11902 in |
| 32 | +early 2026. Prior to this, MSVC AARCH64 was the only toolchain with edk2 bindings for AARCH64 that |
| 33 | +supported PE/COFF binary generation natively. However, all of the build support was primarily |
| 34 | +downstream and toolchain adoption never really grew, with GCC AARCH64 being the primary AARCH64 |
| 35 | +toolchain in edk2. |
| 36 | + |
| 37 | +## Goals |
| 38 | + |
| 39 | +1. Reduce toolchain maintenance |
| 40 | +2. Remove dead/almost dead/forever untested code |
| 41 | + |
| 42 | +## Requirements |
| 43 | + |
| 44 | +1. Have a better alternative for consumers to migrate to |
| 45 | + |
| 46 | +## UEFI/PI Specification Impact |
| 47 | + |
| 48 | +This does not have specification impact. |
| 49 | + |
| 50 | +## Backward Compatibility |
| 51 | + |
| 52 | +This is a breaking change. edk2 will not support building with MSVC AARCH64 any longer. However, |
| 53 | +as noted, a full platform cannot be built with MSVC AARCH64 with edk2 anyway. Small usecases, such |
| 54 | +as an EFI_APPLICATION may be able to build. |
| 55 | + |
| 56 | +Consumers are expected to move to CLANGPDB AARCH64, which is a better alternative for the reasons |
| 57 | +listed above. GCC AARCH64 also exists as a possibility, but does not run on Windows, where MSVC |
| 58 | +AARCH64 developers would be. |
| 59 | + |
| 60 | +## Platform/Package Impact |
| 61 | + |
| 62 | +All. |
| 63 | + |
| 64 | +## Unresolved Questions |
| 65 | + |
| 66 | +N/A. |
| 67 | + |
| 68 | +## Prior Art/Related Work |
| 69 | + |
| 70 | +Toolchains have been deprecated in edk2 before, but primarily older versions rather than |
| 71 | +an entire toolchain. |
| 72 | + |
| 73 | +## Alternatives |
| 74 | + |
| 75 | +### Alternative 1: Do Nothing |
| 76 | + |
| 77 | +- **Pros**: No breaking change. |
| 78 | +- **Cons**: Unused code is kept in the tree, there is the appearance of support for what will likely |
| 79 | + be a painful experience for consumers. |
| 80 | +- **Why not chosen**: Consumers will be better served by moving to the actually supported CLANGPDB AARCH64. |
| 81 | + edk2 maintenance will be improved by removing unused code. |
| 82 | + |
| 83 | +## Implementation Design |
| 84 | + |
| 85 | +The toolchain and supporting arm64asm files will be removed. |
| 86 | + |
| 87 | +### Architecture Overview |
| 88 | + |
| 89 | +N/A. |
| 90 | + |
| 91 | +### Detailed Design |
| 92 | + |
| 93 | +N/A. |
| 94 | + |
| 95 | +### Code Examples |
| 96 | + |
| 97 | +N/A. |
| 98 | + |
| 99 | +## Testing Strategy |
| 100 | + |
| 101 | +N/A. |
| 102 | + |
| 103 | +## Migration/Adoption Plan |
| 104 | + |
| 105 | +1. **Phase 1**: Announce deprecation of the toolchain |
| 106 | +2. **Phase 2**: Remove the toolchain |
| 107 | + |
| 108 | +## Guide-Level Explanation |
| 109 | + |
| 110 | +### For Package Developers |
| 111 | + |
| 112 | +MSVC AARCH64 is no longer supported. Migrate to CLANGPDB AARCH64 instead. |
| 113 | + |
| 114 | +### For Platform Developers |
| 115 | + |
| 116 | +MSVC AARCH64 is already unsupported for platform developers, but the |
| 117 | +same guidance applies. |
| 118 | + |
| 119 | +### For End Users (if applicable) |
| 120 | + |
| 121 | +N/A. |
0 commit comments