authorgravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2023-01-21 16:14:17-05:00
committergravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2023-01-23 13:48:37-05:00
log77084093d8b9d162556e5ea4305ff5268ed0e6e9
treef5a9020eebe4bc3baef47654b389a0177371f413
parent4a330ab811f72a0b33026761b10030cb450c32ca

cbe: handle building for -msvc using clang and -gnu using msvc


2 files changed, 38 insertions(+), 7 deletions(-)

lib/zig.h+24-5
...@@ -1871,11 +1871,13 @@ typedef zig_i32 zig_f32;...@@ -1871,11 +1871,13 @@ typedef zig_i32 zig_f32;
1871#define zig_bitSizeOf_f64 641871#define zig_bitSizeOf_f64 64
1872#define zig_libc_name_f64(name) name1872#define zig_libc_name_f64(name) name
1873#if _MSC_VER1873#if _MSC_VER
1874#ifdef ZIG_TARGET_ABI_MSVC
1874#define zig_bitSizeOf_c_longdouble 641875#define zig_bitSizeOf_c_longdouble 64
1876#endif
1875#define zig_as_special_constant_f64(sign, name, arg, repr) sign zig_as_f64(zig_msvc_flt_##name, )1877#define zig_as_special_constant_f64(sign, name, arg, repr) sign zig_as_f64(zig_msvc_flt_##name, )
1876#else1878#else /* _MSC_VER */
1877#define zig_as_special_constant_f64(sign, name, arg, repr) zig_as_special_f64(sign, name, arg, repr)1879#define zig_as_special_constant_f64(sign, name, arg, repr) zig_as_special_f64(sign, name, arg, repr)
1878#endif1880#endif /* _MSC_VER */
1879#if FLT_MANT_DIG == 531881#if FLT_MANT_DIG == 53
1880typedef float zig_f64;1882typedef float zig_f64;
1881#define zig_as_f64(fp, repr) fp##f1883#define zig_as_f64(fp, repr) fp##f
...@@ -1977,16 +1979,32 @@ typedef zig_i128 zig_f128;...@@ -1977,16 +1979,32 @@ typedef zig_i128 zig_f128;
1977#endif1979#endif
19781980
1979#define zig_has_c_longdouble 11981#define zig_has_c_longdouble 1
1982
1983#ifdef ZIG_TARGET_ABI_MSVC
1984#define zig_libc_name_c_longdouble(name) name
1985#else
1980#define zig_libc_name_c_longdouble(name) name##l1986#define zig_libc_name_c_longdouble(name) name##l
1987#endif
1988
1981#define zig_as_special_constant_c_longdouble(sign, name, arg, repr) zig_as_special_c_longdouble(sign, name, arg, repr)1989#define zig_as_special_constant_c_longdouble(sign, name, arg, repr) zig_as_special_c_longdouble(sign, name, arg, repr)
1982#ifdef zig_bitSizeOf_c_longdouble1990#ifdef zig_bitSizeOf_c_longdouble
1991
1992#ifdef ZIG_TARGET_ABI_MSVC
1993typedef double zig_c_longdouble;
1994#undef zig_bitSizeOf_c_longdouble
1995#define zig_bitSizeOf_c_longdouble 64
1996#define zig_as_c_longdouble(fp, repr) fp
1997#else
1983typedef long double zig_c_longdouble;1998typedef long double zig_c_longdouble;
1984#define zig_as_c_longdouble(fp, repr) fp##l1999#define zig_as_c_longdouble(fp, repr) fp##l
1985#else2000#endif
2001
2002#else /* zig_bitSizeOf_c_longdouble */
2003
1986#undef zig_has_c_longdouble2004#undef zig_has_c_longdouble
2005#define zig_has_c_longdouble 0
1987#define zig_bitSizeOf_c_longdouble 802006#define zig_bitSizeOf_c_longdouble 80
1988#define zig_compiler_rt_abbrev_c_longdouble zig_compiler_rt_abbrev_f802007#define zig_compiler_rt_abbrev_c_longdouble zig_compiler_rt_abbrev_f80
1989#define zig_has_c_longdouble 0
1990#define zig_repr_c_longdouble i1282008#define zig_repr_c_longdouble i128
1991typedef zig_i128 zig_c_longdouble;2009typedef zig_i128 zig_c_longdouble;
1992#define zig_as_c_longdouble(fp, repr) repr2010#define zig_as_c_longdouble(fp, repr) repr
...@@ -1994,7 +2012,8 @@ typedef zig_i128 zig_c_longdouble;...@@ -1994,7 +2012,8 @@ typedef zig_i128 zig_c_longdouble;
1994#define zig_as_special_c_longdouble(sign, name, arg, repr) repr2012#define zig_as_special_c_longdouble(sign, name, arg, repr) repr
1995#undef zig_as_special_constant_c_longdouble2013#undef zig_as_special_constant_c_longdouble
1996#define zig_as_special_constant_c_longdouble(sign, name, arg, repr) repr2014#define zig_as_special_constant_c_longdouble(sign, name, arg, repr) repr
1997#endif2015
2016#endif /* zig_bitSizeOf_c_longdouble */
19982017
1999#if !zig_has_float_builtins2018#if !zig_has_float_builtins
2000#define zig_float_from_repr(Type, ReprType) \2019#define zig_float_from_repr(Type, ReprType) \
src/link/C.zig+14-2
...@@ -231,6 +231,13 @@ pub fn flush(self: *C, comp: *Compilation, prog_node: *std.Progress.Node) !void...@@ -231,6 +231,13 @@ pub fn flush(self: *C, comp: *Compilation, prog_node: *std.Progress.Node) !void
231 return self.flushModule(comp, prog_node);231 return self.flushModule(comp, prog_node);
232}232}
233233
234fn abiDefine(comp: *Compilation) ?[]const u8 {
235 return switch (comp.getTarget().abi) {
236 .msvc => "#define ZIG_TARGET_ABI_MSVC\n",
237 else => null,
238 };
239}
240
234pub fn flushModule(self: *C, comp: *Compilation, prog_node: *std.Progress.Node) !void {241pub fn flushModule(self: *C, comp: *Compilation, prog_node: *std.Progress.Node) !void {
235 const tracy = trace(@src());242 const tracy = trace(@src());
236 defer tracy.end();243 defer tracy.end();
...@@ -248,9 +255,14 @@ pub fn flushModule(self: *C, comp: *Compilation, prog_node: *std.Progress.Node)...@@ -248,9 +255,14 @@ pub fn flushModule(self: *C, comp: *Compilation, prog_node: *std.Progress.Node)
248 var f: Flush = .{};255 var f: Flush = .{};
249 defer f.deinit(gpa);256 defer f.deinit(gpa);
250257
251 // Covers zig.h, typedef, and asm.258 const abi_define = abiDefine(comp);
252 try f.all_buffers.ensureUnusedCapacity(gpa, 2);259
260 // Covers defines, zig.h, typedef, and asm.
261 var buf_count: usize = 2;
262 if (abi_define != null) buf_count += 1;
263 try f.all_buffers.ensureUnusedCapacity(gpa, buf_count);
253264
265 if (abi_define) |buf| f.appendBufAssumeCapacity(buf);
254 f.appendBufAssumeCapacity(zig_h);266 f.appendBufAssumeCapacity(zig_h);
255267
256 const typedef_index = f.all_buffers.items.len;268 const typedef_index = f.all_buffers.items.len;