Commit 221bd829bc

Alex Rønne Petersen <alex@alexrp.com>
2024-10-06 13:28:30
std.Target: Rewrite Abi.default() to have better defaults across the board.
1 parent b6b86cb
Changed files (1)
lib
lib/std/Target.zig
@@ -701,50 +701,111 @@ pub const Abi = enum {
     pub fn default(arch: Cpu.Arch, os: Os) Abi {
         return if (arch.isWasm()) .musl else switch (os.tag) {
             .freestanding,
-            .dragonfly,
-            .ps3,
-            .zos,
-            .rtems,
-            .aix,
-            .cuda,
-            .nvcl,
-            .amdhsa,
-            .ps4,
-            .ps5,
-            .elfiamcu,
-            .mesa3d,
-            .contiki,
-            .amdpal,
-            .hermit,
             .other,
-            => .eabi,
-            .openbsd,
-            .freebsd,
-            .fuchsia,
-            .netbsd,
-            .hurd,
-            .haiku,
-            .windows,
-            => .gnu,
-            .uefi => .msvc,
+            => switch (arch) {
+                // Soft float is usually a sane default for freestanding.
+                .arm,
+                .armeb,
+                .thumb,
+                .thumbeb,
+                .csky,
+                .mips,
+                .mipsel,
+                .powerpc,
+                .powerpcle,
+                => .eabi,
+                else => .none,
+            },
+            .aix,
+            => if (arch == .powerpc) .eabihf else .none,
             .linux,
             .wasi,
             .emscripten,
             => .musl,
-            .bridgeos,
-            .opencl,
-            .opengl,
-            .vulkan,
-            .plan9, // TODO specify abi
-            .macos,
+            .rtems,
+            => switch (arch) {
+                .arm,
+                .armeb,
+                .thumb,
+                .thumbeb,
+                .mips,
+                .mipsel,
+                => .eabi,
+                .powerpc,
+                => .eabihf,
+                else => .none,
+            },
+            .hurd,
+            .windows,
+            => .gnu,
+            .freebsd,
+            => switch (arch) {
+                .arm,
+                .armeb,
+                .thumb,
+                .thumbeb,
+                .powerpc,
+                => .eabihf,
+                .mips,
+                .mipsel,
+                => .eabi,
+                else => .none,
+            },
+            .netbsd,
+            => switch (arch) {
+                .arm,
+                .armeb,
+                .thumb,
+                .thumbeb,
+                .powerpc,
+                => .eabihf,
+                .mips,
+                .mipsel,
+                => .eabi,
+                else => .none,
+            },
+            .openbsd,
+            => switch (arch) {
+                .arm,
+                .thumb,
+                => .eabi,
+                .powerpc,
+                => .eabihf,
+                else => .none,
+            },
             .ios,
+            => if (arch == .x86_64) .macabi else .none,
             .tvos,
-            .watchos,
             .visionos,
+            => if (arch == .x86_64) .simulator else .none,
+            .uefi,
+            => .msvc,
+            .contiki,
+            .elfiamcu,
+            .fuchsia,
+            .hermit,
+            .haiku,
+            .plan9,
+            .serenity,
+            .zos,
+            .dragonfly,
+            .bridgeos,
             .driverkit,
-            .solaris,
+            .macos,
+            .watchos,
             .illumos,
-            .serenity,
+            .solaris,
+            .ps3,
+            .ps4,
+            .ps5,
+            .amdhsa,
+            .amdpal,
+            .cuda,
+            .mesa3d,
+            .nvcl,
+            .opencl,
+            .opengl,
+            .vulkan,
             => .none,
         };
     }