Skip bundling the MSVC C++ runtime when repairing cross-compiled win_arm64 wheels - #50
Conversation
…m64 wheels Co-authored-by: paullinnerud <18744298+paullinnerud@users.noreply.github.com>
|
Copilot, with this change will an ARM64 build still be produced? |
Yes. The override only changes how the wheel is repaired, not whether it's built — The ARM64 compile+link was never the problem: in the failing run the wheel built fine ( The one difference is that the ARM64 wheel won't have The current run's |
The
build (windows-latest)job fails while repairing the ARM64 wheel:Root cause: cibuildwheel 4.x runs
delvewheel repairby default on Windows (3.x did not).windows-latestis x86-64, so theARM64entry in[tool.cibuildwheel.windows] archsis cross-compiled — delvewheel then looks for an ARM64msvcp140.dllto vendor, and only the x64 copy is discoverable on the runner. x86/AMD64 repair fine.Changes
pyproject.toml: added a build-identifier override that repairs*-win_arm64with the MSVC runtime excluded. The VC++ runtime is a redistributable system component, so leaving it unbundled matches what every wheel published under cibuildwheel 3.x already did.The glob covers the whole
msvcp140*family (msvcp140_1.dll,msvcp140_atomic_wait.dll, …) so a future import doesn't reopen the same failure.concrt140.dllis only reachable as a delay-load dependency ofmsvcp140.dll, so it drops out with it. x86/AMD64 keep the default repair command and continue bundling their dependencies.Alternatives considered: pointing delvewheel at the VS ARM64 redist tree via
--add-path(requires hardcoding or globbing a versioned MSVC path in CI), moving ARM64 to a nativewindows-11-armrunner (splits the Windows matrix job), or disabling repair for all of Windows (loses bundling on x86/AMD64).