The build plugins the mcpp project maintains, published as one package,
mcpp:plugins. mcpp is a general engine with a framework for build plugins;
plugins come from this package, from third parties, or from the project
itself, and build.mcpp is where a project uses them. A consumer selects the
members it needs through features, imports each one from build.mcpp under the
module name the member declares, and configures it there.
[build-dependencies.mcpp]
plugins = { version = "0.15.1", features = ["rules-spirv"], host-module = true }// build.mcpp
import std;
import mcpp;
import mcpp.rules.spirv;
int main() {
mcpp::rules::spirv::options opt;
opt.includes = { "shaders" };
return mcpp::rules::spirv::compile(opt) ? 0 : 1;
}The edge is a [build-dependencies] entry, not a [dependencies] entry:
host-module = true states which build-time product is wanted, and the section
states that the package does not reach the target. A rule's library is never
linked into the artifact (mcpp docs/05 §2.6.1).
| family | module | answers |
|---|---|---|
| rules | mcpp.rules.<x> |
how one kind of translation unit is compiled by a compiler mcpp does not drive |
| tools | mcpp.tools.<x> |
what the build program does itself (see tools/README.md) |
| dist | mcpp.dist.<x> |
what comes out of the link, and in what form a user installs it |
| deps | mcpp.deps.<x> |
where a library comes from |
| identity | mcpp.plugins |
the lib root, compiled before every member; it states the collection's version |
The mcpp. prefix is reserved for this package. The full account of the
families, and of how the engine routes a file to a rule, is in
docs/engine-and-rules.md.
| feature | module | mcpp floor | what it does | doc |
|---|---|---|---|---|
rules-ascendc |
mcpp.rules.ascendc |
2026.9.6.6 | Compiles Ascend C (*.asc) with BiSheng in mixed mode, so the object joins the ordinary link. |
rules |
rules-cuda |
mcpp.rules.cuda |
2026.9.6.6 | Compiles CUDA (*.cu) through clang with an LLVM toolchain or nvcc with a GCC one. |
rules |
rules-hip |
mcpp.rules.hip |
2026.9.6.6 | Compiles HIP (*.hip) with the project's clang on the NVIDIA platform. |
rules |
rules-metal |
mcpp.rules.metal |
2026.9.8.1 | Compiles .metal shaders into Metal libraries with the host's Xcode and deploys them beside the program. |
rules |
rules-qt |
mcpp.rules.qt |
2026.9.26.2 | Runs moc, uic, rcc and Qt's Linguist tools as actions, links the Qt modules and places their runtime. |
rules-qt |
rules-slang |
mcpp.rules.slang |
2026.9.7.1 | Compiles Slang (*.slang) and embeds or places the result. |
rules |
rules-spirv |
mcpp.rules.spirv |
2026.9.6.6 | Compiles GLSL and HLSL shader stages to SPIR-V and embeds or places the result. | rules |
rules-swift |
mcpp.rules.swift |
2026.9.8.1 | Compiles a package's .swift sources into one module the C and C++ sources call. |
rules |
rules-sycl |
mcpp.rules.sycl |
2026.9.6.6 | Compiles SYCL (*.sycl) with DPC++. |
rules |
tools-embed |
mcpp.tools.embed |
2026.9.5.4 | Writes a data file into a header the program compiles in. | tools-embed |
tools-island |
mcpp.tools.island |
2026.9.7.1 | Generates the extern "C" boundary and the C++ module of a code island. |
tools-island |
dist-appimage |
mcpp.dist.appimage |
2026.9.11.1 | Turns the tree mcpp pack stages into an AppImage (Linux). |
dist |
dist-wix |
mcpp.dist.wix |
2026.9.11.1 | Builds an MSI of the staged tree, and a Burn bundle chaining it (Windows). | dist |
dist-apple |
mcpp.dist.apple |
2026.9.14.2 | Lays out a macOS or iOS application bundle, signs it and writes a disk image. | dist-apple |
dist-web |
mcpp.dist.web |
2026.9.13.1 | Copies a wasm32-emscripten program and its files into a web directory with an index.html. |
dist |
dist-apk |
mcpp.dist.apk |
2026.9.14.2 | Packs the native closure into a signed APK or App Bundle, with Java, Kotlin and Maven libraries. | dist-apk |
deps-vcpkg |
mcpp.deps.vcpkg |
2026.9.26.2 | Installs a vcpkg.json manifest as an action and maps the prefix into the build. |
deps |
deps-cmake |
mcpp.deps.cmake |
2026.9.26.2 | Builds and installs a CMake subproject as an action and maps the prefix into the build. | deps |
deps-archive |
mcpp.deps.archive |
2026.9.26.2 | Extracts a zip archive the project keeps and places its tree beside the program. | deps |
Some features add a sub-capability to a member: dist-apk-kotlin and
dist-apk-maven (Kotlin sources, a Maven graph), and surface and deps,
which the members imply. A feature states a mechanism and the tools that
mechanism runs; the libraries and SDKs a program links are the project's
declaration (0.15.0 removed rules-qt-xim*; see rules-qt).
mcpp.toml the package: one feature per member
src/plugins.cppm export module mcpp.plugins; the version, mcpp::plugins::surface
(the declarations a consumer names) and mcpp::plugins::xml
rules/<x>.cppm export module mcpp.rules.<x>;
tools/<x>.cppm export module mcpp.tools.<x>;
dist/<x>.cppm export module mcpp.dist.<x>;
deps/<x>.cppm export module mcpp.deps.<x>; deps/deps.cppm is shared
tests/<consumer>/ one project per member, built by CI with the pinned mcpp
docs/ one page per member or group of members
A member is one module file, one feature in mcpp.toml, a consumer under
tests/ that CI builds and asserts on, a row in the table above with its mcpp
floor, and a version bump. The conventions a member follows -- the same for a
third-party or a project's own plugin -- are in
docs/plugin-development.md; the division between
what the engine owns and what the member owns is in
docs/engine-and-rules.md.
A tag v<version> publishes the source archive; the index descriptor
(mcpp-index/pkgs/m/mcpp.plugins.lua) names the GitHub archive and its GitCode
mirror with one sha256.