Skip to content

2026.10.31.3: an ok image with a prepare action builds; a large workspace keeps its bytes once (#874) - #873

Merged
Sunrisepeak merged 9 commits into
mainfrom
release/2026.10.31.3
Oct 31, 2026
Merged

Sunrisepeak merged 9 commits into
mainfrom
release/2026.10.31.3

Conversation

@Sunrisepeak

@Sunrisepeak Sunrisepeak commented Oct 30, 2026 •

Copy link
Copy Markdown
Member

Summary

Fixed (found by mcppls-clangd#13). Under a platform with seal steps the link writes obj/platform/<artifact>.unsealed and a platform_seal edge publishes the artifact; the ordering guard of mcpp#702 took the seal edge for the link and refused every ok image whose graph declares a prepare action. link_edge_output names the link edge's output for the emitter and the guard. e2e 996.

mcpp#874 — a large workspace keeps its bytes once and builds each output once (design). Measured on mcppls (6 members, 61 test programs, clang): bin/ 4 914 → 1 217 MiB, test links 75 → 32 s.

  • Debug information: compressed on ELF (-gz=zlib; an ok image's ld.lld link compresses it), no measurable compile cost; split_debuginfo = "unpacked" (default of dev/debug) leaves the units compiled in the build directory beside their objects. Index packages' units stay in band (their objects enter the cache). Mach-O, PDB, MinGW, wasm and freestanding unchanged. e2e 999, 996 C.
  • A static library holds its own package's objects (docs/12). Shared libraries and build programs are placed by links; the build programs' graph builds nested build programs beside its group instead of in a copy of itself.
  • Repeated builds: a host tool's key is the tool package's own manifest closure (it was the graph the command walked: empty under test --workspace, complete under build, polluted by dev-dependencies); action rules have restat. e2e 997, 998 G.
  • Collection: uses.list per configuration, clean --stale over .build-mcpp/out and host, clean --report, a low-disk warning; the cache covers host tools, marks std/tool hits, supersedes a path tool's old stamps, and collects entries unused for [cache] unused_days (30). e2e 998.
  • Over the development cycle: a new fingerprint of a lineage (compiler family, target, stdlib family, standard, configuration flags) takes over its predecessor's directory, so an mcpp upgrade rebuilds only the edges whose commands changed instead of opening a full copy; another toolchain's predecessor is removed; after a build the directories unused for [build] keep_days (3) are swept. e2e 1000.

CI: the macOS legs run on macos-15 (GitHub retires macos-14 on 2026-11-02); the floor stays macOS 14, asserted as the installed binary's minos.

Design part 2 rev 10.

Co-authored-by: speak-agent 248744407+speak-agent@users.noreply.github.com

Sunrisepeak and others added 3 commits October 31, 2026 03:40
…s -- the link edge's output is named by one function, and the guard no longer takes the seal edge for the link

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…-11-02; the floor stays macOS 14, asserted as the installed binary's minos; the target matrix and openkal-cross take build.yml's macOS artifact

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ut once, and a configuration keeps one build directory over time

- debug information: compressed on ELF (-gz=zlib; an ok image's ld.lld link compresses it), and `split_debuginfo = "unpacked"` (dev, debug) leaves the units compiled in the build directory beside their objects
- a static library holds its own package's objects; shared libraries and build programs are placed by links; the build programs' graph builds its own build programs beside its group
- a host tool's key is the tool package's own manifest closure; action rules restat
- uses.list, clean --stale over .build-mcpp/out and host, clean --report, a low-disk warning; the cache covers host tools, marks std and tool hits, supersedes path tool stamps and collects by [cache] unused_days
- a new fingerprint of a lineage takes over its predecessor's directory (another toolchain's is removed); the sweep after a build removes directories unused for [build] keep_days (3)
- design 2026-10-31 (workspace space and reuse); e2e 996 C, 997, 998, 999, 1000

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
@Sunrisepeak Sunrisepeak changed the title 2026.10.31.3: an ok image whose graph declares a prepare action builds 2026.10.31.3: an ok image with a prepare action builds; a large workspace keeps its bytes once (#874) Oct 30, 2026
Sunrisepeak and others added 6 commits October 31, 2026 07:03
…layed builds count; the retentions are set with `mcpp self config`; debug sections are compressed only by a toolchain built to

- mcpp::home::mark_used sets the time of an entry's record file (entry.json, std-module.json) at most once in 12 hours; a package hit no longer rewrites entry.json; the collection reads the later of the stamp and the record's time
- uses.list names the cache entries a configuration used, written once the plan is complete; the sweep after a build marks them used, so a build that replays its graph counts
- `mcpp self config --cache-unused-days <N> --keep-days <N>` writes [cache] unused_days (30) and [build] keep_days (3); `mcpp self config` shows them
- compresses_debug_sections asks the driver once (-gz=zlib -###) and keeps the answer: the Windows-hosted LLVM 23.1.3 has no zlib and its ld.lld refused the link (openkal-cross windows)
- e2e 1000 D, E; 174 ages the record's time too

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… the artifacts, and a second use within 12 hours writes nothing

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…s-hosted clang 23.1.3 accepts -gz silently and its ld.lld refuses the option (openkal-cross windows)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ation through the toolchain's ld.lld with --compress-debug-sections=zlib; the answer is kept under the lld's identity

The --version form was answered yes by the Windows-hosted ld.lld whose link then refused the option (openkal-cross windows).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…print-prog-name): on windows-2022 the xim LLVM 23.1.3 ships none and its driver runs the image's own LLVM, built without zlib

Measured by a temporary probe workflow (mcppls-clangd probe branch).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… ["."]); the sweep after a build collects by age alone; e2e 730 installs its package before planning offline

The sweep removed the configuration a rooted workspace had just built (e2e 850 on CI); the shards moved with the new timings, and 730 no longer found the package an earlier test of its shard installed.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
@Sunrisepeak
Sunrisepeak merged commit ce4dd4b into main Oct 31, 2026
84 checks passed
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