| ... | ... | @@ -194,16 +194,16 @@ pub const Wip = struct { |
| 194 | 194 | .native, .baseline, .determined_by_arch_os => null, |
| 195 | 195 | .explicit => |model| try wip.addString(model.name), |
| 196 | 196 | }; |
| 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; |
| 207 | 207 | const glibc_version: ?String = if (q.glibc_version) |sem_ver| try wip.addSemVer(sem_ver) else null; |
| 208 | 208 | const dynamic_linker: ?String = if (q.dynamic_linker) |*dl| |
| 209 | 209 | if (dl.get()) |s| try wip.addString(s) else .empty |
| ... | ... | @@ -220,8 +220,8 @@ pub const Wip = struct { |
| 220 | 220 | .os_tag = .init(q.os_tag), |
| 221 | 221 | .abi = .init(q.abi), |
| 222 | 222 | .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, |
| 225 | 225 | .glibc_version = glibc_version != null, |
| 226 | 226 | .android_api_level = q.android_api_level != null, |
| 227 | 227 | .dynamic_linker = dynamic_linker != null, |
| ... | ... | @@ -232,10 +232,9 @@ pub const Wip = struct { |
| 232 | 232 | .android_api_level = .{ .value = q.android_api_level }, |
| 233 | 233 | .dynamic_linker = .{ .value = dynamic_linker }, |
| 234 | 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 | 239 | // Deduplicate. |
| 241 | 240 | const gop = try wip.targets_table.getOrPutContext(gpa, result_index, @as(TargetsTableContext, .{ |
| ... | ... | @@ -253,45 +252,40 @@ pub const Wip = struct { |
| 253 | 252 | const gpa = wip.gpa; |
| 254 | 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 | 256 | .none => .{ |
| 258 | | null, |
| 259 | | null, |
| 257 | .none, |
| 258 | .none, |
| 260 | 259 | null, |
| 261 | 260 | null, |
| 262 | 261 | }, |
| 263 | 262 | .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) }, |
| 266 | 265 | null, |
| 267 | 266 | null, |
| 268 | 267 | }, |
| 269 | 268 | .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) }, |
| 272 | 271 | try wip.addSemVer(hurd.glibc), |
| 273 | 272 | null, |
| 274 | 273 | }, |
| 275 | 274 | .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) }, |
| 278 | 277 | try wip.addSemVer(linux.glibc), |
| 279 | 278 | linux.android, |
| 280 | 279 | }, |
| 281 | 280 | .windows => |range| .{ |
| 282 | | @intFromEnum(range.min), |
| 283 | | @intFromEnum(range.max), |
| 281 | .{ .windows = range.min }, |
| 282 | .{ .windows = range.max }, |
| 284 | 283 | null, |
| 285 | 284 | null, |
| 286 | 285 | }, |
| 287 | 286 | }; |
| 288 | 287 | const dynamic_linker: ?String = if (t.dynamic_linker.get()) |dl| try wip.addString(dl) else null; |
| 289 | 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 | 289 | const result_index: TargetQuery.Index = @enumFromInt(try wip.addExtra(@as(TargetQuery, .{ |
| 296 | 290 | .flags = .{ |
| 297 | 291 | .cpu_arch = .init(t.cpu.arch), |
| ... | ... | @@ -301,8 +295,8 @@ pub const Wip = struct { |
| 301 | 295 | .os_tag = .init(t.os.tag), |
| 302 | 296 | .abi = .init(t.abi), |
| 303 | 297 | .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, |
| 306 | 300 | .glibc_version = glibc_version != null, |
| 307 | 301 | .android_api_level = android_api_level != null, |
| 308 | 302 | .dynamic_linker = dynamic_linker != null, |
| ... | ... | @@ -313,10 +307,9 @@ pub const Wip = struct { |
| 313 | 307 | .android_api_level = .{ .value = android_api_level }, |
| 314 | 308 | .dynamic_linker = .{ .value = dynamic_linker }, |
| 315 | 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 | 314 | // Deduplicate. |
| 322 | 315 | const gop = try wip.targets_table.getOrPutContext(gpa, result_index, @as(TargetsTableContext, .{ |
| ... | ... | @@ -1484,19 +1477,12 @@ pub const TargetQuery = struct { |
| 1484 | 1477 | cpu_features_add: Storage.FlagOptional(.flags, .cpu_features_add, std.Target.Cpu.Feature.Set), |
| 1485 | 1478 | cpu_features_sub: Storage.FlagOptional(.flags, .cpu_features_sub, std.Target.Cpu.Feature.Set), |
| 1486 | 1479 | 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), |
| 1489 | 1482 | glibc_version: Storage.FlagOptional(.flags, .glibc_version, String), |
| 1490 | 1483 | android_api_level: Storage.FlagOptional(.flags, .android_api_level, u32), |
| 1491 | 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 | 1486 | pub const Index = enum(u32) { |
| 1501 | 1487 | _, |
| 1502 | 1488 | |
| ... | ... | @@ -1546,11 +1532,13 @@ pub const TargetQuery = struct { |
| 1546 | 1532 | }; |
| 1547 | 1533 | } |
| 1548 | 1534 | }; |
| 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, |
| 1554 | 1542 | |
| 1555 | 1543 | pub fn init(x: ?std.Target.Query.OsVersion) @This() { |
| 1556 | 1544 | return switch (x orelse return .default) { |
| ... | ... | @@ -1756,8 +1744,8 @@ pub const TargetQuery = struct { |
| 1756 | 1744 | os_tag: OsTag, |
| 1757 | 1745 | abi: Abi, |
| 1758 | 1746 | 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, |
| 1761 | 1749 | glibc_version: bool, |
| 1762 | 1750 | android_api_level: bool, |
| 1763 | 1751 | dynamic_linker: bool, |