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 {
194194 .native, .baseline, .determined_by_arch_os => null,
195195 .explicit => |model| try wip.addString(model.name),
196196 };
197 const os_version_min: ?u32 = if (q.os_version_min) |ver| switch (ver) {
198 .none => null,
199 .semver => |sem_ver| @intFromEnum(try wip.addSemVer(sem_ver)),
200 .windows => |win_ver| @intFromEnum(win_ver),
201 } else null;
202 const os_version_max: ?u32 = if (q.os_version_max) |ver| switch (ver) {
203 .none => null,
204 .semver => |sem_ver| @intFromEnum(try wip.addSemVer(sem_ver)),
205 .windows => |win_ver| @intFromEnum(win_ver),
206 } else null;
197 const os_version_min: TargetQuery.OsVersion = if (q.os_version_min) |ver| switch (ver) {
198 .none => .none,
199 .semver => |sem_ver| .{ .semver = try wip.addSemVer(sem_ver) },
200 .windows => |win_ver| .{ .windows = win_ver },
201 } else .default;
202 const os_version_max: TargetQuery.OsVersion = if (q.os_version_max) |ver| switch (ver) {
203 .none => .none,
204 .semver => |sem_ver| .{ .semver = try wip.addSemVer(sem_ver) },
205 .windows => |win_ver| .{ .windows = win_ver },
206 } else .default;
207207 const glibc_version: ?String = if (q.glibc_version) |sem_ver| try wip.addSemVer(sem_ver) else null;
208208 const dynamic_linker: ?String = if (q.dynamic_linker) |*dl|
209209 if (dl.get()) |s| try wip.addString(s) else .empty
......@@ -220,8 +220,8 @@ pub const Wip = struct {
220220 .os_tag = .init(q.os_tag),
221221 .abi = .init(q.abi),
222222 .object_format = .init(q.ofmt),
223 .os_version_min = .init(q.os_version_min),
224 .os_version_max = .init(q.os_version_max),
223 .os_version_min = os_version_min,
224 .os_version_max = os_version_max,
225225 .glibc_version = glibc_version != null,
226226 .android_api_level = q.android_api_level != null,
227227 .dynamic_linker = dynamic_linker != null,
......@@ -232,10 +232,9 @@ pub const Wip = struct {
232232 .android_api_level = .{ .value = q.android_api_level },
233233 .dynamic_linker = .{ .value = dynamic_linker },
234234 .cpu_name = .{ .value = cpu_name },
235 .os_version_min = .{ .u = os_version_min },
236 .os_version_max = .{ .u = os_version_max },
235237 })));
236 std.log.err("TODO serialize more target query stuff", .{});
237 _ = os_version_min;
238 _ = os_version_max;
239238
240239 // Deduplicate.
241240 const gop = try wip.targets_table.getOrPutContext(gpa, result_index, @as(TargetsTableContext, .{
......@@ -253,45 +252,40 @@ pub const Wip = struct {
253252 const gpa = wip.gpa;
254253 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()) {
257256 .none => .{
258 null,
259 null,
257 .none,
258 .none,
260259 null,
261260 null,
262261 },
263262 .semver => |range| .{
264 @intFromEnum(try wip.addSemVer(range.min)),
265 @intFromEnum(try wip.addSemVer(range.max)),
263 .{ .semver = try wip.addSemVer(range.min) },
264 .{ .semver = try wip.addSemVer(range.max) },
266265 null,
267266 null,
268267 },
269268 .hurd => |hurd| .{
270 @intFromEnum(try wip.addSemVer(hurd.range.min)),
271 @intFromEnum(try wip.addSemVer(hurd.range.max)),
269 .{ .semver = try wip.addSemVer(hurd.range.min) },
270 .{ .semver = try wip.addSemVer(hurd.range.max) },
272271 try wip.addSemVer(hurd.glibc),
273272 null,
274273 },
275274 .linux => |linux| .{
276 @intFromEnum(try wip.addSemVer(linux.range.min)),
277 @intFromEnum(try wip.addSemVer(linux.range.max)),
275 .{ .semver = try wip.addSemVer(linux.range.min) },
276 .{ .semver = try wip.addSemVer(linux.range.max) },
278277 try wip.addSemVer(linux.glibc),
279278 linux.android,
280279 },
281280 .windows => |range| .{
282 @intFromEnum(range.min),
283 @intFromEnum(range.max),
281 .{ .windows = range.min },
282 .{ .windows = range.max },
284283 null,
285284 null,
286285 },
287286 };
288287 const dynamic_linker: ?String = if (t.dynamic_linker.get()) |dl| try wip.addString(dl) else null;
289288 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 };
295289 const result_index: TargetQuery.Index = @enumFromInt(try wip.addExtra(@as(TargetQuery, .{
296290 .flags = .{
297291 .cpu_arch = .init(t.cpu.arch),
......@@ -301,8 +295,8 @@ pub const Wip = struct {
301295 .os_tag = .init(t.os.tag),
302296 .abi = .init(t.abi),
303297 .object_format = .init(t.ofmt),
304 .os_version_min = os_version,
305 .os_version_max = os_version,
298 .os_version_min = os_version_min,
299 .os_version_max = os_version_max,
306300 .glibc_version = glibc_version != null,
307301 .android_api_level = android_api_level != null,
308302 .dynamic_linker = dynamic_linker != null,
......@@ -313,10 +307,9 @@ pub const Wip = struct {
313307 .android_api_level = .{ .value = android_api_level },
314308 .dynamic_linker = .{ .value = dynamic_linker },
315309 .cpu_name = .{ .value = cpu_name },
310 .os_version_min = .{ .u = os_version_min },
311 .os_version_max = .{ .u = os_version_max },
316312 })));
317 std.log.err("TODO serialize more target stuff", .{});
318 _ = os_version_min;
319 _ = os_version_max;
320313
321314 // Deduplicate.
322315 const gop = try wip.targets_table.getOrPutContext(gpa, result_index, @as(TargetsTableContext, .{
......@@ -1484,19 +1477,12 @@ pub const TargetQuery = struct {
14841477 cpu_features_add: Storage.FlagOptional(.flags, .cpu_features_add, std.Target.Cpu.Feature.Set),
14851478 cpu_features_sub: Storage.FlagOptional(.flags, .cpu_features_sub, std.Target.Cpu.Feature.Set),
14861479 cpu_name: Storage.EnumOptional(.flags, .cpu_model, .explicit, String),
1487 //os_version_min: Storage.FlagsUnion(.flags, .os_version_min, VersionStorage),
1488 //os_version_max: Storage.FlagsUnion(.flags, .os_version_max, VersionStorage),
1480 os_version_min: Storage.FlagUnion(.flags, .os_version_min, OsVersion),
1481 os_version_max: Storage.FlagUnion(.flags, .os_version_max, OsVersion),
14891482 glibc_version: Storage.FlagOptional(.flags, .glibc_version, String),
14901483 android_api_level: Storage.FlagOptional(.flags, .android_api_level, u32),
14911484 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
15001486 pub const Index = enum(u32) {
15011487 _,
15021488
......@@ -1546,11 +1532,13 @@ pub const TargetQuery = struct {
15461532 };
15471533 }
15481534 };
1549 pub const OsVersion = enum(u2) {
1550 none,
1551 semver,
1552 windows,
1553 default,
1535 pub const OsVersion = union(@This().Tag) {
1536 pub const Tag = enum(u2) { none, semver, windows, default };
1537
1538 none: void,
1539 semver: String,
1540 windows: std.Target.Os.WindowsVersion,
1541 default: void,
15541542
15551543 pub fn init(x: ?std.Target.Query.OsVersion) @This() {
15561544 return switch (x orelse return .default) {
......@@ -1756,8 +1744,8 @@ pub const TargetQuery = struct {
17561744 os_tag: OsTag,
17571745 abi: Abi,
17581746 object_format: ObjectFormat,
1759 os_version_min: OsVersion,
1760 os_version_max: OsVersion,
1747 os_version_min: OsVersion.Tag,
1748 os_version_max: OsVersion.Tag,
17611749 glibc_version: bool,
17621750 android_api_level: bool,
17631751 dynamic_linker: bool,