gl_win.ll creates a hidden-window WGL 4.1 core context and carries gl.ll's float/memory helpers, with ldexp and QueryPerformanceCounter in place of the libSystem calls. glgen now also writes gl_thunks_win.ll: the same 478 thunks, calling through pointers that @lgl_win_load fills from wglGetProcAddress (and opengl32.dll for GL 1.1). ludicc links the pair against opengl32/gdi32/user32 on a Windows target. Verified: gl_api.ludic and gl_thunks.ll regenerate byte-identically, ludic-dev test 135/135, selfhost-test 32/32, and headless gl_triangle on an RTX 3070 Ti matches the macOS frame to within one level per channel. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
26 lines
1.8 KiB
Markdown
26 lines
1.8 KiB
Markdown
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, `Audio.*` and `Http.*` are still macOS platform layers;
|
|
a Windows build that needs one stops with a message saying so.
|
|
- **`Gl.*` on Windows** — `gl_win.ll` makes a WGL 4.1 core context on a hidden window's DC,
|
|
and `gl_thunks_win.ll` (generated by `ludic-dev glgen` beside `gl_thunks.ll`) calls
|
|
every entry point through a table `@lgl_win_load` fills from `wglGetProcAddress`, falling
|
|
back to `opengl32.dll` for the 1.1 functions it will not return. A headless GL program
|
|
renders on the GPU there: `gl_triangle` matches the macOS frame to within one level per
|
|
channel.
|