Space Index
|
|||||||||||||||||||||||||||||||
0-9 |
AA tale of a dependency chain: Pillow and the crewIn this page I’d like to show what dependencies and unexpected issues I’ve found during Pillow Python package porting to win-arm64 investigation and how were these handled. I think these issues and cross-dependencies will be quite common on the road of wi
Android Studio
Android Studio is the official integrated development environment for Google's Android operating system, built on JetBrains' IntelliJ IDEA software and designed specifically for Android development Status The project is still in the early stages and we ar
ARM64EC
ARM64EC is a new ABI that appeared with Windows 11. It allows to mix x64 and arm64 code in the same process. Setup To be able to compile code targeting ARM64EC, you need to install: VS2019 or 2022 Windows 11 SDK (version >= 22000): https://developer.micro
ARM64EC on LLVM
This page is to capture ARM64EC status and progress on LLVM https://github.com/llvm/llvm-project support for windows on arm. The documentation can be found here Understanding Arm64EC ABI and assembly code | Microsoft Docs 23 https://docs.microsoft.com/en-
Audacity
Audacity is the world's most popular audio editing and recording app. It is widely used in Windows. Now, support has been added for building on ARM64. Audacity uses Conan build system to link against its dependencies. Various packages like RapidJSON, wxWi
|
||||||||||||||||||||||||||||||
BBazelThis page captures the progress of Bazel for windows on arm. Status Bazel changes to enable WoA has been upstreamed and are present on the trunk. https://github.com/bazelbuild/bazel/pull/14689 https://github.com/bazelbuild/bazel/pull/14689 https://github.
Blender
This page is a work in progress ! Motivation Blender is quite possibly the most popular 3D modelling appplication available, definitely the most popular free one. Enabling it would give considerably better performance on ARM64 platforms for Windows. To ru
Brave
This page tracks Brave browser support for the Windows Arm64 platform. https://brave.com/ https://brave.com/ Status https://github.com/brave/brave-core/pull/15141 https://github.com/brave/brave-core/pull/15141 added support for WoA. Related GitHub issue h
Build Packages from Source
Overview The following tutorials are targeting the currently known most simple and clean way of building any Python packages, even if those include platform specific extension (mostly C/C++) code. These steps assume clean (Win10) system. Third party depen
Building Rust based package
An example of Rust based package is https://github.com/huggingface/tokenizers https://github.com/huggingface/tokenizers To be able to compile rust code: download installer from: https://win.rustup.rs/x86_64 https://win.rustup.rs/x86_64 install toolchain:
|
CCFFIThis page captures steps for installing Python cffi package for Windows on Arm platforms. Repository: https://foss.heptapod.net/pypy/cffi https://foss.heptapod.net/pypy/cffi Pypi: https://pypi.org/project/cffi/ https://pypi.org/project/cffi/ Prerequisite
CI Runners for external projects
Since Azure started enabling arm64 virtual machines (april 2022), we have been investigating how to use them to implement CI/CD for external projects, using Github Actions/Azure pipelines and self-hosted runners/agents. We need to solve three different ch
CMake
CMake is a widely used open-source, cross-platform family of tools designed to build, test, and package software. Project homepage: https://cmake.org/ https://cmake.org/ Source code: https://gitlab.kitware.com/cmake/cmake https://gitlab.kitware.com/cmake/
CMake Limitations
1. CMAKE_SYSTEM_PROCESSOR wrongly configured in emulated CMake CMake provides a built-in flag CMAKE_SYSTEM_PROCESSOR to specify the target platform for the build. https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_PROCESSOR.html https://cmake.org/c
CMake Nightly CI
Host We are using tcwg-surface-03.tcwglab machine for running CMake nighly test. Please check out Accessing Windows on Arm machines for instructions on accessing the machine. Following dependencies are installed and required for CMake Visual Studio 2022 I
confluent-kafta
confluent-kafta python package can be compiled for windows/arm64 with following steps Step 1: Install librdkafka git clone https://github.com/Microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh ./vcpkg integrate install librdkafka --triplet arm64-windows #
Continuous integration and delivery for WoA
This page captures the requirements and challenges for deploying CI/CD for WoA open-source projects. CI/CD requirement for Open source projects Most of the open-source projects prefer to use publically available cloud instances for deploying CI/CD for the
cpuinfo - Pytorch
https://github.com/pytorch/cpuinfo#cpu-information-library https://github.com/pytorch/cpuinfo#cpu-information-library Information is needed by cpu info Concept image-20220301-094830.png Data representation image-20220301-095255.png Information is availabl
Cryptography
Here are a set of steps to build python cryptography package Pre-requisite Microsoft Visual Studio 2019 or newer with ARM64 toolchain Rust compiler for Windows on ARM64 Build OpenSSL The first step is to build OpenSSL library which is a dependency for cry
|
||||||||||||||||||||||||||||||
DDart/FlutterIntroduction https://en.wikipedia.org/wiki/Dart_(programming_language) https://en.wikipedia.org/wiki/Dart_(programming_language) is a language created by Google to replace Javascript. It is targetting a VM (DartVM). https://en.wikipedia.org/wiki/Flutter_(
Debug run-time DLL issue
Issue found Debug run-time dlls for arm64 are not installed properly by Windows 10 SDK. C:\Windows\System32 path can’t be used for arm64 debug dll loading, even if dlls manual copied from Windows 10 SDK package directories. Steps to reproduce My system Ed
Detailed How-To and Status sub pages
|
E |
||||||||||||||||||||||||||||||
FFFMpegMotivation FFMpeg is a widely used tool for just about every conceivable media application, including transcoding, streaming, etc. Status Working via VCPKG. FFMpeg 4 only. Compiling and Binary Availability Install vcpkg, and then execute vcpkg install ffm
Fortran
This page lists the status of FORTRAN compilers for windows on arm targets. Classic Flang Classic Flang is an out-of-tree Fortran compiler targeting LLVM. It is an open-sourced version of pgfortran, a commercial Fortran compiler from PGI/NVIDIA. https://g
|
GGIMPIntroduction https://www.gimp.org/ https://www.gimp.org/ is a Free & Open Source Image Editor. Status GIMP is available using msys2/clangarm64 https://github.com/msys2/MINGW-packages/tree/master/mingw-w64-gimp3 https://github.com/msys2/MINGW-packages/tree
Git For Windows
Project Git (SCM) and a set of tools like Git Bash, Git GUI for Windows platforms. Project Home: https://gitforwindows.org/ https://gitforwindows.org/ GitHub: https://github.com/git-for-windows https://github.com/git-for-windows Status Native port of Git
GNU Toolchain for Windows on Arm
Motivation The GNU toolchain is the only major C/C++ toolchain not to support targeting Windows on ARM64. Clang/LLVM and MSVC already have support. Many downstream open-source toolchains; such as MSYS2, MINGW and Cygwin, expressed interested in supporting
GNUStep/LibObjC2
GNUStep is a UI framework that matches Apple’s Cocoa app framework closely. It's widely use to create cross platform applications. https://gnustep.github.io https://gnustep.github.io LibObjC2 is the GNUstep Objective-C runtime was designed as a drop-in re
|
||||||||||||||||||||||||||||||
HHow to setup WoA machine for python buildbotThis page describes how to setup WoA machine to run python buildbot. Credentials Login/password is allocated by python buildbot administrators. You can contact the three maintainers (together) for python buildbot server: Zachary Ware zach@python.org mailt
|
IIdentify CPU architectureOn Windows, to identify your CPU architecture, the standard way is to read the PROCESSOR_ARCHITECTURE environment variable. For an x64 binary, it will always be set to AMD64. For an arm64 binary, it will always be set to ARM64. Even if you can set the var
Install Packages
This page explains how to install python packages for Windows Arm64 with pip and pypi repository. Many of the python packages still doesn't provide binary wheels for Windows Arm64 targets and pip will be locally building and installing packages with the h
Introduction
Linaro Virtual Connect 2021 Fall: https://www.youtube.com/watch?v=vah0IMpvbYI https://www.youtube.com/watch?v=vah0IMpvbYI
Investigation
|
||||||||||||||||||||||||||||||
JJenkinshttps://github.com/jenkinsci/jenkins https://github.com/jenkinsci/jenkins Jenkins is an open source https://en.wikipedia.org/wiki/Open_source automation https://en.wikipedia.org/wiki/Automation server https://en.wikipedia.org/wiki/Server_(computing). It h
Jupyter Dependencies
https://jupyter.org/ https://jupyter.org/ with python backend is popular among data scientists and many other professionals and it is one of the popular packages downloaded from pypi and conda repositories. This page captures the key dependencies for Jupy
|
KKnown issues |
||||||||||||||||||||||||||||||
LLessons learnt from Python package investigationsLibreOffice https://www.libreoffice.org/ https://www.libreoffice.org/ is a free and open-source office productivity software suite, a project of The Document Foundation (TDF). It was forked in 2010 from http://OpenOffice.org http://OpenOffice.org , an open-sourced ve
LuaJIT
LuaJIT is a Just-In-Time Compiler (JIT) for the Lua https://www.lua.org/ programming language. Lua is a powerful, dynamic and light-weight programming language. It may be embedded or used as a general-purpose, stand-alone language. https://luajit.org/luaj
|
MMissing x64 Intrinsics and Windows API for ARM64This is a list of x64 intrinsics used in many popular codebases but is lacking an ARM64 implementation and an alternative MSVC intrinsics. An alternative ARM64 implementation in C is provided to help developers port code for windows arm64 targets. Intrins
MPV
Motivation MPV is a frree media player that plays a variety of formats. Status Working using clang and msys2 via wenv. Compiling Mainly based on this page, with a few tweaks: https://github.com/mpv-player/mpv/blob/master/DOCS/compile-windows.md https://gi
MySQL
Motivation MySQL is a hugely popular database server, and is used by a large number of enterprises. Enabling it would give considerably better performance on ARM64 platforms for Windows. Status Blocked upstream, awaiting response from Oracle. Their tracke
|
||||||||||||||||||||||||||||||
Nnginxnginx (pronounced engine-x) is a very popular web server application. Status Working OOB, no modifications required. An example script/wenv recipe can be found here: https://gitlab.com/Linaro/windowsonarm/packages/nginx https://gitlab.com/Linaro/windowson
Ninja
Status Ninja for windows on arm can be compiled and executed successfully. No pre-built binaries are yet available for native windows on arm but can be built from source. Emulated Ninja(x64) also works well. Getting Ninja on Windows Arm64 Mode Known Limia
Node.js
Status https://github.com/nodejs https://github.com/nodejs has added official support for Windows on Arm. CI run using Azure VM maintained by https://www.janeasystems.com/ https://www.janeasystems.com/ Build from Source Clone https://github.com/nodejs htt
Numpy
Numpy support for WoA is available from v1.21. Numpy can be installed with and without BLAS support. Please see the instructions below for installation. Prerequisites Visual Studio 2019 or later with ARM64 toolchain This is a common prerequisite for both
Numpy failing to enable CPU features
Compiling Numpy with MSVC entails the following output INFO: ########### CLIB COMPILER OPTIMIZATION ########### INFO: Platform : Architecture: aarch64 Compiler : msvc CPU baseline : Requested : '+neon' Enabled : none Flags : none Extra checks: none CPU di
|
OOBS Studiohttps://obsproject.com/ https://obsproject.com/ is a free and open source software for video recording and live streaming. Two PR are currently open: https://github.com/obsproject/obs-studio/pull/4771 https://github.com/obsproject/obs-studio/pull/4771 Dep
OpenBLAS
Status OpenBLAS can be built from source for WoA using LLVM toolchain (clang-cl and flang) Build and test passing for v0.3.24 https://github.com/OpenMathLib/OpenBLAS/releases/tag/v0.3.24 (prebuilt package https://woastorage.blob.core.windows.net/packages/
OpenImageDenoise
This page is a work in progress. OIDN, as of right now, is ~7.5x slower than emulated Project link: https://github.com/OpenImageDenoise/oidn https://github.com/OpenImageDenoise/oidn Motivation OpenImageDenoise is a dependency of Blender, one that is espec
OpenSSL
Status Status 06 January 2023 Building normally with both clang-cl and VS. It is now possible to use clang-cl as assembler which enhances performance of several crypto functions. Downloads Available LTS in OpenSSL 3.0 and later. Clang-cl assembler support
osquery
https://github.com/osquery/osquery https://github.com/osquery/osquery Status PR https://github.com/osquery/osquery/pull/7918 https://github.com/osquery/osquery/pull/7918 enables the support for Windows on Arm64. Build from source Clone https://github.com/
|
||||||||||||||||||||||||||||||
PPackage building tutorialPackages This section summarises the progress of porting python packages for windows on arm64 platform. A large number of python packages have platform-specific code and they need to be ported explicitly for new platforms such as windows on arm64. Please see our i
Perl
This page is to capture the status and progress of Perl support for windows on arm. Repository https://github.com/Perl https://github.com/Perl Status Perl can be compiled, and test suite is passing (from this commit https://github.com/Perl/perl5/commit/04
Pillow
This page describes how to build python Pillow package from source. https://github.com/python-pillow/Pillow https://github.com/python-pillow/Pillow There are two at least two ways to build Pillow and its dependencies for Windows on Arm Method 1: Using bui
Porting Overview
Platform agnostic packages Any package, that is distributed only by a generic “*none-any.whl” file, is considered a platform agnostic package. Installing these packages via pip shouldn’t cause any problems (except for dependency issues), as these are not
PostgreSQL
https://www.postgresql.org/ https://www.postgresql.org/ Status PostgresSQL support for Windows on Arm has been requested with a PR. PostgresSQL can be compiled and run successfully with https://commitfest.postgresql.org/37/3561/ https://commitfest.postgre
Power function
The following program gives slightly different results on win/arm64 vs win/x86 and wsl/arm64. This specific issue is found while running numpy test suite. #include <stdio.h> #include <math.h> int main(){ double x = 0.5; double y = 1022 + 52; double z = po
Pre-release Python binary wheels and dependencies
This page contains the pre-release of binary wheels for Python packages being ported for early testing and feedback. How to install pip install <absolute path of wheel file> Limitations These wheel files are built locally, by pre-release 3.10 Python. Only
Pre-release Python Installation
There was a time when is no official python installer was available for win/arm64 devices. However, packages for python 3.9 and above were available in Nuget and also could be compiled from sources as well. Please see the instructions below, if you intere
Progress
PyNaCl PyNaCl is a Python binding to libsodium https://github.com/jedisct1/libsodium https://github.com/pyca/pynacl https://github.com/pyca/pynacl This page explains how to install the python package for Windows Arm64. Prerequisite Visual Studio installation Vcp
Pyproj
PROJ is a library for performing conversions between cartographic projections. Pyproj is basically a wrapper around it, for interacting with it from the python runtime. There are currently no binary wheels for PyPROJ available on ARM64 Windows, so we need
Python
This collaboration page is the landing page of the journey of Windows On Arm enablement for the Python ecosystem and every required dependency. All feedback, contribution, and findings are welcomed! This is a living page updated regularly, so worth coming
Python package analysis
Feb 2022 Analysis Please see the list of top 500 python packages as of Feb 2022. The list is generated directly from PyPI public dataset https://packaging.python.org/en/latest/guides/analyzing-pypi-package-downloads/. July 2021 Analysis To understand the
Pytorch
Get Native Windows Arm64 Python Please checkout Pre-release Python Installation for instructions Get the latest source https://github.com/pytorch/pytorch https://github.com/pytorch/pytorch Tutorial:https://github.com/pytorch/pytorch#from-source https://gi
PyTorch Status
Status 06 January 2023 Status Open PRs https://github.com/pytorch/pytorch/pull/82967 https://github.com/pytorch/pytorch/pull/82967 https://github.com/pytorch/pytorch/pull/82723#issuecomment-1203970983 https://github.com/pytorch/pytorch/pull/82723#issuecom
PyWin32
Pywin32 is an important python package and Linaro has enabled windows-arm64 support for it. https://github.com/mhammond/pywin32/pull/1793 https://github.com/mhammond/pywin32/pull/1793 Pywin32 yet doesn’t provide a python wheel for windows-arm64 and the fo
|
QQEMUQEMU is an open-source emulator and virtualization tool. https://www.qemu.org/ https://www.qemu.org/ QEMU can be used as a system emulator and supports multiple CPU architectures and devices. A full guest operating system can be run on the system emulator
Qt
Qt is a cross-platform application development framework for desktop, embedded, and mobile. Status QT for Windows has enabled support for Arm architecture from Qt v6.2. Installers are available from their official website https://www.qt.io/download. You c
|
||||||||||||||||||||||||||||||
RRubyhttps://www.ruby-lang.org/en/ https://www.ruby-lang.org/en/ is a dynamic, open source programming language with a focus on simplicity and productivity. On Windows, https://rubyinstaller.org/ https://rubyinstaller.org/ is the most used distribution. It’s b
|
SSciPyPrerequisites Visual Studio 2019 or later with ARM64 toolchain Fortran compiler Classic flang - https://github.com/kaadam/flang/releases/tag/v0.1 https://github.com/kaadam/flang/releases/tag/v0.1 Install Python packages numpy cython pybind11 pythran OpenB
sentencepiece
https://github.com/google/sentencepiece https://github.com/google/sentencepiece https://pypi.org/project/sentencepiece/ https://pypi.org/project/sentencepiece/ Steps to build sentencepiece library and python package is given below. git clone https://githu
Setting up PostgreSQL buildfarm animal
Generic instructions are here https://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto https://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto Following instructions are setting up an MSVC-based buildfarm animal for Windows on Arm machine. Install
setuptools-distutils
1. Overview As package build process is controlled by distutils (superseded by setuptools), it’s important to know the current status of distutils and setuptools, why there are mutiple instances of an installation, how it’s possible that different package
Shapely and PyGEOS
Shapely is a Python package for manipulation and analysis of planar geometric objects. PyGEOS is a C/Python library with vectorized geometry functions Shapely and PyGEOS doesn’t have python binary wheels for windows on arm. You can find instructions on bu
Signal
Building from source Mostly follow the instructions under https://github.com/signalapp/Signal-Desktop/blob/main/CONTRIBUTING.md https://github.com/signalapp/Signal-Desktop/blob/main/CONTRIBUTING.md . Tested with version v6.36.0. You will need to update pa
SPEC2017
Repository https://dev-private-git.linaro.org/restricted-benchmarks/CPU2017.git/ https://dev-private-git.linaro.org/restricted-benchmarks/CPU2017.git/ Status IntRate/FpRate with no_fortran can run on WOA with clang build. Fortran test need to be support a
SQLite
Project SQLite is a lightweight SQL database engine. It is the most used database engine in the world. https://www.sqlite.org/ https://www.sqlite.org/ Status SQLite support for Windows Arm64 is available. SQLite doesn’t yet provide any pre-built libraries
sse2neon
https://github.com/DLTcollab/sse2neon/ https://github.com/DLTcollab/sse2neon/ Project sse2neon is a header-file project that projects can include on ARM64 platforms instead of immintrin.h. It acts as something of a drop-in replacement for SSE intrinsics,
|
||||||||||||||||||||||||||||||
TTcl/TkThis page is to capture status and progress on Tcl/Tk support for windows on arm. Status Tcl and Tk changes required to support Windows on Arm are upstreamed and present on core-8-6-branch Tcl and Tk supports native and cross-compilation. Build from Sourc
TensorFlow
This page captures steps to build TensorFlow for windows on arm from source and known issues with the build. TensorFlow uses Bazel build system so the first step is to compile Bazel for windows on arm. Build Bazel Bazel can be either built from scratch or
Tensorflow Lite
TensorFlow https://www.tensorflow.org/ is a free and open-source AI/ML framework from Google used for training and inferencing of neural networks. Tensorflow Lite is designed as a smaller subset of Tensorflow aimed at deployment on mobile and edge devices
Third Party Libraries
This section summarises the progress of porting third-party libraries that are required for python packages. Library status Dependencies commit/pull request comment OpenBLAS Released https://github.com/xianyi/OpenBLAS/pull/3345 https://github.com/xianyi/O
Tips and tricks for porting to win-arm64
This page doesn’t try to be a complete porting guide, just a collection of the learnt approaches during porting Python packages and 3rd party libraries. Common issues Start with x86/x64 build as a reference and understand the "clean" build flow if possibl
Toolchain for Python ecosystem
This section covers all toolchain and build system dependencies for the Python ecosystem package / distribution status dependencies CI/CD system commit/pull request commit/pull request date comment Ninja Local build for stand-alone project and Python dist
Tutorials
|
U |
||||||||||||||||||||||||||||||
VVLCVLC Is one of the most popular and open-source cross-platform media players. Status VLC has been ported to Windows Arm64 and regular releases are available from the official website. https://www.videolan.org/vlc/ https://www.videolan.org/vlc/ CI VLC uses
|
WWindows on Arm (WOA)Introduction Establish a healthy self-sustaining Arm open source ecosystem for Windows Windows on Arm upstream support Adding support for Windows on Arm into open source projects requires official builds in CI, a long-term commitment to maintainership, an
Windows on Arm Environments
Arm Laptop and dev boxes Limited availability Thinkpads x13 with Snapdragons are expensive. Volterra is out of stock Arm does not have any more to loan Linaro has a couple to spare surface-10 / Volterra• About 10 projects are being run on Linaro CI machin
Windows on Arm GNU tools status page
Module Task Status Details binutils Create basic pe-aarch64 target Complete binutils Fix invalid pe-aarch64 alignment Complete binutils Fix invalid pe-aarch64 .align interpretation Complete binutils rename aarch64pe to arm64pe Complete https://sourceware.
Windows on Arm Toolchain (WOATC)
Introduction Linaro is an active LLVM project contributor with our main goal of making sure that Arm and AArch64 Linux support in upstream LLVM remains highly performant, secure, free of regressions, and competitive against other architectures. This proje
Windows Sandbox
https://learn.microsoft.com/en-us/windows/security/threat-protection/windows-sandbox/windows-sandbox-overview https://learn.microsoft.com/en-us/windows/security/threat-protection/windows-sandbox/windows-sandbox-overview is a technology that allows to laun
Windows Service management
To run a batch file or program as a service, you need an intermediate tool. https://nssm.cc/ https://nssm.cc/ does all you need for your services. It’s free and open source. There exists a repository on Github with this name, but it is not managed by the
windows-arm64 VM using qemu-system
This page describes the process to run a windows-arm64 VM using qemu-system-aarch64. Prerequisites Windows ISO Microsoft does not distribute official ISO for windows-arm64. UUPDump website allows you to build an iso from windows update servers. Pick most
WiX
WiX is a toolset to create windows installation packages. See https://wixtoolset.org/ https://wixtoolset.org/ Status WiX added native support for Windows Arm64 from WiX v4. Wix4 was released on 5th April 2023: https://wixtoolset.org/docs/releasenotes/#v4
WoA Emulation using qemu-user/wine-arm64
We have been experimenting to run Windows on Arm binaries from a Linux-x64 machine using qemu-user and wine-arm64. How it works QEMU can run aarch64 binaries on x64 host: qemu-aarch64 ./program Wine-arm64 is set of native aarch64 binaries that implements
|
||||||||||||||||||||||||||||||
X |
Y |
||||||||||||||||||||||||||||||
Z |
!@#$ |