Skip to content

Add native Windows Arm64 library and binding lane - #1089

Open
yeelam-gordon wants to merge 23 commits into
OpenShot:developfrom
yeelam-gordon:feature/windows-arm64-native
Open

Add native Windows Arm64 library and binding lane#1089
yeelam-gordon wants to merge 23 commits into
OpenShot:developfrom
yeelam-gordon:feature/windows-arm64-native

Conversation

@yeelam-gordon

Copy link
Copy Markdown

Summary

  • add native Windows Arm64 GitLab and GitHub-hosted CLANGARM64 build lanes
  • consume the Arm64 OpenShotAudio artifact from Add native Windows Arm64 build lane libopenshot-audio#171
  • add fail-closed native-host and recursive PE architecture validation
  • add Catch2 coverage for the corrected IsWow64Process2 native result (UNKNOWN, ARM64)

Dependency

Requires OpenShot/libopenshot-audio#171.

Motivation

This is PR B of the Windows Arm64 chain requested by OpenShot/openshot-qt#5853. It produces libopenshot and the Python extension consumed by openshot-qt.

Validation

  • hosted workflow installs CLANGARM64 dependencies and builds pinned Catch2 v3.8.1
  • CI YAML parses successfully
  • validator accept/reject and synthetic PE behavior pass
  • all 24 locked package versions match current MSYS2 metadata
  • git diff --check passes

Boundaries

Production execution requires OpenShot's private windows-arm64 GitLab runner and the accepted artifact from PR A.

AI assistance disclosure: implementation and review used GitHub Copilot CLI.

Add hosted and production Arm64 lanes, fail-closed architecture validation, and native process-oracle coverage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Run shared fail-closed payload and native-host checks in both Arm64 CI lanes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
yeelam-gordon and others added 6 commits August 28, 2026 18:07
Harden API detection and package-lock verification, use HTTPS artifact downloads, make tests import-safe, and clarify diagnostic output.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Report missing pacman as a structured failure, warn explicitly on WOW execution, clarify payload diagnostics, and keep the private Arm64 job opt-in.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Fail C++ validation under WOW on an Arm64 host, harden malformed lock diagnostics, and install hosted-runner packages from the shared lock.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove a tautological check and accurately describe the validator as architecture-only.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Make PE reports deterministic, add explicit WOW diagnostics and standard includes, and add REUSE metadata.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Improve Win32 diagnostics, harden pacman output parsing, expand fail-closed CLI tests, and make PE reports deterministic.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@yeelam-gordon

Copy link
Copy Markdown
Author

Automated review is being run on mirror PR yeelam-gordon#1. Findings and fixes are pushed to this same head branch. This PR depends on OpenShot/libopenshot-audio#171.

yeelam-gordon and others added 15 commits August 28, 2026 11:39
Clear and capture the Win32 last-error value around IsWow64Process2 so successful and failed assertions are unambiguous.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reject non-placeholder archive hashes until package archive verification is implemented, with regression coverage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Install exact package versions from the lock and reject unsafe package names before invoking pacman.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Resolve the OpenShotAudio checkout from the pull-request head owner and ref so the Arm64 pipeline consumes PR A before it is merged, while preserving owner/ref fallback after merge.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Print the bounded generated Ninja region only when the native libopenshot build fails, enabling diagnosis without changing normal builds.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Mark ctest label commands VERBATIM so the regex end anchor is escaped correctly in generated Ninja files on Windows Arm64.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use avcodec_get_supported_config for modern libavcodec while preserving legacy fields, and correct channel-layout equality handling.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Build tracked-object support independently of OpenCV, accept OpenCV 5, link MagickCore explicitly, and keep test media paths CMake-style for Windows compiler definitions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Include calib3d and imgproc where their APIs are used instead of relying on transitive headers removed by OpenCV 5.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use version-specific geometry module headers while preserving the existing OpenCV integer typedef workaround and OpenCV 4 compatibility.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid COM IStream name collisions between the full Windows SDK surface and Catch2.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep a forward trailing slash after Windows path normalization so tests that append fixture names resolve the examples directory correctly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the Unix-only mkstemp helper with the C++17 temporary directory API for Windows Arm64 test execution.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Support OpenCV 5 with a 4.3 minimum fallback and generate collision-resistant ObjectMask test paths portably.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Honor avcodec_get_supported_config counts on FFmpeg 8/9 and reserve ObjectMask temporary files atomically with QTemporaryFile.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@yeelam-gordon

Copy link
Copy Markdown
Author

Hosted Windows Arm64 CI now compiles the complete library and runs 516 tests; 512 pass. The remaining four failures are isolated dependency-runtime follow-ups (FFmpeg 9 spherical metadata and ImageMagick 7 ImageWriter crashes), documented on the mirror review PR: yeelam-gordon#1. The copilot-pr-autopilot round-cap circuit breaker stopped further scope expansion after all Arm64 lane/build blockers were resolved.

@yeelam-gordon

Copy link
Copy Markdown
Author

Latest hosted Windows Arm64 evidence: the complete library, Python binding, FFmpeg 9/OpenCV 5 compatibility code, examples, and all 516 test executables compile successfully. CTest passes 512/516. Remaining explicit follow-ups are two FFmpeg 9 spherical-metadata round-trip tests and two ImageMagick 7 ImageWriter crashes. The automated review loop stopped at its round-cap circuit breaker with zero open threads rather than hiding or disabling these dependency-runtime failures.

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