Skip to content

0.19.0: one tool-source resolver for every member, on-request payloads, and a toolchain description library #41

Description

@speak-agent

Motivation

Fifteen members declare xlings payloads, and each decides on its own where its tool comes from: some take an option, some an environment variable, rules-spirv and rules-slang fall back to PATH silently (contrary to SPEC build-plugins R6.2), dist-wix and dist-appimage refuse PATH, and rules-cuda, rules-hip, rules-ascendc and dist-apk offer no way to name a tool at all. A tool named in build.mcpp does not prevent the declared payload from being downloaded (mcpp-community/mcpp#755).

Design

Recorded in .agents/docs/2026-10-01-ecosystem-build-plugin-framework-design.md (v3). For 0.19.0, on the engine of mcpp#755:

  • mcpp.plugins.tool (in plugins-core): one resolver for every member -- a tool::choice option type (constructible from a string, so o.cmake = "/usr/bin/cmake" keeps working), one priority order (the build program's choice, a member's legacy variable, the engine's override, the payload requested on demand), one refusal text, and a decision recorded with the build.mcpp line that made it.
  • mcpp.plugins.toolchain (feature toolchain): builders of a toolchain description for the root build program's toolchain phase (layout, prefixed, compose, from_env_script, with_launcher, managed).
  • Every member that runs a payload tool migrates to tool::resolve; members whose tools are needed only for some builds declare their payloads provision = "on-request"; the silent PATH fallbacks become warnings.
  • Documentation and fixtures for each source.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions