From 6f068041da977fd7ba722f255ae06955023dc350 Mon Sep 17 00:00:00 2001 From: Ross Smyth <18294397+RossSmyth@users.noreply.github.com> Date: Fri, 31 Oct 2025 11:51:00 -0400 Subject: [PATCH] windows.sdk: Split fetch & splat phases to fix Darwin --- pkgs/os-specific/windows/msvcSdk/default.nix | 55 ++++------- .../windows/msvcSdk/fetchWinSdk.nix | 91 +++++++++++++++++++ pkgs/os-specific/windows/msvcSdk/hashes.json | 2 +- pkgs/os-specific/windows/msvcSdk/update.nu | 4 +- 4 files changed, 113 insertions(+), 39 deletions(-) create mode 100644 pkgs/os-specific/windows/msvcSdk/fetchWinSdk.nix diff --git a/pkgs/os-specific/windows/msvcSdk/default.nix b/pkgs/os-specific/windows/msvcSdk/default.nix index f57d2bf90de9..05a728dee6e7 100644 --- a/pkgs/os-specific/windows/msvcSdk/default.nix +++ b/pkgs/os-specific/windows/msvcSdk/default.nix @@ -1,71 +1,54 @@ { lib, - config, stdenvNoCC, xwin, testers, llvmPackages, + callPackage, }: let version = (builtins.fromJSON (builtins.readFile ./manifest.json)).info.buildVersion; hashes = (builtins.fromJSON (builtins.readFile ./hashes.json)); - host = stdenvNoCC.hostPlatform; - arch = - if host.isx86_64 then - "x86_64" - else if host.isAarch64 then - "aarch64" - else if host.isx86_32 then - "x86" - else if host.isAarch32 then - "aarch" - else - throw "Unsupported system"; + fetchWinSdk = callPackage ./fetchWinSdk.nix { }; in stdenvNoCC.mkDerivation (finalAttrs: { inherit version; - pname = "msvc-sdk"; - dontUnpack = true; + pname = "win-sdk"; + + src = fetchWinSdk { + manifest = ./manifest.json; + hash = hashes.${finalAttrs.src.arch}; + }; strictDeps = true; - nativeBuildInputs = [ xwin ]; - - outputHashAlgo = "sha256"; - outputHashMode = "recursive"; - outputHash = - if !config.microsoftVisualStudioLicenseAccepted then - throw '' - Microsoft Software License Terms are not accepted with config.microsoftVisualStudioLicenseAccepted. - Please read https://visualstudio.microsoft.com/license-terms/mt644918/ and if you agree, change your - config to indicate so. - '' - else - hashes.${arch}; + nativeBuildInputs = [ + xwin + ]; __structuredAttrs = true; xwinArgs = [ "--accept-license" - "--cache-dir=xwin-out" + "--cache-dir=." "--manifest=${./manifest.json}" - "--arch=${arch}" + "--arch=${finalAttrs.src.arch}" "splat" "--preserve-ms-arch-notation" ]; - buildPhase = '' - runHook preBuild + installPhase = '' + runHook preInstall xwin "''${xwinArgs[@]}" - mkdir "$out" - mv xwin-out/splat/* "$out" - runHook postBuild + mkdir -p "$out" + cp -r splat/* "$out" + + runHook postInstall ''; dontFixup = true; - dontInstall = true; passthru = { updateScript = ./update.nu; diff --git a/pkgs/os-specific/windows/msvcSdk/fetchWinSdk.nix b/pkgs/os-specific/windows/msvcSdk/fetchWinSdk.nix new file mode 100644 index 000000000000..3c498df81b74 --- /dev/null +++ b/pkgs/os-specific/windows/msvcSdk/fetchWinSdk.nix @@ -0,0 +1,91 @@ +{ + lib, + config, + stdenvNoCC, + xwin, +}: +let + host = stdenvNoCC.hostPlatform; + + hostArch = + if host.isx86_64 then + "x86_64" + else if host.isAarch64 then + "aarch64" + else if host.isx86_32 then + "x86" + else if host.isAarch32 then + "aarch" + else + throw "Unsupported system"; +in +lib.extendMkDerivation { + constructDrv = stdenvNoCC.mkDerivation; + + excludeDrvArgNames = [ + "manifest" + "arch" + ]; + + extendDrvArgs = + finalAttrs: + { + name ? "xwin-fetch-msvc", + hash ? lib.fakeHash, + manifest ? null, + arch ? hostArch, + ... + }@args: + { + inherit name; + __structuredAttrs = true; + dontUnpack = true; + dontFixup = true; + dontInstall = true; + + strictDeps = true; + + nativeBuildInputs = [ xwin ]; + + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = + if !config.microsoftVisualStudioLicenseAccepted then + throw '' + Microsoft Software License Terms are not accepted with config.microsoftVisualStudioLicenseAccepted. + Please read https://visualstudio.microsoft.com/license-terms/mt644918/ and if you agree, change your + config to indicate so. + '' + else + hash; + + xwinArgs = lib.optionals (manifest != null) [ "--manifest=${manifest}" ] ++ [ + "--accept-license" + "--cache-dir=${placeholder "out"}" + "--arch=${arch}" + "download" + ]; + + buildPhase = + args.buildPhase or '' + runHook preBuild + + xwin "''${xwinArgs[@]}" + + runHook postBuild + ''; + + passthru = { + inherit arch; + }; + + meta.license = { + deprecated = false; + fullName = "Microsoft Software License Terms"; + shortName = "msvc"; + spdxId = "unknown"; + free = false; + url = "https://www.visualstudio.com/license-terms/mt644918/"; + }; + }; +} diff --git a/pkgs/os-specific/windows/msvcSdk/hashes.json b/pkgs/os-specific/windows/msvcSdk/hashes.json index 6df8b21c9516..fb2b7e0597a3 100644 --- a/pkgs/os-specific/windows/msvcSdk/hashes.json +++ b/pkgs/os-specific/windows/msvcSdk/hashes.json @@ -1,5 +1,5 @@ { - "x86_64": "sha256-kp+xePTRZgqdAV3/BYhqKke3dXIkLWLM+IWFXtN2rHM=", + "x86_64": "sha256-noXgXgsB6eneVxkIZkjJhAiXgsG0BBIuoYGjf7fi8t4=", "x86": "sha256-xEXV+XBNoXpAO8R/oDj8gfGb5tICr9ps4DN8Q4lqK2k=", "aarch64": "sha256-r0tTQUq3CePJ/7Vuzf4Zsy3Ebu0KiXNBwRHmrO3d15E=" } diff --git a/pkgs/os-specific/windows/msvcSdk/update.nu b/pkgs/os-specific/windows/msvcSdk/update.nu index 7c6ce40880e8..a2f8b7b8a4f8 100755 --- a/pkgs/os-specific/windows/msvcSdk/update.nu +++ b/pkgs/os-specific/windows/msvcSdk/update.nu @@ -36,9 +36,9 @@ def main [] { |arch| let dir = mktemp -d - xwin --accept-license --cache-dir $dir --manifest $"($PATH | path join manifest.json)" --arch $arch splat --preserve-ms-arch-notation + xwin --accept-license --cache-dir $dir --manifest $"($PATH | path join manifest.json)" --arch $arch download - let hash = nix hash path ($dir | path join splat) + let hash = nix hash path $dir {arch: $arch, hash: $hash} } | transpose -r -d