Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion .github/scripts/check-deps-and-qt.sh
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,27 @@ cmake_consumer() {
echo "ok: a file added to the subproject re-ran its installation"
}

# A BUILD FOR ANOTHER TARGET (0.21.0): the subproject is compiled with the
# compilers and words of the engine's contract for the target, read when the
# action runs, and not with the machine's toolset. On a glibc machine,
# `--target x86_64-linux-musl` must give a subproject compiled against musl.
cmake_cross() {
cd "$ROOT/tests/cmake-cross"
rm -rf target
mkdir -p target/ci
"$MCPP" build --target x86_64-linux-musl > target/ci/build.log 2>&1 || { cat target/ci/build.log; fail "the cross build failed"; }
script=$(find target -path '*deps-cmake/answer/answer.cmake' | head -1)
[ -n "$script" ] || fail "no deps-cmake script was written"
grep -q "the engine's contract for x86_64-linux-musl" "$script" || { cat "$script"; fail "the script does not read the contract"; }
cache=$(find target -path '*deps-cmake/answer/build-*/CMakeCache.txt' | head -1)
grep -q '^CMAKE_SYSTEM_NAME:.*=Linux' "$cache" || { grep CMAKE_SYSTEM_NAME "$cache"; fail "CMAKE_SYSTEM_NAME is not Linux"; }
grep -q '^CMAKE_TRY_COMPILE_TARGET_TYPE:.*=STATIC_LIBRARY' "$cache" || fail "the try-compile links"
"$MCPP" run --target x86_64-linux-musl | tee target/ci/run.log
grep -q '^cmake-cross: the subproject was compiled against not glibc$' target/ci/run.log ||
fail "the subproject was compiled with the machine's C library"
echo "ok: a subproject of a cross build is compiled from the engine's contract"
}

# AN INSTALLATION IS BUILT ONCE (0.18.0). deps-cmake keeps what a subproject
# installed under a key that holds no path of the machine, and copies it into
# the prefix of any later build with the same key. Only a toolset the engine
Expand Down Expand Up @@ -673,6 +694,7 @@ case "${1:-}" in
vcpkg-workspace) vcpkg_workspace ;;
cmake-consumer) cmake_consumer ;;
cmake-cache) cmake_cache ;;
cmake-cross) cmake_cross ;;
qt-consumer) qt_consumer ;;
qt-widgets-consumer) qt_widgets_consumer ;;
qt-sdk-consumer) qt_sdk_consumer ;;
Expand All @@ -682,5 +704,5 @@ case "${1:-}" in
vcpkg-managed) vcpkg_managed ;;
vcpkg-msbuild-refused) vcpkg_msbuild_refused ;;
vcpkg-make-port) vcpkg_make_port ;;
*) echo "usage: $0 vcpkg-consumer|vcpkg-libcxx|archive-consumer|vcpkg-workspace|cmake-consumer|cmake-cache|qt-consumer|qt-widgets-consumer|qt-sdk-consumer|qt-import-only|plugin-logic|tool-sources|vcpkg-crt|vcpkg-managed|vcpkg-msbuild-refused|vcpkg-make-port"; exit 2 ;;
*) echo "usage: $0 vcpkg-consumer|vcpkg-libcxx|archive-consumer|vcpkg-workspace|cmake-consumer|cmake-cache|cmake-cross|qt-consumer|qt-widgets-consumer|qt-sdk-consumer|qt-import-only|plugin-logic|tool-sources|vcpkg-crt|vcpkg-managed|vcpkg-msbuild-refused|vcpkg-make-port"; exit 2 ;;
esac
32 changes: 29 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ env:
# phase -- and `mcpp-package.json` beside every staged tree, which
# `mcpp::plugins::package` reads. Until that release exists the jobs build it
# from `MCPP_SOURCE_REF` (the repository variable names the branch).
MCPP_VERSION: 2026.10.27.1
MCPP_VERSION: 2026.11.5.1
# THE RELEASE EVERY JOB FETCHES, WHICH IS NOT ALWAYS THE ONE UNDER TEST.
#
# `MCPP_VERSION` states the engine this collection needs -- the package floor
Expand All @@ -94,7 +94,7 @@ env:
#
# It moves to `MCPP_VERSION` once that release exists, so the ordinary path
# runs the engine this collection states.
MCPP_BOOTSTRAP: 2026.10.27.1
MCPP_BOOTSTRAP: 2026.11.5.1
# AN ENGINE BUILT FROM SOURCE, WHEN A DISPATCH NAMES ONE.
#
# Empty on every push and pull request, so the steps run the release above,
Expand All @@ -117,7 +117,7 @@ env:
# one-line change here. The mcpp is the bootstrap release, which also builds
# the engine under review when `MCPP_SOURCE_REF` names one.
MCPPLS_VERSION: 0.0.15
MCPP_EDITOR_VERSION: 2026.10.27.1
MCPP_EDITOR_VERSION: 2026.11.5.1
# PINNED, AND WITHOUT IT THE CACHE BELOW CACHED NOTHING.
#
# A released mcpp is self-contained: with no `MCPP_HOME`, `mcpp self env`
Expand Down Expand Up @@ -1470,10 +1470,27 @@ jobs:
"$MCPP" build
test -f $(sh "$GITHUB_WORKSPACE/tests/out-dir.sh")/saxpy.sycl.o
test -f $(sh "$GITHUB_WORKSPACE/tests/out-dir.sh")/sycl_device_link.o
python3 verify-images.py sm_89
"$MCPP" build --accel 'sycl+{nvptx64-sm_89,nvptx64-sm_90}'
python3 verify-images.py sm_89,sm_90
"$MCPP" build --accel 'sycl+{spir64,nvptx64-sm_89}'
python3 verify-images.py spir64,sm_89
"$MCPP" build --no-accel
"$MCPP" run --no-accel | tee run.log
grep -q '^12 24 36 48' run.log

