Files
Connor Baker 7d7182b1fb cudaPackages.cudss: init at 0.6.0
Signed-off-by: Connor Baker <ConnorBaker01@gmail.com>
2025-10-22 13:14:48 -07:00

69 lines
2.1 KiB
Nix

{
buildRedist,
lib,
libcublas,
mpi,
nccl,
}:
buildRedist {
redistName = "cudss";
pname = "libcudss";
outputs = [
"out"
"dev"
"include"
"lib"
"static"
];
buildInputs = [
libcublas
]
# MPI brings in NCCL dependency by way of UCC/UCX.
++ lib.optionals nccl.meta.available [
mpi
nccl
];
# Update the CMake configurations
postFixup = ''
pushd "''${!outputDev:?}/lib/cmake/cudss" >/dev/null
nixLog "patching $PWD/cudss-config.cmake to fix relative paths"
substituteInPlace "$PWD/cudss-config.cmake" \
--replace-fail \
'get_filename_component(PACKAGE_PREFIX_DIR "''${CMAKE_CURRENT_LIST_DIR}/../../../../" ABSOLUTE)' \
"" \
--replace-fail \
'file(REAL_PATH "../../" _cudss_search_prefix BASE_DIRECTORY "''${_cudss_cmake_config_realpath}")' \
"set(_cudss_search_prefix \"''${!outputDev:?}/lib;''${!outputLib:?}/lib;''${!outputInclude:?}/include\")"
nixLog "patching $PWD/cudss-static-targets.cmake to fix INTERFACE_LINK_DIRECTORIES for cublas"
sed -Ei \
's|INTERFACE_LINK_DIRECTORIES "/usr/local/cuda.*/lib64"|INTERFACE_LINK_DIRECTORIES "${lib.getLib libcublas}/lib"|g' \
"$PWD/cudss-static-targets.cmake"
if grep -Eq 'INTERFACE_LINK_DIRECTORIES "/usr/local/cuda.*/lib64"' "$PWD/cudss-static-targets.cmake"; then
nixErrorLog "failed to patch $PWD/cudss-static-targets.cmake"
exit 1
fi
nixLog "patching $PWD/cudss-static-targets-release.cmake to fix the path to the static library"
substituteInPlace "$PWD/cudss-static-targets-release.cmake" \
--replace-fail \
'"''${cudss_LIBRARY_DIR}/libcudss_static.a"' \
"\"''${!outputStatic:?}/lib/libcudss_static.a\""
popd >/dev/null
'';
meta = {
description = "Library of GPU-accelerated linear solvers with sparse matrices";
longDescription = ''
NVIDIA cuDSS (Preview) is a library of GPU-accelerated linear solvers with sparse matrices.
'';
homepage = "https://developer.nvidia.com/cudss";
changelog = "https://docs.nvidia.com/cuda/cudss/release_notes.html";
};
}