diff options
| author | Mason Remaley <MasonRemaley@users.noreply.github.com> | 2025-02-21 18:40:57 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-21 21:40:57 -0500 |
| commit | 339b628d4c8a850c6d819e88fb3b84b86e8b5927 (patch) | |
| tree | cb31173da17ada279298a0a37224fefed9024f02 /src | |
| parent | 65e7ede4994237f160e8db558e74da113f886f98 (diff) | |
| download | zig-339b628d4c8a850c6d819e88fb3b84b86e8b5927.tar.gz zig-339b628d4c8a850c6d819e88fb3b84b86e8b5927.zip | |
Output `zig targets` as ZON instead of JSON (#22939)
* Adds startTupleField/startStructField, makes pattern in print targets less verbose
* Makes some enums into strings
* Start/finish renamed to begin/end
I feel bad changing this, but I don't know why I named them this way in the first place.
Begin/end is consistent with the json API, and with other APIs in the wild that follow this pattern.
Better to change now than later.
Diffstat (limited to 'src')
| -rw-r--r-- | src/print_targets.zig | 182 |
1 files changed, 81 insertions, 101 deletions
diff --git a/src/print_targets.zig b/src/print_targets.zig index 470f37c84f..a00683255d 100644 --- a/src/print_targets.zig +++ b/src/print_targets.zig @@ -40,121 +40,101 @@ pub fn cmdTargets( var bw = io.bufferedWriter(stdout); const w = bw.writer(); - var jws = std.json.writeStream(w, .{ .whitespace = .indent_1 }); + var sz = std.zon.stringify.serializer(w, .{}); - try jws.beginObject(); - - try jws.objectField("arch"); - try jws.beginArray(); - for (meta.fieldNames(Target.Cpu.Arch)) |field| { - try jws.write(field); - } - try jws.endArray(); + { + var root_obj = try sz.beginStruct(.{}); - try jws.objectField("os"); - try jws.beginArray(); - for (meta.fieldNames(Target.Os.Tag)) |field| { - try jws.write(field); - } - try jws.endArray(); + try root_obj.field("arch", meta.fieldNames(Target.Cpu.Arch), .{}); + try root_obj.field("os", meta.fieldNames(Target.Os.Tag), .{}); + try root_obj.field("abi", meta.fieldNames(Target.Abi), .{}); - try jws.objectField("abi"); - try jws.beginArray(); - for (meta.fieldNames(Target.Abi)) |field| { - try jws.write(field); - } - try jws.endArray(); - - try jws.objectField("libc"); - try jws.beginArray(); - for (std.zig.target.available_libcs) |libc| { - const tmp = try std.fmt.allocPrint(allocator, "{s}-{s}-{s}", .{ - @tagName(libc.arch), @tagName(libc.os), @tagName(libc.abi), - }); - defer allocator.free(tmp); - try jws.write(tmp); - } - try jws.endArray(); - - try jws.objectField("glibc"); - try jws.beginArray(); - for (glibc_abi.all_versions) |ver| { - const tmp = try std.fmt.allocPrint(allocator, "{}", .{ver}); - defer allocator.free(tmp); - try jws.write(tmp); - } - try jws.endArray(); - - try jws.objectField("cpus"); - try jws.beginObject(); - for (meta.tags(Target.Cpu.Arch)) |arch| { - try jws.objectField(@tagName(arch)); - try jws.beginObject(); - for (arch.allCpuModels()) |model| { - try jws.objectField(model.name); - try jws.beginArray(); - for (arch.allFeaturesList(), 0..) |feature, i_usize| { - const index = @as(Target.Cpu.Feature.Set.Index, @intCast(i_usize)); - if (model.features.isEnabled(index)) { - try jws.write(feature.name); - } + { + var libc_obj = try root_obj.beginTupleField("libc", .{}); + for (std.zig.target.available_libcs) |libc| { + const tmp = try std.fmt.allocPrint(allocator, "{s}-{s}-{s}", .{ + @tagName(libc.arch), @tagName(libc.os), @tagName(libc.abi), + }); + defer allocator.free(tmp); + try libc_obj.field(tmp, .{}); } - try jws.endArray(); + try libc_obj.end(); } - try jws.endObject(); - } - try jws.endObject(); - - try jws.objectField("cpuFeatures"); - try jws.beginObject(); - for (meta.tags(Target.Cpu.Arch)) |arch| { - try jws.objectField(@tagName(arch)); - try jws.beginArray(); - for (arch.allFeaturesList()) |feature| { - try jws.write(feature.name); + + { + var glibc_obj = try root_obj.beginTupleField("glibc", .{}); + for (glibc_abi.all_versions) |ver| { + const tmp = try std.fmt.allocPrint(allocator, "{}", .{ver}); + defer allocator.free(tmp); + try glibc_obj.field(tmp, .{}); + } + try glibc_obj.end(); } - try jws.endArray(); - } - try jws.endObject(); - try jws.objectField("native"); - try jws.beginObject(); - { - const triple = try native_target.zigTriple(allocator); - defer allocator.free(triple); - try jws.objectField("triple"); - try jws.write(triple); - } - { - try jws.objectField("cpu"); - try jws.beginObject(); - try jws.objectField("arch"); - try jws.write(@tagName(native_target.cpu.arch)); + { + var cpus_obj = try root_obj.beginStructField("cpus", .{}); + for (meta.tags(Target.Cpu.Arch)) |arch| { + var arch_obj = try cpus_obj.beginStructField(@tagName(arch), .{}); + for (arch.allCpuModels()) |model| { + var features = try arch_obj.beginTupleField(model.name, .{}); + for (arch.allFeaturesList(), 0..) |feature, i_usize| { + const index = @as(Target.Cpu.Feature.Set.Index, @intCast(i_usize)); + if (model.features.isEnabled(index)) { + try features.field(feature.name, .{}); + } + } + try features.end(); + } + try arch_obj.end(); + } + try cpus_obj.end(); + } - try jws.objectField("name"); - const cpu = native_target.cpu; - try jws.write(cpu.model.name); + { + var cpu_features_obj = try root_obj.beginStructField("cpu_features", .{}); + for (meta.tags(Target.Cpu.Arch)) |arch| { + var arch_features = try cpu_features_obj.beginTupleField(@tagName(arch), .{}); + for (arch.allFeaturesList()) |feature| { + try arch_features.field(feature.name, .{}); + } + try arch_features.end(); + } + try cpu_features_obj.end(); + } { - try jws.objectField("features"); - try jws.beginArray(); - for (native_target.cpu.arch.allFeaturesList(), 0..) |feature, i_usize| { - const index = @as(Target.Cpu.Feature.Set.Index, @intCast(i_usize)); - if (cpu.features.isEnabled(index)) { - try jws.write(feature.name); + var native_obj = try root_obj.beginStructField("native", .{}); + { + const triple = try native_target.zigTriple(allocator); + defer allocator.free(triple); + try native_obj.field("triple", triple, .{}); + } + { + var cpu_obj = try native_obj.beginStructField("cpu", .{}); + try cpu_obj.field("arch", @tagName(native_target.cpu.arch), .{}); + + try cpu_obj.field("name", native_target.cpu.model.name, .{}); + + { + var features = try native_obj.beginTupleField("features", .{}); + for (native_target.cpu.arch.allFeaturesList(), 0..) |feature, i_usize| { + const index = @as(Target.Cpu.Feature.Set.Index, @intCast(i_usize)); + if (native_target.cpu.features.isEnabled(index)) { + try features.field(feature.name, .{}); + } + } + try features.end(); } + try cpu_obj.end(); } - try jws.endArray(); + + try native_obj.field("os", @tagName(native_target.os.tag), .{}); + try native_obj.field("abi", @tagName(native_target.abi), .{}); + try native_obj.end(); } - try jws.endObject(); - } - try jws.objectField("os"); - try jws.write(@tagName(native_target.os.tag)); - try jws.objectField("abi"); - try jws.write(@tagName(native_target.abi)); - try jws.endObject(); - try jws.endObject(); + try root_obj.end(); + } try w.writeByte('\n'); return bw.flush(); |