- name: an ordinary worker imports the progress writer without build-program modules
working-directory: tests/progress-worker
run: python3 verify.py "$MCPP"

- name: CUDA and SYCL coexist with independent code targets
working-directory: tests/multi-accel-consumer
run: |
"$MCPP" build
python3 ../sycl-consumer/verify-images.py sm_89 --cuda-target=sm_90
# Both host objects execute; this does not submit work to a GPU.
"$MCPP" run

# EVERY RULE COMPILED FOR THIS HOST, which is a different claim from any
# step above. Each of those exercises one rule and needs that rule's
# payload, so a rule is only ever compiled on the platforms its payload
Expand Down Expand Up @@ -1756,6 +1773,11 @@ jobs:
- name: deps-cmake keeps an installation and takes it for the same key
run: bash .github/scripts/check-deps-and-qt.sh cmake-cache

# 0.21.0: a subproject of a build for another target is compiled from the
# engine's contract for it (mcpp 2026.10.30.1+): musl from a glibc machine.
- name: deps-cmake compiles a cross build's subproject from the engine's contract
run: bash .github/scripts/check-deps-and-qt.sh cmake-cross

- name: rules-qt runs moc, rcc, lupdate and lrelease, with the SDK the project declares
run: bash .github/scripts/check-deps-and-qt.sh qt-consumer

Expand Down Expand Up @@ -2528,6 +2550,10 @@ jobs:

# The test kit on this host: the same stated contexts, so a decision that
# depends on the host the build program runs on is caught here.
- name: standalone progress uses Unicode channels on this host
working-directory: tests/progress-worker
run: python3 verify.py "$MCPP"

- name: the deps members' decisions hold against stated build contexts (mcpp.plugins.testing)
run: bash .github/scripts/check-deps-and-qt.sh plugin-logic

Expand Down
14 changes: 9 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ module name the member declares, and configures it there.

```toml
[build-dependencies.mcpp]
plugins = { version = "0.20.0", features = ["rules-spirv"], host-module = true }
plugins = { version = "0.21.0", features = ["rules-spirv"], host-module = true }
```

```cpp
Expand Down Expand Up @@ -51,9 +51,11 @@ naming it to avoid a download, and the scenarios on both sides -- is in

## Members

From 0.20.0 the package as a whole needs mcpp 2026.10.27.1 (`[package] mcpp`),
whose protocol 17 states a platform's fields and whose `mcpp pack` writes
`mcpp-package.json` beside every staged tree (0.19.0 needed 2026.10.1.3, whose
From 0.21.0 the package as a whole needs mcpp 2026.10.30.1 (`[package] mcpp`),
which writes the configuration's contract that `deps-cmake` compiles a cross
build from (0.20.0 needed 2026.10.27.1, whose protocol 17 states a platform's
fields and whose `mcpp pack` writes `mcpp-package.json` beside every staged
tree; 0.19.0 needed 2026.10.1.3, whose
protocol 15 states where each tool and payload comes from); the column states
the release each member's behaviour first needed.

Expand All @@ -76,7 +78,7 @@ the release each member's behaviour first needed.
| `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](docs/dist.md#dist-web) |
| `dist-apk` | `mcpp.dist.apk` | 2026.10.1.3 | Packs the native closure into a signed APK or App Bundle, with Java, Kotlin and Maven libraries. | [dist-apk](docs/dist-apk.md) |
| `deps-vcpkg` | `mcpp.deps.vcpkg` | 2026.10.1.3 | Installs a `vcpkg.json` manifest as an action with the toolset mcpp resolved, and maps the prefix into the build. | [deps](docs/deps.md#deps-vcpkg) |
| `deps-cmake` | `mcpp.deps.cmake` | 2026.10.1.3 | Builds and installs a CMake subproject as an action with Ninja and the toolset mcpp resolved, keeps the installation for any build with the same key, and maps the prefix into the build. | [deps](docs/deps.md#deps-cmake) |
| `deps-cmake` | `mcpp.deps.cmake` | 2026.10.1.3; a cross build 2026.10.30.1 | Builds and installs a CMake subproject as an action with Ninja and the toolset mcpp resolved -- for another target, the compilers and words of the engine's contract -- keeps the installation for any build with the same key, and maps the prefix into the build. | [deps](docs/deps.md#deps-cmake) |
| `deps-archive` | `mcpp.deps.archive` | 2026.10.1.3 | Extracts a zip archive the project keeps and places its tree beside the program. | [deps](docs/deps.md#deps-archive) |

Some features add a sub-capability to a member: `dist-apk-kotlin` and
Expand All @@ -103,6 +105,8 @@ The first three need mcpp 2026.10.1.3. `surface`, the name of `plugins-core` bef
mechanism runs; the libraries and SDKs a program links are the project's
declaration (0.15.0 removed `rules-qt-xim*`; see [rules-qt](docs/rules-qt.md)).

`mcpp.plugins.accel` reads complete implementation-owned target requests; `mcpp.plugins.progress` enables optional action telemetry. Worker programs can select `plugins-progress` for `mcpp.plugins.progress.writer`, the atomic snapshot writer. See [plugin-development](docs/plugin-development.md#optional-action-progress).

## Layout

```
Expand Down
Loading
Loading