You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(targets): x86_64-linux-android is verified — the artifact ran on the platform's emulator
`adb push` then `adb shell ./andtest` printed `1-2-3`, exit 0, on an API 24
x86_64 system image under Google's own emulator with KVM, from a source that
imports std and no project vocabulary beyond `--target`. So one pin serves two
rows at two tiers, and the difference is execution rather than confidence in
the build.
The device row stays `preview` and the reason is recorded where the next
attempt will look: the emulator refuses a foreign guest outright, and the
documented qemu-user fallback needs four files extracted from an ext4 partition
image by `debugfs` -- the one program in `xim:e2fsprogs@1.47.3` that is a
broken build. That is an ecosystem defect with its own record in the index, and
fixing it moves this row without an engine change.
The docs now also reconcile the two records that would otherwise disagree: the
support table's Windows cell for both Android rows is `—` because the index
publishes no Windows NDK (its archive ships no libc++ module surface), while
`mcpp toolchain list` still shows the rows there, because which hosts an index
serves is the index's answer and not a constant compiled into the engine.
Copy file name to clipboardExpand all lines: .agents/docs/2026-09-11-platform-targets-design-review.md
+22Lines changed: 22 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -994,6 +994,28 @@ plan.
994
994
| E15 | R2: `min_api_level` under `[target.<triple>]`, via `llvm_triple(param)` and the fingerprint, per §12.1 |**done**|
995
995
| E16 |`host_can_serve` stops hardcoding Linux for `has_own_sysroot()` rows |**done** -- see below; this is the line the predicate's own comment named as its expiry |
996
996
997
+
**E16 leaves one thing unanswered, and it is recorded rather than hidden.**
998
+
With the host constant gone, `mcpp toolchain list` reports
999
+
`aarch64-linux-android` as `available` on every host -- including Windows,
1000
+
where `xim:android-ndk` deliberately has no table. Google publishes a Windows
1001
+
NDK and it downloads; what it does not contain is the libc++ module surface
1002
+
(measured: 9108 entries, no `std.cppm`, no `std/*.inc`, against darwin's 10024
1003
+
and 110), so for a module-first build tool that payload cannot serve and an
1004
+
entry that can never serve is worse than none.
1005
+
1006
+
The engine is not the place to encode that. Which hosts an index serves is the
1007
+
index's answer, it changes without an engine release, and a constant stating it
1008
+
here is exactly what E16 removed -- it would go stale again the first time a
1009
+
future NDK ships the surface. So a Windows user sees the row, the pin resolves,
1010
+
and xim refuses with `no payload for this platform` before anything is fetched,
1011
+
naming the package. That is legible at the point of use, which is the standard
1012
+
this repository already applies to a per-package engine floor.
1013
+
1014
+
What would change the answer is a cheap way to ask the index for a payload's
1015
+
platform coverage during a listing. There is none today that does not cost a
1016
+
network round trip per row, and a fourth status word would describe the gap
1017
+
rather than close it.
1018
+
997
1019
**E16 was not in the original plan, and the target matrix is what produced
998
1020
it.** The predicate returned `mcpp::platform::is_linux` for a row whose SDK
999
1021
ships its own sysroot, because `xim:emsdk` and `xim:android-ndk` declared only
0 commit comments