| ... | @@ -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 .empty | 209 | 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; | | |
| 239 | | 238 | |
| 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); |
| 255 | | 254 | |
| 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; | | |
| 320 | | 313 | |
| 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), |
| 1492 | | 1485 | |
| 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 | _, |
| 1502 | | 1488 | |
| ... | @@ -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, |
| 1554 | | 1542 | |
| 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, |