aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRyan Liptak <squeek502@hotmail.com>2023-09-17 13:09:16 -0700
committerRyan Liptak <squeek502@hotmail.com>2023-09-17 13:09:16 -0700
commit471f279cd621cef7c826fe27f1f8d0c585cc76e2 (patch)
treec82e6464d5f39a5b08f48472eff9f776ff8ef413 /src
parent0168ed7bf1c7fc5010fa82eaf33ed1b3af817709 (diff)
downloadzig-471f279cd621cef7c826fe27f1f8d0c585cc76e2.tar.gz
zig-471f279cd621cef7c826fe27f1f8d0c585cc76e2.zip
Fix rc preprocessing when using the MinGW includes and targeting the GNU abi
Also update the standalone test so that this failure would have been detected on any host system.
Diffstat (limited to 'src')
-rw-r--r--src/Compilation.zig13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig
index 6a078e8581..a5012e71c4 100644
--- a/src/Compilation.zig
+++ b/src/Compilation.zig
@@ -4513,6 +4513,19 @@ fn updateWin32Resource(comp: *Compilation, win32_resource: *Win32Resource, win32
"-fms-compatibility", // Allow things like "header.h" to be resolved relative to the 'root' .rc file, among other things
"-DRC_INVOKED", // https://learn.microsoft.com/en-us/windows/win32/menurc/predefined-macros
});
+ // Using -fms-compatibility and targeting the gnu abi interact in a strange way:
+ // - Targeting the GNU abi stops _MSC_VER from being defined
+ // - Passing -fms-compatibility stops __GNUC__ from being defined
+ // Neither being defined is a problem for things like things like MinGW's
+ // vadefs.h, which will fail during preprocessing if neither are defined.
+ // So, when targeting the GNU abi, we need to force __GNUC__ to be defined.
+ //
+ // TODO: This is a workaround that should be removed if possible.
+ if (comp.getTarget().isGnu()) {
+ // This is the same default gnuc version that Clang uses:
+ // https://github.com/llvm/llvm-project/blob/4b5366c9512aa273a5272af1d833961e1ed156e7/clang/lib/Driver/ToolChains/Clang.cpp#L6738
+ try argv.append("-fgnuc-version=4.2.1");
+ }
for (options.extra_include_paths.items) |extra_include_path| {
try argv.append("--include-directory");
try argv.append(extra_include_path);