nvidia-thrust: cudatoolkit -> redist cudaPackages

This commit is contained in:
Someone Serge 2022-04-13 23:11:57 +03:00
parent 4965af4364
commit 83b4eec362
No known key found for this signature in database
GPG key ID: 7B0E3B1390D61DA4

View file

@ -4,7 +4,7 @@
, stdenv , stdenv
, cmake , cmake
, pkg-config , pkg-config
, cudaPackages , cudaPackages ? { }
, symlinkJoin , symlinkJoin
, tbb , tbb
, hostSystem ? "CPP" , hostSystem ? "CPP"
@ -27,6 +27,9 @@ let
pname = "nvidia-thrust"; pname = "nvidia-thrust";
version = "1.16.0"; version = "1.16.0";
inherit (cudaPackages) backendStdenv cudaFlags;
cudaCapabilities = map cudaFlags.dropDot cudaFlags.cudaCapabilities;
tbbSupport = builtins.elem "TBB" [ deviceSystem hostSystem ]; tbbSupport = builtins.elem "TBB" [ deviceSystem hostSystem ];
cudaSupport = deviceSystem == "CUDA"; cudaSupport = deviceSystem == "CUDA";
@ -35,9 +38,13 @@ let
name = "cuda-packages-unsplit"; name = "cuda-packages-unsplit";
paths = with cudaPackages; [ paths = with cudaPackages; [
cuda_nvcc cuda_nvcc
cuda_nvrtc # symbols: cudaLaunchDevice, &c; notice postBuild
cuda_cudart # cuda_runtime.h cuda_cudart # cuda_runtime.h
libcublas libcublas
]; ];
postBuild = ''
ln -s $out/lib $out/lib64
'';
}; };
in in
stdenv.mkDerivation { stdenv.mkDerivation {
@ -51,6 +58,15 @@ stdenv.mkDerivation {
hash = "sha256-/EyznxWKuHuvHNjq+SQg27IaRbtkjXR2zlo2YgCWmUQ="; hash = "sha256-/EyznxWKuHuvHNjq+SQg27IaRbtkjXR2zlo2YgCWmUQ=";
}; };
# NVIDIA's "compiler hacks" seem like work-arounds for legacy toolchains and
# cause us errors such as:
# > Thrust's test harness uses CMAKE_CXX_COMPILER for the CUDA host compiler.
# > Refusing to overwrite specified CMAKE_CUDA_HOST_COMPILER
# So we un-fix cmake after them:
postPatch = ''
echo > cmake/ThrustCompilerHacks.cmake
'';
buildInputs = lib.optionals tbbSupport [ tbb ]; buildInputs = lib.optionals tbbSupport [ tbb ];
nativeBuildInputs = [ nativeBuildInputs = [
@ -59,23 +75,21 @@ stdenv.mkDerivation {
] ++ lib.optionals cudaSupport [ ] ++ lib.optionals cudaSupport [
# Goes in native build inputs because thrust looks for headers # Goes in native build inputs because thrust looks for headers
# in a path relative to nvcc... # in a path relative to nvcc...
cudaJoined
# Works when build=host, but we only support
# cuda on x86_64 anyway
# TODO: but instead using this
# cudaJoined
cudaPackages.cudatoolkit
]; ];
cmakeFlags = [ cmakeFlags = [
"-DTHRUST_INCLUDE_CUB_CMAKE=${if cudaSupport then "ON" else "OFF"}" "-DTHRUST_INCLUDE_CUB_CMAKE=${if cudaSupport then "ON" else "OFF"}"
"-DTHRUST_DEVICE_SYSTEM=${deviceSystem}" "-DTHRUST_DEVICE_SYSTEM=${deviceSystem}"
"-DTHRUST_HOST_SYSTEM=${hostSystem}" "-DTHRUST_HOST_SYSTEM=${hostSystem}"
]; "-DTHRUST_AUTO_DETECT_COMPUTE_ARCHS=OFF"
"-DTHRUST_DISABLE_ARCH_BY_DEFAULT=ON"
] ++ lib.optionals cudaFlags.enableForwardCompat [
"-DTHRUST_ENABLE_COMPUTE_FUTURE=ON"
] ++ map (sm: "THRUST_ENABLE_COMPUTE_${sm}") cudaCapabilities;
passthru = { passthru = {
inherit cudaSupport cudaPackages; inherit cudaSupport cudaPackages cudaJoined;
}; };
meta = with lib; { meta = with lib; {