diff options
| author | Ryan Liptak <squeek502@hotmail.com> | 2025-03-19 17:15:27 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2025-03-21 18:07:16 -0400 |
| commit | 9c9d3931df4c1decffec610e5e47b3049b147c8d (patch) | |
| tree | 4680ad0845405f8369610d37a07748190c4cee1f /lib/std/Build | |
| parent | aa8aa6625323702a7320ae4b98ede36887060782 (diff) | |
| download | zig-9c9d3931df4c1decffec610e5e47b3049b147c8d.tar.gz zig-9c9d3931df4c1decffec610e5e47b3049b147c8d.zip | |
Trick the meson build system into thinking `zig rc` is `rc.exe`
When determining the type of RC compiler, meson passes `/?` or `--version` and then reads from `stdout` looking for particular string(s) anywhere in the output.
So, by adding the string "Microsoft Resource Compiler" to the `/?` output, meson will recognize `zig rc` as rc.exe and give it the correct options, which works fine since `zig rc` is drop-in CLI compatible with rc.exe.
This allows using `zig rc` with meson for (cross-)compiling, by either:
- Setting WINDRES="zig rc" or putting windres = ['zig', 'rc'] in the cross-file
+ This will work like rc.exe, so it will output .res files. This will only link successfully if you are using a linker that can do .res -> .obj conversion (so something like zig cc, MSVC, lld)
- Setting WINDRES="zig rc /:output-format coff" or putting windres = ['zig', 'rc', '/:output-format', 'coff'] in the cross-file
+ This will make meson pass flags as if it were rc.exe, but it will cause the resulting .res file to actually be a COFF object file, meaning it will work with any linker that handles COFF object files
Example cross file that uses `zig cc` (which can link `.res` files, so `/:output-format coff` is not necessary) and `zig rc`:
```
[binaries]
c = ['zig', 'cc', '--target=x86_64-windows-gnu']
windres = ['zig', 'rc']
[target_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'
```
Diffstat (limited to 'lib/std/Build')
0 files changed, 0 insertions, 0 deletions
