Skip to content

[tmp] MSVC system-toolchain detection (msvc@system) — Windows CI iteration#207

Closed
Sunrisepeak wants to merge 6 commits into
mainfrom
tmp/msvc-windows-ci
Closed

[tmp] MSVC system-toolchain detection (msvc@system) — Windows CI iteration#207
Sunrisepeak wants to merge 6 commits into
mainfrom
tmp/msvc-windows-ci

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

Temporary iteration PR for #206-to-be: MSVC system-toolchain detection & selection (0.0.88).

Do not merge. All workflows except ci-windows.yml are stripped on this branch to keep CI turnaround fast while iterating on the Windows-only behavior. The real PR will carry the same implementation commit with all workflows restored.

Design: .agents/docs/2026-07-13-msvc-system-toolchain-detection-design.md

Scope (detection-first):

  • mcpp toolchain default msvc → locate (vswhere/env/paths) + identify (VS product, VC tools, cl banner version) + persist stable msvc@system; absent → install guidance, non-zero exit (mcpp never installs MSVC)
  • toolchain list System section, install/remove msvc semantics, doctor section
  • manifest [toolchain] windows = "msvc@system"
  • native cl.exe builds gated with one owned error until the .ifc pipeline lands

…stem) (0.0.88)

MSVC joins as the first *system* toolchain: mcpp locates and identifies an
installed Visual Studio / Build Tools (vswhere → env → well-known paths;
cl.exe banner → compiler version/arch, localization-tolerant) but never
installs or removes MSVC itself.

- toolchain default msvc: detect + report (VS product, VC tools, cl version,
  std.ixx availability), persist stable 'msvc@system'; absent → install
  guidance (VS Installer C++ workload / winget BuildTools), exit non-zero.
  msvc@<prefix> acts as pin-verify against the detected install.
- toolchain list: Windows 'System:' section; install msvc reports what's
  there or guides; remove msvc refuses (system component).
- self doctor: Windows 'msvc (system)' check section.
- manifest [toolchain] windows = "msvc@system" now actually works; msvc
  specs on non-Windows hosts error clearly.
- build: native cl.exe (.ifc) pipeline is gated off with one owned message
  pointing at llvm@20.1.7 (MSVC-ABI Clang) until it lands.
- detect(): cl.exe classification path (filename short-circuit, banner
  enrich); bmi_traits gains the MSVC .ifc branch.
- tests: unit (banner/guidance/spec/traits) + e2e 95 (Windows, requires msvc
  cap) / 96 (non-Windows rejection); run_all.sh msvc capability.
- design: .agents/docs/2026-07-13-msvc-system-toolchain-detection-design.md
Temporary-branch-only commit — dropped before the real PR. Keeps CI turnaround
on tmp/msvc-windows-ci to the single Windows job that exercises msvc@system.
toolchain list stars the *effective* default; the repo root's mcpp.toml
[toolchain] windows=llvm@20.1.7 would shadow the freshly-set global
msvc@system when run_all.sh executes from the workspace.
…ontent

(release.yml only runs on tag push / dispatch, so it costs nothing on PR CI)
The rebuild cleans target/, invalidating the job's $MCPP_SELF fingerprint
path — the MSVC step then failed with exit 127 (binary gone).
@Sunrisepeak

Copy link
Copy Markdown
Member Author

Windows CI green (run 29213815360): E2E incl. 95_msvc_system_toolchain + the dedicated MSVC detection step passed — detected msvc 19.51.36248 (VS 18 Enterprise). Superseded by the real PR #208 with all workflows restored.

@Sunrisepeak Sunrisepeak deleted the tmp/msvc-windows-ci branch July 13, 2026 00:03
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