move windows runtime version detection into std.zig.system.windows
This commit is contained in:
@@ -14,6 +14,7 @@ const process = std.process;
|
||||
const Target = std.Target;
|
||||
const CrossTarget = std.zig.CrossTarget;
|
||||
const macos = @import("system/macos.zig");
|
||||
pub const windows = @import("system/windows.zig");
|
||||
|
||||
pub const getSDKPath = macos.getSDKPath;
|
||||
|
||||
@@ -249,43 +250,9 @@ pub const NativeTargetInfo = struct {
|
||||
}
|
||||
},
|
||||
.windows => {
|
||||
var version_info: std.os.windows.RTL_OSVERSIONINFOW = undefined;
|
||||
version_info.dwOSVersionInfoSize = @sizeOf(@TypeOf(version_info));
|
||||
|
||||
switch (std.os.windows.ntdll.RtlGetVersion(&version_info)) {
|
||||
.SUCCESS => {},
|
||||
else => unreachable,
|
||||
}
|
||||
|
||||
// Starting from the system infos build a NTDDI-like version
|
||||
// constant whose format is:
|
||||
// B0 B1 B2 B3
|
||||
// `---` `` ``--> Sub-version (Starting from Windows 10 onwards)
|
||||
// \ `--> Service pack (Always zero in the constants defined)
|
||||
// `--> OS version (Major & minor)
|
||||
const os_ver: u16 = @intCast(u16, version_info.dwMajorVersion & 0xff) << 8 |
|
||||
@intCast(u16, version_info.dwMinorVersion & 0xff);
|
||||
const sp_ver: u8 = 0;
|
||||
const sub_ver: u8 = if (os_ver >= 0x0A00) subver: {
|
||||
// There's no other way to obtain this info beside
|
||||
// checking the build number against a known set of
|
||||
// values
|
||||
const known_build_numbers = [_]u32{
|
||||
10240, 10586, 14393, 15063, 16299, 17134, 17763,
|
||||
18362, 19041,
|
||||
};
|
||||
var last_idx: usize = 0;
|
||||
for (known_build_numbers) |build, i| {
|
||||
if (version_info.dwBuildNumber >= build)
|
||||
last_idx = i;
|
||||
}
|
||||
break :subver @truncate(u8, last_idx);
|
||||
} else 0;
|
||||
|
||||
const version: u32 = @as(u32, os_ver) << 16 | @as(u32, sp_ver) << 8 | sub_ver;
|
||||
|
||||
os.version_range.windows.max = @intToEnum(Target.Os.WindowsVersion, version);
|
||||
os.version_range.windows.min = @intToEnum(Target.Os.WindowsVersion, version);
|
||||
const detected_version = windows.detectRuntimeVersion();
|
||||
os.version_range.windows.min = detected_version;
|
||||
os.version_range.windows.max = detected_version;
|
||||
},
|
||||
.macos => {
|
||||
var scbuf: [32]u8 = undefined;
|
||||
|
||||
Reference in New Issue
Block a user