╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ print_targets.zig ────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭ find file ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╮ ╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │ │ │http│ ssh │ │ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╯ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
27 allocator, 28 .limited(glibc.abilists_max_size), 29 ) catch |err| switch (err) { 30 error.OutOfMemory => |e| return e, 31 else => fatal("unable to read " ++ glibc.abilists_path ++ ": {t}", .{err}), 32 }; 33 defer allocator.free(abilists_contents); 34 35 const glibc_abi = try glibc.loadMetaData(allocator, abilists_contents); 36 defer glibc_abi.destroy(allocator); 37 38 var serializer: std.zon.Serializer = .{ .writer = out }; 39 40 { 41 var root_obj = try serializer.beginStruct(.{}); 42 43 try root_obj.field("arch", @typeInfo(Target.Cpu.Arch).@"enum".field_names, .{}); 44 try root_obj.field("os", @typeInfo(Target.Os.Tag).@"enum".field_names, .{}); 45 try root_obj.field("abi", @typeInfo(Target.Abi).@"enum".field_names, .{}); 46 47 { 48 var libc_obj = try root_obj.beginTupleField("libc", .{}); 49 for (std.zig.target.available_libcs) |libc| { 50 const tmp = try std.fmt.allocPrint(allocator, "{t}-{t}-{t}", .{ libc.arch, libc.os, libc.abi }); 51 defer allocator.free(tmp); 52 try libc_obj.field(tmp, .{}); 53 } 54 try libc_obj.end(); 55 } 56 57 { 58 var glibc_obj = try root_obj.beginTupleField("glibc", .{}); 59 for (glibc_abi.all_versions) |ver| { 60 const tmp = try std.fmt.allocPrint(allocator, "{f}", .{ver}); 61 defer allocator.free(tmp); 62 try glibc_obj.field(tmp, .{}); 63 } 64 try glibc_obj.end(); 65 } 66 67 { 68 var cpus_obj = try root_obj.beginStructField("cpus", .{}); 69 for (meta.tags(Target.Cpu.Arch)) |arch| { 70 var arch_obj = try cpus_obj.beginStructField(@tagName(arch), .{}); 71 for (arch.allCpuModels()) |model| { 72 var features = try arch_obj.beginTupleField(model.name, .{}); 73 for (arch.allFeaturesList(), 0..) |feature, i_usize| { 74 const index = @as(Target.Cpu.Feature.Set.Index, @intCast(i_usize)); 75 if (model.features.isEnabled(index)) { 76 try features.field(feature.name, .{}); 77 } 78 } 79 try features.end(); 80 } 81 try arch_obj.end(); 82 } 83 try cpus_obj.end(); 84 } 85 86 { 87 var cpu_features_obj = try root_obj.beginStructField("cpu_features", .{}); 88 for (meta.tags(Target.Cpu.Arch)) |arch| { 89 var arch_features = try cpu_features_obj.beginTupleField(@tagName(arch), .{}); 90 for (arch.allFeaturesList()) |feature| { 91 try arch_features.field(feature.name, .{}); 92 } 93 try arch_features.end(); 94 } 95 try cpu_features_obj.end(); 96 } 97 98 { 99 var native_obj = try root_obj.beginStructField("native", .{}); 100 { 101 const triple = try native_target.zigTriple(allocator); 102 defer allocator.free(triple); 103 try native_obj.field("triple", triple, .{}); 104 } 105 { 106 var cpu_obj = try native_obj.beginStructField("cpu", .{}); 107 try cpu_obj.field("arch", @tagName(native_target.cpu.arch), .{}); 108 109 try cpu_obj.field("name", native_target.cpu.model.name, .{}); 110 111 { 112 var features = try native_obj.beginTupleField("features", .{}); 113 for (native_target.cpu.arch.allFeaturesList(), 0..) |feature, i_usize| { 114 const index = @as(Target.Cpu.Feature.Set.Index, @intCast(i_usize)); 115 if (native_target.cpu.features.isEnabled(index)) { 116 try features.field(feature.name, .{}); 117 } 118 } 119 try features.end(); 120 } 121 try cpu_obj.end(); 122 } 123 124 try native_obj.field("os", @tagName(native_target.os.tag), .{}); 125 try native_obj.field("abi", @tagName(native_target.abi), .{}); 126 try native_obj.end(); 127 } 128 129 try root_obj.end(); 130 } 131 132 try out.writeByte('\n'); 133 } 134