iPlug 2: ARM64EC Support
iPlug2 supports building plugins for Windows ARM64EC (ARM64 Emulation Compatible), enabling native performance on Windows ARM devices while maintaining compatibility with x64 hosts.
What is ARM64EC?
ARM64EC is a Windows ABI that allows ARM64 code to interoperate with x64 code. This is particularly useful for audio plugins because:
- Native performance: ARM64EC code runs natively on ARM64 processors
- x64 host compatibility: ARM64EC plugins can be loaded by x64 DAWs running under emulation
- Gradual migration: Allows mixing ARM64 and x64 code in the same process
This means you can ship ARM64EC plugins that will:
- Run at full native speed when loaded by ARM64 native hosts
- Still work when loaded by x64 hosts (DAWs) running under emulation on ARM64 Windows
Supported Platforms
ARM64EC builds are supported for:
- Plugin Formats: VST2, VST3, CLAP, AAX, Standalone App
- Graphics Backend: NanoVG only (Skia not yet supported for ARM64EC)
Building for ARM64EC
Visual Studio Requirements
ARM64EC builds require:
- Visual Studio 2022 (v17.0+)
- ARM64EC build tools installed via Visual Studio Installer
Installing ARM64EC Build Tools
- Open Visual Studio Installer
- Click Modify on your Visual Studio 2022 installation
- Go to Individual Components
- Search for "ARM64EC" and install:
- MSVC v143 - VS 2022 C++ ARM64EC build tools (Latest)
Cross-Compilation
ARM64EC builds use cross-compilation from an x64 host. When building from command line, the build environment must be initialized for ARM64 cross-compilation:
:: Initialize environment for ARM64EC cross-compilation
call "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
:: Then build
msbuild YourPlugin.sln /p:Configuration=Release /p:Platform=ARM64EC
The amd64_arm64 argument tells vcvarsall to set up the x64-hosted ARM64 cross-compiler toolchain, which is used for ARM64EC builds.
Note: You can verify the ARM64EC tools are installed by checking if vswhere finds them:
& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -requires Microsoft.VisualStudio.Component.VC.Tools.ARM64EC -property installationPath
Build Configurations
Each iPlug2 solution includes ARM64EC configurations alongside x64:
| Configuration | Platform | Description |
|---|---|---|
| Debug | x64 | Debug build for x64 |
| Debug | ARM64EC | Debug build for ARM64EC |
| Release | x64 | Release build for x64 |
| Release | ARM64EC | Release build for ARM64EC |
| Tracer | x64 | Tracer build for x64 |
| Tracer | ARM64EC | Tracer build for ARM64EC |
Building from Visual Studio
- Open the solution file (e.g.,
IPlugEffect.sln) - Select the desired configuration (Debug/Release/Tracer)
- Select the platform (ARM64EC)
- Build the solution
Building from Command Line
msbuild YourPlugin.sln /p:Configuration=Release /p:Platform=ARM64EC
Debugger Configuration
Debugger settings are configured via MSBuild properties in common-win.props. The following variables control debugger host paths:
x64 Variables
VST2_X64_HOST_PATH- Host application for x64 VST2 debuggingVST3_X64_HOST_PATH- Host application for x64 VST3 debuggingCLAP_X64_HOST_PATH- Host application for x64 CLAP debugging
ARM64EC Variables
VST2_ARM64EC_HOST_PATH- Host application for ARM64EC VST2 debuggingVST3_ARM64EC_HOST_PATH- Host application for ARM64EC VST3 debuggingCLAP_ARM64EC_HOST_PATH- Host application for ARM64EC CLAP debugging
Plugin Output Paths
VST3_X64_PATH- Installation path for x64 VST3 pluginsVST3_ARM64EC_PATH- Installation path for ARM64EC VST3 pluginsCLAP_X64_PATH- Installation path for x64 CLAP pluginsCLAP_ARM64EC_PATH- Installation path for ARM64EC CLAP plugins
Output File Naming
Built binaries use platform suffixes:
| Format | x64 Output | ARM64EC Output |
|---|---|---|
| VST2 | PluginName_x64.dll | PluginName_ARM64EC.dll |
| VST3 | PluginName.vst3/Contents/x86_64-win/ | PluginName.vst3/Contents/arm64ec-win/ |
| CLAP | PluginName.clap | PluginName.clap (in ARM64EC folder) |
| APP | PluginName_x64.exe | PluginName_ARM64EC.exe |
Skia Limitation
ARM64EC builds are automatically skipped when ‘graphics: 'SKIA’` is specified, as Skia does not yet support ARM64EC on Windows.
Known Limitations
- Skia graphics: Not yet supported for ARM64EC. Use NanoVG for ARM64EC builds.
- Testing on x64 machines: ARM64EC binaries cannot be executed on x64 Windows. Testing requires ARM64 Windows hardware or emulation.
- AAX: ARM64EC AAX support depends on Avid's AAX SDK support for ARM64EC.
VST3 Bundle Structure
VST3 plugins support multi-architecture bundles. After building both architectures, the bundle structure is:
PluginName.vst3/
├── Contents/
│ ├── x86_64-win/
│ │ └── PluginName.vst3
│ └── arm64ec-win/
│ └── PluginName.vst3
└── Resources/
└── ...
This allows a single VST3 bundle to contain both x64 and ARM64EC binaries, with the host selecting the appropriate one at runtime.