Clarify the Windows CI build/host/targets environments#29036
Clarify the Windows CI build/host/targets environments#29036jmid merged 4 commits intoocaml:masterfrom
Conversation
No need to put the os in the matrix as the job only runs on Windows.
It's confusing to list jobs environments as Cygwin/MSYS2 as in the Autoconf terminology these are the build environments, but the job is targeting native Windows (*not* Cygwin or MSYS2) using MinGW-w64. Here's the usual reminder: there are three OCaml ports (targets) to Windows: - Cygwin/MSYS2; - MinGW-w64; - MSVC. All three ports use Cygwin/MSYS2 as their *build* environment. Nowadays both Cygwin and MSYS2 use `x86_64-pc-cygwin` as their triplet. Without cross-compilation, the host and target environments are identical. Currently the opam CI for Windows does *not* check Cygwin, MSYS2, or MSVC targets, but only MinGW-w64 on x86_64. As of 5.4, OCaml has *not* been ported to Windows ARM64. Cygwin/MSYS2 provide a POSIX emulation layer, so testing them as target does *not* guarantee a native Windows compatibility. MinGW-w64 and MSVC are totally different compilers and have a different CLI API, ABI, and support different C/C++ dialects and extensions. Testing one does *not* guarantee compatibility with the other. I hope that clearly identifying the build and host/target environments will help remove any ambiguity around what platform is actually being tested. As I suspect users tend to care more about the target than the build environment, I've chosen to display the job name reversed (as target-host-build rather than the usual build-host-target) to make it easier to identify the job when its name is truncated in the UI.
|
Thanks, I'm all for clearer terminology! I'm less sure about removing the x86_32 gcc packages. ATM, the workflows will also trigger, e.g., on changes to or submission of I've used that in the past to catch MSys2 package names or conditions that were off. |
That's a great point that I had totally missed, I'll remove this change from the PR. Thanks! |
|
LGTM thanks!! |
It's confusing to list jobs environments as Cygwin/MSYS2 as in the
Autoconf terminology these are the build environments, but the job is
targeting native Windows (not Cygwin or MSYS2) using MinGW-w64.
Here's the usual reminder: there are three OCaml ports (targets) to
Windows:
All three ports use Cygwin/MSYS2 as their build environment.
Nowadays both Cygwin and MSYS2 use
x86_64-pc-cygwinas theirtriplet.
Without cross-compilation, the host and target environments are
identical.
Currently the opam CI for Windows does not check Cygwin, MSYS2, or
MSVC targets, but only MinGW-w64 on x86_64. As of 5.4, OCaml has not
been ported to Windows ARM64.
Cygwin/MSYS2 provide a POSIX emulation layer, so testing them as
target does not guarantee a native Windows compatibility.
MinGW-w64 and MSVC are totally different compilers and have a
different CLI API, ABI, and support different C/C++ dialects and
extensions. Testing one does not guarantee compatibility with the
other.
I hope that clearly identifying the build and host/target environments
will help remove any ambiguity around what platform is actually being
tested.
As I suspect users tend to care more about the target than the build
environment, I've chosen to display the job name reversed (as
target-host-build rather than the usual build-host-target) to make it
easier to identify the job when its name is truncated in the UI.
See also #28856, https://github.com/ocaml/ocaml/blob/trunk/README.win32.adoc, and ocaml/setup-ocaml#950.