From e924dbeec92971584aa5079442e4a77dc43e1943 Mon Sep 17 00:00:00 2001 From: sunrisepeak Date: Sun, 20 Sep 2026 21:07:37 +0800 Subject: [PATCH 1/2] 0.13.0 --- follow openkal-musl 0.17.0, and correct the floor this names openkal-musl 0.17.0 is a manifest-only release: it declares what the library does not supply (`[c-abi-absent]`, 24 rows, asserted against the archive by its own CI) and moves its implementation pins to openkal-linux 0.15.0 and openkal-windows 0.10.0. No source changed, so following it is a pin move. THE ENGINE FLOOR IN THE README WAS WRONG, AND WRONG IN THE DIRECTION THAT MATTERS. It named 2026.9.18.3 and credited that release with stripping host macros (`-U_WIN32`, `-U_WIN64`, the MinGW pair) on Windows hosts before reading the predefines that back the `[c-abi]` declaration. The strip existed and it protected nothing: on a freestanding target there was no `--target=` substitution in the probe's argv for it to compensate for, and removing the host's predefines removed the one piece of evidence that would have said so. 2026.9.18.3's probe ran with no target selection at all on every freestanding build, so the compiler answered for the machine it was running on. 2026.9.20.1 assembles that command line in one place that refuses to omit the target, so the README now names it. CI's `MCPP_VERSION` still pins 2026.9.18.3 and moves with that release --- leaving it here would keep this package validated by an engine its own README says misbuilds it on freestanding, and green, because the misbuild is the silent kind. --- README.md | 30 +++++++++++++++++++----------- mcpp.toml | 4 ++-- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index c7e0649d..d5794e8a 100644 --- a/README.md +++ b/README.md @@ -6,19 +6,27 @@ C library. ```toml [dependencies] -openkal-llvm-runtime = "0.12.0" +openkal-llvm-runtime = "0.13.0" ``` -> **Engine floor (mcpp 2026.9.18.3):** this version of this package pins -> `openkal-musl 0.16.0` and inherits its `[c-abi]` declaration. The engine's -> `cenv_probe::verify` strips host macros (`-U_WIN32` / `-U_WIN64` / -> `-U__MINGW32__` / `-U__MINGW64__`) on Windows hosts before reading the -> predefined macros that back the declaration, and `cenv::realise` forces -> `-fno-short-wchar` on freestanding wchar. Older engines silently -> misbuild this package on Windows × freestanding (the cross-build to -> `riscv64-none-elf` etc. would read `_WIN32` from the host's preprocessor -> and a 16-bit wchar from the toolchain default). Upgrade: -> `xlings install mcpp --force`. +> **Engine floor (mcpp 2026.9.20.1):** this version of this package pins +> `openkal-musl 0.17.0` and inherits its `[c-abi]` declaration. The engine +> assembles the verification probe's command line in one place that REFUSES +> to run it without a target selection (`cenv_probe::assemble_argv`), and +> `cenv::realise` forces `-fno-short-wchar` on freestanding wchar. Older +> engines silently misbuild this package on freestanding cross-builds +> (`riscv64-none-elf` and the rest): their probe ran with no `--target=` at +> all, so the compiler answered for the machine it was running on. +> +> **The floor named here was 2026.9.18.3 and that was wrong.** It credited +> that release with stripping host macros (`-U_WIN32` and the MinGW pair) on +> Windows hosts before reading the predefined macros. The strip was real and +> it protected nothing: there was no target substitution in the freestanding +> argv for it to compensate for, and deleting the host's predefines deleted +> the one piece of evidence that would have said so. A measurement that +> removes its own disagreement reports an agreement it never established. +> +> Upgrade: `xlings install mcpp --force`. A C++ standard library is not portable in the way a program is. It is *configured* for one C library and compiled against that library's headers, and diff --git a/mcpp.toml b/mcpp.toml index aa6fc807..46e848dc 100644 --- a/mcpp.toml +++ b/mcpp.toml @@ -1,7 +1,7 @@ [package] namespace = "mcpplibs" name = "openkal-llvm-runtime" -version = "0.12.0" +version = "0.13.0" description = "LLVM's C++ runtime libraries — libc++, libc++abi and libunwind — configured for openkal-musl rather than for a host C library." license = "Apache-2.0" authors = ["mcpplibs"] @@ -216,7 +216,7 @@ sources = [ cflags = ["-DDISABLE_AARCH64_FMV=1"] [dependencies] -openkal-musl = "0.16.0" +openkal-musl = "0.17.0" [build] From 71784c713cd9fe47767ea1ccc016527b50628dcc Mon Sep 17 00:00:00 2001 From: sunrisepeak Date: Sun, 20 Sep 2026 23:14:24 +0800 Subject: [PATCH 2/2] the engine pin moves to the release this package names as its floor The README here says the floor is mcpp 2026.9.20.1, because that is the first release whose verification probe refuses to run without a target selection --- below it, a freestanding cross-build's probe answered for the machine it ran on. Leaving CI on 2026.9.18.3 would validate this package with an engine its own README says misbuilds it on freestanding, and the run would be green, because that misbuild is the silent kind. 2026.9.20.1 is released and in the index, so the pin moves with it. The openkal-musl pin moves to 0.18.0 in the same change: 0.17.0 was the version this branch was opened against, and 0.18.0 followed openkal-macos 0.12.0 so that a consumer's `requires-interfaces` is answered on macOS too. Pinning 0.17.0 here would publish a manifest naming a version CI did not test, since `tools/branch-graph.sh` resolves the sibling to its default branch. --- .github/workflows/ci.yml | 2 +- README.md | 2 +- mcpp.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ae72e8a9..464ea10c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ on: env: MCPP_SOURCE_REF: ${{ github.event.inputs.mcpp_ref || vars.MCPP_SOURCE_REF }} - MCPP_VERSION: 2026.9.18.3 + MCPP_VERSION: 2026.9.20.1 XLINGS_VERSION: v2026.8.17.2 XLINGS_NON_INTERACTIVE: '1' diff --git a/README.md b/README.md index d5794e8a..7192566b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ openkal-llvm-runtime = "0.13.0" ``` > **Engine floor (mcpp 2026.9.20.1):** this version of this package pins -> `openkal-musl 0.17.0` and inherits its `[c-abi]` declaration. The engine +> `openkal-musl 0.18.0` and inherits its `[c-abi]` declaration. The engine > assembles the verification probe's command line in one place that REFUSES > to run it without a target selection (`cenv_probe::assemble_argv`), and > `cenv::realise` forces `-fno-short-wchar` on freestanding wchar. Older diff --git a/mcpp.toml b/mcpp.toml index 46e848dc..ee6b48d2 100644 --- a/mcpp.toml +++ b/mcpp.toml @@ -216,7 +216,7 @@ sources = [ cflags = ["-DDISABLE_AARCH64_FMV=1"] [dependencies] -openkal-musl = "0.17.0" +openkal-musl = "0.18.0" [build]