[
https://issues.apache.org/jira/browse/THRIFT-6310?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jens Geyer resolved THRIFT-6310.
--------------------------------
Assignee: Jens Geyer
Resolution: Fixed
> 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
> Assignee: Jens Geyer
> Priority: Major
> Fix For: 0.26.0
>
> Time Spent: 40m
> Remaining Estimate: 0h
>
> 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)