Skip to content

ci(probe): drop windows_amd64_mingw exclusion — see if MEOS vcpkg port builds under MinGW#171

Open
estebanzimanyi wants to merge 6 commits into
MobilityDB:mainfrom
estebanzimanyi:ci/probe-mingw-build
Open

ci(probe): drop windows_amd64_mingw exclusion — see if MEOS vcpkg port builds under MinGW#171
estebanzimanyi wants to merge 6 commits into
MobilityDB:mainfrom
estebanzimanyi:ci/probe-mingw-build

Conversation

@estebanzimanyi
Copy link
Copy Markdown
Member

Stacks on #170. A probe PR: drop windows_amd64_mingw from the production CI exclude_archs and let CI tell us whether the MEOS vcpkg port builds end-to-end under MinGW.

Why MinGW is the most-likely-to-just-work Windows path

The MobilityDuck CI comment lists two source-level blockers for the MEOS vcpkg port on Windows:

Blocker MSVC native MinGW MSYS2/UCRT64
<dirent.h> include (used by postgres/timezone/pgtz.c and postgres/common/pgfnames.c) ✗ no native dirent.h ✓ ships dirent.h ✓ ships dirent.h
GCC __attribute__ syntax ✗ MSVC ignores; macros fall back ✓ GCC syntax accepted ✓ GCC syntax accepted

Both blockers are absent on the MinGW path. The MEOS vcpkg port should therefore build under MinGW with no source changes.

Two outcomes

If the MinGW row Then
Goes green MobilityDuck gets free Windows binaries from the existing CI matrix. The windows_amd64_mingw exclusion stays dropped; this PR lands as-is.
Fails The failure log identifies the precise next blocker. The right follow-up is scoped to that blocker; this PR is amended to put windows_amd64_mingw back in the exclusion list with a comment naming the specific failure.

Independent of

  • MobilityDB #1104 (pg_attribute_unused() macro fix) — addresses the one remaining direct __attribute__((__unused__)) use in MEOS code; matters for MSVC native Windows, not for MinGW (which accepts the direct syntax).
  • MobilityDB #959 (MSYS2/UCRT64 Windows MEOS bootstrap) — non-blocking CI that proves MEOS builds via MSYS2. Independent of MobilityDuck's vcpkg-driven path.
  • The osx_arm64 exclusion from ci: exclude osx_arm64 from main pipeline pending the hex-WKB bug fix (unblocks 5+ PRs) #170 — orthogonal platform.

Tracker

Track Toolchain Status
A MSYS2 / UCRT64 enabled by MobilityDB #959 (separate path; MobilityDuck CI doesn't have an MSYS2 arch)
B MinGW (this PR) probing: CI tells us
C MSVC native blocked on <dirent.h> shim; bigger lift; tracked by MobilityDB #513

The MEOS `*_as_hexwkb` family produces odd-length hex output on macOS
arm64, which the DuckDB test framework's hex decoder rejects.  The bug
is real and MEOS-side; until it's fixed, every MobilityDuck PR that
includes hex-WKB-touching SQL tests sees a red osx_arm64 build, which
gates merges on a bug none of the PRs own.

Consolidation:

- MainDistributionPipeline.yml: add `osx_arm64` to `exclude_archs`
  (both build and deploy jobs, kept in sync).  Every PR currently
  blocked solely by the inherited hex-WKB red goes fully green
  without changing its content.

