os: add support for windows - #107
Open
AmyJeanes wants to merge 6 commits into
Open
Conversation
This was referenced Sep 7, 2026
AmyJeanes
added a commit
to AmyJeanes/panda
that referenced
this pull request
Sep 7, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- This commit is dropped from the PR once the win_amd64 wheels are on PyPI. Until then it points uv at a GitHub release of the same wheels, built from that PR's branch on my fork, so the Windows CI entry runs here meanwhile: comma-deps-gcc-arm-none-eabi and comma-deps-cppcheck for sys_platform == 'win32'. Linux and macOS resolve from PyPI as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/rednose
that referenced
this pull request
Sep 7, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- This commit is dropped from the PR once the win_amd64 wheels are on PyPI. Until then it points uv at a GitHub release of the same wheels, built from that PR's branch on my fork, so the Windows CI entry runs here meanwhile: comma-deps-eigen for sys_platform == 'win32'. Linux and macOS resolve from PyPI as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/opendbc
that referenced
this pull request
Sep 7, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- This commit is dropped from the PR once the win_amd64 wheels are on PyPI. Until then it points uv at a GitHub release of the same wheels, built from that PR's branch on my fork, so the Windows CI entry runs here meanwhile: comma-deps-cppcheck for sys_platform == 'win32', and uv.lock relocked against that index. Linux and macOS resolve from PyPI as before; the lock is regenerated from PyPI when this commit goes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/opendbc
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Dropped once the win_amd64 wheels are on PyPI; until then uv takes comma-deps-cppcheck for win32 from a release on my fork built from that PR, and uv.lock is relocked from PyPI when this goes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/rednose
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Points uv at a GitHub release of the win_amd64 wheels built from that PR's branch so the Windows CI entry can run before they are on PyPI. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/opendbc
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Dropped once the win_amd64 wheels are on PyPI; until then uv takes comma-deps-cppcheck for win32 from a release on my fork built from that PR, and uv.lock is relocked from PyPI when this goes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/panda
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Dropped once the win_amd64 wheels are on PyPI; until then uv takes comma-deps-gcc-arm-none-eabi and comma-deps-cppcheck for win32 from a release on my fork built from that PR. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/rednose
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Points uv at a GitHub release of the win_amd64 wheels built from that PR's branch so the Windows CI entry can run before they are on PyPI. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/openpilot-upstream
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Until the win_amd64 wheels are on PyPI, uv resolves the comma-deps packages openpilot names for sys_platform == 'win32' from a GitHub release of the same wheels on my fork. Linux and macOS resolve from PyPI as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/openpilot-upstream
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Until the win_amd64 wheels are on PyPI, uv resolves the comma-deps packages openpilot names for sys_platform == 'win32' from a GitHub release of the same wheels on my fork. Linux and macOS resolve from PyPI as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
Merged
AmyJeanes
added a commit
to AmyJeanes/panda
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Dropped once the win_amd64 wheels are on PyPI; until then uv takes comma-deps-gcc-arm-none-eabi and comma-deps-cppcheck for win32 from a release on my fork built from that PR. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/opendbc
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Dropped once the win_amd64 wheels are on PyPI; until then uv takes comma-deps-cppcheck for win32 from a release on my fork built from that PR, and uv.lock is relocked from PyPI when this goes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/rednose
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Points uv at a GitHub release of the win_amd64 wheels built from that PR's branch so the Windows CI entry can run before they are on PyPI. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
Tag the wheels win_amd64, resolve bash on PATH (CreateProcess would find the WSL launcher in System32 first) and hand build.sh the build interpreter as PYTHON, so scripts stop assuming a python3 on PATH. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
Per-package changes so every build.sh runs in an MSYS2 CLANG64 shell: - capnproto/ffmpeg/git-lfs/gcc-arm-none-eabi: .exe names, Windows archives, C:/ paths for the native pkgconf; ffmpeg, capnp and cppcheck link static so the tools run without the toolchain's DLLs on PATH - acados: GENERIC BLASFEO/HPIPM targets (the x86 assembly kernels assume the SysV ABI), the pinned tera_renderer release binary instead of a rust toolchain - zeromq: no AF_UNIX transport on MinGW (afunix.h is MSVC only) - raylib: the mingw compiler for the cffi module, through a tracked build_ext config - ncurses: PDCurses' console port shipped under the ncurses names - shims: run the binary as a child process on every platform, os.exec* cannot replace the process on Windows Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
The venv's interpreter lives in Scripts/ there, and MSYS2 puts its own mingw CPython first on PATH, so pin uv to the managed 3.12 the wheels are built for. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
pacman installs the toolchain and build tools by MINGW_PACKAGE_PREFIX; the other MSYS2 environments are refused since the wheels rely on clang, lld and libc++. git and uv come from MSYS2 too, so the shell needs nothing from the Windows PATH; the git has to be the native build, git-lfs mis-resolves the POSIX paths the msys git reports. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
A fourth matrix entry builds on windows-latest in an MSYS2 CLANG64 shell
with only MSYS2's own PATH, the shell the README describes. Only that
entry names its shell: the job default stays `bash -e {0}`, GitHub's
implicit default. A `test windows` job installs the wheels into a venv
of a stock Python with no MSYS2 on PATH and runs the smoketests, the
Windows counterpart of the distro-container test. The publish job
uploads the Windows wheels with the others (bootstrap-icons is a
py3-none-any duplicate, which --skip-existing drops).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/openpilot-upstream
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Until the win_amd64 wheels are on PyPI, uv resolves the comma-deps packages openpilot names for sys_platform == 'win32' from a GitHub release of the same wheels on my fork. Linux and macOS resolve from PyPI as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/openpilot-upstream
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Until the win_amd64 wheels are on PyPI, uv resolves the comma-deps packages openpilot names for sys_platform == 'win32' from a GitHub release of the same wheels on my fork. Linux and macOS resolve from PyPI as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/openpilot-upstream
that referenced
this pull request
Sep 9, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Until the win_amd64 wheels are on PyPI, uv resolves the comma-deps packages openpilot names for sys_platform == 'win32' from a GitHub release of the same wheels on my fork. Linux and macOS resolve from PyPI as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
acados' render_template() quotes the tera arguments but not the t_renderer path, and runs it through cmd.exe, which strips the command's outer quotes. Patch acados_template so the executable is quoted and the whole command is wrapped, matching the other acados_template patches here, so a build path with spaces works. Cross-platform bug; Windows just hits it far more often. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/openpilot-upstream
that referenced
this pull request
Sep 10, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Until the win_amd64 wheels are on PyPI, uv resolves the comma-deps packages openpilot names for sys_platform == 'win32' from a GitHub release of the same wheels on my fork. Linux and macOS resolve from PyPI as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/panda
that referenced
this pull request
Sep 10, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Dropped once the win_amd64 wheels are on PyPI; until then uv takes comma-deps-gcc-arm-none-eabi and comma-deps-cppcheck for win32 from a release on my fork built from that PR. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/opendbc
that referenced
this pull request
Sep 10, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Dropped once the win_amd64 wheels are on PyPI; until then uv takes comma-deps-cppcheck for win32 from a release on my fork built from that PR, and uv.lock is relocked from PyPI when this goes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
AmyJeanes
added a commit
to AmyJeanes/openpilot-upstream
that referenced
this pull request
Sep 10, 2026
…ies#107 publishes --- TODO REMOVE AFTER DEPENDENCY PR MERGES (commaai/dependencies#107) --- Until the win_amd64 wheels are on PyPI, uv resolves the comma-deps packages openpilot names for sys_platform == 'win32' from a GitHub release of the same wheels on my fork. Linux and macOS resolve from PyPI as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016AgqYZYWLpwE2T5vS3nVEt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Windows (win_amd64) wheels for all fifteen vendored packages, built with clang/lld/libc++ from an MSYS2 CLANG64 shell, so openpilot's PC tooling builds and runs natively on Windows for development. The other PRs in the series consume these wheels.
setup.py(every package): win_amd64 wheels;bashresolved via PATH; forward-slash build paths; the build interpreter passed asPYTHON.build.shnotable choices: ffmpeg static with the network layer off (Windows decodes in software; D3D11 is a possible follow-up); acados on the GENERIC BLASFEO/HPIPM targets; zeromq without AF_UNIX; ncurses ships PDCurses under the ncurses names; capnproto/cppcheck link libc++ statically; raylib desktop via clang.setup.shinstalls the CLANG64 pacman packages, git and uv included, so nothing outside MSYS2 is needed. A windows-latest build entry, and atest windowsjob that installs the wheels into a stock Python with no MSYS2 on PATH and runs the smoketests.Line endings were split out and comma has already merged them.
Part of a six-repo series: commaai/openpilot#38810, commaai/msgq#709, commaai/panda#2427, commaai/opendbc#3724, commaai/rednose#61. This PR merges first; the others' Windows CI installs the wheels it publishes.
Generated with Claude, human-reviewed and tested locally and in CI.