Skip to content

Windows x64 support and CI-built releases - #2

Merged
stephanj merged 4 commits into
mainfrom
feature/windows-support
Oct 26, 2026
Merged

stephanj merged 4 commits into
mainfrom
feature/windows-support

Conversation

@stephanj

Copy link
Copy Markdown
Owner

Adds native Windows x64 support so students can run PCD Server on Windows, and moves release builds into GitHub Actions.

Changes

  • Shutdown: Windows uses SetConsoleCtrlHandler; the POSIX sigwait path is untouched.
  • Build: static MSVC runtime (no VC++ Redistributable), MSVC OpenMP off (no vcomp140.dll), /utf-8. Version 0.2.0.
  • Tests: portable temp dirs instead of mkdtemp; the symlink case tolerates Windows refusing symlinks. tests/e2e.sh runs under Git Bash.
  • Scripts: scripts/download-default-model.cmd (built-in curl.exe + certutil).
  • Packaging: Windows zip with pcd_server.exe, start-server.cmd, the download script, README-windows.txt and license files. The model is not bundled.
  • CI: Windows x64 (AVX2 baseline) and macOS arm64 jobs build and run all tests, including [native] and e2e against the default model. A v* tag publishes both packages to the Release.
  • README: Windows prebuilt and build-from-source steps, Vulkan/CUDA options, WSL 2 fallback, SmartScreen note.

Verification

  • macOS: 62/62 ctest (with PCD_TEST_GGUF) and tests/e2e.sh pass locally; SIGTERM shutdown verified.
  • Windows: verified only by this PR's CI run.

🤖 Generated with Claude Code

stephanj and others added 4 commits October 26, 2026 13:39
- main.cpp: Windows Ctrl+C/Ctrl+Break shutdown via SetConsoleCtrlHandler;
  the POSIX sigwait path is unchanged.
- CMake: static MSVC runtime, no MSVC OpenMP, /utf-8; version 0.2.0.
- Tests: portable temp-dir helper replaces mkdtemp; the symlink case is
  optional where Windows refuses symlinks. e2e.sh runs under Git Bash.
- scripts/download-default-model.cmd (curl.exe + certutil, SHA-256 check).
- packaging/windows: start-server.cmd and README-windows.txt for the zip.
- GitHub Actions: build, test (incl. [native] and e2e against the default
  model) on windows-latest and macos-14; v* tags publish the Windows zip
  and macOS tarball to the GitHub Release.
- README: Windows prebuilt and build-from-source instructions, WSL 2
  fallback, SmartScreen note.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
llama.cpp passes u8 literals as const char *, which fails under MSVC C++20.
GitHub's macOS runners expose a paravirtualized Metal GPU whose results
break cold-vs-cached equality checks that pass on real Apple Silicon (also
with the release flags), so that job runs only the non-native tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
path::native() is a wide string on Windows, so the ".." prefix check did
not compile there; comparing the first component is portable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
windows.h brings a GUID operator== into scope that makes json == string_view
ambiguous under MSVC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@stephanj
stephanj merged commit b246ed9 into main Oct 26, 2026
3 checks passed
@stephanj
stephanj deleted the feature/windows-support branch October 26, 2026 15:13
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