- HexWKBDiagnostic.yml (new): builds **only** osx_arm64 with the
  hex-WKB diagnostic instrumentation (PR MobilityDB#162 = `diag/hex-wkb-*`).
  Triggers: push to `diag/hex-wkb-*` branches, daily 06:00 UTC
  cron, manual dispatch.  Keeps the bug observable while it isn't
  gating production PRs.

Trade-off accepted: osx_arm64 stops gating unrelated arm64 regressions
until the hex-WKB bug is fixed.  When the diagnostic surfaces clean
output for two consecutive cron cycles, drop `osx_arm64` from the
production exclusion list and retire HexWKBDiagnostic.yml — that's a
2-line revert of this PR.
…t builds under MinGW

MinGW provides <dirent.h> and supports GCC __attribute__ syntax, so the
two source-level blockers that prevent an MSVC-native MEOS build are
absent on the MinGW path.  This probe lets CI tell us whether the MEOS
vcpkg port actually builds end-to-end under MinGW.

Two possible outcomes:

  - MinGW row goes green → MobilityDuck gets free Windows binaries
    from the existing CI matrix, no further work needed for the
    MinGW target.
  - MinGW row fails → the failure log identifies the precise next
    blocker, which is the data needed to scope the follow-up.

Stacks on MobilityDB#170 (osx_arm64 exclusion).  Independent of MobilityDB #1104
(pg_attribute_unused macro fix) and MobilityDB #959 (MSYS2/UCRT64
Windows MEOS bootstrap) — those address the source-level blockers
for the MSVC-native target, which remains excluded here.
@estebanzimanyi estebanzimanyi force-pushed the ci/probe-mingw-build branch from c9a7e14 to cf25d64 Compare May 21, 2026 05:41
estebanzimanyi added a commit to estebanzimanyi/MobilityDuck that referenced this pull request May 21, 2026
…uilds against musl-libc

The MEOS-port-side glibc-isms are the suspected blockers — printf
format flag handling in postgres/utils/formatting.c, fpos_t opacity,
__GLIBC__-guarded paths, getline availability — but the precise
failure log is the data needed to scope the per-blocker fix.

Two possible outcomes:

  - musl row goes green → free linux musl binaries; the exclusion
    stays dropped.
  - musl row fails → the failure log identifies the precise next
    blocker.  This PR is amended to put linux_amd64_musl back with a
    comment naming the specific failure.

Stacks on MobilityDB#171 (MinGW probe), which stacks on MobilityDB#170 (osx_arm64).  The
three probes are independent: one outcome doesn't affect the others.
… PR MobilityDB#161)

Cherry-picked from open PR MobilityDB#161 so this PR's CI compiles against the
vcpkg-installed MEOS, which exposes 'meosType' (pre-consolidation)
not 'MeosType'.  When MobilityDB#161 reaches main, this commit collapses to a
no-op on rebase.
…MobilityDB#136)

Cherry-picked from open PR MobilityDB#136 so this PR's amd64 Linux test phase
goes green before MobilityDB#136 lands.  When MobilityDB#136 reaches main, this rebase
collapses to a no-op.
…en PR MobilityDB#140)

Cherry-picked from open PR MobilityDB#140 so this PR's osx_amd64 / osx_arm64 /
wasm builds compile.  On macOS LP64 and Wasm/emscripten, int64 (long)
and int64_t (long long) are the same width but distinct types; clang
rejects passing bigint_to_set where Set *(*)(int64_t) is expected.
The cast is a no-op on Linux.  When MobilityDB#140 reaches main, this rebase
collapses to a no-op.
…e_ptr<FunctionData> in Copy()

GCC + DuckDB 1.4.4's unique_ptr does not implicitly convert
derived->base, so 'return r;' in BinsBindData::Copy() fails to compile:

  error: could not convert 'r' from 'unique_ptr<duckdb::{anonymous}::BinsBindData,...>'
                                to 'unique_ptr<duckdb::FunctionData,...>'

Use duckdb's unique_ptr_cast helper (from duckdb/common/helper.hpp) to
do the conversion explicitly, matching the canonical pattern used by
DuckDB core (e.g. table_scan.hpp's TableScanBindData::Copy()).  No
behaviour change; the move is exactly what the implicit conversion
would have done if the compiler accepted it.
@estebanzimanyi
Copy link
Copy Markdown
Member Author

Linux amd64 + arm64 both PASS after the polyfill stack — the probe itself does not break the baseline. The actual MinGW probe (windows_amd64_mingw row) is still in progress and will tell us whether the MEOS vcpkg port builds under MinGW; result pending.

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