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>
1.8 KiB
1.8 KiB
bump: minor
type: feat
Windows target — ludicc builds and runs headless programs on Windows, and builds itself there.
--target <triple>— a triple namingwindowsselects the Windows runtime; without the flag the target is the host, read at run time fromOS=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:renameonto an existing file (everyFs.write_textafter the first), a 32-bitftell, and text-modefopenrewriting\nas\r\n. - Known folders —
Os.save_dir/config_dirare%APPDATA%\<app>,cache_diris%LOCALAPPDATA%\<app>,temp_diris%TEMP%, all with forward slashes; a bundle'shomeline points at%APPDATA%\<name>. - The driver — finds
C:\Program Files\LLVM\bin\clang.exewhen clang is not on%PATH%, writes.exeoutputs, speaks cmd.exe for its directory and cleanup commands, and readsargv[0],%PATH%and$LUDIC_HOMEwith either separator. - Not yet — a window,
Audio.*andHttp.*are still macOS platform layers; a Windows build that needs one stops with a message saying so. Gl.*on Windows —gl_win.llmakes a WGL 4.1 core context on a hidden window's DC, andgl_thunks_win.ll(generated byludic-dev glgenbesidegl_thunks.ll) calls every entry point through a table@lgl_win_loadfills fromwglGetProcAddress, falling back toopengl32.dllfor the 1.1 functions it will not return. A headless GL program renders on the GPU there:gl_trianglematches the macOS frame to within one level per channel.