aboutsummaryrefslogtreecommitdiff
path: root/src/link
diff options
context:
space:
mode:
authorkcbanner <kcbanner@gmail.com>2023-01-21 16:14:17 -0500
committerkcbanner <kcbanner@gmail.com>2023-01-23 13:48:37 -0500
commit77084093d8b9d162556e5ea4305ff5268ed0e6e9 (patch)
treef5a9020eebe4bc3baef47654b389a0177371f413 /src/link
parent4a330ab811f72a0b33026761b10030cb450c32ca (diff)
downloadzig-77084093d8b9d162556e5ea4305ff5268ed0e6e9.tar.gz
zig-77084093d8b9d162556e5ea4305ff5268ed0e6e9.zip
cbe: handle building for -msvc using clang and -gnu using msvc
Diffstat (limited to 'src/link')
-rw-r--r--src/link/C.zig16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/link/C.zig b/src/link/C.zig
index ad50a20b99..8b05b8b22d 100644
--- a/src/link/C.zig
+++ b/src/link/C.zig
@@ -231,6 +231,13 @@ pub fn flush(self: *C, comp: *Compilation, prog_node: *std.Progress.Node) !void
return self.flushModule(comp, prog_node);
}
+fn abiDefine(comp: *Compilation) ?[]const u8 {
+ return switch (comp.getTarget().abi) {
+ .msvc => "#define ZIG_TARGET_ABI_MSVC\n",
+ else => null,
+ };
+}
+
pub fn flushModule(self: *C, comp: *Compilation, prog_node: *std.Progress.Node) !void {
const tracy = trace(@src());
defer tracy.end();
@@ -248,9 +255,14 @@ pub fn flushModule(self: *C, comp: *Compilation, prog_node: *std.Progress.Node)
var f: Flush = .{};
defer f.deinit(gpa);
- // Covers zig.h, typedef, and asm.
- try f.all_buffers.ensureUnusedCapacity(gpa, 2);
+ const abi_define = abiDefine(comp);
+
+ // Covers defines, zig.h, typedef, and asm.
+ var buf_count: usize = 2;
+ if (abi_define != null) buf_count += 1;
+ try f.all_buffers.ensureUnusedCapacity(gpa, buf_count);
+ if (abi_define) |buf| f.appendBufAssumeCapacity(buf);
f.appendBufAssumeCapacity(zig_h);
const typedef_index = f.all_buffers.items.len;