authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-07-07 15:33:50+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-07-07 15:34:40+02:00
log164578636cfe760ab03f8f37f039ca7e5a0c801b
treeb4bbe112805fccf4570d1a7256d355c176fc48b2
parenta3c08eccbe30255b744ba14dca0061b396a84bab
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.Target: add switch (Nintendo Switch) Os tag

contributes to https://codeberg.org/ziglang/zig/issues/31341

8 files changed, 39 insertions(+), 5 deletions(-)

lib/std/Build/Configuration.zig+3
......@@ -2618,6 +2618,7 @@ pub const TargetQuery = struct {
26182618 uefi,
26192619 @"3ds",
26202620 wiiu,
2621 @"switch",
26212622 psx,
26222623 ps3,
26232624 ps4,
......@@ -2669,6 +2670,7 @@ pub const TargetQuery = struct {
26692670 .uefi => .uefi,
26702671 .@"3ds" => .@"3ds",
26712672 .wiiu => .wiiu,
2673 .@"switch" => .@"switch",
26722674 .psx => .psx,
26732675 .ps3 => .ps3,
26742676 .ps4 => .ps4,
......@@ -2720,6 +2722,7 @@ pub const TargetQuery = struct {
27202722 .uefi => .uefi,
27212723 .@"3ds" => .@"3ds",
27222724 .wiiu => .wiiu,
2725 .@"switch" => .@"switch",
27232726 .psx => .psx,
27242727 .ps3 => .ps3,
27252728 .ps4 => .ps4,
lib/std/Target.zig+23-1
......@@ -50,6 +50,7 @@ pub const Os = struct {
5050
5151 @"3ds",
5252 wiiu,
53 @"switch",
5354
5455 psx,
5556 ps3,
......@@ -196,6 +197,7 @@ pub const Os = struct {
196197
197198 .@"3ds",
198199 .wiiu,
200 .@"switch",
199201
200202 .psp,
201203 .vita,
......@@ -632,6 +634,13 @@ pub const Os = struct {
632634 },
633635 },
634636
637 .@"switch" => .{
638 .semver = .{
639 .min = .{ .major = 1, .minor = 0, .patch = 0 },
640 .max = .{ .major = 22, .minor = 5, .patch = 0 },
641 },
642 },
643
635644 .psp => .{
636645 .semver = .{
637646 // https://www.psdevwiki.com/psp/Official_Firmware_(OFW)#1.XX_Kernel
......@@ -944,6 +953,7 @@ pub const Abi = enum {
944953 .tvos,
945954 .visionos,
946955 .watchos,
956 .@"switch",
947957 .ps3,
948958 .ps4,
949959 .ps5,
......@@ -2040,6 +2050,7 @@ pub const Cpu = struct {
20402050 .ios, .tvos => &aarch64.cpu.apple_a7,
20412051 .visionos => &aarch64.cpu.apple_m2,
20422052 .watchos => &aarch64.cpu.apple_s4,
2053 .@"switch" => &aarch64.cpu.cortex_a57,
20432054 else => generic(arch),
20442055 },
20452056 .avr => &avr.cpu.avr2,
......@@ -2271,8 +2282,9 @@ pub fn requiresLibC(target: *const Target) bool {
22712282 .plan9,
22722283 .other,
22732284 .@"3ds",
2274 .tios,
22752285 .wiiu,
2286 .@"switch",
2287 .tios,
22762288 .ashetos,
22772289 => false,
22782290 };
......@@ -2421,6 +2433,7 @@ pub const DynamicLinker = struct {
24212433
24222434 .@"3ds",
24232435 .wiiu,
2436 .@"switch",
24242437
24252438 .emscripten,
24262439 .wasi,
......@@ -2845,6 +2858,7 @@ pub const DynamicLinker = struct {
28452858
28462859 .@"3ds",
28472860 .wiiu,
2861 .@"switch",
28482862
28492863 .psx,
28502864 .psp,
......@@ -3410,6 +3424,14 @@ pub fn cTypeBitSize(target: *const Target, c_type: CType) u16 {
34103424 .longlong, .ulonglong, .double, .longdouble => return 64,
34113425 },
34123426
3427 .@"switch" => switch (c_type) {
3428 .char => return 8,
3429 .short, .ushort => return 16,
3430 .int, .uint, .float => return 32,
3431 .long, .ulong, .longlong, .ulonglong, .double => return 64,
3432 .longdouble => return 128,
3433 },
3434
34133435 .psx => switch (c_type) {
34143436 .char => return 8,
34153437 .short, .ushort => return 16,
lib/std/debug.zig+1
......@@ -511,6 +511,7 @@ pub fn defaultPanic(msg: []const u8, first_trace_addr: ?usize) noreturn {
511511
512512 .@"3ds",
513513 .wiiu,
514 .@"switch",
514515
515516 .psx,
516517 .psp,
lib/std/start.zig+1
......@@ -78,6 +78,7 @@ comptime {
7878
7979 .@"3ds",
8080 .wiiu,
81 .@"switch",
8182
8283 .psx,
8384 .psp,
src/Compilation.zig+1
......@@ -6196,6 +6196,7 @@ fn addCommonCCArgs(
61966196 // Homebrew targets without LLVM support; use communities's preferred macros.
61976197 .@"3ds" => try argv.append("-D__3DS__"),
61986198 .wiiu => try argv.append("-D__WIIU__"),
6199 .@"switch" => try argv.append("-D__SWITCH__"),
61996200 .psx => try argv.append("-D__psx__"),
62006201 .psp => try argv.append("-D__PSP__"),
62016202 .vita => try argv.append("-D__vita__"),
src/codegen/llvm.zig+2-1
......@@ -239,7 +239,6 @@ pub fn targetTriple(allocator: Allocator, target: *const std.Target) ![]const u8
239239 .vulkan => "vulkan",
240240 .managarm => "managarm",
241241
242 .@"3ds",
243242 .contiki,
244243 .freestanding,
245244 .opencl, // https://llvm.org/docs/SPIRVUsage.html#target-triples
......@@ -250,7 +249,9 @@ pub fn targetTriple(allocator: Allocator, target: *const std.Target) ![]const u8
250249 .psp,
251250 .vita,
252251 .tios,
252 .@"3ds",
253253 .wiiu,
254 .@"switch",
254255 .ashetos,
255256 => "unknown",
256257 };
src/target.zig+7-3
......@@ -62,9 +62,13 @@ pub fn libCxxNeedsLibUnwind(target: *const std.Target) bool {
6262}
6363
6464pub fn requiresPie(target: *const std.Target, link_mode: std.lang.LinkMode) bool {
65 return target.os.tag == .fuchsia or
66 (target.abi.isAndroid() and link_mode == .dynamic) or
67 target.os.tag == .ashetos;
65 return switch (target.os.tag) {
66 .ashetos,
67 .fuchsia,
68 .@"switch",
69 => true,
70 else => target.abi.isAndroid() and link_mode == .dynamic,
71 };
6872}
6973
7074/// This function returns whether non-pic code is completely invalid on the given target.
test/llvm_targets.zig+1
......@@ -22,6 +22,7 @@ const targets = [_]std.Target.Query{
2222 .{ .cpu_arch = .aarch64, .os_tag = .openbsd, .abi = .none },
2323 .{ .cpu_arch = .aarch64, .os_tag = .rtems, .abi = .none },
2424 .{ .cpu_arch = .aarch64, .os_tag = .serenity, .abi = .none },
25 .{ .cpu_arch = .aarch64, .os_tag = .@"switch", .abi = .none },
2526 .{ .cpu_arch = .aarch64, .os_tag = .tvos, .abi = .none },
2627 .{ .cpu_arch = .aarch64, .os_tag = .tvos, .abi = .simulator },
2728 .{ .cpu_arch = .aarch64, .os_tag = .uefi, .abi = .none },