Native support for Windows on ARM64 is available for several open-source development tools:
- LLVM. LLVM release for Windows 10 on ARM allows developers to build applications to run natively on ARM processors. The binary includes a compiler, linker and compiler libraries, which can be downloaded from the LLVM Project on GitHub.
- MinGW and GCC
- Chromium framework. Native Chromium builds for Windows on ARM can be downloaded from wollyss.org, and offer a familiar web browsing experience for people using all Windows on ARM devices. The Chromium Embedded Framework (CEF) is also ported to ARM64 devices, and developers can use this open source framework to embed Chromium web browser in their applications.
- .NET 5.0 framework. .Net is a software framework developed by Microsoft and intended to be used by most new applications created for the Windows platform. .Net 5.0 release brings support for ARM64 devices.
- gstreamer is an open source multimedia framework designed to work on a variety of operating systems and hardware architectures including Windows and 64-bit ARM devices.
- FFMPEG library. FFmpeg is a cross-platform multimedia framework designed to record, convert and stream audio and video. FFmpeg is designed to compile and run across various operating system and machine architectures including Windows on ARM devices.
Tools, Editors, Libraries, and more
- Visual Studio Code is a source code editor which runs on your desktop. There are 64bit ARM versions available for Windows and Linux. It supports various programming and scripting languages. It also has support for runtime environments such as .NET and Unity.
- WiX installers. WiX is a set of build tools supporting ARM64 that help developers build Windows Installer packages.
- WSL/WSL2. Windows 10 on ARM includes the Windows Subsystem for Linux 2 (WSL 2). WSL 2 uses virtualization technology to run a complete Linux kernel. WSL 2 can also run containers for application development, provides much faster file I/O compared to WSL 1 and is a great place to start for software developers who are looking to develop applications in a Linux environment.
- OpenVPN. Developers can use OpenVPN to create secure point-to-point or site-to-site connections in routed or bridged configurations and remote access facilities. You can find instructions here to download the Windows ARM64 installer.
- Boost is a collection of portable C++ source libraries that implements operations for various CPU architectures including ARM64, reflecting and extending the standard interface defined in C++11 and later.
ARM versions of these and other tools mean that you can develop applications to run natively in an ARM64 environment, like Windows on Snapdragon® compute platform.
If you’re new to Windows on Snapdragon, have a look at Microsoft’s extensive documentation for developers, starting with Windows 10 on ARM apps and experiences.
Developing and Porting to ARM
Many consumer applications and commercial solutions are compiled for ARM and run natively on Windows on Snapdragon.
- Compiling desktop applications for ARM64. Emulation is sufficient for many applications to run seamlessly and emulation for x86 64-bit apps is currently in preview in Windows Insider (starting with build 21277). Still, compiling your applications for ARM/ARM64 ensures that your users will enjoy native performance, as shown in the video Building ARM64 Win32 C++ Apps.
- Compiling UWP apps for ARM64. x86 32-bit apps can run in emulation on Windows on Snapdragon, with little to no modification. That includes both classic desktop apps and UWP (Universal Windows Platform) apps. For best performance, add a package to compile your app for ARM64 using app package architectures and Visual Studio 15.9 or later. When users install your app from the Microsoft Store to a Windows on Snapdragon device, the ARM/ARM64 version will be installed automatically, if it is available.
- Compiling drivers for ARM64. x86 kernel-mode drivers and User-mode Driver Framework (UMDF) cannot be emulated. You must compile them for ARM64, following the steps in Building ARM64 Drivers with the WDK.
- Visual C++ Redistributable package. The package installs run-time components of Visual C++ libraries. It is currently available for x64, ARM64 and x86 architectures (search for “redistributable”).
Debugging and Troubleshooting
In most cases, you use Visual Studio or WinDbg to debug applications and drivers on Windows on Snapdragon, as you would debug any other Windows module.
- ARM64. Learn about the tools and versions to use when debugging on ARM64 and Windows on Snapdragon.
- Debugging emulation issues. When emulated x86 32-bit apps are not running properly on Windows on Snapdragon, consult Microsoft’s documentation on troubleshooting x86 desktop apps. For example, apps that disable dynamic code generation will not run properly. If your app tries to hook Windows components or load their DLLs into Windows processes, you will need to recompile those DLLs to match the system architecture (ARM64). A related resource is the Program Compatibility Troubleshooter on ARM.
- UWP apps. If your ARM32 or ARM64 UWP app isn't working correctly on ARM, consult Troubleshooting ARM UWP apps.
- Reporting issues. For problems like repeated crashes during development, collect a complete crash dump, then send us the dump and details. Be sure to collect a “Complete memory dump,” usually stored as C:\Windows\memory.dmp.