# Port applications to Arm64 using Arm64EC

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/laptops-and-desktops/win_arm64ec_porting/)
- [Application](https://learn.arm.com/learning-paths/laptops-and-desktops/win_arm64ec_porting/how-to-1/)
- [Porting using CMake](https://learn.arm.com/learning-paths/laptops-and-desktops/win_arm64ec_porting/how-to-2/)
- [Porting using MSBuild](https://learn.arm.com/learning-paths/laptops-and-desktops/win_arm64ec_porting/how-to-3/)
- [Next Steps](https://learn.arm.com/learning-paths/laptops-and-desktops/win_arm64ec_porting/_next-steps/)

## About this Learning Path

|  |  |
| --- | --- |
| Skill level: | Introductory |
| Reading time: | 1 hr 30 min |
| Last updated: | 28 Jul 2026 |

|  |  |
| --- | --- |
| Author: | Dawid Borycki<br>[GitHub](https://github.com/dawidborycki) |
| Arm IP: | [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors) |
| Tags: | [Migration to Arm](https://learn.arm.com/tag/migration-to-arm) [Windows](https://learn.arm.com/tag/windows) [C](https://learn.arm.com/tag/c) [CPP](https://learn.arm.com/tag/cpp) [Qt](https://learn.arm.com/tag/qt) |

### Who is this for?
This is an introductory topic for developers who want to learn how to port their applications to Arm64 using Arm64EC.

### What will you learn?
After completing this Learning Path, you'll be able to perform the following tasks:
- Build a Qt-based Python desktop application.
- Create dependencies for C++ and use them in the Qt-based Python app.
- Learn how to port dependencies for C++ to Arm64 using Arm64EC.

### Prerequisites
Before starting, you'll need the following prerequisites:
- A Windows on Arm computer such as the Lenovo Thinkpad X13s running Windows 11 or a Windows on Arm [virtual machine](https://learn.arm.com/learning-paths/cross-platform/woa_azure/).
- Any code editor. [Visual Studio Code for Arm64](https://code.visualstudio.com/docs/?dv=win32arm64user) is suitable.
- Visual Studio 2022 with Arm build tools. For installation steps, see [Install Visual Studio](https://developer.arm.com/documentation/102528/0100/Install-Visual-Studio).

### Summary
You’ll port a Qt-based Python desktop app with C++ DLL dependencies to Arm64 on Windows using Arm64EC. You’ll build the app, choose a CMake or MSBuild workflow, configure `CMakePresets.json` or a Visual Studio project, and port DLLs incrementally while keeping compatible x64 dependencies in the same process.

### Frequently asked questions

**Should I use CMake or MSBuild to port my DLLs?**

Use the build system your project already uses. You’ll learn about both approaches in the Learning Path. If you followed earlier steps with CMake, continue with the CMake method.

**How do I know I'm targeting Arm64EC?**

Verify that your preset or project configuration sets the build target to Arm64EC and matches the example shown in the step. A successful build with that target confirms the configuration.

**What do I change in CMake to port a DLL?**

Edit `CMakePresets.json` and add the final statement block so the file matches the provided example. Rebuild to produce the Arm64EC build of the DLL.

**In Visual Studio, which setting do I use to build for Arm64EC?**

Create the Console Application project and set the build target to Arm64EC. Use the specified project names and confirm the platform configuration before building.

**Can I keep some dependencies as x64 while I port others?**

Yes. Arm64EC allows x64 dependencies to load in the same process as Arm64 binaries, enabling incremental migration of components.
