114 lines
2.7 KiB
Nix
114 lines
2.7 KiB
Nix
{
|
|
_cuda,
|
|
backendStdenv,
|
|
cuda_cudart,
|
|
cuda_nvcc,
|
|
cudaMajorMinorVersion,
|
|
cudaNamePrefix,
|
|
fetchFromGitHub,
|
|
flags,
|
|
lib,
|
|
# passthru.updateScript
|
|
gitUpdater,
|
|
}:
|
|
let
|
|
inherit (_cuda.lib) _mkMetaBadPlatforms;
|
|
inherit (lib) licenses maintainers teams;
|
|
in
|
|
backendStdenv.mkDerivation (finalAttrs: {
|
|
__structuredAttrs = true;
|
|
strictDeps = true;
|
|
|
|
# NOTE: Depends on the CUDA package set, so use cudaNamePrefix.
|
|
name = "${cudaNamePrefix}-${finalAttrs.pname}-${finalAttrs.version}";
|
|
pname = "gdrcopy";
|
|
version = "2.6";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "NVIDIA";
|
|
repo = "gdrcopy";
|
|
tag = "v${finalAttrs.version}";
|
|
hash = "sha256-Waq/Of0LcLDqyaWaU47lorJcG30CijcdTsvf9nMqgrg=";
|
|
};
|
|
|
|
outputs = [ "out" ];
|
|
|
|
nativeBuildInputs = [
|
|
cuda_nvcc
|
|
];
|
|
|
|
postPatch = ''
|
|
nixLog "patching shebang in $PWD/config_arch"
|
|
patchShebangs "$PWD/config_arch"
|
|
|
|
nixLog "patching awk expression in $PWD/Makefile"
|
|
substituteInPlace "$PWD/Makefile" \
|
|
--replace-fail \
|
|
"/\#" \
|
|
"/#" \
|
|
--replace-fail \
|
|
'lib64' \
|
|
'lib'
|
|
|
|
nixLog "patching $PWD/src/Makefile"
|
|
substituteInPlace "$PWD/src/Makefile" \
|
|
--replace-fail \
|
|
"/\#" \
|
|
"/#"
|
|
|
|
nixLog "patching $PWD/tests/Makefile"
|
|
substituteInPlace "$PWD/tests/Makefile" \
|
|
--replace-fail \
|
|
'CUDA_VERSION := $(shell $(GET_CUDA_VERSION) $(NVCC))' \
|
|
'CUDA_VERSION := ${cudaMajorMinorVersion}' \
|
|
--replace-fail \
|
|
'NVCCFLAGS ?= $(shell $(GET_CUDA_GENCODE) $(NVCC)) $(NVCC_STD)' \
|
|
'NVCCFLAGS ?= ${flags.gencodeString} $(NVCC_STD)' \
|
|
--replace-fail \
|
|
'lib64' \
|
|
'lib'
|
|
'';
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
buildInputs = [
|
|
cuda_cudart
|
|
];
|
|
|
|
buildFlags = [
|
|
# Makefile variables which must be set explicitly
|
|
"CUDA=${lib.getLib cuda_cudart}"
|
|
"NVCC=${lib.getExe cuda_nvcc}" # TODO: shoud be using cuda_nvcc from pkgsBuildHost
|
|
|
|
# Make targets
|
|
# NOTE: We cannot use `all` because it includes the driver, which needs the driver source code.
|
|
"lib"
|
|
"exes"
|
|
];
|
|
|
|
# Tests require gdrdrv be installed (don't know how to communicate dependency on the driver).
|
|
doCheck = false;
|
|
|
|
installFlags = [
|
|
"DESTDIR=${placeholder "out"}"
|
|
"prefix=/"
|
|
];
|
|
|
|
passthru.updateScript = gitUpdater {
|
|
inherit (finalAttrs) pname version;
|
|
rev-prefix = "v";
|
|
};
|
|
|
|
meta = {
|
|
description = "Fast GPU memory copy library based on NVIDIA GPUDirect RDMA technology";
|
|
homepage = "https://github.com/NVIDIA/gdrcopy";
|
|
license = licenses.mit;
|
|
platforms = [
|
|
"aarch64-linux"
|
|
"x86_64-linux"
|
|
];
|
|
maintainers = [ maintainers.connorbaker ];
|
|
teams = [ teams.cuda ];
|
|
};
|
|
})
|