Fix WiX ICE80 mismatch: heat.exe never marked components as 64-bit

light.exe's ICE80 validation rejected essentially every harvested file
("This 32BitComponent ... uses 64BitDirectory") on the first build that
got far enough to reach it -- heat.exe's harvest command had no
-platform x64, so every component defaulted to 32-bit, while
product.wxs's own INSTALLFOLDER is correctly under
ProgramFiles64Folder (a 64-bit mingw64 toolchain is what's actually
being packaged). Real, on-disk mismatch, not a transient VM issue.

Also confirmed the earlier light.exe "timeout" wasn't a real bug either
-- a longer-budget retry finished linking fine in a few more minutes,
it was just slow, not hung.

Not yet re-verified against a live build (found right as this
session's VM time was already heavily spent) -- logged in TODO.md as
the next thing to confirm.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Dominik Moritz Roth 2026-08-13 22:24:14 +02:00
parent 22fbb33923
commit d3246328e8
2 changed files with 29 additions and 12 deletions

34
TODO.md
View File

@ -300,17 +300,29 @@ each confirmed live against the real VM, not just read off a diff:
not `build_windows.sh`'s real default) fails `candle.exe` with not `build_windows.sh`'s real default) fails `candle.exe` with
CNDL0108/CNDL0010. Not a real bug, just don't pass a version with CNDL0108/CNDL0010. Not a real bug, just don't pass a version with
a suffix. a suffix.
- [ ] `light.exe` (final MSI linking) did not finish within 15 minutes - [x] `light.exe` (final MSI linking) did not finish within 15 minutes
on this VM (4 CPU / 8GB RAM) before the RAM-conscious auto- on a first retry (4 CPU / 8GB RAM VM) before the RAM-conscious
shutdown killed it -- process was genuinely active (343MB auto-shutdown killed it -- turned out to be genuinely just slow
working set, not hung on a dialog), just slow, likely from the (process was active, 343MB working set, not hung on a dialog),
~1GB+ bulk-copied mingw64 runtime (see README's own "dist tree is not a real bug: retried with a 40-minute budget and it finished
fat, not lean" note) combined with this VM's disk/CPU being `light.exe` itself in a few more minutes.
shared with the host. Needs either a longer timeout on a retry, - [ ] ...and then failed for a REAL reason right at the very end:
or the dist-tree-trimming work the README already flags as a `light.exe`'s ICE80 validation rejected essentially every
known follow-up (tracing the real DLL/typelib closure instead of harvested file -- "This 32BitComponent ... uses 64BitDirectory".
bulk-copying all of mingw64) to make `light.exe` have less to `heat.exe`'s harvest command had no `-platform x64`, so every
compress in the first place. component it generated defaulted to 32-bit, while
`product.wxs`'s own `INSTALLFOLDER` is correctly under
`ProgramFiles64Folder` (a 64-bit mingw64 toolchain is what's
actually being packaged) -- a real, on-disk mismatch, not a
transient VM issue. Fixed: added `-platform x64` to `build.bat`'s
`heat.exe` invocation. NOT YET re-verified against a live build
(found right as this session's VM time/cycles were already
heavily spent -- next run should get all the way to a real
`.msi`, but that's still a claim, not yet a confirmed result).
Once confirmed, revisit the still-slow `light.exe` step itself
(the ~1GB+ bulk-copied mingw64 dist tree, see README's own "not
lean" note) as a separate, real perf follow-up -- 40 minutes for
one MSI link is a lot, even once it stops failing outright.
## OCR: new fire-support-request grammar gaps (from real user-pasted messages) ## OCR: new fire-support-request grammar gaps (from real user-pasted messages)

View File

@ -49,7 +49,12 @@ REM here (see this file's top-of-file note).
robocopy C:\msys64\mingw64 C:\build\dist\mingw64 /e /xd include share\doc share\man share\gtk-doc /nfl /ndl /njh /njs >> %LOG% 2>&1 robocopy C:\msys64\mingw64 C:\build\dist\mingw64 /e /xd include share\doc share\man share\gtk-doc /nfl /ndl /njh /njs >> %LOG% 2>&1
echo [build.bat] harvesting WiX components ... >> %LOG% echo [build.bat] harvesting WiX components ... >> %LOG%
C:\wix\heat.exe dir C:\build\dist -cg AppFiles -gg -scom -sreg -sfrag -srd -sw5150 -dr INSTALLFOLDER -var var.DistDir -out C:\build\files.wxs >> %LOG% 2>&1 REM -platform x64: confirmed live (real light.exe run, not guessed) --
REM without it heat.exe defaults every harvested component to 32-bit,
REM which light.exe's ICE80 validation then rejects wholesale (~every
REM single harvested file) once it's placed under INSTALLFOLDER, a
REM 64-bit directory (this is a 64-bit mingw64 toolchain being packaged).
C:\wix\heat.exe dir C:\build\dist -platform x64 -cg AppFiles -gg -scom -sreg -sfrag -srd -sw5150 -dr INSTALLFOLDER -var var.DistDir -out C:\build\files.wxs >> %LOG% 2>&1
if errorlevel 1 ( if errorlevel 1 (
echo [build.bat] FAILED: heat.exe harvest failed >> %LOG% echo [build.bat] FAILED: heat.exe harvest failed >> %LOG%
copy %LOG% Z:\build.log.failed >nul copy %LOG% Z:\build.log.failed >nul