Repository navigation
2026.10.5.3: MSVC's x86 spelling, one answer to 32-bit x86, windres recognition and the manifest resource's command - #777
Merged
Conversation
…ecognition and the manifest resource's command - triple::parse writes MSVC's `x86` as `i686`, as `amd64` and `arm64` are written; `[target.x86-windows-msvc]` and `--target x86-windows-msvc` are the i686 row and reach clang and llvm-windres as `i686-pc-windows-msvc` (SPEC-004 1.13 §4.6). - Triple::is_x86_32 and Triple::msvc_arch answer the 32-bit x86 question for the NASM format, the windres COFF target, the MSVC toolset and redist directories, the ABI tool environment and PE export discovery; i386-i586 no longer select the x64 MSVC directory. The 32-bit host_arch is spelled `i686`. - RcTool::llvm is decided by find_rc_tool (is_llvm_windres: the name, or the file a symlink resolves to), so llvm-mingw's `<triple>-windres` receives a triple. - The build program's UTF-8 manifest resource keeps its command beside the object and is compiled again when it changes. - E2E 889 builds the `x86` spelling; unit tests for the vocabulary, the MSVC arch mapping, windres recognition and the manifest command. - Docs 04/21 in both languages, SPEC-004 1.13, CHANGELOG (including #776). Design: .agents/docs/2026-10-06-windows-x86-arch-vocabulary-and-rc-follow-ups-design.md
…ling find_target_entry moves to mcpp.build.prepare_inputs and is exported; the runner readers (the prepare conflict check, choose_device_action) and the min_api_level readers use it instead of an exact key, so a section written [target.x86-windows-msvc] supplies its runner as it supplies its toolchain. Unit test TargetRowSpelling.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Release 2026.10.5.3. It ships the fix of #775 (#776) and the follow-ups of that PR's review:
x86is the i686 target.triple::parsewrites MSVC'sx86asi686, as it writesamd64andarm64. Before,[target.x86-windows-msvc]reached clang and llvm-windres asx86-pc-windows-msvc, and both refuse it (unknown target triple). SPEC-004 1.13 §4.6 states the equal spellings.Triple::is_x86_32andTriple::msvc_archreplace six local checks, which used four different sets.i386toi586selected the x64 MSVC toolset and redist directories, and PE export discovery did not treat them as 32-bit x86. The 32-bithost_archis spelledi686.find_rc_toolsetsRcTool::llvmfrom the tool's name, or from the name of the file its symlink resolves to. The use site no longer reads the file name.[target.<triple>]row finds it by any spelling. I found this in self-review.find_target_entrymoves tomcpp.build.prepare_inputsand is exported. Therunnerandmin_api_levelreaders used an exact key and now use it.Design:
.agents/docs/2026-10-06-windows-x86-arch-vocabulary-and-rc-follow-ups-design.mdCriteria
TripleVocabulary.MsvcsX86IsWrittenI686AndTheOtherSpellingsKeepTheirMeaning,TripleVocabulary.The32BitX86QuestionHasOneAnswer,BuildResources.LlvmWindresIsRecognisedThroughTheSymlinkThatNamesIt,BuildResources.TheManifestObjectIsRemadeWhenItsCommandChanges,TargetRowSpelling.EverySpellingOfATripleFindsItsRow, and the i386/i586 rows ofMsvcCompilerVersionandMsvcRedist. Local Linux run:mcpp test147 passed, plus-p toolchain-modeland-p platform.x86-windows-msvcspelling (C++ EXE with a resource; PE machine 332; the program runs). On 2026.10.5.2 that case fails at its first compile, because clang refusesx86-pc-windows-msvc.node, which is not installed on this machine; they fail the same way with 2026.10.5.2.Compatibility
[target.x86-…]now matches--target i686-…, and the reverse.