Skip to content

Provide wheel for Windows ARM64 #455

@khmyznikov

Description

@khmyznikov

What is the current behavior?

Unable to install the package from pip.

What is the desired behavior?

To have native wheel for WoA. GitHub Actions now supports win-arm64 for free.

How would this improve h3?

Due to the library's popularity, a native version for the growing number of Windows on ARM (WoA) devices offers a better user experience.

Install log
X:\GitHub\Windows-DevRel\Tools\ML-tests> pip install h3
Collecting h3
  Downloading h3-4.2.2.tar.gz (167 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: h3
  Building wheel for h3 (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for h3 (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [148 lines of output]
      *** scikit-build-core 0.11.2 using CMake 4.0.2 (wheel)
      *** Configuring CMake...
      2025-05-13 13:16:37,410 - scikit_build_core - WARNING - Can't find a Python library, got libdir=None, ldlibrary=None, multiarch=None, masd=None
      loading initial cache file C:\Temp\tmpq3q1i4ui\build\CMakeInit.txt
      -- Building for: Visual Studio 17 2022
      -- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.26120.
      -- The C compiler identification is MSVC 19.43.34808.0
      -- Detecting C compiler ABI info
      -- Detecting C compiler ABI info - done
      -- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.43.34808/bin/Hostarm64/arm64/cl.exe - skipped
      -- Detecting C compile features
      -- Detecting C compile features - done
      -- Found Python: X:/GitHub/Windows-DevRel/Tools/ML-tests/.temp/env_orange_pyarrow/Scripts/python.exe (found version "3.12.9") found components: Interpreter Development.Module
      CMake Warning at src/h3lib/CMakeLists.txt:425 (message):
        clang-format was not detected, so automatic source code reformatting is
        disabled


      CMake Warning at src/h3lib/CMakeLists.txt:437 (message):
        clang-tidy was not detected, so source code linting is disabled


      -- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
      -- Configuring done (2.5s)
      -- Generating done (0.1s)
      -- Build files have been written to: C:/temp/tmpq3q1i4ui/build
      *** Building project with Visual Studio 17 2022...
      MSBuild version 17.13.15+18b3035f6 for .NET Framework

        1>Checking Build System
        Building Custom Rule C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3lib/CMakeLists.txt
        h3Assert.c
        algos.c
        coordijk.c
        bbox.c
        polygon.c
        polyfill.c
        h3Index.c
        vec2d.c
        vec3d.c
        vertex.c
        linkedGeo.c
        localij.c
        latLng.c
        directedEdge.c
        mathExtensions.c
        iterators.c
        vertexGraph.c
        faceijk.c
        baseCells.c
        Generating Code...
        h3.vcxproj -> C:\temp\tmpq3q1i4ui\build\src\h3lib\bin\Release\h3.lib
        Making C:/temp/tmpq3q1i4ui/build/src/h3/_cy/cells.c from C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/cells.pyx
        Building Custom Rule C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/CMakeLists.txt
        cells.c
           Creating library C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/cells.lib and object C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/cells.exp
        cells.vcxproj -> C:\temp\tmpq3q1i4ui\build\src\h3\_cy\Release\cells.cp312-win_arm64.pyd
        Making C:/temp/tmpq3q1i4ui/build/src/h3/_cy/edges.c from C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/edges.pyx
        Building Custom Rule C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/CMakeLists.txt
        edges.c
           Creating library C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/edges.lib and object C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/edges.exp
        edges.vcxproj -> C:\temp\tmpq3q1i4ui\build\src\h3\_cy\Release\edges.cp312-win_arm64.pyd
        Making C:/temp/tmpq3q1i4ui/build/src/h3/_cy/error_system.c from C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/error_system.pyx
        Building Custom Rule C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/CMakeLists.txt
        error_system.c
           Creating library C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/error_system.lib and object C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/error_system.exp
        error_system.vcxproj -> C:\temp\tmpq3q1i4ui\build\src\h3\_cy\Release\error_system.cp312-win_arm64.pyd
        Making C:/temp/tmpq3q1i4ui/build/src/h3/_cy/latlng.c from C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/latlng.pyx
        Building Custom Rule C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/CMakeLists.txt
        latlng.c
           Creating library C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/latlng.lib and object C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/latlng.exp
        latlng.vcxproj -> C:\temp\tmpq3q1i4ui\build\src\h3\_cy\Release\latlng.cp312-win_arm64.pyd
        Making C:/temp/tmpq3q1i4ui/build/src/h3/_cy/memory.c from C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/memory.pyx
        performance hint: C:\temp\pip-install-mtp64zrb\h3_a7312e6d14aa4cf4874ec1f53f69c5d1\src\h3\_cy\memory.pyx:246:11: Index should be typed for more efficient access
        Building Custom Rule C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/CMakeLists.txt
        memory.c
           Creating library C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/memory.lib and object C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/memory.exp
        memory.vcxproj -> C:\temp\tmpq3q1i4ui\build\src\h3\_cy\Release\memory.cp312-win_arm64.pyd
        Making C:/temp/tmpq3q1i4ui/build/src/h3/_cy/to_multipoly.c from C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/to_multipoly.pyx
        Building Custom Rule C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/CMakeLists.txt
        to_multipoly.c
           Creating library C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/to_multipoly.lib and object C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/to_multipoly.exp
        to_multipoly.vcxproj -> C:\temp\tmpq3q1i4ui\build\src\h3\_cy\Release\to_multipoly.cp312-win_arm64.pyd
        Making C:/temp/tmpq3q1i4ui/build/src/h3/_cy/util.c from C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/util.pyx
        performance hint: C:\temp\pip-install-mtp64zrb\h3_a7312e6d14aa4cf4874ec1f53f69c5d1\src\h3\_cy\util.pyx:13:0: Exception check on 'deg2coord' will always require the GIL to be acquired. Declare 'deg2coord' as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        performance hint: C:\temp\pip-install-mtp64zrb\h3_a7312e6d14aa4cf4874ec1f53f69c5d1\src\h3\_cy\util.pyx:23:0: Exception check on 'coord2deg' will always require the GIL to be acquired. Declare 'coord2deg' as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
        Building Custom Rule C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/CMakeLists.txt
        util.c
           Creating library C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/util.lib and object C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/util.exp
        util.vcxproj -> C:\temp\tmpq3q1i4ui\build\src\h3\_cy\Release\util.cp312-win_arm64.pyd
        Making C:/temp/tmpq3q1i4ui/build/src/h3/_cy/vertex.c from C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/vertex.pyx
        Building Custom Rule C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/src/h3/_cy/CMakeLists.txt
        vertex.c
           Creating library C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/vertex.lib and object C:/temp/tmpq3q1i4ui/build/src/h3/_cy/Release/vertex.exp
        vertex.vcxproj -> C:\temp\tmpq3q1i4ui\build\src\h3\_cy\Release\vertex.cp312-win_arm64.pyd
        Building Custom Rule C:/temp/pip-install-mtp64zrb/h3_a7312e6d14aa4cf4874ec1f53f69c5d1/CMakeLists.txt
      *** Installing project into wheel...
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/lib/h3.lib
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/include/h3/h3api.h
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/lib/cmake/h3/h3Config.cmake
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/lib/cmake/h3/h3ConfigVersion.cmake
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/lib/cmake/h3/h3Targets.cmake
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/lib/cmake/h3/h3Targets-release.cmake
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/cells.cp312-win_arm64.pyd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/edges.cp312-win_arm64.pyd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/error_system.cp312-win_arm64.pyd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/latlng.cp312-win_arm64.pyd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/memory.cp312-win_arm64.pyd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/vertex.cp312-win_arm64.pyd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/to_multipoly.cp312-win_arm64.pyd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/util.cp312-win_arm64.pyd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/cells.pxd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/cells.pyx
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/edges.pxd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/edges.pyx
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/error_system.pyx
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/h3lib.pxd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/latlng.pxd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/latlng.pyx
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/memory.pxd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/memory.pyx
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/util.pxd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/util.pyx
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/vertex.pxd
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/vertex.pyx
      -- Installing: C:\Temp\tmpq3q1i4ui\wheel\platlib/h3/_cy/h3api.h
      *** Making wheel...
      Traceback (most recent call last):
        File "X:\GitHub\Windows-DevRel\Tools\ML-tests\.temp\env_orange_pyarrow\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353, in <module>
          main()
        File "X:\GitHub\Windows-DevRel\Tools\ML-tests\.temp\env_orange_pyarrow\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "X:\GitHub\Windows-DevRel\Tools\ML-tests\.temp\env_orange_pyarrow\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 251, in build_wheel
          return _build_backend().build_wheel(wheel_directory, config_settings,
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "C:\temp\pip-build-env-12y2j90u\overlay\Lib\site-packages\scikit_build_core\build\__init__.py", line 33, in build_wheel
          return _build_wheel_impl(
                 ^^^^^^^^^^^^^^^^^^
        File "C:\temp\pip-build-env-12y2j90u\overlay\Lib\site-packages\scikit_build_core\build\wheel.py", line 174, in _build_wheel_impl
          return _build_wheel_impl_impl(
                 ^^^^^^^^^^^^^^^^^^^^^^^
        File "C:\temp\pip-build-env-12y2j90u\overlay\Lib\site-packages\scikit_build_core\build\wheel.py", line 476, in _build_wheel_impl_impl
          shutil.copyfile(filepath, package_dir)
        File "X:\Python\Python312-arm64\Lib\shutil.py", line 260, in copyfile
          with open(src, 'rb') as fsrc:
               ^^^^^^^^^^^^^^^
      OSError: [Errno 22] Invalid argument: 'src\\h3\\api\\basic_str\\__init__.py'
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for h3
Failed to build h3

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions