about summary refs log tree commit diff
path: root/pkgs/by-name/dx/dxvk/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/dx/dxvk/package.nix')
-rw-r--r--pkgs/by-name/dx/dxvk/package.nix82
1 files changed, 60 insertions, 22 deletions
diff --git a/pkgs/by-name/dx/dxvk/package.nix b/pkgs/by-name/dx/dxvk/package.nix
index d3639215057f2..89defd092b0e4 100644
--- a/pkgs/by-name/dx/dxvk/package.nix
+++ b/pkgs/by-name/dx/dxvk/package.nix
@@ -1,38 +1,67 @@
-{ lib
-, stdenvNoCC
-, fetchFromGitHub
-, pkgsCross
-, stdenv
-, bash
+{
+  lib,
+  stdenvNoCC,
+  overrideCC,
+  pkgsCross,
+  bash,
 }:
 
-stdenvNoCC.mkDerivation (finalAttrs:
+stdenvNoCC.mkDerivation (
+  finalAttrs:
   let
-    dxvk32 = if stdenv.isDarwin
-      then pkgsCross.mingw32.dxvk_1.override { enableMoltenVKCompat = true; }
-      else pkgsCross.mingw32.dxvk_2;
-    dxvk64 = if stdenv.isDarwin
-      then pkgsCross.mingwW64.dxvk_1.override { enableMoltenVKCompat = true; }
-      else pkgsCross.mingwW64.dxvk_2;
+    useWin32ThreadModel =
+      stdenv:
+      overrideCC stdenv (
+        stdenv.cc.override (old: {
+          cc = old.cc.override {
+            threadsCross = {
+              model = "win32";
+              package = null;
+            };
+          };
+        })
+      );
+
+    mingw32Stdenv = useWin32ThreadModel pkgsCross.mingw32.stdenv;
+    mingwW64Stdenv = useWin32ThreadModel pkgsCross.mingwW64.stdenv;
+
+    dxvk32 =
+      if stdenvNoCC.isDarwin then
+        pkgsCross.mingw32.dxvk_1.override {
+          stdenv = mingw32Stdenv;
+          enableMoltenVKCompat = true;
+        }
+      else
+        pkgsCross.mingw32.dxvk_2.override { stdenv = mingw32Stdenv; };
+
+    dxvk64 =
+      if stdenvNoCC.isDarwin then
+        pkgsCross.mingwW64.dxvk_1.override {
+          stdenv = mingwW64Stdenv;
+          enableMoltenVKCompat = true;
+        }
+      else
+        pkgsCross.mingwW64.dxvk_2.override { stdenv = mingwW64Stdenv; };
   in
   {
     pname = "dxvk";
     inherit (dxvk64) version;
 
-    outputs = [ "out" "bin" "lib" ];
+    outputs = [
+      "out"
+      "bin"
+      "lib"
+    ];
 
-    dontUnpack = true;
-    dontConfigure = true;
-    dontBuild = true;
+    strictDeps = true;
 
-    installPhase = ''
+    buildCommand = ''
       mkdir -p $out/bin $bin $lib
       substitute ${./setup_dxvk.sh} $out/bin/setup_dxvk.sh \
         --subst-var-by bash ${bash} \
         --subst-var-by dxvk32 ${dxvk32} \
         --subst-var-by dxvk64 ${dxvk64} \
-        --subst-var-by mcfgthreads32 "${pkgsCross.mingw32.windows.mcfgthreads_pre_gcc_13}" \
-        --subst-var-by mcfgthreads64 "${pkgsCross.mingwW64.windows.mcfgthreads_pre_gcc_13}"
+        --subst-var-by version ${finalAttrs.version}
       chmod a+x $out/bin/setup_dxvk.sh
       declare -A dxvks=( [x32]=${dxvk32} [x64]=${dxvk64} )
       for arch in "''${!dxvks[@]}"; do
@@ -41,6 +70,10 @@ stdenvNoCC.mkDerivation (finalAttrs:
       done
     '';
 
+    passthru = { inherit dxvk32 dxvk64; };
+
+    __structuredAttrs = true;
+
     meta = {
       description = "Setup script for DXVK";
       mainProgram = "setup_dxvk.sh";
@@ -48,6 +81,11 @@ stdenvNoCC.mkDerivation (finalAttrs:
       changelog = "https://github.com/doitsujin/dxvk/releases";
       maintainers = [ lib.maintainers.reckenrode ];
       license = lib.licenses.zlib;
-      platforms = [ "x86_64-darwin" "i686-linux" "x86_64-linux" ];
+      platforms = [
+        "x86_64-darwin"
+        "i686-linux"
+        "x86_64-linux"
+      ];
     };
-  })
+  }
+)