Skip to content

0.21.0: CMake cross contracts and owned accelerator targets - #52

Open
Sunrisepeak wants to merge 10 commits into
mainfrom
wip/deps-cmake-contract
Open

Sunrisepeak wants to merge 10 commits into
mainfrom
wip/deps-cmake-contract

Conversation

@Sunrisepeak

@Sunrisepeak Sunrisepeak commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

CMake cross builds now consume the engine's compiler, flags, archiver and target contract when the action runs. Accelerator rules also read complete, brace-aware requests and match exact implementation names, so a comma inside a target set no longer truncates the selected architectures.

SYCL owns its code targets: sycl+{nvptx64-sm_89,nvptx64-sm_90} emits both NVIDIA images, and sycl+{spir64,nvptx64-sm_89} emits SPIR-V beside NVIDIA. The CUDA toolkit is requested only for SYCL NVIDIA targets. Explicit SYCL targets remain independent of a selected CUDA member; the older target-inheritance spelling remains accepted with a migration warning. The pure SYCL fixture retains an excluded CUDA source group. Unknown SYCL targets and unavailable AMD routes are refused. CUDA, HIP and Vulkan readers share the same syntax reader.

Validation with released mcpp 2026.11.3.1: 50 plugin-logic cases pass; actual CMake musl cross build/run passes; actual SYCL consumer builds in legacy, owned NVIDIA, multi-architecture and mixed forms. Device-link intermediates verify two NVIDIA fatbins and the mixed SPIR-V/NVIDIA images. GPU execution is unqualified on the local driver (CUDA error 803). CI now inspects actual device images and separately runs the CPU fallback. Bootstrap/editor CI pins use the published 2026.11.3.1 release; the package floor stays 2026.10.30.1.

Tracks mcpp-community/mcpp#885 and #887. This reuses the existing PR and preserves its CMake contract changes.

Optional progress: a standard-library helper probes the engine API, while the plugins-progress feature provides an atomic, rate-limited worker writer using os.fs. CMake optionally reports configure/build-install stages and continues if telemetry is unavailable or unwritable. Snapshot I/O and build results remain independent; older APIs degrade without breaking the build. Ordinary CMake consumers do not acquire the optional writer dependency. The optional worker feature is independently consumable by an ordinary executable without importing the build-program-only API; CI builds and runs this fixture on the published engine.

Incremental correctness: object-surface assembly now records payload content, so restat does not hide changes behind an unchanged .incbin path. Equal-size and unchanged-content controls pass. A real shader rebuild updates the assembler object and final program. A new dual-rule consumer verifies independent CUDA sm_90 and SYCL sm_89 image production plus both host objects running together; this does not qualify GPU execution. CI covers that consumer.

Final integration head 9e44847c45c8cddb30b32d2e37984821700c1ec7 selects publicly installed mcpp 2026.11.5.1 for the main, bootstrap and editor lanes; its full CI is 41975422372. The preceding implementation head 26ff5430eda7a957bffe39ca6869801ad5d1b672 passes all six jobs (41959654833). Core publication, all 21 GitCode assets, the public index and ordinary GLOBAL/CN requested-mode installs have been verified before advancing these pins. Multi-architecture SDK static archives remain a separate unqualified combination: isolated archive extraction mixes architecture members; no architecture is silently discarded.

The worker reads its channel through the portable UTF-8 environment API. An isolated Wine control at ACP 1252 reproduces loss through the CRT narrow environment (36 UTF-8 bytes become 31 narrow bytes). Native Windows CI also records ACP 1252 and passes the actual standalone writer's Unicode path, disabled channel and optional write-failure controls; Linux and macOS run the same fixture. Both released 2026.11.3.1 and the new-core local candidate pass that fixture, all 50 plugin-logic cases pass, and the updated documentation has a rendered second reading. This fixes a plugin boundary without adding a core/vendor special case or raising the existing package floor.

Sunrisepeak and others added 5 commits October 30, 2026 01:40
…e's contract

When the build's target is not the machine, the subproject is configured with
the compilers, words and archiver of the engine's contract for the
configuration (${mcpp.contract}, mcpp 2026.10.30.1+), read when the action
runs, under Ninja; CMAKE_SYSTEM_NAME is the target's system and the
try-compile builds a static library. The package needs mcpp 2026.10.30.1.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…e whole list of an older engine

mcpp 2026.10.27.1 lists zip and single-file among the built-in formats.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…g, as CMake splits it

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
@Sunrisepeak Sunrisepeak changed the title 0.21.0: deps-cmake compiles a cross build's subproject from the engine's contract 0.21.0: CMake cross contracts and owned accelerator targets Nov 4, 2026
Read the channel through the UTF-8 environment API instead of the CRT narrow environment. Exercise disabled channels, Unicode paths and optional write failure on Linux, macOS and Windows, recording the Windows ANSI code page.
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