Jens Geyer created THRIFT-6310:
----------------------------------
Summary: Build the Thrift compiler on Windows in CI
Key: THRIFT-6310
URL: https://issues.apache.org/jira/browse/THRIFT-6310
Project: Thrift
Issue Type: Improvement
Components: Build Process
Reporter: Jens Geyer
Fix For: 0.26.0
h2. Situation
The compiler is built in CI on Linux ({{.github/workflows/build.yml}} via
autotools, {{.github/workflows/cmake.yml}} via CMake) and on macOS
({{build.yml}}). There is no Windows compiler build: the {{compiler}} job in
{{build.yml}} still carries a {{# TODO windows and macos}} marker, and only the
macOS half of it was ever done.
The one Windows job that exists, {{.github/workflows/msvc.yml}}, builds the
full library stack inside a large Windows container. It is slow, it is not a
compiler-focused build, and it does not use the flags a release build uses.
That leaves the *portable* Windows compiler - the {{thrift.exe}} shipped with
every release - without any CI coverage at all. {{doc/ReleaseManagement.md}}
asks the release manager to build it by hand and then verify by hand, with
Dependency Walker, that it imports nothing but {{KERNEL32.dll}}. A regression
in that property is currently only discoverable during a release.
h2. Proposal
Add a {{compiler-windows}} job to {{cmake.yml}}, next to the existing Linux
{{compiler}} job:
* runs natively on a GitHub-hosted Windows runner, no container;
* installs {{winflexbison3}} through the preinstalled Chocolatey, since flex
and bison are not on the image;
* configures with {{-DBUILD_LIBRARIES=OFF -DWITH_MT=ON}} and builds the Release
configuration, which is exactly how the released compiler is built;
* runs {{ctest}}, so the compiler unit tests run on Windows too;
* asserts that the produced {{thrift.exe}} imports nothing but {{KERNEL32.dll}};
* uploads {{thrift.exe}} as a build artifact.
The import-table assertion is moved into a small script under
{{build/windows/}} so that a release manager can run the same check locally
instead of reaching for Dependency Walker.
h2. Why not build.yml
{{build.yml}} is the autotools path ({{bootstrap.sh}}, {{configure}},
{{make}}). That toolchain is not available natively on Windows, so the Windows
compiler build belongs in the CMake workflow. The {{# TODO windows}} marker in
{{build.yml}} is updated to say so.
_Drafted with AI assistance (Claude Opus 5); reviewed and posted by Jens Geyer._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)