authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-03-02 12:27:12-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-05-25 18:54:34-07:00
log8331c59ee2ec3e57ffcc4c0ae57792a995afa865
tree5e902f90982c49dce43a06aceb12ea7172f4282e
parent5fbfeabd5f3bcfaaec7e157df171753940f4872c

Configuration: serialize remaining Target information


1 files changed, 40 insertions(+), 52 deletions(-)

lib/std/zig/Configuration.zig+40-52
...@@ -194,16 +194,16 @@ pub const Wip = struct {...@@ -194,16 +194,16 @@ pub const Wip = struct {
194 .native, .baseline, .determined_by_arch_os => null,194 .native, .baseline, .determined_by_arch_os => null,
195 .explicit => |model| try wip.addString(model.name),195 .explicit => |model| try wip.addString(model.name),
196 };196 };
197 const os_version_min: ?u32 = if (q.os_version_min) |ver| switch (ver) {197 const os_version_min: TargetQuery.OsVersion = if (q.os_version_min) |ver| switch (ver) {
198 .none => null,198 .none => .none,
199 .semver => |sem_ver| @intFromEnum(try wip.addSemVer(sem_ver)),199 .semver => |sem_ver| .{ .semver = try wip.addSemVer(sem_ver) },
200 .windows => |win_ver| @intFromEnum(win_ver),200 .windows => |win_ver| .{ .windows = win_ver },
201 } else null;201 } else .default;
202 const os_version_max: ?u32 = if (q.os_version_max) |ver| switch (ver) {202 const os_version_max: TargetQuery.OsVersion = if (q.os_version_max) |ver| switch (ver) {
203 .none => null,203 .none => .none,
204 .semver => |sem_ver| @intFromEnum(try wip.addSemVer(sem_ver)),204 .semver => |sem_ver| .{ .semver = try wip.addSemVer(sem_ver) },
205 .windows => |win_ver| @intFromEnum(win_ver),205 .windows => |win_ver| .{ .windows = win_ver },
206 } else null;206 } else .default;
207 const glibc_version: ?String = if (q.glibc_version) |sem_ver| try wip.addSemVer(sem_ver) else null;207 const glibc_version: ?String = if (q.glibc_version) |sem_ver| try wip.addSemVer(sem_ver) else null;
208 const dynamic_linker: ?String = if (q.dynamic_linker) |*dl|208 const dynamic_linker: ?String = if (q.dynamic_linker) |*dl|
209 if (dl.get()) |s| try wip.addString(s) else .empty209 if (dl.get()) |s| try wip.addString(s) else .empty
...@@ -220,8 +220,8 @@ pub const Wip = struct {...@@ -220,8 +220,8 @@ pub const Wip = struct {
220 .os_tag = .init(q.os_tag),220 .os_tag = .init(q.os_tag),
221 .abi = .init(q.abi),221 .abi = .init(q.abi),
222 .object_format = .init(q.ofmt),222 .object_format = .init(q.ofmt),
223 .os_version_min = .init(q.os_version_min),223 .os_version_min = os_version_min,
224 .os_version_max = .init(q.os_version_max),224 .os_version_max = os_version_max,
225 .glibc_version = glibc_version != null,225 .glibc_version = glibc_version != null,
226 .android_api_level = q.android_api_level != null,226 .android_api_level = q.android_api_level != null,
227 .dynamic_linker = dynamic_linker != null,227 .dynamic_linker = dynamic_linker != null,
...@@ -232,10 +232,9 @@ pub const Wip = struct {...@@ -232,10 +232,9 @@ pub const Wip = struct {
232 .android_api_level = .{ .value = q.android_api_level },232 .android_api_level = .{ .value = q.android_api_level },
233 .dynamic_linker = .{ .value = dynamic_linker },233 .dynamic_linker = .{ .value = dynamic_linker },
234 .cpu_name = .{ .value = cpu_name },234 .cpu_name = .{ .value = cpu_name },
235 .os_version_min = .{ .u = os_version_min },
236 .os_version_max = .{ .u = os_version_max },
235 })));237 })));
236 std.log.err("TODO serialize more target query stuff", .{});
237 _ = os_version_min;
238 _ = os_version_max;
239238
240 // Deduplicate.239 // Deduplicate.
241 const gop = try wip.targets_table.getOrPutContext(gpa, result_index, @as(TargetsTableContext, .{240 const gop = try wip.targets_table.getOrPutContext(gpa, result_index, @as(TargetsTableContext, .{
...@@ -253,45 +252,40 @@ pub const Wip = struct {...@@ -253,45 +252,40 @@ pub const Wip = struct {
253 const gpa = wip.gpa;252 const gpa = wip.gpa;
254 const cpu_name: String = try wip.addString(t.cpu.model.name);253 const cpu_name: String = try wip.addString(t.cpu.model.name);
255254
256 const os_version_min: ?u32, const os_version_max: ?u32, const glibc_version: ?String, const android_api_level: ?u32 = switch (t.os.versionRange()) {255 const os_version_min: TargetQuery.OsVersion, const os_version_max: TargetQuery.OsVersion, const glibc_version: ?String, const android_api_level: ?u32 = switch (t.os.versionRange()) {
257 .none => .{256 .none => .{
258 null,257 .none,
259 null,258 .none,
260 null,259 null,
261 null,260 null,
262 },261 },
263 .semver => |range| .{262 .semver => |range| .{
264 @intFromEnum(try wip.addSemVer(range.min)),263 .{ .semver = try wip.addSemVer(range.min) },
265 @intFromEnum(try wip.addSemVer(range.max)),264 .{ .semver = try wip.addSemVer(range.max) },
266 null,265 null,
267 null,266 null,
268 },267 },
269 .hurd => |hurd| .{268 .hurd => |hurd| .{
270 @intFromEnum(try wip.addSemVer(hurd.range.min)),269 .{ .semver = try wip.addSemVer(hurd.range.min) },
271 @intFromEnum(try wip.addSemVer(hurd.range.max)),270 .{ .semver = try wip.addSemVer(hurd.range.max) },
272 try wip.addSemVer(hurd.glibc),271 try wip.addSemVer(hurd.glibc),
273 null,272 null,
274 },273 },
275 .linux => |linux| .{274 .linux => |linux| .{
276 @intFromEnum(try wip.addSemVer(linux.range.min)),275 .{ .semver = try wip.addSemVer(linux.range.min) },
277 @intFromEnum(try wip.addSemVer(linux.range.max)),276 .{ .semver = try wip.addSemVer(linux.range.max) },
278 try wip.addSemVer(linux.glibc),277 try wip.addSemVer(linux.glibc),
279 linux.android,278 linux.android,
280 },279 },
281 .windows => |range| .{280 .windows => |range| .{
282 @intFromEnum(range.min),281 .{ .windows = range.min },
283 @intFromEnum(range.max),282 .{ .windows = range.max },
284 null,283 null,
285 null,284 null,
286 },285 },
287 };286 };
288 const dynamic_linker: ?String = if (t.dynamic_linker.get()) |dl| try wip.addString(dl) else null;287 const dynamic_linker: ?String = if (t.dynamic_linker.get()) |dl| try wip.addString(dl) else null;
289 const cpu_features_add_empty = t.cpu.features.isEmpty();288 const cpu_features_add_empty = t.cpu.features.isEmpty();
290 const os_version: TargetQuery.OsVersion = switch (t.os.versionRange()) {
291 .none => .none,
292 .semver, .linux, .hurd => .semver,
293 .windows => .windows,
294 };
295 const result_index: TargetQuery.Index = @enumFromInt(try wip.addExtra(@as(TargetQuery, .{289 const result_index: TargetQuery.Index = @enumFromInt(try wip.addExtra(@as(TargetQuery, .{
296 .flags = .{290 .flags = .{
297 .cpu_arch = .init(t.cpu.arch),291 .cpu_arch = .init(t.cpu.arch),
...@@ -301,8 +295,8 @@ pub const Wip = struct {...@@ -301,8 +295,8 @@ pub const Wip = struct {
301 .os_tag = .init(t.os.tag),295 .os_tag = .init(t.os.tag),
302 .abi = .init(t.abi),296 .abi = .init(t.abi),
303 .object_format = .init(t.ofmt),297 .object_format = .init(t.ofmt),
304 .os_version_min = os_version,298 .os_version_min = os_version_min,
305 .os_version_max = os_version,299 .os_version_max = os_version_max,
306 .glibc_version = glibc_version != null,300 .glibc_version = glibc_version != null,
307 .android_api_level = android_api_level != null,301 .android_api_level = android_api_level != null,
308 .dynamic_linker = dynamic_linker != null,302 .dynamic_linker = dynamic_linker != null,
...@@ -313,10 +307,9 @@ pub const Wip = struct {...@@ -313,10 +307,9 @@ pub const Wip = struct {
313 .android_api_level = .{ .value = android_api_level },307 .android_api_level = .{ .value = android_api_level },
314 .dynamic_linker = .{ .value = dynamic_linker },308 .dynamic_linker = .{ .value = dynamic_linker },
315 .cpu_name = .{ .value = cpu_name },309 .cpu_name = .{ .value = cpu_name },
310 .os_version_min = .{ .u = os_version_min },
311 .os_version_max = .{ .u = os_version_max },
316 })));312 })));
317 std.log.err("TODO serialize more target stuff", .{});
318 _ = os_version_min;
319 _ = os_version_max;
320313
321 // Deduplicate.314 // Deduplicate.
322 const gop = try wip.targets_table.getOrPutContext(gpa, result_index, @as(TargetsTableContext, .{315 const gop = try wip.targets_table.getOrPutContext(gpa, result_index, @as(TargetsTableContext, .{
...@@ -1484,19 +1477,12 @@ pub const TargetQuery = struct {...@@ -1484,19 +1477,12 @@ pub const TargetQuery = struct {
1484 cpu_features_add: Storage.FlagOptional(.flags, .cpu_features_add, std.Target.Cpu.Feature.Set),1477 cpu_features_add: Storage.FlagOptional(.flags, .cpu_features_add, std.Target.Cpu.Feature.Set),
1485 cpu_features_sub: Storage.FlagOptional(.flags, .cpu_features_sub, std.Target.Cpu.Feature.Set),1478 cpu_features_sub: Storage.FlagOptional(.flags, .cpu_features_sub, std.Target.Cpu.Feature.Set),
1486 cpu_name: Storage.EnumOptional(.flags, .cpu_model, .explicit, String),1479 cpu_name: Storage.EnumOptional(.flags, .cpu_model, .explicit, String),
1487 //os_version_min: Storage.FlagsUnion(.flags, .os_version_min, VersionStorage),1480 os_version_min: Storage.FlagUnion(.flags, .os_version_min, OsVersion),
1488 //os_version_max: Storage.FlagsUnion(.flags, .os_version_max, VersionStorage),1481 os_version_max: Storage.FlagUnion(.flags, .os_version_max, OsVersion),
1489 glibc_version: Storage.FlagOptional(.flags, .glibc_version, String),1482 glibc_version: Storage.FlagOptional(.flags, .glibc_version, String),
1490 android_api_level: Storage.FlagOptional(.flags, .android_api_level, u32),1483 android_api_level: Storage.FlagOptional(.flags, .android_api_level, u32),
1491 dynamic_linker: Storage.FlagOptional(.flags, .dynamic_linker, String),1484 dynamic_linker: Storage.FlagOptional(.flags, .dynamic_linker, String),
14921485
1493 const VersionStorage = union(OsVersion) {
1494 none: void,
1495 semver: String,
1496 windows: std.Target.Os.WindowsVersion,
1497 default: void,
1498 };
1499
1500 pub const Index = enum(u32) {1486 pub const Index = enum(u32) {
1501 _,1487 _,
15021488
...@@ -1546,11 +1532,13 @@ pub const TargetQuery = struct {...@@ -1546,11 +1532,13 @@ pub const TargetQuery = struct {
1546 };1532 };
1547 }1533 }
1548 };1534 };
1549 pub const OsVersion = enum(u2) {1535 pub const OsVersion = union(@This().Tag) {
1550 none,1536 pub const Tag = enum(u2) { none, semver, windows, default };
1551 semver,1537
1552 windows,1538 none: void,
1553 default,1539 semver: String,
1540 windows: std.Target.Os.WindowsVersion,
1541 default: void,
15541542
1555 pub fn init(x: ?std.Target.Query.OsVersion) @This() {1543 pub fn init(x: ?std.Target.Query.OsVersion) @This() {
1556 return switch (x orelse return .default) {1544 return switch (x orelse return .default) {
...@@ -1756,8 +1744,8 @@ pub const TargetQuery = struct {...@@ -1756,8 +1744,8 @@ pub const TargetQuery = struct {
1756 os_tag: OsTag,1744 os_tag: OsTag,
1757 abi: Abi,1745 abi: Abi,
1758 object_format: ObjectFormat,1746 object_format: ObjectFormat,
1759 os_version_min: OsVersion,1747 os_version_min: OsVersion.Tag,
1760 os_version_max: OsVersion,1748 os_version_max: OsVersion.Tag,
1761 glibc_version: bool,1749 glibc_version: bool,
1762 android_api_level: bool,1750 android_api_level: bool,
1763 dynamic_linker: bool,1751 dynamic_linker: bool,