zig/lib/compiler
Ryan Liptak 9c9d3931df 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'
```
2025-03-21 18:07:16 -04:00
..
aro std: Abi.default: only require an os tag 2025-03-09 09:44:11 +01:00
aro_translate_c std.zig.Ast: improve type safety 2025-03-07 22:22:01 +01:00
reduce std.zig.Ast: store lbrace and rbrace token in data of .error_set_decl 2025-03-07 22:22:01 +01:00
resinator Trick the meson build system into thinking zig rc is rc.exe 2025-03-21 18:07:16 -04:00
aro_translate_c.zig Sema: rewrite semantic analysis of function calls 2025-01-09 06:46:47 +00:00
build_runner.zig Revert "Merge pull request #22898 from kristoff-it/deprecated-proposal" 2025-02-28 01:37:10 -08:00
libc.zig zig libc: allow non-native targets 2024-03-13 02:17:28 -04:00
objcopy.zig objcopy: check both global and local when remapping 2024-10-12 10:44:17 -07:00
reduce.zig std.zig.Ast: improve type safety 2025-03-07 22:22:01 +01:00
std-docs.zig Replace deprecated default initializations with decl literals 2024-09-12 16:01:23 +01:00
test_runner.zig Remove uses of deprecated callconv aliases 2025-03-05 03:01:43 +00:00