feat(windows): a Windows target for ludicc, and the compiler builds itself there
--target <triple> (default: the host, from OS=Windows_NT) selects the Windows runtime. emit_win.ludic defines the POSIX names the backend already calls over the UCRT and Win32 in IR, so rename replaces an existing file, ftell is 64-bit, and fopen is binary. Known folders follow %APPDATA% / %LOCALAPPDATA% / %TEMP%, and the driver speaks cmd.exe, writes .exe outputs and finds LLVM's clang. Verified: macOS three-stage fixpoint, ludic-dev test 135/135, and on Windows the Mac-emitted Windows IR and the Windows-built compiler's IR are identical through two generations. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
572e09b2b1
commit
5801005fca
15 changed files with 23292 additions and 21806 deletions
20
changes/windows-target.md
Normal file
20
changes/windows-target.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
bump: minor
|
||||
type: feat
|
||||
**Windows target** — `ludicc` builds and runs headless programs on Windows, and builds itself there.
|
||||
|
||||
- **`--target <triple>`** — a triple naming `windows` selects the Windows runtime; without
|
||||
the flag the target is the host, read at run time from `OS=Windows_NT`. The IR still
|
||||
carries no triple, so clang assembles it for the machine it runs on.
|
||||
- **The libc surface, in IR** — on Windows the header emits `emit_win.ludic`, which defines
|
||||
the POSIX names the backend calls (`fopen`, `ftell`, `rename`, `opendir`, `mmap`,
|
||||
`fmemopen`, `uname`, …) over the UCRT and Win32. Three of them fixed silent breakage
|
||||
rather than link errors: `rename` onto an existing file (every `Fs.write_text` after the
|
||||
first), a 32-bit `ftell`, and text-mode `fopen` rewriting `\n` as `\r\n`.
|
||||
- **Known folders** — `Os.save_dir` / `config_dir` are `%APPDATA%\<app>`, `cache_dir` is
|
||||
`%LOCALAPPDATA%\<app>`, `temp_dir` is `%TEMP%`, all with forward slashes; a bundle's
|
||||
`home` line points at `%APPDATA%\<name>`.
|
||||
- **The driver** — finds `C:\Program Files\LLVM\bin\clang.exe` when clang is not on
|
||||
`%PATH%`, writes `.exe` outputs, speaks cmd.exe for its directory and cleanup commands,
|
||||
and reads `argv[0]`, `%PATH%` and `$LUDIC_HOME` with either separator.
|
||||
- **Not yet** — a window, `Gl.*`, `Audio.*` and `Http.*` are still macOS platform layers;
|
||||
a Windows build that needs one stops with a message saying so.
|
||||
Loading…
Add table
Add a link
Reference in a new issue