commit 47848ba3d619f7bf64adff10933176f6296d1552 (tree)
parent 0a9c4008fd66dd85accb6e5e862849a26500c6ec
Author: Alex Rønne Petersen <alex@alexrp.com>
Date: Wed, 22 Apr 2026 15:30:58 +0200
zig cc: define __CRT__NO_INLINE for MinGW-w64 targets
See added comment for why.
Diffstat:
1 file changed, 7 insertions(+), 0 deletions(-)
diff --git a/src/Compilation.zig b/src/Compilation.zig
@@ -6362,6 +6362,13 @@ fn addCommonCCArgs(
try argv.append(
try std.fmt.allocPrint(arena, "-D_WIN32_WINNT=0x{x:0>4}", .{minver}),
);
+
+ // MinGW-w64's inline functions in headers (e.g. `fabs`), which are emitted with `linkonce_odr`
+ // linkage, sometimes cause duplicate symbol errors due to us providing the same symbols with
+ // `weak` linkage in compiler-rt or libzigc. So just disable them. Besides, they undermine the
+ // goal of moving more libc code to Zig, and they're also just kind of unnecessary since LLVM is
+ // perfectly capable of recognizing and optimizing libcalls.
+ try argv.append("-D__CRT__NO_INLINE");
} else if (target.isFreeBSDLibC()) {
// https://docs.freebsd.org/en/books/porters-handbook/versions
const min_ver = target.os.version_range.semver.min;