Skip to content

Enable Windows ARM64 CTest CI for release binaries#6177

Merged
lrknox merged 4 commits intoHDFGroup:developfrom
Harishmcw:win_arm64
Feb 20, 2026
Merged

Enable Windows ARM64 CTest CI for release binaries#6177
lrknox merged 4 commits intoHDFGroup:developfrom
Harishmcw:win_arm64

Conversation

@Harishmcw
Copy link
Copy Markdown
Contributor

@Harishmcw Harishmcw commented Jan 28, 2026

This PR adds native Windows ARM64 (WoA) support to the CTest CI workflow, enabling build, test, and release of WinARM64 binaries.

Changes

  • Add MSVC ARM64 CTest CI job using windows-11-arm runners
  • Enable native build, test, and packaging for Windows ARM64
  • Add required CMake presets for MSVC ARM64
  • Generate separate WinARM64 release artifacts

Note

This PR is opened to request release support for Windows ARM64 binaries.

It depends on the ZLIB/LZF MSVC ARM64 fixes and is kept as Draft until those changes are merged.


Important

Enable Windows ARM64 support in CTest CI workflow, including build, test, and packaging configurations.

  • CI Workflow:
    • Add build_and_test_win_arm64 job in ctest.yml for Windows ARM64 using windows-11-arm runners.
    • Modify arm-main.yml to upload WinARM64 artifacts.
    • Update msys2.yml to support clangarm64.
  • CMake Presets:
    • Add ci-StdShar-MSVC-ARM64 preset in CMakePresets.json for ARM64 builds.
    • Add ci-arm64-Release-MSVC and ci-arm64-Debug-MSVC in hidden-presets.json.
  • CMake Configuration:
    • Update CMakeInstallation.cmake to generate WinARM64 package file names.
    • Modify ZLIB/CMakeLists.txt and ZLIB/devCMakeLists.txt to set ARM64 flags for MSVC.

This description was created by Ellipsis for 5d590ff. You can customize this summary. It will automatically update as commits are pushed.

@Harishmcw
Copy link
Copy Markdown
Contributor Author

Thanks for merging the dependent PR.

Note on the Windows ARM64 CI: the ctest.yml workflow uses the released hdf5_plugins artifacts.

A release of hdf5_plugins with the Windows-on-ARM changes is needed for the ARM64 job to succeed.

@brtnfld brtnfld moved this from To be triaged to In progress in HDF5 - TRIAGE & TRACK Feb 5, 2026
@nbagha1 nbagha1 added this to the HDF5 2.x.x milestone Feb 6, 2026
hyoklee
hyoklee previously approved these changes Feb 9, 2026
@Harishmcw
Copy link
Copy Markdown
Contributor Author

Hi @hyoklee, thanks for reviewing and approving the PR! Since this change requires two maintainer approvals to merge, could you please help with getting another review.

Comment thread .github/workflows/ctest.yml Outdated
- name: Install Dependencies
uses: ssciwr/doxygen-install@501e53b879da7648ab392ee226f5b90e42148449 # v1
with:
version: "1.13.2"
Copy link
Copy Markdown
Collaborator

@lrknox lrknox Feb 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Harishmcw, running doxygen on the ubuntu arm64 runner failed on the last dependabot update of the ssciwr/doxygen-install hash a couple of weeks ago. In order to fix that failure, because Doxygen 1.13.2 didn't support arm64, the Doxygen version in the rest of the workflows was upgraded to version 1.16.1 and centralized in .github/actions/setup-doxygen/action.yml (PR #6195). Could you replace lines 247 - 250 above with these lines and try it out?

  - name: Get Sources
    uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1

  - name: Setup Doxygen
    uses: ./.github/actions/setup-doxygen

You will probably want to merge develop to your branch to get the new action.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rebased onto develop and updated the workflow to use the centralized Doxygen setup action.
Thanks for pointing this out!

@lrknox lrknox merged commit 33510a5 into HDFGroup:develop Feb 20, 2026
259 of 260 checks passed
@github-project-automation github-project-automation Bot moved this from In progress to Done in HDF5 - TRIAGE & TRACK Feb 20, 2026
lrknox pushed a commit to lrknox/hdf5 that referenced this pull request Feb 20, 2026
* ci: add Windows ARM64 MSVC CTest job

* ci: add MSYS2 clangarm64 build on Windows ARM64

* cmake: add MSVC ARM64 presets for Windows

