diff --git a/pkgs/development/libraries/science/math/magma/generic.nix b/pkgs/development/libraries/science/math/magma/generic.nix index 6ab68e297c2c5..49efda96829c4 100644 --- a/pkgs/development/libraries/science/math/magma/generic.nix +++ b/pkgs/development/libraries/science/math/magma/generic.nix @@ -35,7 +35,7 @@ let inherit (lib) lists strings trivial; - inherit (cudaPackages) cudatoolkit cudaFlags cudaVersion; + inherit (cudaPackages) backendStdenv cudaFlags cudaVersion; inherit (magmaRelease) version hash supportedGpuTargets; # NOTE: The lists.subtractLists function is perhaps a bit unintuitive. It subtracts the elements @@ -80,26 +80,33 @@ let cudaArchitecturesString = strings.concatStringsSep ";" cudaArchitectures; minArch = let - minArch' = builtins.head (builtins.sort builtins.lessThan cudaArchitectures); + minArch' = builtins.head (builtins.sort strings.versionOlder cudaArchitectures); in - # If this fails some day, something must've changed and we should re-validate our assumptions - assert builtins.stringLength minArch' == 2; # "75" -> "750" Cf. https://bitbucket.org/icl/magma/src/f4ec79e2c13a2347eff8a77a3be6f83bc2daec20/CMakeLists.txt#lines-273 "${minArch'}0"; + cuda-common-redist = with cudaPackages; [ + libcublas # cublas_v2.h + libcusparse # cusparse.h + ]; - cuda_joined = symlinkJoin { - name = "cuda-redist-${cudaVersion}"; + # Build-time dependencies + cuda-native-redist = symlinkJoin { + name = "cuda-native-redist-${cudaVersion}"; paths = with cudaPackages; [ - cuda_nvcc cuda_cudart # cuda_runtime.h - libcublas - libcusparse + cuda_nvcc ] ++ lists.optionals (strings.versionOlder cudaVersion "11.8") [ cuda_nvprof # ] ++ lists.optionals (strings.versionAtLeast cudaVersion "11.8") [ cuda_profiler_api # - ]; + ] ++ cuda-common-redist; + }; + + # Run-time dependencies + cuda-redist = symlinkJoin { + name = "cuda-redist-${cudaVersion}"; + paths = cuda-common-redist; }; in @@ -119,6 +126,8 @@ stdenv.mkDerivation { cmake ninja gfortran + ] ++ lists.optionals cudaSupport [ + cuda-native-redist ]; buildInputs = [ @@ -126,7 +135,7 @@ stdenv.mkDerivation { lapack blas ] ++ lists.optionals cudaSupport [ - cuda_joined + cuda-redist ] ++ lists.optionals rocmSupport [ hip hipblas @@ -139,8 +148,8 @@ stdenv.mkDerivation { ] ++ lists.optionals cudaSupport [ "-DCMAKE_CUDA_ARCHITECTURES=${cudaArchitecturesString}" "-DMIN_ARCH=${minArch}" # Disarms magma's asserts - "-DCMAKE_C_COMPILER=${cudatoolkit.cc}/bin/cc" - "-DCMAKE_CXX_COMPILER=${cudatoolkit.cc}/bin/c++" + "-DCMAKE_C_COMPILER=${backendStdenv.cc}/bin/cc" + "-DCMAKE_CXX_COMPILER=${backendStdenv.cc}/bin/c++" "-DMAGMA_ENABLE_CUDA=ON" ] ++ lists.optionals rocmSupport [ "-DCMAKE_C_COMPILER=${hip}/bin/hipcc" @@ -148,13 +157,6 @@ stdenv.mkDerivation { "-DMAGMA_ENABLE_HIP=ON" ]; - # NOTE: The stdenv's CXX is used when compiling the CMake test to determine the version of - # CUDA available. This isn't necessarily the same as cudatoolkit.cc, so we must set - # CUDAHOSTCXX. - preConfigure = strings.optionalString cudaSupport '' - export CUDAHOSTCXX=${cudatoolkit.cc}/bin/c++ - ''; - buildFlags = [ "magma" "magma_sparse" @@ -171,7 +173,7 @@ stdenv.mkDerivation { license = licenses.bsd3; homepage = "http://icl.cs.utk.edu/magma/index.html"; platforms = platforms.unix; - maintainers = with maintainers; [ tbenst ]; + maintainers = with maintainers; [ connorbaker ]; # CUDA and ROCm are mutually exclusive broken = cudaSupport && rocmSupport || cudaSupport && strings.versionOlder cudaVersion "9"; };