9999 # Note: M1 images on Github Actions start from macOS 14
100100 - [macos-14, macosx_arm64]
101101 - [windows-2022, win_amd64]
102+ - [windows-11-arm, win_arm64]
102103 # TODO: support PyPy?
103104 python : [["cp310", "3.10"], ["cp311", "3.11"], ["cp312", "3.12"], ["cp313", "3.13"], ["cp313t", "3.13"]]
104105 include :
@@ -108,6 +109,12 @@ jobs:
108109 - buildplat : [ubuntu-24.04, pyodide_wasm32]
109110 python : ["cp312", "3.12"]
110111 cibw_build_frontend : ' build'
112+ exclude :
113+ - buildplat : [windows-11-arm, win_arm64]
114+ python : ["cp310", "3.10"]
115+ # BackendUnavailable: Cannot import 'mesonpy'
116+ - buildplat : [windows-11-arm, win_arm64]
117+ python : ["cp313t", "3.13"]
111118
112119 env :
113120 IS_PUSH : ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') }}
@@ -118,6 +125,12 @@ jobs:
118125 with :
119126 fetch-depth : 0
120127
128+ - name : Set up MSVC environment for ARM64
129+ if : matrix.buildplat[1] == 'win_arm64'
130+ uses : ilammy/msvc-dev-cmd@v1
131+ with :
132+ arch : arm64
133+
121134 # TODO: Build wheels from sdist again
122135 # There's some sort of weird race condition?
123136 # within Github that makes the sdist be missing files
@@ -155,9 +168,13 @@ jobs:
155168 env :
156169 CIBW_BUILD : ${{ matrix.python[0] }}-${{ matrix.buildplat[1] }}
157170 CIBW_BUILD_FRONTEND : ${{ matrix.cibw_build_frontend || 'pip' }}
158- CIBW_PLATFORM : ${{ matrix.buildplat[1] == 'pyodide_wasm32' && 'pyodide' || 'auto' }}
171+ CIBW_PLATFORM : ${{ (matrix.buildplat[1] == 'pyodide_wasm32' && 'pyodide') || (matrix.buildplat[1] == 'win_arm64' && 'windows') || 'auto' }}
172+ CIBW_ARCHS : ${{ matrix.buildplat[1] == 'win_arm64' && 'ARM64' || 'auto' }}
173+ CIBW_BEFORE_BUILD_WINDOWS : ' python -m pip install delvewheel'
159174
160- - name : Set up Python
175+ - name : Set up Python for validation/upload (non-ARM64 Windows & other OS)
176+ # micromamba is not available for ARM64 Windows
177+ if : matrix.buildplat[1] != 'win_arm64'
161178 uses : mamba-org/setup-micromamba@v2
162179 with :
163180 environment-name : wheel-env
@@ -170,6 +187,12 @@ jobs:
170187 cache-downloads : true
171188 cache-environment : true
172189
190+ - name : Install wheel for win_arm64
191+ # installing wheel here because micromamba step was skipped
192+ if : matrix.buildplat[1] == 'win_arm64'
193+ shell : bash -el {0}
194+ run : python -m pip install wheel
195+
173196 - name : Validate wheel RECORD
174197 shell : bash -el {0}
175198 run : for whl in $(ls wheelhouse); do wheel unpack wheelhouse/$whl -d /tmp; done
0 commit comments