| ... | @@ -4,80 +4,81 @@ pub const ArchOsAbi = struct { | ... | @@ -4,80 +4,81 @@ pub const ArchOsAbi = struct { |
| 4 | abi: std.Target.Abi, | 4 | abi: std.Target.Abi, |
| 5 | os_ver: ?std.SemanticVersion = null, | 5 | os_ver: ?std.SemanticVersion = null, |
| 6 | | 6 | |
| 7 | /// Minimum glibc version that provides support for the arch/os when ABI is GNU. | 7 | /// Minimum glibc version that provides support for the arch/OS when ABI is GNU. Note that Zig |
| | 8 | /// can only target glibc 2.2.5+, so `null` means the minimum is older than that. |
| 8 | glibc_min: ?std.SemanticVersion = null, | 9 | glibc_min: ?std.SemanticVersion = null, |
| 9 | /// Override for `glibcRuntimeTriple` when glibc has an unusual directory name for the target. | 10 | /// Override for `glibcRuntimeTriple` when glibc has an unusual directory name for the target. |
| 10 | glibc_triple: ?[]const u8 = null, | 11 | glibc_triple: ?[]const u8 = null, |
| 11 | }; | 12 | }; |
| 12 | | 13 | |
| 13 | pub const available_libcs = [_]ArchOsAbi{ | 14 | pub const available_libcs = [_]ArchOsAbi{ |
| 14 | .{ .arch = .arc, .os = .linux, .abi = .gnu, .glibc_min = .{ .major = 2, .minor = 32, .patch = 0 } }, | 15 | .{ .arch = .arc, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 4, .minor = 2, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 32, .patch = 0 } }, |
| 15 | .{ .arch = .arm, .os = .linux, .abi = .gnueabi }, | 16 | .{ .arch = .arm, .os = .linux, .abi = .gnueabi, .os_ver = .{ .major = 2, .minor = 1, .patch = 0 } }, |
| 16 | .{ .arch = .arm, .os = .linux, .abi = .gnueabihf }, | 17 | .{ .arch = .arm, .os = .linux, .abi = .gnueabihf, .os_ver = .{ .major = 2, .minor = 1, .patch = 0 } }, |
| 17 | .{ .arch = .arm, .os = .linux, .abi = .musleabi }, | 18 | .{ .arch = .arm, .os = .linux, .abi = .musleabi, .os_ver = .{ .major = 2, .minor = 1, .patch = 0 } }, |
| 18 | .{ .arch = .arm, .os = .linux, .abi = .musleabihf }, | 19 | .{ .arch = .arm, .os = .linux, .abi = .musleabihf, .os_ver = .{ .major = 2, .minor = 1, .patch = 0 } }, |
| 19 | .{ .arch = .armeb, .os = .linux, .abi = .gnueabi }, | 20 | .{ .arch = .armeb, .os = .linux, .abi = .gnueabi, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 } }, |
| 20 | .{ .arch = .armeb, .os = .linux, .abi = .gnueabihf }, | 21 | .{ .arch = .armeb, .os = .linux, .abi = .gnueabihf, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 } }, |
| 21 | .{ .arch = .armeb, .os = .linux, .abi = .musleabi }, | 22 | .{ .arch = .armeb, .os = .linux, .abi = .musleabi, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 } }, |
| 22 | .{ .arch = .armeb, .os = .linux, .abi = .musleabihf }, | 23 | .{ .arch = .armeb, .os = .linux, .abi = .musleabihf, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 } }, |
| 23 | .{ .arch = .thumb, .os = .linux, .abi = .musleabi }, | 24 | .{ .arch = .thumb, .os = .linux, .abi = .musleabi, .os_ver = .{ .major = 2, .minor = 1, .patch = 0 } }, |
| 24 | .{ .arch = .thumb, .os = .linux, .abi = .musleabihf }, | 25 | .{ .arch = .thumb, .os = .linux, .abi = .musleabihf, .os_ver = .{ .major = 2, .minor = 1, .patch = 0 } }, |
| 25 | .{ .arch = .thumb, .os = .windows, .abi = .gnu }, | 26 | .{ .arch = .thumb, .os = .windows, .abi = .gnu }, |
| 26 | .{ .arch = .thumbeb, .os = .linux, .abi = .musleabi }, | 27 | .{ .arch = .thumbeb, .os = .linux, .abi = .musleabi, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 } }, |
| 27 | .{ .arch = .thumbeb, .os = .linux, .abi = .musleabihf }, | 28 | .{ .arch = .thumbeb, .os = .linux, .abi = .musleabihf, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 } }, |
| 28 | .{ .arch = .aarch64, .os = .linux, .abi = .gnu, .glibc_min = .{ .major = 2, .minor = 17, .patch = 0 } }, | 29 | .{ .arch = .aarch64, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 3, .minor = 7, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 17, .patch = 0 } }, |
| 29 | .{ .arch = .aarch64, .os = .linux, .abi = .musl }, | 30 | .{ .arch = .aarch64, .os = .linux, .abi = .musl, .os_ver = .{ .major = 3, .minor = 7, .patch = 0 } }, |
| 30 | .{ .arch = .aarch64, .os = .macos, .abi = .none, .os_ver = .{ .major = 11, .minor = 0, .patch = 0 } }, | 31 | .{ .arch = .aarch64, .os = .macos, .abi = .none, .os_ver = .{ .major = 11, .minor = 0, .patch = 0 } }, |
| 31 | .{ .arch = .aarch64, .os = .windows, .abi = .gnu }, | 32 | .{ .arch = .aarch64, .os = .windows, .abi = .gnu }, |
| 32 | .{ .arch = .aarch64_be, .os = .linux, .abi = .gnu, .glibc_min = .{ .major = 2, .minor = 17, .patch = 0 } }, | 33 | .{ .arch = .aarch64_be, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 3, .minor = 13, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 17, .patch = 0 } }, |
| 33 | .{ .arch = .aarch64_be, .os = .linux, .abi = .musl }, | 34 | .{ .arch = .aarch64_be, .os = .linux, .abi = .musl, .os_ver = .{ .major = 3, .minor = 13, .patch = 0 } }, |
| 34 | .{ .arch = .csky, .os = .linux, .abi = .gnueabi, .glibc_min = .{ .major = 2, .minor = 29, .patch = 0 }, .glibc_triple = "csky-linux-gnuabiv2-soft" }, | 35 | .{ .arch = .csky, .os = .linux, .abi = .gnueabi, .os_ver = .{ .major = 4, .minor = 20, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 29, .patch = 0 }, .glibc_triple = "csky-linux-gnuabiv2-soft" }, |
| 35 | .{ .arch = .csky, .os = .linux, .abi = .gnueabihf, .glibc_min = .{ .major = 2, .minor = 29, .patch = 0 }, .glibc_triple = "csky-linux-gnuabiv2" }, | 36 | .{ .arch = .csky, .os = .linux, .abi = .gnueabihf, .os_ver = .{ .major = 4, .minor = 20, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 29, .patch = 0 }, .glibc_triple = "csky-linux-gnuabiv2" }, |
| 36 | .{ .arch = .loongarch64, .os = .linux, .abi = .gnu, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 }, .glibc_triple = "loongarch64-linux-gnu-lp64d" }, | 37 | .{ .arch = .loongarch64, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 5, .minor = 19, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 }, .glibc_triple = "loongarch64-linux-gnu-lp64d" }, |
| 37 | .{ .arch = .loongarch64, .os = .linux, .abi = .gnusf, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 }, .glibc_triple = "loongarch64-linux-gnu-lp64s" }, | 38 | .{ .arch = .loongarch64, .os = .linux, .abi = .gnusf, .os_ver = .{ .major = 5, .minor = 19, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 }, .glibc_triple = "loongarch64-linux-gnu-lp64s" }, |
| 38 | .{ .arch = .loongarch64, .os = .linux, .abi = .musl }, | 39 | .{ .arch = .loongarch64, .os = .linux, .abi = .musl, .os_ver = .{ .major = 5, .minor = 19, .patch = 0 } }, |
| 39 | .{ .arch = .m68k, .os = .linux, .abi = .gnu }, | 40 | .{ .arch = .m68k, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 1, .minor = 3, .patch = 94 } }, |
| 40 | .{ .arch = .m68k, .os = .linux, .abi = .musl }, | 41 | .{ .arch = .m68k, .os = .linux, .abi = .musl, .os_ver = .{ .major = 1, .minor = 3, .patch = 94 } }, |
| 41 | .{ .arch = .mips, .os = .linux, .abi = .gnueabi, .glibc_triple = "mips-linux-gnu-soft" }, | 42 | .{ .arch = .mips, .os = .linux, .abi = .gnueabi, .os_ver = .{ .major = 1, .minor = 1, .patch = 82 }, .glibc_triple = "mips-linux-gnu-soft" }, |
| 42 | .{ .arch = .mips, .os = .linux, .abi = .gnueabihf, .glibc_triple = "mips-linux-gnu" }, | 43 | .{ .arch = .mips, .os = .linux, .abi = .gnueabihf, .os_ver = .{ .major = 1, .minor = 1, .patch = 82 }, .glibc_triple = "mips-linux-gnu" }, |
| 43 | .{ .arch = .mips, .os = .linux, .abi = .musleabi }, | 44 | .{ .arch = .mips, .os = .linux, .abi = .musleabi, .os_ver = .{ .major = 1, .minor = 1, .patch = 82 } }, |
| 44 | .{ .arch = .mips, .os = .linux, .abi = .musleabihf }, | 45 | .{ .arch = .mips, .os = .linux, .abi = .musleabihf, .os_ver = .{ .major = 1, .minor = 1, .patch = 82 } }, |
| 45 | .{ .arch = .mipsel, .os = .linux, .abi = .gnueabi, .glibc_triple = "mipsel-linux-gnu-soft" }, | 46 | .{ .arch = .mipsel, .os = .linux, .abi = .gnueabi, .os_ver = .{ .major = 1, .minor = 1, .patch = 82 }, .glibc_triple = "mipsel-linux-gnu-soft" }, |
| 46 | .{ .arch = .mipsel, .os = .linux, .abi = .gnueabihf, .glibc_triple = "mipsel-linux-gnu" }, | 47 | .{ .arch = .mipsel, .os = .linux, .abi = .gnueabihf, .os_ver = .{ .major = 1, .minor = 1, .patch = 82 }, .glibc_triple = "mipsel-linux-gnu" }, |
| 47 | .{ .arch = .mipsel, .os = .linux, .abi = .musleabi }, | 48 | .{ .arch = .mipsel, .os = .linux, .abi = .musleabi, .os_ver = .{ .major = 1, .minor = 1, .patch = 82 } }, |
| 48 | .{ .arch = .mipsel, .os = .linux, .abi = .musleabihf }, | 49 | .{ .arch = .mipsel, .os = .linux, .abi = .musleabihf, .os_ver = .{ .major = 1, .minor = 1, .patch = 82 } }, |
| 49 | .{ .arch = .mips64, .os = .linux, .abi = .gnuabi64, .glibc_triple = "mips64-linux-gnu-n64" }, | 50 | .{ .arch = .mips64, .os = .linux, .abi = .gnuabi64, .os_ver = .{ .major = 2, .minor = 3, .patch = 48 }, .glibc_triple = "mips64-linux-gnu-n64" }, |
| 50 | .{ .arch = .mips64, .os = .linux, .abi = .gnuabin32, .glibc_triple = "mips64-linux-gnu-n32" }, | 51 | .{ .arch = .mips64, .os = .linux, .abi = .gnuabin32, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 }, .glibc_triple = "mips64-linux-gnu-n32" }, |
| 51 | .{ .arch = .mips64, .os = .linux, .abi = .muslabi64 }, | 52 | .{ .arch = .mips64, .os = .linux, .abi = .muslabi64, .os_ver = .{ .major = 2, .minor = 3, .patch = 48 } }, |
| 52 | .{ .arch = .mips64, .os = .linux, .abi = .muslabin32 }, | 53 | .{ .arch = .mips64, .os = .linux, .abi = .muslabin32, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 } }, |
| 53 | .{ .arch = .mips64el, .os = .linux, .abi = .gnuabi64, .glibc_triple = "mips64el-linux-gnu-n64" }, | 54 | .{ .arch = .mips64el, .os = .linux, .abi = .gnuabi64, .os_ver = .{ .major = 2, .minor = 3, .patch = 48 }, .glibc_triple = "mips64el-linux-gnu-n64" }, |
| 54 | .{ .arch = .mips64el, .os = .linux, .abi = .gnuabin32, .glibc_triple = "mips64el-linux-gnu-n32" }, | 55 | .{ .arch = .mips64el, .os = .linux, .abi = .gnuabin32, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 }, .glibc_triple = "mips64el-linux-gnu-n32" }, |
| 55 | .{ .arch = .mips64el, .os = .linux, .abi = .muslabi64 }, | 56 | .{ .arch = .mips64el, .os = .linux, .abi = .muslabi64, .os_ver = .{ .major = 2, .minor = 3, .patch = 48 } }, |
| 56 | .{ .arch = .mips64el, .os = .linux, .abi = .muslabin32 }, | 57 | .{ .arch = .mips64el, .os = .linux, .abi = .muslabin32, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 } }, |
| 57 | .{ .arch = .powerpc, .os = .linux, .abi = .gnueabi, .glibc_triple = "powerpc-linux-gnu-soft" }, | 58 | .{ .arch = .powerpc, .os = .linux, .abi = .gnueabi, .os_ver = .{ .major = 1, .minor = 3, .patch = 45 }, .glibc_triple = "powerpc-linux-gnu-soft" }, |
| 58 | .{ .arch = .powerpc, .os = .linux, .abi = .gnueabihf, .glibc_triple = "powerpc-linux-gnu" }, | 59 | .{ .arch = .powerpc, .os = .linux, .abi = .gnueabihf, .os_ver = .{ .major = 1, .minor = 3, .patch = 45 }, .glibc_triple = "powerpc-linux-gnu" }, |
| 59 | .{ .arch = .powerpc, .os = .linux, .abi = .musleabi }, | 60 | .{ .arch = .powerpc, .os = .linux, .abi = .musleabi, .os_ver = .{ .major = 1, .minor = 3, .patch = 45 } }, |
| 60 | .{ .arch = .powerpc, .os = .linux, .abi = .musleabihf }, | 61 | .{ .arch = .powerpc, .os = .linux, .abi = .musleabihf, .os_ver = .{ .major = 1, .minor = 3, .patch = 45 } }, |
| 61 | .{ .arch = .powerpc64, .os = .linux, .abi = .gnu }, | 62 | .{ .arch = .powerpc64, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 } }, |
| 62 | .{ .arch = .powerpc64, .os = .linux, .abi = .musl }, | 63 | .{ .arch = .powerpc64, .os = .linux, .abi = .musl, .os_ver = .{ .major = 2, .minor = 6, .patch = 0 } }, |
| 63 | .{ .arch = .powerpc64le, .os = .linux, .abi = .gnu, .glibc_min = .{ .major = 2, .minor = 19, .patch = 0 } }, | 64 | .{ .arch = .powerpc64le, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 3, .minor = 14, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 19, .patch = 0 } }, |
| 64 | .{ .arch = .powerpc64le, .os = .linux, .abi = .musl }, | 65 | .{ .arch = .powerpc64le, .os = .linux, .abi = .musl, .os_ver = .{ .major = 3, .minor = 14, .patch = 0 } }, |
| 65 | .{ .arch = .riscv32, .os = .linux, .abi = .gnu, .glibc_min = .{ .major = 2, .minor = 33, .patch = 0 }, .glibc_triple = "riscv32-linux-gnu-rv32imafdc-ilp32d" }, | 66 | .{ .arch = .riscv32, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 4, .minor = 15, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 33, .patch = 0 }, .glibc_triple = "riscv32-linux-gnu-rv32imafdc-ilp32d" }, |
| 66 | .{ .arch = .riscv32, .os = .linux, .abi = .musl }, | 67 | .{ .arch = .riscv32, .os = .linux, .abi = .musl, .os_ver = .{ .major = 4, .minor = 15, .patch = 0 } }, |
| 67 | .{ .arch = .riscv64, .os = .linux, .abi = .gnu, .glibc_min = .{ .major = 2, .minor = 27, .patch = 0 }, .glibc_triple = "riscv64-linux-gnu-rv64imafdc-lp64d" }, | 68 | .{ .arch = .riscv64, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 4, .minor = 15, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 27, .patch = 0 }, .glibc_triple = "riscv64-linux-gnu-rv64imafdc-lp64d" }, |
| 68 | .{ .arch = .riscv64, .os = .linux, .abi = .musl }, | 69 | .{ .arch = .riscv64, .os = .linux, .abi = .musl, .os_ver = .{ .major = 4, .minor = 15, .patch = 0 } }, |
| 69 | .{ .arch = .s390x, .os = .linux, .abi = .gnu }, | 70 | .{ .arch = .s390x, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 2, .minor = 4, .patch = 2 } }, |
| 70 | .{ .arch = .s390x, .os = .linux, .abi = .musl }, | 71 | .{ .arch = .s390x, .os = .linux, .abi = .musl, .os_ver = .{ .major = 2, .minor = 4, .patch = 2 } }, |
| 71 | .{ .arch = .sparc, .os = .linux, .abi = .gnu, .glibc_triple = "sparcv9-linux-gnu" }, | 72 | .{ .arch = .sparc, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 2, .minor = 1, .patch = 19 }, .glibc_triple = "sparcv9-linux-gnu" }, |
| 72 | .{ .arch = .sparc64, .os = .linux, .abi = .gnu }, | 73 | .{ .arch = .sparc64, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 2, .minor = 1, .patch = 19 } }, |
| 73 | .{ .arch = .wasm32, .os = .wasi, .abi = .musl }, | 74 | .{ .arch = .wasm32, .os = .wasi, .abi = .musl }, |
| 74 | .{ .arch = .x86, .os = .linux, .abi = .gnu }, | 75 | .{ .arch = .x86, .os = .linux, .abi = .gnu }, |
| 75 | .{ .arch = .x86, .os = .linux, .abi = .musl }, | 76 | .{ .arch = .x86, .os = .linux, .abi = .musl }, |
| 76 | .{ .arch = .x86, .os = .windows, .abi = .gnu }, | 77 | .{ .arch = .x86, .os = .windows, .abi = .gnu }, |
| 77 | .{ .arch = .x86_64, .os = .linux, .abi = .gnu }, | 78 | .{ .arch = .x86_64, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 2, .minor = 6, .patch = 4 } }, |
| 78 | .{ .arch = .x86_64, .os = .linux, .abi = .gnux32, .glibc_triple = "x86_64-linux-gnu-x32" }, | 79 | .{ .arch = .x86_64, .os = .linux, .abi = .gnux32, .os_ver = .{ .major = 3, .minor = 4, .patch = 0 }, .glibc_triple = "x86_64-linux-gnu-x32" }, |
| 79 | .{ .arch = .x86_64, .os = .linux, .abi = .musl }, | 80 | .{ .arch = .x86_64, .os = .linux, .abi = .musl, .os_ver = .{ .major = 2, .minor = 6, .patch = 4 } }, |
| 80 | .{ .arch = .x86_64, .os = .linux, .abi = .muslx32 }, | 81 | .{ .arch = .x86_64, .os = .linux, .abi = .muslx32, .os_ver = .{ .major = 3, .minor = 4, .patch = 0 } }, |
| 81 | .{ .arch = .x86_64, .os = .macos, .abi = .none, .os_ver = .{ .major = 10, .minor = 7, .patch = 0 } }, | 82 | .{ .arch = .x86_64, .os = .macos, .abi = .none, .os_ver = .{ .major = 10, .minor = 7, .patch = 0 } }, |
| 82 | .{ .arch = .x86_64, .os = .windows, .abi = .gnu }, | 83 | .{ .arch = .x86_64, .os = .windows, .abi = .gnu }, |
| 83 | }; | 84 | }; |
| ... | @@ -85,15 +86,17 @@ pub const available_libcs = [_]ArchOsAbi{ | ... | @@ -85,15 +86,17 @@ pub const available_libcs = [_]ArchOsAbi{ |
| 85 | pub fn canBuildLibC(target: std.Target) bool { | 86 | pub fn canBuildLibC(target: std.Target) bool { |
| 86 | for (available_libcs) |libc| { | 87 | for (available_libcs) |libc| { |
| 87 | if (target.cpu.arch == libc.arch and target.os.tag == libc.os and target.abi == libc.abi) { | 88 | if (target.cpu.arch == libc.arch and target.os.tag == libc.os and target.abi == libc.abi) { |
| 88 | if (target.os.tag == .macos) { | 89 | if (libc.os_ver) |libc_os_ver| { |
| 89 | const ver = target.os.version_range.semver; | 90 | if (switch (target.os.versionRange()) { |
| 90 | return ver.min.order(libc.os_ver.?) != .lt; | 91 | .semver => |v| v, |
| | 92 | .linux => |v| v.range, |
| | 93 | else => null, |
| | 94 | }) |ver| { |
| | 95 | if (ver.min.order(libc_os_ver) == .lt) return false; |
| | 96 | } |
| 91 | } | 97 | } |
| 92 | // Ensure glibc (aka *-(linux,hurd)-gnu) version is supported | 98 | if (libc.glibc_min) |glibc_min| { |
| 93 | if (target.isGnuLibC()) { | 99 | if (target.os.versionRange().gnuLibCVersion().?.order(glibc_min) == .lt) return false; |
| 94 | const min_glibc_ver = libc.glibc_min orelse return true; | | |
| 95 | const target_glibc_ver = target.os.versionRange().gnuLibCVersion().?; | | |
| 96 | return target_glibc_ver.order(min_glibc_ver) != .lt; | | |
| 97 | } | 100 | } |
| 98 | return true; | 101 | return true; |
| 99 | } | 102 | } |