Commit 55a856d
* A C++-layer provider compiles its implementation units at the standard it states (#641 item 2)
A package that provides the C++ layer and states [package] standard now
compiles each C++ unit that neither provides nor imports a module at exactly
that level; module units, the std module included, stay at the graph's level.
The level is appended to the unit's own flag vector in make_plan, so the
compile edge, the scan edge, compile_commands.json and the build database read
one value. The provider predicate is factored into the manifest module and used
by the std module adoption. The dependency cache key and the fingerprint
metadata carry the stated level only when it exists; the higher-standard
warning no longer reports a provider whose level is applied.
Tests: unit CxxLayerStandard.* and CacheKey.ACxxLayerProvidersStatedStandardChangesTheKey;
e2e 696 (requires llvm). Docs: 07-workspace 4.2 and 22-target-side with mirrors.
* docs(design): #641 and #642 triage record, probes, and implementation plan
* mcpp pack --features reaches every build pass of the pack, and run --format passes its features to the pack (#641 item 4)
* A required compiler family takes the pins of its own payload (#641 item 1); a dependency's C++ shared library over a graph C++ runtime is refused or carries a stated private copy (#641 item 5)
* The refusal offers the static edge only where a request or a default made the library shared; e2e 690 reads four legs
* docs: M1-M3 in 20-toolchains, 10-pack-and-release and 50-machine-output with mirrors; CI runs the graph C++ runtime e2e scripts on the hermetic llvm job
* Bounded tool-build paths: owner-relative object addresses, a short sub-build scratch, extended-length opens on Windows (#641 item 3; M7, M8, M9)
M7. A source outside the package that declares it (a build program's
mcpp::source under a dependency's root) is addressed as
obj/<declaring>/__pkg/<owning package>/<path inside it>, or
obj/<declaring>/__ext/<8-hex hash of its directory>/ when no package contains
it. The mirror of the declaring-package-relative path, with one __up per
level, is gone for these sources; sources inside their declaring package,
root-owned flat addresses, the #233 census and backstop, and the cache address
(packageRel) are unchanged. In the root census branch the escaping form
applies only where the mirrored prefix was used (a basename collision), so the
flat obj/<name> of a generated OUT_DIR source (#239) is unchanged.
M8. The host-tool sub-build scratch moves from <entry>/build-<hash> to
<cache>/tool/.build/<hash of entry and consuming work root>
(tool_store::scratch_dir), keeping per-consumer isolation, re-run reuse and
removal after publish; the entry layout is unchanged.
M9. mcpp::platform::fs::extended_length (identity outside Windows; absolute,
normal, backslash, \\?\ or \\?\UNC\ form on Windows, idempotent) with the pure
spelling rule windows_extended_length_spelling. Call sites, enumerated from the
$mcpp rules of ninja_backend.cppm and the __action-stamp wrapper:
src/cli/cmd_build.cppm cmd_dyndep: --output; the --expect-* ddi read;
emit_dyndep_single input; emit_dyndep_from_files inputs
src/cli/cmd_build.cppm cmd_stage: source and --output (stage_file)
src/cli/cmd_build.cppm cmd_bmi_equal: both paths (bmi_equivalent)
src/cli/cmd_build.cppm cmd_coff_def: each object read; the .def write
src/cli/cmd_build.cppm cmd_bmi_compile: --bmi --slot --sem --command-file
--dep-from --dep-to (not --self, an executable)
src/cli/cmd_build.cppm cmd_bmi_supervise: --slot --token --command-file
src/cli/cmd_build.cppm cmd_bmi_await: --slot --object
src/cli.cppm __action-stamp: each stamp
Downstream opens receive the converted paths. Two follow-ons: the detached
compile's log opens with CreateFileW (CreateFileA does not honour the prefix
past MAX_PATH), and CompileRequest::bmiTarget keeps ninja's spelling of the
BMI for the copied depfile's target, which must not change.
Tests: unit ObjectAddress.ASourceUnderAnotherPackageIsAddressedByThatPackage,
ObjectAddress.AnUnownedEscapingSourceIsAddressedByAHashOfItsDirectory (both
fail on the previous object_for), ToolStoreScratch.IsShortPerConsumerAndStable,
PlatformFs.ExtendedLength* (four); e2e 698 (leg A fails on 2026.9.15.1 with
obj/installer/__up/__up/dep/platform/impl/helper.o). Docs: 30-build-mcpp and
its Chinese mirror.
* feat: a library states its default link form, and the root build program reads each dependency's form (#642 E1, E2)
- [targets.<n>] linkage and its row form state a library's default form; kind =
"shared" stays the constraint. Precedence: the root edge, a written
dependency_linkage, the package default, static. An explicit override is
honoured with an information line and no degraded record.
- The link-form resolution is computed once before the root build program
(hasSources from the scanner's own package_source_files) and applied after
the scan as before.
- The root build program receives MCPP_DEP_<NAME>_LINKAGE under the names of
MCPP_DEP_<NAME>_DIR; mcpp::dep_linkage() reads it. Dependency programs do not.
- Form B descriptors read linkage the same way.
- Unit tests (linkage_form, manifest, xpkg), e2e 692 and 693, docs 04, 22, 30
with their Chinese mirrors, SPEC-004 1.4.
* The M3 refusal reads the resolution's declaredShared fact for the package that constrains its form
* Version 2026.9.15.2; CHANGELOG; the plan's ledger and refinements
* dep_dir and dep_linkage answer under the qualified namespace.name a consumer writes; e2e 693 leg F
* e2e 696 and 698 write fixture paths through host_path
* docs: a shared library over a graph C++ runtime on Mach-O exports what its sources mark with default visibility
* docs(design): refinements measured on macos-15 and for qualified dependency names
* e2e 698: the consumer's tool command survives cmd.exe's quote stripping on Windows
* e2e 698 sources the host path helper before it changes directory
---------
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <x.d2learn.org@gmail.com>
1 parent 69fae26 commit 55a856d
65 files changed
Lines changed: 4206 additions & 232 deletions
File tree
- .agents/docs
- .github/workflows
- docs
- specs
- zh
- modules
- buildmcpp/src
- manifest/src
- platform/src
- versioning/src
- src
- build
- schedule
- cli
- modgraph
- pack
- toolchain
- tests
- e2e
- unit
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Large diffs are not rendered by default.
Lines changed: 559 additions & 0 deletions
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
| 65 | + | |
| 66 | + | |
65 | 67 | | |
66 | 68 | | |
67 | 69 | | |
| |||
72 | 74 | | |
73 | 75 | | |
74 | 76 | | |
| 77 | + | |
| 78 | + | |
75 | 79 | | |
76 | 80 | | |
77 | 81 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
416 | 416 | | |
417 | 417 | | |
418 | 418 | | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
8 | 49 | | |
9 | 50 | | |
10 | 51 | | |
| |||
0 commit comments