From f58705b4a623b39ad10fe25a9a41507fdfc0b089 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 12 Mar 2020 00:32:50 -0400 Subject: [PATCH] fix `zig targets` not reporting native info --- src-self-hosted/stage2.zig | 47 +++++++++++++++++++------------------- src/main.cpp | 2 +- src/stage2.cpp | 2 +- src/stage2.h | 6 ++--- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src-self-hosted/stage2.zig b/src-self-hosted/stage2.zig index 83a70c29e0..36941cc3a1 100644 --- a/src-self-hosted/stage2.zig +++ b/src-self-hosted/stage2.zig @@ -626,16 +626,24 @@ fn detectNativeCpuWithLLVM( } // ABI warning -export fn stage2_cmd_targets(zig_triple: [*:0]const u8) c_int { - cmdTargets(zig_triple) catch |err| { +export fn stage2_cmd_targets( + zig_triple: ?[*:0]const u8, + mcpu: ?[*:0]const u8, + dynamic_linker: ?[*:0]const u8, +) c_int { + cmdTargets(zig_triple, mcpu, dynamic_linker) catch |err| { std.debug.warn("unable to list targets: {}\n", .{@errorName(err)}); return -1; }; return 0; } -fn cmdTargets(zig_triple: [*:0]const u8) !void { - var cross_target = try CrossTarget.parse(.{ .arch_os_abi = mem.toSliceConst(u8, zig_triple) }); +fn cmdTargets( + zig_triple_oz: ?[*:0]const u8, + mcpu_oz: ?[*:0]const u8, + dynamic_linker_oz: ?[*:0]const u8, +) !void { + const cross_target = try stage2CrossTarget(zig_triple_oz, mcpu_oz, dynamic_linker_oz); var dynamic_linker: ?[*:0]u8 = null; const target = try crossTargetToTarget(cross_target, &dynamic_linker); return @import("print_targets.zig").cmdTargets( @@ -673,12 +681,11 @@ export fn stage2_target_parse( return .None; } -fn stage2TargetParse( - stage1_target: *Stage2Target, +fn stage2CrossTarget( zig_triple_oz: ?[*:0]const u8, mcpu_oz: ?[*:0]const u8, dynamic_linker_oz: ?[*:0]const u8, -) !void { +) !CrossTarget { const zig_triple = if (zig_triple_oz) |zig_triple_z| mem.toSliceConst(u8, zig_triple_z) else "native"; const mcpu = if (mcpu_oz) |mcpu_z| mem.toSliceConst(u8, mcpu_z) else null; const dynamic_linker = if (dynamic_linker_oz) |dl_z| mem.toSliceConst(u8, dl_z) else null; @@ -716,6 +723,16 @@ fn stage2TargetParse( else => |e| return e, }; + return target; +} + +fn stage2TargetParse( + stage1_target: *Stage2Target, + zig_triple_oz: ?[*:0]const u8, + mcpu_oz: ?[*:0]const u8, + dynamic_linker_oz: ?[*:0]const u8, +) !void { + const target = try stage2CrossTarget(zig_triple_oz, mcpu_oz, dynamic_linker_oz); try stage1_target.fromTarget(target); } @@ -905,22 +922,6 @@ const Stage2Target = extern struct { dynamic_linker: ?[*:0]const u8, - fn toTarget(in_target: Stage2Target) CrossTarget { - if (in_target.is_native) return .{}; - - const in_arch = in_target.arch - 1; // skip over ZigLLVM_UnknownArch - const in_os = in_target.os; - const in_abi = in_target.abi; - - return .{ - .Cross = .{ - .cpu = Target.Cpu.baseline(enumInt(Target.Cpu.Arch, in_arch)), - .os = Target.Os.defaultVersionRange(enumInt(Target.Os.Tag, in_os)), - .abi = enumInt(Target.Abi, in_abi), - }, - }; - } - fn fromTarget(self: *Stage2Target, cross_target: CrossTarget) !void { const allocator = std.heap.c_allocator; diff --git a/src/main.cpp b/src/main.cpp index 92d08bed4f..1939606b03 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1391,7 +1391,7 @@ static int main0(int argc, char **argv) { return main_exit(root_progress_node, EXIT_SUCCESS); } case CmdTargets: - return stage2_cmd_targets(buf_ptr(&zig_triple_buf)); + return stage2_cmd_targets(target_string, mcpu, dynamic_linker); case CmdNone: return print_full_usage(arg0, stderr, EXIT_FAILURE); } diff --git a/src/stage2.cpp b/src/stage2.cpp index afb7ebb548..7495ffddb9 100644 --- a/src/stage2.cpp +++ b/src/stage2.cpp @@ -260,7 +260,7 @@ Error stage2_target_parse(struct ZigTarget *target, const char *zig_triple, cons return ErrorNone; } -int stage2_cmd_targets(const char *zig_triple) { +int stage2_cmd_targets(const char *zig_triple, const char *mcpu, const char *dynamic_linker) { const char *msg = "stage0 called stage2_cmd_targets"; stage2_panic(msg, strlen(msg)); } diff --git a/src/stage2.h b/src/stage2.h index 1ff0b5e826..50f891dca9 100644 --- a/src/stage2.h +++ b/src/stage2.h @@ -201,9 +201,6 @@ ZIG_EXTERN_C void stage2_progress_complete_one(Stage2ProgressNode *node); ZIG_EXTERN_C void stage2_progress_update_node(Stage2ProgressNode *node, size_t completed_count, size_t estimated_total_items); -// ABI warning -ZIG_EXTERN_C int stage2_cmd_targets(const char *zig_triple); - // ABI warning struct Stage2LibCInstallation { const char *include_dir; @@ -302,6 +299,9 @@ struct ZigTarget { ZIG_EXTERN_C enum Error stage2_target_parse(struct ZigTarget *target, const char *zig_triple, const char *mcpu, const char *dynamic_linker); +// ABI warning +ZIG_EXTERN_C int stage2_cmd_targets(const char *zig_triple, const char *mcpu, const char *dynamic_linker); + // ABI warning struct Stage2NativePaths {