arm64ec-pc-windows-msvc

Tier: 3

Arm64EC ("Emulation Compatible") for mixed architecture (AArch64 and x86_64) applications on AArch64 Windows 11. See https://learn.microsoft.com/en-us/windows/arm/arm64ec.

Target maintainers

Requirements

Builds Arm64EC static and dynamic libraries and executables which can be run on AArch64 Windows 11 devices. Arm64EC static libraries can also be linked into Arm64X dynamic libraries and executables.

Only supported backend is LLVM 18 or above:

  • 18.1.0 added initial support for Arm64EC.
  • 18.1.2 fixed import library generation (required for raw-dylib support).
  • 18.1.4 fixed linking issue for some intrinsics implemented in compiler_builtins.

Reusing code from other architectures - x86_64 or AArch64?

Arm64EC uses arm64ec as its target_arch, but it is possible to reuse existing architecture-specific code in most cases. The best mental model for deciding which architecture to reuse is to is to think of Arm64EC as an x86_64 process that happens to use the AArch64 instruction set (with some caveats) and has a completely custom ABI.

To put this in practice:

Building the target

You can build Rust with support for the targets by adding it to the target list in config.toml:

[build]
target = [ "arm64ec-pc-windows-msvc" ]

Building Rust programs

Rust does not yet ship pre-compiled artifacts for this target. To compile for this target, you will either need to build Rust with the target enabled (see "Building the target" above), or build your own copy using build-std or similar.

Testing

Tests can be run on AArch64 Windows 11 devices.

Cross-compilation toolchains and C code

C code can be built using the Arm64-targeting MSVC or Clang toolchain.

To compile:

cl /arm64EC /c ...

To link:

link /MACHINE:ARM64EC ...

Further reading: https://learn.microsoft.com/en-us/windows/arm/arm64ec-build