Skip to content

ci: build and test native Windows ARM64 wheels - #65

Open
johnnynunez wants to merge 3 commits into
DanielBok:masterfrom
johnnynunez:ci/windows-arm64-wheels
Open

johnnynunez wants to merge 3 commits into
DanielBok:masterfrom
johnnynunez:ci/windows-arm64-wheels

Conversation

@johnnynunez

@johnnynunez johnnynunez commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add .github/workflows/windows-arm64.yml to build and test wheels on windows-11-arm for CPython 3.11, 3.12, 3.13 and 3.14 (the versions in build.yml), with ARM64 Python and the ARM64 MSVC toolchain. 3.10 is excluded because NumPy, needed to build and test the wheel, has no Windows ARM64 wheels for CPython 3.10.

  • extensions.py: make the CMake build command generator-neutral (--parallel, honouring CMAKE_BUILD_PARALLEL_LEVEL) instead of always passing MSBuild's -m on Windows. Also set CMAKE_BUILD_TYPE so single-config generators such as Ninja build the requested configuration.

  • Disable the unrelated Java bindings (-DNLOPT_JAVA=OFF). On the hosted ARM64 runner CMake found a JDK and enabled a Java/SWIG target that failed under Ninja (https://github.com/DanielBok/nlopt-python/actions/runs/38172376061).

  • Test each installed wheel in a fresh environment with:

    • upstream t_python.py
    • an analytic quadratic (L-BFGS) check
    • a bound-constrained COBYLA check
    • PE Machine checks for Python, NLopt and NumPy extensions

    test_scripts/test_build_commands.py covers command construction for Windows/Linux and Release/Debug.

This lane only uploads the tested wheels as artifacts; the PyPI deployment in wc-build.yml is unchanged. If you'd rather publish these with the other wheels, I can move windows-11-arm into wc-build.yml instead. The existing ARM PRs #51 and #52 cover Linux aarch64, not Windows ARM64.

CI

All four ARM64 jobs pass at 364b56c8e6cb27712c5d13909e8f84e9f95f319c: https://github.com/DanielBok/nlopt-python/actions/runs/38311166571 (fork: https://github.com/johnnynunez/nlopt-python/actions/runs/38311166223). In the nlopt-2.11.0-cp311…cp314-win_arm64 wheels the extension is PE Machine 0xAA64 and the RECORD hashes check out. Tests used NumPy 2.4.6 on 3.11 and 2.5.4 on 3.12–3.14.

Match the versions built in build.yml. CPython 3.10 is left out because
NumPy, which is needed to build and test the wheel, has no Windows ARM64
wheels for it. Drop the push trigger for the PR branch.
@johnnynunez

Copy link
Copy Markdown
Contributor Author

Updated: the Windows ARM64 workflow now builds and tests CPython 3.11, 3.12, 3.13 and 3.14, the same versions as build.yml. 3.10 is left out because NumPy (needed to build and test the wheel) has no Windows ARM64 wheels for 3.10. I also dropped the push trigger for the PR branch.

All four jobs pass (upstream t_python.py, numerical checks, ARM64 PE checks): https://github.com/DanielBok/nlopt-python/actions/runs/38311166571 · fork run: https://github.com/johnnynunez/nlopt-python/actions/runs/38311166223

@johnnynunez

Copy link
Copy Markdown
Contributor Author

@DanielBok

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant