diff options
| author | kcbanner <kcbanner@gmail.com> | 2023-01-21 16:14:17 -0500 |
|---|---|---|
| committer | kcbanner <kcbanner@gmail.com> | 2023-01-23 13:48:37 -0500 |
| commit | 77084093d8b9d162556e5ea4305ff5268ed0e6e9 (patch) | |
| tree | f5a9020eebe4bc3baef47654b389a0177371f413 /src/link | |
| parent | 4a330ab811f72a0b33026761b10030cb450c32ca (diff) | |
| download | zig-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.zig | 16 |
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; |
