2026.9.5.3: a feature-selected rule collection, mcpp.rules.* naming, and a variant switch the fast path no longer replays - #566
Merged
Conversation
…naming, and a variant switch the fast path no longer replays A host-module package contributes every module interface unit among its feature-resolved sources, the lib root first; only listed sources take part. This is what lets mcpp:plugins carry mcpp.rules.cuda and mcpp.rules.spirv, selected by features. The rule packages leave examples/; examples 09 and 10 consume the index package. The prefix is mcpp.rules.* for rules and mcpp.tools.* for utilities; mcpp.build.* is the engine's own module family and the specification is corrected accordingly. The graph header records whether --accel/--no-accel chose the variant, and the fast paths decline a graph an override wrote: a plain build after --no-accel used to report Finished in 0.00s and run the CPU variant. The device-source table is by compiler, not by vendor: 18 extensions, none in the default globs, all a hard error before. Chapter 20 is renamed to Heterogeneous Builds; docs 05 and 07 gain the collection and naming sections in both languages.
…kflow comments Table cells whose value was carried by a symbol alone now carry a word (yes, no, partial, planned); three comment lists that distinguished accepted from refused forms keep the distinction in words.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Release 2026.9.5.3. Four changes to the engine and its documentation, each with its own criterion, and the withdrawal of the rule packages from
examples/in favour of the official plugin collection.1. A host-module package contributes every interface unit its features select
A
host-module = truepackage used to contribute exactly one module: the unit at its lib root. Every module interface unit among the package's feature-resolved[build] sourcesis now a host module of its own, registered under the name it declares, the lib root first (so a feature unit may import it). Only listed sources take part; the inferredsrc/**of a package with nosourcesis not consulted, so nothing already published changes shape.This is what lets one package,
mcpp:plugins(mcpp-community/mcpp-plugins), carrymcpp.rules.cudaandmcpp.rules.spirvand let a consumer say which it needs in the one place it says everything else about a dependency:Criteria: e2e 610 (a feature makes its unit importable; an inactive feature's unit is not compiled and cannot be imported; two features give two modules; the
mcppnamespace draws no reserved-prefix warning while another namespace draws one per unit; a package with neither a lib root nor a listed unit keeps its diagnostic),tests/unit/test_provisionsfor the interface-unit detector, e2e 189 and 309 unchanged.2. Naming:
mcpp.rules.*andmcpp.tools.*mcpp.build.<x>was the wrong prefix for a plugin: it is the engine's own module family (mcpp.build.plan,mcpp.build.prepare). The rule-package specification had withdrawnmcpp.rules.*only because a host module's name was then its bare package name; I1 removed that objection. Specification I8 and section 7, docs 05 and 07 (both languages; the Chinese naming paragraph did not exist before) state the rule. Examples 09 and 10 consume the index package like any project.3. A variant switch is no longer replayed by the fast path
mcpp build,mcpp build --no-accel,mcpp build: the third reportedFinished in 0.00sandmcpp runexecuted the CPU variant. The device variant is in the fingerprint, so the two builds land in different directories, and the fast path -- which runs before any plan exists -- replayed whichever directory was built last. The graph header now records the selection (accel=default|override); the two fast paths replay only a graph the manifest's own variant wrote, and a graph predating the field is a miss, never a guess. Criteria: e2e 611,tests/unit/test_graph_shape, the extendedtest_loader_contract.4. The device-source table is by compiler, not by vendor
18 extensions (CUDA, HIP, the GLSL stages, HLSL, OpenCL C, Metal); the default globs still exclude every one of them and they were a hard error before, so no existing build changes. Criteria: e2e 609 with the table as its denominator,
tests/unit/test_source_kind.Documentation
docs/20-heterogeneous-builds.md, both languages); theaccelkey is unchanged.Verification on the author's machine
mcpp testgreen after the two fixes below; e2e: 301 passed, 168 fails as onorigin/main(musl helper not available on this host).examples/09-cuda-kernelthroughmcpp:plugins:12 24 36 48on the RTX 4080 (clang route) and on the CPU variant.examples/10-vulkan-computethroughmcpp:pluginsandcompat.vulkan-runtime@2026.09.05:12 24 36 48on the host ICD and on the CPU variant.