diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.zig | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/main.zig b/src/main.zig index e795666941..a13e7b1fab 100644 --- a/src/main.zig +++ b/src/main.zig @@ -969,6 +969,9 @@ fn buildOutputType( .libc_paths_file = try EnvVar.ZIG_LIBC.get(arena), .link_objects = .{}, .native_system_include_paths = &.{}, + .host_triple = null, + .host_cpu = null, + .host_dynamic_linker = null, }; // before arg parsing, check for the NO_COLOR environment variable @@ -1262,6 +1265,12 @@ fn buildOutputType( mod_opts.optimize_mode = parseOptimizeMode(arg["-O".len..]); } else if (mem.eql(u8, arg, "--dynamic-linker")) { create_module.dynamic_linker = args_iter.nextOrFatal(); + } else if (mem.eql(u8, arg, "--host-target")) { + create_module.host_triple = args_iter.nextOrFatal(); + } else if (mem.eql(u8, arg, "--host-cpu")) { + create_module.host_cpu = args_iter.nextOrFatal(); + } else if (mem.eql(u8, arg, "--host-dynamic-linker")) { + create_module.host_dynamic_linker = args_iter.nextOrFatal(); } else if (mem.eql(u8, arg, "--sysroot")) { const next_arg = args_iter.nextOrFatal(); create_module.sysroot = next_arg; @@ -3455,6 +3464,9 @@ const CreateModule = struct { each_lib_rpath: ?bool, libc_paths_file: ?[]const u8, link_objects: std.ArrayListUnmanaged(Compilation.LinkObject), + host_triple: ?[]const u8, + host_cpu: ?[]const u8, + host_dynamic_linker: ?[]const u8, }; fn createModule( @@ -3539,7 +3551,15 @@ fn createModule( } const target_query = parseTargetQueryOrReportFatalError(arena, target_parse_options); - const target = resolveTargetQueryOrFatal(target_query); + const adjusted_target_query = a: { + if (!target_query.isNative()) break :a target_query; + if (create_module.host_triple) |triple| target_parse_options.arch_os_abi = triple; + if (create_module.host_cpu) |cpu| target_parse_options.cpu_features = cpu; + if (create_module.host_dynamic_linker) |dl| target_parse_options.dynamic_linker = dl; + break :a parseTargetQueryOrReportFatalError(arena, target_parse_options); + }; + + const target = resolveTargetQueryOrFatal(adjusted_target_query); break :t .{ .result = target, .is_native_os = target_query.isNativeOs(), |
