From cb1ac0bb2fb95424118404160704d53a3ff2a2c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Tue, 1 Oct 2024 06:27:27 +0200 Subject: [PATCH 1/5] update_cpu_features: Don't delete the output file if there are no CPU features. At bare minimum, the compiler expects std.Target..cpu.generic to work for any given architecture when generating the builtin module. So rather than try to hack that into working when the affected modules are omitted, just actually keep them. This affected lanai and xcore. --- lib/std/Target.zig | 8 ++++++++ lib/std/Target/lanai.zig | 37 +++++++++++++++++++++++++++++++++++ lib/std/Target/xcore.zig | 37 +++++++++++++++++++++++++++++++++++ tools/update_cpu_features.zig | 13 ++++-------- 4 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 lib/std/Target/lanai.zig create mode 100644 lib/std/Target/xcore.zig diff --git a/lib/std/Target.zig b/lib/std/Target.zig index 146af1cf9f0c63859c2abede7bdb9d1d7585c7e8..ab6198f9c7c6917532be4db205a28ddb288da595 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -633,6 +633,7 @@ pub const avr = @import("Target/avr.zig"); pub const bpf = @import("Target/bpf.zig"); pub const csky = @import("Target/csky.zig"); pub const hexagon = @import("Target/hexagon.zig"); +pub const lanai = @import("Target/lanai.zig"); pub const loongarch = @import("Target/loongarch.zig"); pub const m68k = @import("Target/m68k.zig"); pub const mips = @import("Target/mips.zig"); @@ -646,6 +647,7 @@ pub const s390x = @import("Target/s390x.zig"); pub const ve = @import("Target/ve.zig"); pub const wasm = @import("Target/wasm.zig"); pub const x86 = @import("Target/x86.zig"); +pub const xcore = @import("Target/xcore.zig"); pub const xtensa = @import("Target/xtensa.zig"); pub const Abi = enum { @@ -1410,6 +1412,7 @@ pub const Cpu = struct { .bpfel, .bpfeb => &bpf.all_features, .csky => &csky.all_features, .hexagon => &hexagon.all_features, + .lanai => &lanai.all_features, .loongarch32, .loongarch64 => &loongarch.all_features, .m68k => &m68k.all_features, .mips, .mipsel, .mips64, .mips64el => &mips.all_features, @@ -1421,6 +1424,7 @@ pub const Cpu = struct { .spirv, .spirv32, .spirv64 => &spirv.all_features, .s390x => &s390x.all_features, .x86, .x86_64 => &x86.all_features, + .xcore => &xcore.all_features, .xtensa => &xtensa.all_features, .nvptx, .nvptx64 => &nvptx.all_features, .ve => &ve.all_features, @@ -1440,6 +1444,7 @@ pub const Cpu = struct { .bpfel, .bpfeb => comptime allCpusFromDecls(bpf.cpu), .csky => comptime allCpusFromDecls(csky.cpu), .hexagon => comptime allCpusFromDecls(hexagon.cpu), + .lanai => comptime allCpusFromDecls(lanai.cpu), .loongarch32, .loongarch64 => comptime allCpusFromDecls(loongarch.cpu), .m68k => comptime allCpusFromDecls(m68k.cpu), .mips, .mipsel, .mips64, .mips64el => comptime allCpusFromDecls(mips.cpu), @@ -1451,6 +1456,7 @@ pub const Cpu = struct { .spirv, .spirv32, .spirv64 => comptime allCpusFromDecls(spirv.cpu), .s390x => comptime allCpusFromDecls(s390x.cpu), .x86, .x86_64 => comptime allCpusFromDecls(x86.cpu), + .xcore => comptime allCpusFromDecls(xcore.cpu), .xtensa => comptime allCpusFromDecls(xtensa.cpu), .nvptx, .nvptx64 => comptime allCpusFromDecls(nvptx.cpu), .ve => comptime allCpusFromDecls(ve.cpu), @@ -1525,6 +1531,7 @@ pub const Cpu = struct { .avr => &avr.cpu.avr2, .bpfel, .bpfeb => &bpf.cpu.generic, .hexagon => &hexagon.cpu.generic, + .lanai => &lanai.cpu.generic, .loongarch32 => &loongarch.cpu.generic_la32, .loongarch64 => &loongarch.cpu.generic_la64, .m68k => &m68k.cpu.generic, @@ -1547,6 +1554,7 @@ pub const Cpu = struct { .nvptx, .nvptx64 => &nvptx.cpu.sm_20, .ve => &ve.cpu.generic, .wasm32, .wasm64 => &wasm.cpu.generic, + .xcore => &xcore.cpu.generic, else => &S.generic_model, }; diff --git a/lib/std/Target/lanai.zig b/lib/std/Target/lanai.zig new file mode 100644 index 0000000000000000000000000000000000000000..041934b6d4692a1b7b1a95199f65c897f8ac1549 --- /dev/null +++ b/lib/std/Target/lanai.zig @@ -0,0 +1,37 @@ +//! This file is auto-generated by tools/update_cpu_features.zig. + +const std = @import("../std.zig"); +const CpuFeature = std.Target.Cpu.Feature; +const CpuModel = std.Target.Cpu.Model; + +pub const Feature = enum {}; + +pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet; +pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas; +pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny; +pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll; + +pub const all_features = blk: { + const len = @typeInfo(Feature).@"enum".fields.len; + std.debug.assert(len <= CpuFeature.Set.needed_bit_count); + var result: [len]CpuFeature = undefined; + const ti = @typeInfo(Feature); + for (&result, 0..) |*elem, i| { + elem.index = i; + elem.name = ti.@"enum".fields[i].name; + } + break :blk result; +}; + +pub const cpu = struct { + pub const generic = CpuModel{ + .name = "generic", + .llvm_name = "generic", + .features = featureSet(&[_]Feature{}), + }; + pub const v11 = CpuModel{ + .name = "v11", + .llvm_name = "v11", + .features = featureSet(&[_]Feature{}), + }; +}; diff --git a/lib/std/Target/xcore.zig b/lib/std/Target/xcore.zig new file mode 100644 index 0000000000000000000000000000000000000000..40696208490ca400e02a6f25ca85311f9cda8773 --- /dev/null +++ b/lib/std/Target/xcore.zig @@ -0,0 +1,37 @@ +//! This file is auto-generated by tools/update_cpu_features.zig. + +const std = @import("../std.zig"); +const CpuFeature = std.Target.Cpu.Feature; +const CpuModel = std.Target.Cpu.Model; + +pub const Feature = enum {}; + +pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet; +pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas; +pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny; +pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll; + +pub const all_features = blk: { + const len = @typeInfo(Feature).@"enum".fields.len; + std.debug.assert(len <= CpuFeature.Set.needed_bit_count); + var result: [len]CpuFeature = undefined; + const ti = @typeInfo(Feature); + for (&result, 0..) |*elem, i| { + elem.index = i; + elem.name = ti.@"enum".fields[i].name; + } + break :blk result; +}; + +pub const cpu = struct { + pub const generic = CpuModel{ + .name = "generic", + .llvm_name = "generic", + .features = featureSet(&[_]Feature{}), + }; + pub const xs1b_generic = CpuModel{ + .name = "xs1b_generic", + .llvm_name = "xs1b-generic", + .features = featureSet(&[_]Feature{}), + }; +}; diff --git a/tools/update_cpu_features.zig b/tools/update_cpu_features.zig index 63637d8f780861fd69eea88286aca11c59002233..2681743df09ca77ed4c878d1205620fd1e3672f3 100644 --- a/tools/update_cpu_features.zig +++ b/tools/update_cpu_features.zig @@ -1563,12 +1563,6 @@ fn processOneTarget(job: Job) anyerror!void { const zig_code_basename = try std.fmt.allocPrint(arena, "{s}.zig", .{llvm_target.zig_name}); - if (all_features.items.len == 0) { - // We represent this with an empty file. - try target_dir.deleteTree(zig_code_basename); - return; - } - var zig_code_file = try target_dir.createFile(zig_code_basename, .{}); defer zig_code_file.close(); @@ -1583,11 +1577,12 @@ fn processOneTarget(job: Job) anyerror!void { \\const CpuModel = std.Target.Cpu.Model; \\ \\pub const Feature = enum { - \\ ); - for (all_features.items) |feature| { - try w.print(" {p},\n", .{std.zig.fmtId(feature.zig_name)}); + for (all_features.items, 0..) |feature, i| { + try w.print("\n {p},", .{std.zig.fmtId(feature.zig_name)}); + + if (i == all_features.items.len - 1) try w.writeAll("\n"); } try w.writeAll( -- 2.54.0 From 7d71e794dd22e4c2a38d3aafd4fc604b36d2ac5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Tue, 1 Oct 2024 06:37:25 +0200 Subject: [PATCH 2/5] std.Target: Fix Cpu.Model.generic() for arc, csky, and xtensa. Only targets for which we don't source CPU models/features from LLVM should use the fallback prong in this switch. Also make it exhaustive to catch similar mistakes in the future. --- lib/std/Target.zig | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/std/Target.zig b/lib/std/Target.zig index ab6198f9c7c6917532be4db205a28ddb288da595..b7414112ae7c128c2f9c6bf5c79f3696e4e987aa 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -1526,10 +1526,12 @@ pub const Cpu = struct { }; }; return switch (arch) { + .arc => &arc.cpu.generic, .arm, .armeb, .thumb, .thumbeb => &arm.cpu.generic, .aarch64, .aarch64_be => &aarch64.cpu.generic, .avr => &avr.cpu.avr2, .bpfel, .bpfeb => &bpf.cpu.generic, + .csky => &csky.cpu.generic, .hexagon => &hexagon.cpu.generic, .lanai => &lanai.cpu.generic, .loongarch32 => &loongarch.cpu.generic_la32, @@ -1555,8 +1557,11 @@ pub const Cpu = struct { .ve => &ve.cpu.generic, .wasm32, .wasm64 => &wasm.cpu.generic, .xcore => &xcore.cpu.generic, + .xtensa => &xtensa.cpu.generic, - else => &S.generic_model, + .kalimba, + .spu_2, + => &S.generic_model, }; } -- 2.54.0 From c2ba6127c0008b402ff593d5223652091fe0ccbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Tue, 1 Oct 2024 05:55:29 +0200 Subject: [PATCH 3/5] std.Target: Fix getVersionRangeTag() for bridgeos. Until we actually figure out a version range for this, we shouldn't classify this as using semver. Doing so results in a panic when trying to access the version range since it's not in fact a semver value. --- lib/std/Target.zig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/std/Target.zig b/lib/std/Target.zig index b7414112ae7c128c2f9c6bf5c79f3696e4e987aa..4b58b2e7a3afcee15038b61090365ac8d8f5f73b 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -189,7 +189,9 @@ pub const Os = struct { .other, => .none, - .bridgeos, + // This should use semver once we determine the version history. + .bridgeos => .none, + .driverkit, .freebsd, .macos, -- 2.54.0 From 3f322c49bc5cd16f626c7532f4271148967d3ec9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Tue, 1 Oct 2024 08:41:50 +0200 Subject: [PATCH 4/5] std.Target: Remove Os.Tag.shadermodel. This was a leftover from the Cpu.Arch.dxil removal. --- lib/compiler/aro/aro/target.zig | 1 - lib/std/Target.zig | 8 +------- src/codegen/llvm.zig | 2 -- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/lib/compiler/aro/aro/target.zig b/lib/compiler/aro/aro/target.zig index 5b05e5c9b6e24e3bddba1cf4e2698646eab535f7..7147a57a11571fbd783d6d1f26d3d8d9d1f8148e 100644 --- a/lib/compiler/aro/aro/target.zig +++ b/lib/compiler/aro/aro/target.zig @@ -652,7 +652,6 @@ pub fn toLLVMTriple(target: std.Target, buf: []u8) []const u8 { .tvos => "tvos", .watchos => "watchos", .driverkit => "driverkit", - .shadermodel => "shadermodel", .visionos => "xros", .serenity => "serenity", .bridgeos => "bridgeos", diff --git a/lib/std/Target.zig b/lib/std/Target.zig index 4b58b2e7a3afcee15038b61090365ac8d8f5f73b..a542fd781736b831fe78a54e7d4165b45893f925 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -66,13 +66,13 @@ pub const Os = struct { nvcl, opencl, opengl, - shadermodel, vulkan, // LLVM tags deliberately omitted: // - darwin // - kfreebsd // - nacl + // - shadermodel pub inline fn isDarwin(tag: Tag) bool { return switch (tag) { @@ -178,7 +178,6 @@ pub const Os = struct { .hermit, .hurd, .emscripten, - .shadermodel, .uefi, .opencl, // TODO: OpenCL versions .opengl, // TODO: GLSL versions @@ -410,7 +409,6 @@ pub const Os = struct { .hermit, .hurd, .emscripten, - .shadermodel, .uefi, .opencl, // TODO: OpenCL versions .opengl, // TODO: GLSL versions @@ -615,7 +613,6 @@ pub const Os = struct { .hurd, .wasi, .emscripten, - .shadermodel, .uefi, .opencl, .opengl, @@ -742,7 +739,6 @@ pub const Abi = enum { .watchos, .visionos, .driverkit, - .shadermodel, .solaris, .illumos, .serenity, @@ -1879,7 +1875,6 @@ pub const DynamicLinker = struct { .amdpal, .hermit, .hurd, - .shadermodel, => none, }; } @@ -2372,7 +2367,6 @@ pub fn cTypeBitSize(target: Target, c_type: CType) u16 { .hermit, .hurd, .opengl, - .shadermodel, => @panic("TODO specify the C integer and float type sizes for this OS"), } } diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index f4003347871cbfb96dfc534b6301a3059bb13d89..2c13899bae9c5fd98a3c17d59299ac09368f4410 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -134,7 +134,6 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 { .tvos => "tvos", .watchos => "watchos", .driverkit => "driverkit", - .shadermodel => "shadermodel", .visionos => "xros", .serenity => "serenity", .vulkan => "vulkan", @@ -223,7 +222,6 @@ pub fn targetOs(os_tag: std.Target.Os.Tag) llvm.OSType { .wasi => .WASI, .emscripten => .Emscripten, .driverkit => .DriverKit, - .shadermodel => .ShaderModel, .vulkan => .Vulkan, .serenity => .Serenity, .bridgeos => .BridgeOS, -- 2.54.0 From 530edea1cac5b0dae3ce897cd95246414ea0fc96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Tue, 1 Oct 2024 06:47:55 +0200 Subject: [PATCH 5/5] test: Rewrite the target triple list for llvm_targets. This removes some triples that didn't really make sense (e.g. msp430-linux) and adds more exhaustive coverage of supported triples. --- test/llvm_targets.zig | 328 +++++++++++++++++++++++++++++++++++------- 1 file changed, 278 insertions(+), 50 deletions(-) diff --git a/test/llvm_targets.zig b/test/llvm_targets.zig index 76b9e668fa8c8fea0a114e824ba843b8c6a0b720..e1661cfbd4dd93547244b25cb346079336e4dc89 100644 --- a/test/llvm_targets.zig +++ b/test/llvm_targets.zig @@ -2,115 +2,326 @@ const std = @import("std"); const Cases = @import("src/Cases.zig"); const targets = [_]std.Target.Query{ + .{ .cpu_arch = .aarch64, .os_tag = .bridgeos, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .driverkit, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .freebsd, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .aarch64, .os_tag = .freestanding, .abi = .ilp32 }, + .{ .cpu_arch = .aarch64, .os_tag = .fuchsia, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .haiku, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .hermit, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .hurd, .abi = .gnu }, + .{ .cpu_arch = .aarch64, .os_tag = .ios, .abi = .macabi }, .{ .cpu_arch = .aarch64, .os_tag = .ios, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .ios, .abi = .simulator }, - .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .gnu }, .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .gnuilp32 }, + .{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .macos, .abi = .none }, - .{ .cpu_arch = .aarch64, .os_tag = .watchos, .abi = .none }, - .{ .cpu_arch = .aarch64, .os_tag = .watchos, .abi = .simulator }, + .{ .cpu_arch = .aarch64, .os_tag = .netbsd, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .openbsd, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .rtems, .abi = .ilp32 }, + .{ .cpu_arch = .aarch64, .os_tag = .rtems, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .serenity, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .tvos, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .tvos, .abi = .simulator }, + .{ .cpu_arch = .aarch64, .os_tag = .uefi, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .visionos, .abi = .none }, .{ .cpu_arch = .aarch64, .os_tag = .visionos, .abi = .simulator }, - .{ .cpu_arch = .aarch64, .os_tag = .uefi, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .watchos, .abi = .ilp32 }, + .{ .cpu_arch = .aarch64, .os_tag = .watchos, .abi = .none }, + .{ .cpu_arch = .aarch64, .os_tag = .watchos, .abi = .simulator }, .{ .cpu_arch = .aarch64, .os_tag = .windows, .abi = .gnu }, + .{ .cpu_arch = .aarch64, .os_tag = .windows, .abi = .itanium }, .{ .cpu_arch = .aarch64, .os_tag = .windows, .abi = .msvc }, + .{ .cpu_arch = .aarch64_be, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .gnu }, + .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .gnuilp32 }, .{ .cpu_arch = .aarch64_be, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .aarch64_be, .os_tag = .netbsd, .abi = .none }, + .{ .cpu_arch = .amdgcn, .os_tag = .amdhsa, .abi = .none }, .{ .cpu_arch = .amdgcn, .os_tag = .amdpal, .abi = .none }, - .{ .cpu_arch = .amdgcn, .os_tag = .linux, .abi = .none }, - //.{ .cpu_arch = .amdgcn, .os_tag = .mesa3d, .abi = .none }, + .{ .cpu_arch = .amdgcn, .os_tag = .mesa3d, .abi = .none }, + .{ .cpu_arch = .arc, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .arc, .os_tag = .linux, .abi = .gnu }, .{ .cpu_arch = .arc, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .arm, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .arm, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .none }, - .{ .cpu_arch = .armeb, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .armeb, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .avr, .os_tag = .freebsd, .abi = .none }, + + .{ .cpu_arch = .arm, .os_tag = .freebsd, .abi = .eabi }, + .{ .cpu_arch = .arm, .os_tag = .freebsd, .abi = .eabihf }, + .{ .cpu_arch = .arm, .os_tag = .freestanding, .abi = .eabi }, + .{ .cpu_arch = .arm, .os_tag = .freestanding, .abi = .eabihf }, + .{ .cpu_arch = .arm, .os_tag = .haiku, .abi = .eabi }, + .{ .cpu_arch = .arm, .os_tag = .haiku, .abi = .eabihf }, + .{ .cpu_arch = .arm, .os_tag = .linux, .abi = .eabi }, + .{ .cpu_arch = .arm, .os_tag = .linux, .abi = .eabihf }, + .{ .cpu_arch = .arm, .os_tag = .linux, .abi = .gnueabi }, + .{ .cpu_arch = .arm, .os_tag = .linux, .abi = .gnueabihf }, + .{ .cpu_arch = .arm, .os_tag = .linux, .abi = .musleabi }, + .{ .cpu_arch = .arm, .os_tag = .linux, .abi = .musleabihf }, + .{ .cpu_arch = .arm, .os_tag = .netbsd, .abi = .eabi }, + .{ .cpu_arch = .arm, .os_tag = .netbsd, .abi = .eabihf }, + .{ .cpu_arch = .arm, .os_tag = .openbsd, .abi = .eabi }, + .{ .cpu_arch = .arm, .os_tag = .openbsd, .abi = .eabihf }, + .{ .cpu_arch = .arm, .os_tag = .rtems, .abi = .eabi }, + .{ .cpu_arch = .arm, .os_tag = .rtems, .abi = .eabihf }, + .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .eabi }, + .{ .cpu_arch = .arm, .os_tag = .uefi, .abi = .eabihf }, + + .{ .cpu_arch = .armeb, .os_tag = .freebsd, .abi = .eabi }, + .{ .cpu_arch = .armeb, .os_tag = .freebsd, .abi = .eabihf }, + .{ .cpu_arch = .armeb, .os_tag = .freestanding, .abi = .eabi }, + .{ .cpu_arch = .armeb, .os_tag = .freestanding, .abi = .eabihf }, + .{ .cpu_arch = .armeb, .os_tag = .linux, .abi = .eabi }, + .{ .cpu_arch = .armeb, .os_tag = .linux, .abi = .eabihf }, + .{ .cpu_arch = .armeb, .os_tag = .linux, .abi = .gnueabi }, + .{ .cpu_arch = .armeb, .os_tag = .linux, .abi = .gnueabihf }, + .{ .cpu_arch = .armeb, .os_tag = .linux, .abi = .musleabi }, + .{ .cpu_arch = .armeb, .os_tag = .linux, .abi = .musleabihf }, + .{ .cpu_arch = .armeb, .os_tag = .netbsd, .abi = .eabi }, + .{ .cpu_arch = .armeb, .os_tag = .netbsd, .abi = .eabihf }, + .{ .cpu_arch = .armeb, .os_tag = .rtems, .abi = .eabi }, + .{ .cpu_arch = .armeb, .os_tag = .rtems, .abi = .eabihf }, + .{ .cpu_arch = .avr, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .avr, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .bpfel, .os_tag = .linux, .abi = .gnu }, - .{ .cpu_arch = .bpfel, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .bpfeb, .os_tag = .linux, .abi = .gnu }, - .{ .cpu_arch = .bpfeb, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .avr, .os_tag = .rtems, .abi = .none }, + + .{ .cpu_arch = .bpfeb, .os_tag = .freestanding, .abi = .none }, + + .{ .cpu_arch = .bpfel, .os_tag = .freestanding, .abi = .none }, + + .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .eabi }, + .{ .cpu_arch = .csky, .os_tag = .freestanding, .abi = .eabihf }, + .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .eabi }, + .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .eabihf }, + .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .gnueabi }, + .{ .cpu_arch = .csky, .os_tag = .linux, .abi = .gnueabihf }, + + .{ .cpu_arch = .hexagon, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .hexagon, .os_tag = .linux, .abi = .none }, + + .{ .cpu_arch = .lanai, .os_tag = .freestanding, .abi = .none }, + + .{ .cpu_arch = .loongarch32, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnu }, + .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnuf32 }, + .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .gnusf }, + .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .musl }, + .{ .cpu_arch = .loongarch32, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .loongarch32, .os_tag = .uefi, .abi = .none }, + + .{ .cpu_arch = .loongarch64, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnu }, + .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnuf32 }, + .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnusf }, + .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .musl }, + .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .loongarch64, .os_tag = .uefi, .abi = .none }, + .{ .cpu_arch = .m68k, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .m68k, .os_tag = .haiku, .abi = .none }, + .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .gnu }, .{ .cpu_arch = .m68k, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .m68k, .os_tag = .netbsd, .abi = .none }, + .{ .cpu_arch = .m68k, .os_tag = .rtems, .abi = .none }, + + .{ .cpu_arch = .mips, .os_tag = .freebsd, .abi = .eabi }, + .{ .cpu_arch = .mips, .os_tag = .freebsd, .abi = .eabihf }, + .{ .cpu_arch = .mips, .os_tag = .freestanding, .abi = .eabi }, + .{ .cpu_arch = .mips, .os_tag = .freestanding, .abi = .eabihf }, + .{ .cpu_arch = .mips, .os_tag = .linux, .abi = .eabi }, + .{ .cpu_arch = .mips, .os_tag = .linux, .abi = .eabihf }, + .{ .cpu_arch = .mips, .os_tag = .linux, .abi = .gnueabi }, .{ .cpu_arch = .mips, .os_tag = .linux, .abi = .gnueabihf }, - .{ .cpu_arch = .mips, .os_tag = .linux, .abi = .musl }, - .{ .cpu_arch = .mips, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .mips, .os_tag = .linux, .abi = .musleabi }, + .{ .cpu_arch = .mips, .os_tag = .linux, .abi = .musleabihf }, + .{ .cpu_arch = .mips, .os_tag = .netbsd, .abi = .eabi }, + .{ .cpu_arch = .mips, .os_tag = .netbsd, .abi = .eabihf }, + .{ .cpu_arch = .mips, .os_tag = .rtems, .abi = .eabi }, + .{ .cpu_arch = .mips, .os_tag = .rtems, .abi = .eabihf }, + + .{ .cpu_arch = .mipsel, .os_tag = .freebsd, .abi = .eabi }, + .{ .cpu_arch = .mipsel, .os_tag = .freebsd, .abi = .eabihf }, + .{ .cpu_arch = .mipsel, .os_tag = .freestanding, .abi = .eabi }, + .{ .cpu_arch = .mipsel, .os_tag = .freestanding, .abi = .eabihf }, + .{ .cpu_arch = .mipsel, .os_tag = .linux, .abi = .eabi }, + .{ .cpu_arch = .mipsel, .os_tag = .linux, .abi = .eabihf }, + .{ .cpu_arch = .mipsel, .os_tag = .linux, .abi = .gnueabi }, .{ .cpu_arch = .mipsel, .os_tag = .linux, .abi = .gnueabihf }, - .{ .cpu_arch = .mipsel, .os_tag = .linux, .abi = .musl }, - .{ .cpu_arch = .mipsel, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .mipsel, .os_tag = .linux, .abi = .musleabi }, + .{ .cpu_arch = .mipsel, .os_tag = .linux, .abi = .musleabihf }, + .{ .cpu_arch = .mipsel, .os_tag = .netbsd, .abi = .eabi }, + .{ .cpu_arch = .mipsel, .os_tag = .netbsd, .abi = .eabihf }, + .{ .cpu_arch = .mipsel, .os_tag = .rtems, .abi = .eabi }, + .{ .cpu_arch = .mipsel, .os_tag = .rtems, .abi = .eabihf }, + + .{ .cpu_arch = .mips64, .os_tag = .freebsd, .abi = .none }, + .{ .cpu_arch = .mips64, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .mips64, .os_tag = .linux, .abi = .gnuabi64 }, + .{ .cpu_arch = .mips64, .os_tag = .linux, .abi = .gnuabin32 }, + .{ .cpu_arch = .mips64, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .mips64, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .mips64, .os_tag = .netbsd, .abi = .none }, + .{ .cpu_arch = .mips64, .os_tag = .openbsd, .abi = .none }, + + .{ .cpu_arch = .mips64el, .os_tag = .freebsd, .abi = .none }, + .{ .cpu_arch = .mips64el, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .mips64el, .os_tag = .linux, .abi = .gnuabi64 }, + .{ .cpu_arch = .mips64el, .os_tag = .linux, .abi = .gnuabin32 }, + .{ .cpu_arch = .mips64el, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .mips64el, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .msp430, .os_tag = .freebsd, .abi = .none }, + .{ .cpu_arch = .mips64el, .os_tag = .netbsd, .abi = .none }, + .{ .cpu_arch = .mips64el, .os_tag = .openbsd, .abi = .none }, + .{ .cpu_arch = .msp430, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .msp430, .os_tag = .linux, .abi = .none }, - //.{ .cpu_arch = .nvptx, .os_tag = .cuda, .abi = .none }, - //.{ .cpu_arch = .nvptx64, .os_tag = .cuda, .abi = .none }, - .{ .cpu_arch = .powerpc, .os_tag = .freebsd, .abi = .none }, - .{ .cpu_arch = .powerpc, .os_tag = .freestanding, .abi = .none }, + + .{ .cpu_arch = .nvptx, .os_tag = .cuda, .abi = .none }, + .{ .cpu_arch = .nvptx, .os_tag = .nvcl, .abi = .none }, + .{ .cpu_arch = .nvptx64, .os_tag = .cuda, .abi = .none }, + .{ .cpu_arch = .nvptx64, .os_tag = .nvcl, .abi = .none }, + + .{ .cpu_arch = .powerpc, .os_tag = .aix, .abi = .eabi }, + .{ .cpu_arch = .powerpc, .os_tag = .freebsd, .abi = .eabi }, + .{ .cpu_arch = .powerpc, .os_tag = .freebsd, .abi = .eabihf }, + .{ .cpu_arch = .powerpc, .os_tag = .freestanding, .abi = .eabi }, + .{ .cpu_arch = .powerpc, .os_tag = .freestanding, .abi = .eabihf }, + .{ .cpu_arch = .powerpc, .os_tag = .haiku, .abi = .eabi }, + .{ .cpu_arch = .powerpc, .os_tag = .haiku, .abi = .eabihf }, + .{ .cpu_arch = .powerpc, .os_tag = .linux, .abi = .eabi }, + .{ .cpu_arch = .powerpc, .os_tag = .linux, .abi = .eabihf }, + .{ .cpu_arch = .powerpc, .os_tag = .linux, .abi = .gnueabi }, .{ .cpu_arch = .powerpc, .os_tag = .linux, .abi = .gnueabihf }, - .{ .cpu_arch = .powerpc, .os_tag = .linux, .abi = .musl }, - .{ .cpu_arch = .powerpc, .os_tag = .linux, .abi = .none }, - .{ .cpu_arch = .powerpcle, .os_tag = .freebsd, .abi = .none }, - .{ .cpu_arch = .powerpcle, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .powerpcle, .os_tag = .linux, .abi = .gnu }, - .{ .cpu_arch = .powerpcle, .os_tag = .linux, .abi = .musl }, - .{ .cpu_arch = .powerpcle, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .powerpc, .os_tag = .linux, .abi = .musleabi }, + .{ .cpu_arch = .powerpc, .os_tag = .linux, .abi = .musleabihf }, + .{ .cpu_arch = .powerpc, .os_tag = .netbsd, .abi = .eabi }, + .{ .cpu_arch = .powerpc, .os_tag = .netbsd, .abi = .eabihf }, + .{ .cpu_arch = .powerpc, .os_tag = .openbsd, .abi = .eabi }, + .{ .cpu_arch = .powerpc, .os_tag = .openbsd, .abi = .eabihf }, + .{ .cpu_arch = .powerpc, .os_tag = .rtems, .abi = .eabi }, + .{ .cpu_arch = .powerpc, .os_tag = .rtems, .abi = .eabihf }, + + .{ .cpu_arch = .powerpcle, .os_tag = .freestanding, .abi = .eabi }, + .{ .cpu_arch = .powerpcle, .os_tag = .freestanding, .abi = .eabihf }, + + .{ .cpu_arch = .powerpc64, .os_tag = .aix, .abi = .none }, .{ .cpu_arch = .powerpc64, .os_tag = .freebsd, .abi = .none }, .{ .cpu_arch = .powerpc64, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .powerpc64, .os_tag = .linux, .abi = .gnu }, .{ .cpu_arch = .powerpc64, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .powerpc64, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .powerpc64, .os_tag = .openbsd, .abi = .none }, + .{ .cpu_arch = .powerpc64, .os_tag = .rtems, .abi = .none }, + .{ .cpu_arch = .powerpc64le, .os_tag = .freebsd, .abi = .none }, .{ .cpu_arch = .powerpc64le, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .powerpc64le, .os_tag = .linux, .abi = .gnu }, .{ .cpu_arch = .powerpc64le, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .powerpc64le, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .riscv32, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .riscv32, .os_tag = .linux, .abi = .gnu }, + .{ .cpu_arch = .riscv32, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .riscv32, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .riscv32, .os_tag = .rtems, .abi = .none }, + .{ .cpu_arch = .riscv32, .os_tag = .uefi, .abi = .none }, + + .{ .cpu_arch = .riscv64, .os_tag = .freebsd, .abi = .none }, .{ .cpu_arch = .riscv64, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .riscv64, .os_tag = .fuchsia, .abi = .none }, + .{ .cpu_arch = .riscv64, .os_tag = .haiku, .abi = .none }, + .{ .cpu_arch = .riscv64, .os_tag = .hermit, .abi = .none }, .{ .cpu_arch = .riscv64, .os_tag = .linux, .abi = .gnu }, .{ .cpu_arch = .riscv64, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .riscv64, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .riscv64, .os_tag = .netbsd, .abi = .none }, + .{ .cpu_arch = .riscv64, .os_tag = .openbsd, .abi = .none }, + .{ .cpu_arch = .riscv64, .os_tag = .rtems, .abi = .none }, + .{ .cpu_arch = .riscv64, .os_tag = .serenity, .abi = .none }, + .{ .cpu_arch = .riscv64, .os_tag = .uefi, .abi = .none }, + .{ .cpu_arch = .s390x, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .s390x, .os_tag = .linux, .abi = .gnu }, + .{ .cpu_arch = .s390x, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .s390x, .os_tag = .zos, .abi = .none }, + .{ .cpu_arch = .sparc, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .sparc, .os_tag = .linux, .abi = .gnu }, .{ .cpu_arch = .sparc, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .sparc, .os_tag = .netbsd, .abi = .none }, + .{ .cpu_arch = .sparc, .os_tag = .rtems, .abi = .none }, + + .{ .cpu_arch = .sparc64, .os_tag = .freebsd, .abi = .none }, .{ .cpu_arch = .sparc64, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .sparc64, .os_tag = .haiku, .abi = .none }, + .{ .cpu_arch = .sparc64, .os_tag = .illumos, .abi = .none }, .{ .cpu_arch = .sparc64, .os_tag = .linux, .abi = .gnu }, - //.{ .cpu_arch = .spirv32, .os_tag = .opencl, .abi = .none }, - //.{ .cpu_arch = .spirv32, .os_tag = .opengl, .abi = .none }, - //.{ .cpu_arch = .spirv32, .os_tag = .vulkan, .abi = .none }, - //.{ .cpu_arch = .spirv64, .os_tag = .opencl, .abi = .none }, - //.{ .cpu_arch = .spirv64, .os_tag = .opengl, .abi = .none }, - //.{ .cpu_arch = .spirv64, .os_tag = .vulkan, .abi = .none }, - .{ .cpu_arch = .thumb, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .thumbeb, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .sparc64, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .sparc64, .os_tag = .netbsd, .abi = .none }, + .{ .cpu_arch = .sparc64, .os_tag = .openbsd, .abi = .none }, + .{ .cpu_arch = .sparc64, .os_tag = .rtems, .abi = .none }, + .{ .cpu_arch = .sparc64, .os_tag = .solaris, .abi = .none }, + + .{ .cpu_arch = .thumb, .os_tag = .freebsd, .abi = .eabi }, + .{ .cpu_arch = .thumb, .os_tag = .freebsd, .abi = .eabihf }, + .{ .cpu_arch = .thumb, .os_tag = .freestanding, .abi = .eabi }, + .{ .cpu_arch = .thumb, .os_tag = .freestanding, .abi = .eabihf }, + .{ .cpu_arch = .thumb, .os_tag = .linux, .abi = .eabi }, + .{ .cpu_arch = .thumb, .os_tag = .linux, .abi = .eabihf }, + .{ .cpu_arch = .thumb, .os_tag = .linux, .abi = .musleabi }, + .{ .cpu_arch = .thumb, .os_tag = .linux, .abi = .musleabihf }, + .{ .cpu_arch = .thumb, .os_tag = .netbsd, .abi = .eabi }, + .{ .cpu_arch = .thumb, .os_tag = .netbsd, .abi = .eabihf }, + .{ .cpu_arch = .thumb, .os_tag = .openbsd, .abi = .eabi }, + .{ .cpu_arch = .thumb, .os_tag = .openbsd, .abi = .eabihf }, + .{ .cpu_arch = .thumb, .os_tag = .rtems, .abi = .eabi }, + .{ .cpu_arch = .thumb, .os_tag = .rtems, .abi = .eabihf }, + .{ .cpu_arch = .thumb, .os_tag = .windows, .abi = .gnu }, + .{ .cpu_arch = .thumb, .os_tag = .windows, .abi = .itanium }, + .{ .cpu_arch = .thumb, .os_tag = .windows, .abi = .msvc }, + + .{ .cpu_arch = .thumbeb, .os_tag = .freebsd, .abi = .eabi }, + .{ .cpu_arch = .thumbeb, .os_tag = .freebsd, .abi = .eabihf }, + .{ .cpu_arch = .thumbeb, .os_tag = .freestanding, .abi = .eabi }, + .{ .cpu_arch = .thumbeb, .os_tag = .freestanding, .abi = .eabihf }, + .{ .cpu_arch = .thumbeb, .os_tag = .linux, .abi = .eabi }, + .{ .cpu_arch = .thumbeb, .os_tag = .linux, .abi = .eabihf }, + .{ .cpu_arch = .thumbeb, .os_tag = .linux, .abi = .musleabi }, + .{ .cpu_arch = .thumbeb, .os_tag = .linux, .abi = .musleabihf }, + .{ .cpu_arch = .thumbeb, .os_tag = .netbsd, .abi = .eabi }, + .{ .cpu_arch = .thumbeb, .os_tag = .netbsd, .abi = .eabihf }, + .{ .cpu_arch = .thumbeb, .os_tag = .rtems, .abi = .eabi }, + .{ .cpu_arch = .thumbeb, .os_tag = .rtems, .abi = .eabihf }, + + .{ .cpu_arch = .ve, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .ve, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .wasm32, .os_tag = .emscripten, .abi = .none }, .{ .cpu_arch = .wasm32, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .wasm32, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .wasm32, .os_tag = .wasi, .abi = .musl }, .{ .cpu_arch = .wasm32, .os_tag = .wasi, .abi = .none }, + .{ .cpu_arch = .wasm64, .os_tag = .emscripten, .abi = .none }, .{ .cpu_arch = .wasm64, .os_tag = .freestanding, .abi = .none }, - .{ .cpu_arch = .wasm64, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .wasm64, .os_tag = .wasi, .abi = .musl }, .{ .cpu_arch = .wasm64, .os_tag = .wasi, .abi = .none }, + + .{ .cpu_arch = .x86, .os_tag = .elfiamcu, .abi = .none }, + .{ .cpu_arch = .x86, .os_tag = .freebsd, .abi = .none }, .{ .cpu_arch = .x86, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .x86, .os_tag = .haiku, .abi = .none }, + .{ .cpu_arch = .x86, .os_tag = .hurd, .abi = .gnu }, + .{ .cpu_arch = .x86, .os_tag = .linux, .abi = .gnu }, + .{ .cpu_arch = .x86, .os_tag = .linux, .abi = .musl }, .{ .cpu_arch = .x86, .os_tag = .linux, .abi = .none }, + .{ .cpu_arch = .x86, .os_tag = .netbsd, .abi = .none }, + .{ .cpu_arch = .x86, .os_tag = .openbsd, .abi = .none }, + .{ .cpu_arch = .x86, .os_tag = .rtems, .abi = .none }, .{ .cpu_arch = .x86, .os_tag = .uefi, .abi = .none }, .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .gnu }, + .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .itanium }, .{ .cpu_arch = .x86, .os_tag = .windows, .abi = .msvc }, + .{ .cpu_arch = .x86_64, .os_tag = .freebsd, .abi = .none }, .{ .cpu_arch = .x86_64, .os_tag = .freestanding, .abi = .none }, .{ @@ -120,15 +331,32 @@ const targets = [_]std.Target.Query{ .cpu_features_add = std.Target.x86.featureSet(&.{.soft_float}), .cpu_features_sub = std.Target.x86.featureSet(&.{ .mmx, .sse, .sse2, .avx, .avx2 }), }, + .{ .cpu_arch = .x86_64, .os_tag = .fuchsia, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .dragonfly, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .driverkit, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .haiku, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .hermit, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .hurd, .abi = .gnu }, + .{ .cpu_arch = .x86_64, .os_tag = .illumos, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .ios, .abi = .macabi }, .{ .cpu_arch = .x86_64, .os_tag = .ios, .abi = .simulator }, - .{ .cpu_arch = .x86_64, .os_tag = .watchos, .abi = .simulator }, - .{ .cpu_arch = .x86_64, .os_tag = .tvos, .abi = .simulator }, - .{ .cpu_arch = .x86_64, .os_tag = .visionos, .abi = .simulator }, .{ .cpu_arch = .x86_64, .os_tag = .linux, .abi = .none }, .{ .cpu_arch = .x86_64, .os_tag = .macos, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .netbsd, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .openbsd, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .rtems, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .serenity, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .solaris, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .tvos, .abi = .simulator }, .{ .cpu_arch = .x86_64, .os_tag = .uefi, .abi = .none }, + .{ .cpu_arch = .x86_64, .os_tag = .visionos, .abi = .simulator }, + .{ .cpu_arch = .x86_64, .os_tag = .watchos, .abi = .simulator }, .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .gnu }, + .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .itanium }, .{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .msvc }, + + .{ .cpu_arch = .xcore, .os_tag = .freestanding, .abi = .none }, + .{ .cpu_arch = .xtensa, .os_tag = .freestanding, .abi = .none }, .{ .cpu_arch = .xtensa, .os_tag = .linux, .abi = .none }, }; -- 2.54.0