Platform support

mino targets C99 with no external dependencies beyond the C runtime and POSIX file primitives where available. Any conforming C99 toolchain on a reasonably modern OS should build and run mino. The list below names the platforms and toolchains exercised by CI and the floors below which no testing happens.

Continuously tested

Every push runs build + test suite + release-gate (where applicable) on four pinned GitHub-hosted runners covering every supported host architecture:

PlatformRunner imageCompilerRelease gate
x86_64 Linuxubuntu-24.04system cc (GCC)yes
ARM64 Linuxubuntu-24.04-armsystem cc (GCC)yes
ARM64 Darwinmacos-14system cc (Apple Clang)yes
x86_64 Windowswindows-2022MinGW-w64 gccsmoke only

Windows skips the composite release-gate because the ASan step relies on a libsanitizer that MinGW does not ship; the smoke build + test suite still gate every push on that runner. A separate cross-compile job runs on macos-14 every push and verifies that the committed CPJIT stencil byte tables for every supported target (ARM64 Linux, x86_64 Linux, x86_64 Darwin, x86_64 Windows) regenerate identically — this is the verification floor for x86_64 Darwin since GitHub has been retiring Intel Mac runners.

A nightly workflow (04:00 UTC daily) re-runs the release-gate plus extended suites (GC stress, fault injection, embedding stress) on the three non-Windows runners. Toolchain drift surfaces from the cron tick instead of waiting for the next PR to trip on it.

Language and library floors

Recommended minimums

These floors are the oldest environments CI would plausibly cover if the runners moved down. Older versions often work but are not exercised.

PlatformMinimumNotes
Ubuntu20.04glibc 2.31, GCC 9, Clang 10. Anything GitHub still builds ubuntu-latest from.
macOS11 (Big Sur)Apple Clang shipped with Xcode 12 and later.
Windows10MinGW-w64 GCC 9+ via MSYS2. MSVC is discussed below.
GCC9Any GCC with full C99 support works. 9 is the CI floor.
Clang10Apple Clang 12 or mainline Clang 10. Sanitizer build targets assume the modern driver.

Windows and MSVC

Windows CI builds with MinGW-w64 gcc. MSVC is not in the CI matrix. Historical MSVC had weak C99 support; MSVC 2019 (v16.8) and later accept /std:c11 or /std:c17, which is a superset of C99 sufficient for mino. If you build with MSVC, pass /std:c11 (or later) and report build or runtime issues against the current release.

JIT support per host

The copy-and-patch JIT (CPJIT) ships byte tables for every supported host arch. The full mino binary auto-detects the host and enables the JIT; the parallel mino-lean binary is the same build with the JIT pipeline compiled out — useful when a host has no executable memory primitives, or when a smaller binary is more valuable than peak throughput.

HostFormatCPJIT byte tables
ARM64 DarwinMach-O 64yes (dev host; release-gate every push)
ARM64 LinuxELF64yes (release-gate every push)
x86_64 LinuxELF64yes (release-gate every push)
x86_64 DarwinMach-O 64yes (cross-compile parity every push)
x86_64 WindowsPE/COFFyes (smoke build every push)

Per-state runtime control lives behind mino_state_set_jit_mode (AUTO / OFF / ON) and mino_state_set_jit_hot_threshold (call-count before the JIT compiles a function); the CLI exposes both as --jit=auto|off|on and --jit-threshold=N. Capability discovery returns a mino_jit_capability struct documenting {available, mode, threshold, host_arch, host_os} so an embedder can size the host's tuning at startup.

Out of scope

Reporting platform issues

If mino does not build or fails tests on a platform that meets the floors above, file an issue at github.com/leifericf/mino/issues with the compiler banner (cc --version), the OS release, and the failing command output.