| ... | ... | @@ -27,6 +27,10 @@ pub fn main() !void { |
| 27 | 27 | var debug_dwarf = false; |
| 28 | 28 | var debug_link = false; |
| 29 | 29 | var preserve_tmp = false; |
| 30 | var enable_qemu: bool = false; |
| 31 | var enable_wine: bool = false; |
| 32 | var enable_wasmtime: bool = false; |
| 33 | var enable_darling: bool = false; |
| 30 | 34 | |
| 31 | 35 | var arg_it = try std.process.argsWithAllocator(arena); |
| 32 | 36 | _ = arg_it.skip(); |
| ... | ... | @@ -42,6 +46,14 @@ pub fn main() !void { |
| 42 | 46 | debug_link = true; |
| 43 | 47 | } else if (std.mem.eql(u8, arg, "--preserve-tmp")) { |
| 44 | 48 | preserve_tmp = true; |
| 49 | } else if (std.mem.eql(u8, arg, "-fqemu")) { |
| 50 | enable_qemu = true; |
| 51 | } else if (std.mem.eql(u8, arg, "-fwine")) { |
| 52 | enable_wine = true; |
| 53 | } else if (std.mem.eql(u8, arg, "-fwasmtime")) { |
| 54 | enable_wasmtime = true; |
| 55 | } else if (std.mem.eql(u8, arg, "-fdarling")) { |
| 56 | enable_darling = true; |
| 45 | 57 | } else if (std.mem.eql(u8, arg, "--zig-cc-binary")) { |
| 46 | 58 | opt_cc_zig = arg_it.next() orelse fatal("expect arg after '--zig-cc-binary'\n{s}", .{usage}); |
| 47 | 59 | } else { |
| ... | ... | @@ -196,6 +208,10 @@ pub fn main() !void { |
| 196 | 208 | .allow_stderr = debug_log_verbose, |
| 197 | 209 | .preserve_tmp_on_fatal = preserve_tmp, |
| 198 | 210 | .cc_child_args = &cc_child_args, |
| 211 | .enable_qemu = enable_qemu, |
| 212 | .enable_wine = enable_wine, |
| 213 | .enable_wasmtime = enable_wasmtime, |
| 214 | .enable_darling = enable_darling, |
| 199 | 215 | }; |
| 200 | 216 | |
| 201 | 217 | try child.spawn(io); |
| ... | ... | @@ -243,6 +259,11 @@ const Eval = struct { |
| 243 | 259 | /// The arguments `out.c in.c` must be appended before spawning the subprocess. |
| 244 | 260 | cc_child_args: *std.ArrayList([]const u8), |
| 245 | 261 | |
| 262 | enable_qemu: bool, |
| 263 | enable_wine: bool, |
| 264 | enable_wasmtime: bool, |
| 265 | enable_darling: bool, |
| 266 | |
| 246 | 267 | const StreamEnum = enum { stdout, stderr }; |
| 247 | 268 | const Poller = Io.Poller(StreamEnum); |
| 248 | 269 | |
| ... | ... | @@ -439,7 +460,7 @@ const Eval = struct { |
| 439 | 460 | const io = eval.io; |
| 440 | 461 | |
| 441 | 462 | var argv_buf: [2][]const u8 = undefined; |
| 442 | | const argv: []const []const u8, const is_foreign: bool = switch (std.zig.system.getExternalExecutor( |
| 463 | const argv: []const []const u8, const is_foreign: bool = sw: switch (std.zig.system.getExternalExecutor( |
| 443 | 464 | io, |
| 444 | 465 | &eval.host, |
| 445 | 466 | &eval.target.resolved, |
| ... | ... | @@ -459,10 +480,41 @@ const Eval = struct { |
| 459 | 480 | argv_buf[0] = binary_path; |
| 460 | 481 | break :argv .{ argv_buf[0..1], false }; |
| 461 | 482 | }, |
| 462 | | .qemu, .wine, .wasmtime, .darling => |executor_cmd| argv: { |
| 463 | | argv_buf[0] = executor_cmd; |
| 464 | | argv_buf[1] = binary_path; |
| 465 | | break :argv .{ argv_buf[0..2], true }; |
| 483 | .qemu => |executor_cmd| argv: { |
| 484 | if (eval.enable_qemu) { |
| 485 | argv_buf[0] = executor_cmd; |
| 486 | argv_buf[1] = binary_path; |
| 487 | break :argv .{ argv_buf[0..2], true }; |
| 488 | } else { |
| 489 | continue :sw .bad_os_or_cpu; |
| 490 | } |
| 491 | }, |
| 492 | .wine => |executor_cmd| argv: { |
| 493 | if (eval.enable_wine) { |
| 494 | argv_buf[0] = executor_cmd; |
| 495 | argv_buf[1] = binary_path; |
| 496 | break :argv .{ argv_buf[0..2], true }; |
| 497 | } else { |
| 498 | continue :sw .bad_os_or_cpu; |
| 499 | } |
| 500 | }, |
| 501 | .wasmtime => |executor_cmd| argv: { |
| 502 | if (eval.enable_wasmtime) { |
| 503 | argv_buf[0] = executor_cmd; |
| 504 | argv_buf[1] = binary_path; |
| 505 | break :argv .{ argv_buf[0..2], true }; |
| 506 | } else { |
| 507 | continue :sw .bad_os_or_cpu; |
| 508 | } |
| 509 | }, |
| 510 | .darling => |executor_cmd| argv: { |
| 511 | if (eval.enable_darling) { |
| 512 | argv_buf[0] = executor_cmd; |
| 513 | argv_buf[1] = binary_path; |
| 514 | break :argv .{ argv_buf[0..2], true }; |
| 515 | } else { |
| 516 | continue :sw .bad_os_or_cpu; |
| 517 | } |
| 466 | 518 | }, |
| 467 | 519 | }; |
| 468 | 520 | |