* zlib: fix MSVC static library flags for ARM64 builds
lrknox added a commit that referenced this pull request Feb 20, 2026
* Fix MPI Fortran configuration for HDF5Examples (#6206)

When building Fortran parallel examples without MPI wrappers, the
compiler couldn't find mpi.mod because MPI_Fortran_INCLUDE_DIRS
was not populated. This occurred because find_package(MPI) was only
called for C, not Fortran.

Added enable_language(Fortran) and find_package(MPI REQUIRED
COMPONENTS Fortran) to properly configure MPI for Fortran examples,
ensuring MPI include directories and libraries are correctly set.

* Adds RFCs to the RFC table (#6190)

* Added two RFCs to the RFC table

"Adding support for digitally signed plugins to HDF5"
" Write-Ahead log"

* Updated to use the ACM link

* Add HDF5 2.0.0 Library Migration Guide (#6183)

* Add HDF5 2.0.0 Library Migration Guide

* Revise HDF5 migration guide for version 2.0.0

Use 2.0.0 consistently.

* Clarify API changes in HDF5 2.0.0 Migration Guide

* Fixes the "multiple @param documentation sections" doxygen warnings (#6195)

Addresses the "multiple @ param documentation sections" warnings are caused by the interaction of three things:

1. MACRO_EXPANSION = YES with EXPAND_ONLY_PREDEF = NO in Doxyfile.in

2. Versioned API macros in H5version.h like:

\def documentation in APIVersions.dox like:

3. \def H5Tarray_create \api_vers_2{H5Tarray_create,H5Tarray_create1,H5Tarray_create2}

Because Doxygen expands all macros, it sees H5Tarray_create as an alias for H5Tarray_create1. It then associates documentation from both the \def block (for the macro) and the function's own doc block (with \param entries) with the same function — resulting in "multiple @ param documentation sections."

* Update Doxygen version from 1.16.0 to 1.16.1

Use Doxygen 1.16.1 for all platforms. This version includes the latest
bug fixes and improvements while maintaining compatibility with our
documentation format.

* Fix Windows Doxygen installation for version 1.16.1

Handle different Windows binary naming conventions across Doxygen versions:
- 1.16.1 uses: doxygen-VERSION.windows.x64.bin.zip
- 1.16.0 uses: doxygen-VERSION.x64.bin.zip

Try the newer naming convention first, then fall back to the older one
if the download fails. This ensures compatibility across versions.

* Use ssciwr/doxygen-install in setup-doxygen action

Replace direct installation of official Doxygen binaries with
ssciwr/doxygen-install action. This avoids Java documentation parsing
errors that occur with official binaries but not with distribution
builds.

The setup-doxygen action now serves as a thin wrapper around
ssciwr/doxygen-install@f13be16 (v1),
using commit hash for security and reproducibility.

* Remove redundant version specification from workflows

The setup-doxygen action already has a default version (1.16.1),
so explicit version specification in workflows is unnecessary.
This follows DRY principles and makes version updates simpler.

* Updates to #6205 (#6208)

* Fix MPI Fortran configuration for HDF5Examples (#6205)

When building Fortran parallel examples standalone without MPI
wrappers, the compiler cannot find mpi.mod because
MPI_Fortran_INCLUDE_DIRS is not populated.

* Use MPI::MPI_Fortran imported target instead of raw MPI variables

Replace manual MPI_Fortran_LIBRARIES, MPI_Fortran_LINK_FLAGS, and
MPI_Fortran_INCLUDE_DIRS usage with the MPI::MPI_Fortran imported
target, which transitively carries all include dirs, compile flags,
and link flags. This eliminates the CMAKE_Fortran_EXE_LINKER_FLAGS
hack and the manual target_include_directories in H5PAR.

* Update nvhpc version to 26.1 with CUDA version 13.1. (#6213)

# branches: [develop]

* Inherit Debug C build flags in Developer build mode (#6182)

* Bump the github-actions group across 1 directory with 11 updates (#6215)

* Bump the github-actions group across 1 directory with 11 updates

Bumps the github-actions group with 11 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [actions/cache](https://github.com/actions/cache) | `5.0.1` | `5.0.3` |
| [lukka/get-cmake](https://github.com/lukka/get-cmake) | `4.2.1` | `4.2.3` |
| [softwareforgood/check-artifact-v4-existence](https://github.com/softwareforgood/check-artifact-v4-existence) | `0.3.0` | `0.4.1` |
| [github/codeql-action](https://github.com/github/codeql-action) | `3.31.9` | `4.32.2` |
| [azure/trusted-signing-action](https://github.com/azure/trusted-signing-action) | `0.5.11` | `1.1.0` |
| [cygwin/cygwin-install-action](https://github.com/cygwin/cygwin-install-action) | `7d2dc1e241644c3318bed9ec74115d1929baa681` | `2566376092c4e280f21131be027af3f5bb2420a4` |
| [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) | `5.1.1` | `6.0.0` |
| [vmactions/freebsd-vm](https://github.com/vmactions/freebsd-vm) | `1.3.4` | `1.4.2` |
| [vmactions/openbsd-vm](https://github.com/vmactions/openbsd-vm) | `1.3.1` | `1.3.5` |
| [mpi4py/setup-mpi](https://github.com/mpi4py/setup-mpi) | `1.4.1` | `1.4.2` |
| [actions/setup-python](https://github.com/actions/setup-python) | `6.1.0` | `6.2.0` |

 vmactions/openbsd-vm@d6c29ce (`1.3.5`) failed to run ssh on the github runner.  271a1ba62300483cfc58345ff9f425f1349a2cab for v1.3.4 was used instead.

* Fix issue with some Subfiling VFD test files not getting deleted (#6212)

* CMake: Fix Fortran cross-compilation support

Refactor the cross-compilation infrastructure to rely on the standard
CMAKE_CROSSCOMPILING_EMULATOR variable instead of the custom
CROSSCOMPILING_PATH environment hack.

Key changes:
- Removed `ENVIRONMENT "${CROSSCOMPILING_PATH}"` from all test definitions.
- Updated custom commands (e.g., H5match_types, H5_gen) to invoke the
  emulator explicitly when cross-compiling.
- Updated ConfigureChecks.cmake and HDF5UseFortran.cmake to enable
  `try_run` checks when an emulator is defined.
- Added config/toolchain/mingw-w64-x86-64-wine.sh wrapper to automatically
  locate MinGW runtime libraries (like libgfortran) for Wine execution.
- Cleaned up toolchain files to remove hardcoded emulator paths, deferring
  configuration to the build environment.

* Add Doxygen setup that results in missing Doygen documentation. (#6217)

* Added setup-doxygen action in ctest.yml Ubuntu gcc workflow.
* Also added actions/checkout for setup-doxygen.

* Fixes link checker failure (#6219)

Removed https:// as a workaround to avoid error by the link checker.

* Remove force-setting of ZLIB_USE_EXTERNAL / SZIP_USE_EXTERNAL (#6222)

Removes the force-setting of ZLIB_USE_EXTERNAL and SZIP_USE_EXTERNAL to
ON when HDF5_ALLOW_EXTERNAL_SUPPORT is GIT or TGZ so that zlib and
szip can be independently built from the system or externally as desired

* Truncate Subfiling VFD's stub file when truncating subfiles (#6210)

Ensure that the Subfiling VFD's stub file gets truncated when subfiles are
being truncated to avoid a potentially unreadable file when the EOF doesn't
match the stored EOF value

Co-authored-by: Larry Knox <lrknox@hdfgroup.org>

* Add CMake function to extract pkg-config info from libraries (#6220)

* Consistent extension for C++ (#6214)

Except for this file, all use cpp instead of cxx. No obvious reason why
the same file types should have different extensions.

* Enable Windows ARM64 CTest CI for release binaries (#6177)

* ci: add Windows ARM64 MSVC CTest job

* ci: add MSYS2 clangarm64 build on Windows ARM64

* cmake: add MSVC ARM64 presets for Windows

* zlib: fix MSVC static library flags for ARM64 builds

* Renamed .hxx file to .h and updated the #include for it.

* Committing clang-format changes

---------

Co-authored-by: Scot Breitenfeld <brtnfld@hdfgroup.org>
Co-authored-by: bmribler <39579120+bmribler@users.noreply.github.com>
Co-authored-by: Gerd Heber <gheber@hdfgroup.org>
Co-authored-by: jhendersonHDF <jhenderson@hdfgroup.org>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Julien Schueller <schueller@phimeca.com>
Co-authored-by: Martin Diehl <mail@martin-diehl.net>
Co-authored-by: Harish RS <harish.rajaselvan@multicorewareinc.com>
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
@Harishmcw
Copy link
Copy Markdown
Contributor Author

Hi @lrknox ,

I noticed that HDF5 v2.1.0 was released recently, but the Windows ARM64 binaries do not appear to be included in the release artifacts.

Are there plans to include them in an upcoming major release? It would be helpful if you could share an approximate timeline for when the Windows ARM64 binaries might become available in the release page.

brtnfld pushed a commit to brtnfld/hdf5 that referenced this pull request Mar 18, 2026
* ci: add Windows ARM64 MSVC CTest job

* ci: add MSYS2 clangarm64 build on Windows ARM64

* cmake: add MSVC ARM64 presets for Windows

* zlib: fix MSVC static library flags for ARM64 builds
@Harishmcw
Copy link
Copy Markdown
Contributor Author

Hi,

I wanted to follow up regarding the Windows ARM64 binaries. I noticed that they are not included in the recent releases (v2.1.0 and v2.1.1).

Could you please let us know in which upcoming release they are expected to be included?

@jhendersonHDF
Copy link
Copy Markdown
Collaborator

Hi,

I wanted to follow up regarding the Windows ARM64 binaries. I noticed that they are not included in the recent releases (v2.1.0 and v2.1.1).

Could you please let us know in which upcoming release they are expected to be included?

Hi @Harishmcw,

we currently haven't made any plans to include Windows ARM64 binaries in our releases, but we'll discuss internally and decide if it's something we want to do for the next release of HDF5.

brtnfld pushed a commit to brtnfld/hdf5 that referenced this pull request Apr 17, 2026
* ci: add Windows ARM64 MSVC CTest job

* ci: add MSYS2 clangarm64 build on Windows ARM64

* cmake: add MSVC ARM64 presets for Windows

* zlib: fix MSVC static library flags for ARM64 builds
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants