DoxigAlpha

default

The default VersionRange represents the range that the Zig Standard Library bases its abstractions on.

Function parameters

Parameters

#
arch:Cpu.Arch

Type definitions in this namespace

Types

#

Functions in this namespace

Functions

#
requiresLibC
Does this target require linking libc? This may be the case if the target has an unstable
cCharSignedness
Default signedness of `char` for the native C compiler for this target

Source

Implementation

#
pub fn default(arch: Cpu.Arch, tag: Tag, abi: Abi) VersionRange {
    return switch (tag) {
        .freestanding,
        .other,

        .haiku,
        .plan9,
        .serenity,

        .illumos,

        .ps3,
        .ps4,
        .ps5,

        .emscripten,

        .mesa3d,
        => .{ .none = {} },

        .contiki => .{
            .semver = .{
                .min = .{ .major = 4, .minor = 0, .patch = 0 },
                .max = .{ .major = 5, .minor = 0, .patch = 0 },
            },
        },
        .fuchsia => .{
            .semver = .{
                .min = .{ .major = 1, .minor = 0, .patch = 0 },
                .max = .{ .major = 27, .minor = 0, .patch = 0 },
            },
        },
        .hermit => .{
            .semver = .{
                .min = .{ .major = 0, .minor = 5, .patch = 0 },
                .max = .{ .major = 0, .minor = 11, .patch = 0 },
            },
        },

        .aix => .{
            .semver = .{
                .min = .{ .major = 7, .minor = 2, .patch = 5 },
                .max = .{ .major = 7, .minor = 3, .patch = 3 },
            },
        },
        .hurd => .{
            .hurd = .{
                .range = .{
                    .min = .{ .major = 0, .minor = 9, .patch = 0 },
                    .max = .{ .major = 0, .minor = 9, .patch = 0 },
                },
                .glibc = .{ .major = 2, .minor = 28, .patch = 0 },
            },
        },
        .linux => .{
            .linux = .{
                .range = .{
                    .min = blk: {
                        const default_min: std.SemanticVersion = .{ .major = 5, .minor = 10, .patch = 0 };

                        for (std.zig.target.available_libcs) |libc| {
                            if (libc.arch != arch or libc.os != tag or libc.abi != abi) continue;

                            if (libc.os_ver) |min| {
                                if (min.order(default_min) == .gt) break :blk min;
                            }
                        }

                        break :blk default_min;
                    },
                    .max = .{ .major = 6, .minor = 16, .patch = 0 },
                },
                .glibc = blk: {
                    // For 32-bit targets that traditionally used 32-bit time, we require
                    // glibc 2.34 for full 64-bit time support. For everything else, we only
                    // require glibc 2.31.
                    const default_min: std.SemanticVersion = switch (arch) {
                        .arm,
                        .armeb,
                        .csky,
                        .m68k,
                        .mips,
                        .mipsel,
                        .powerpc,
                        .sparc,
                        .x86,
                        => .{ .major = 2, .minor = 34, .patch = 0 },
                        .mips64,
                        .mips64el,
                        => if (abi == .gnuabin32)
                            .{ .major = 2, .minor = 34, .patch = 0 }
                        else
                            .{ .major = 2, .minor = 31, .patch = 0 },
                        else => .{ .major = 2, .minor = 31, .patch = 0 },
                    };

                    for (std.zig.target.available_libcs) |libc| {
                        if (libc.os != tag or libc.arch != arch or libc.abi != abi) continue;

                        if (libc.glibc_min) |min| {
                            if (min.order(default_min) == .gt) break :blk min;
                        }
                    }

                    break :blk default_min;
                },
                .android = 29,
            },
        },
        .rtems => .{
            .semver = .{
                .min = .{ .major = 5, .minor = 1, .patch = 0 },
                .max = .{ .major = 6, .minor = 1, .patch = 0 },
            },
        },
        .zos => .{
            .semver = .{
                .min = .{ .major = 2, .minor = 5, .patch = 0 },
                .max = .{ .major = 3, .minor = 1, .patch = 0 },
            },
        },

        .dragonfly => .{
            .semver = .{
                .min = .{ .major = 6, .minor = 0, .patch = 0 },
                .max = .{ .major = 6, .minor = 4, .patch = 1 },
            },
        },
        .freebsd => .{
            .semver = .{
                .min = blk: {
                    const default_min: std.SemanticVersion = .{ .major = 14, .minor = 0, .patch = 0 };

                    for (std.zig.target.available_libcs) |libc| {
                        if (libc.arch != arch or libc.os != tag or libc.abi != abi) continue;

                        if (libc.os_ver) |min| {
                            if (min.order(default_min) == .gt) break :blk min;
                        }
                    }

                    break :blk default_min;
                },
                .max = .{ .major = 14, .minor = 3, .patch = 0 },
            },
        },
        .netbsd => .{
            .semver = .{
                .min = blk: {
                    const default_min: std.SemanticVersion = .{ .major = 10, .minor = 1, .patch = 0 };

                    for (std.zig.target.available_libcs) |libc| {
                        if (libc.arch != arch or libc.os != tag or libc.abi != abi) continue;

                        if (libc.os_ver) |min| {
                            if (min.order(default_min) == .gt) break :blk min;
                        }
                    }

                    break :blk default_min;
                },
                .max = .{ .major = 10, .minor = 1, .patch = 0 },
            },
        },
        .openbsd => .{
            .semver = .{
                .min = .{ .major = 7, .minor = 6, .patch = 0 },
                .max = .{ .major = 7, .minor = 7, .patch = 0 },
            },
        },

        .driverkit => .{
            .semver = .{
                .min = .{ .major = 20, .minor = 0, .patch = 0 },
                .max = .{ .major = 25, .minor = 0, .patch = 0 },
            },
        },
        .macos => .{
            .semver = .{
                .min = .{ .major = 13, .minor = 0, .patch = 0 },
                .max = .{ .major = 15, .minor = 6, .patch = 0 },
            },
        },
        .ios => .{
            .semver = .{
                .min = .{ .major = 15, .minor = 0, .patch = 0 },
                .max = .{ .major = 18, .minor = 6, .patch = 0 },
            },
        },
        .tvos => .{
            .semver = .{
                .min = .{ .major = 15, .minor = 0, .patch = 0 },
                .max = .{ .major = 18, .minor = 5, .patch = 0 },
            },
        },
        .visionos => .{
            .semver = .{
                .min = .{ .major = 1, .minor = 0, .patch = 0 },
                .max = .{ .major = 2, .minor = 5, .patch = 0 },
            },
        },
        .watchos => .{
            .semver = .{
                .min = .{ .major = 8, .minor = 0, .patch = 0 },
                .max = .{ .major = 11, .minor = 6, .patch = 0 },
            },
        },

        .solaris => .{
            .semver = .{
                .min = .{ .major = 11, .minor = 0, .patch = 0 },
                .max = .{ .major = 11, .minor = 4, .patch = 0 },
            },
        },

        .windows => .{
            .windows = .{
                .min = .win10,
                .max = WindowsVersion.latest,
            },
        },
        .uefi => .{
            .semver = .{
                .min = .{ .major = 2, .minor = 0, .patch = 0 },
                .max = .{ .major = 2, .minor = 11, .patch = 0 },
            },
        },

        .wasi => .{
            .semver = .{
                .min = .{ .major = 0, .minor = 1, .patch = 0 },
                .max = .{ .major = 0, .minor = 2, .patch = 2 },
            },
        },

        .amdhsa => .{
            .semver = .{
                .min = .{ .major = 5, .minor = 0, .patch = 0 },
                .max = .{ .major = 6, .minor = 4, .patch = 2 },
            },
        },
        .amdpal => .{
            .semver = .{
                .min = .{ .major = 1, .minor = 1, .patch = 0 },
                .max = .{ .major = 3, .minor = 5, .patch = 0 },
            },
        },
        .cuda => .{
            .semver = .{
                .min = .{ .major = 11, .minor = 0, .patch = 1 },
                .max = .{ .major = 12, .minor = 9, .patch = 1 },
            },
        },
        .nvcl,
        .opencl,
        => .{
            .semver = .{
                .min = .{ .major = 2, .minor = 2, .patch = 0 },
                .max = .{ .major = 3, .minor = 0, .patch = 17 },
            },
        },
        .opengl => .{
            .semver = .{
                .min = .{ .major = 4, .minor = 5, .patch = 0 },
                .max = .{ .major = 4, .minor = 6, .patch = 0 },
            },
        },
        .vulkan => .{
            .semver = .{
                .min = .{ .major = 1, .minor = 2, .patch = 0 },
                .max = .{ .major = 1, .minor = 4, .patch = 321 },
            },
        },
    };
}