From 182e6b41d08d37c8eb817212b88b37b671abfb22 Mon Sep 17 00:00:00 2001 From: Someone Serge Date: Mon, 4 Dec 2023 18:56:55 +0000 Subject: [PATCH] cudaPackages.setupCudaHook: rewrite cudartFlags, remove infinite recursion in cudatoolkit We don't need to add the extra nvcc flags to locate cudart when using cudatoolkit because it comes in the merged layout and nvcc doesn't have any trouble locating dependencies in the same prefix --- pkgs/development/compilers/cudatoolkit/extension.nix | 10 +++++++--- .../compilers/cudatoolkit/hooks/setup-cuda-hook.sh | 5 +++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/pkgs/development/compilers/cudatoolkit/extension.nix b/pkgs/development/compilers/cudatoolkit/extension.nix index be482e2cc799..d75d288f5577 100644 --- a/pkgs/development/compilers/cudatoolkit/extension.nix +++ b/pkgs/development/compilers/cudatoolkit/extension.nix @@ -69,9 +69,13 @@ final: prev: let # - the cuda_runtime.h header, which is in the dev output # - the dynamic library, which is in the lib output # - the static library, which is in the static output - substitutions.cudartInclude = "${final.cuda_cudart.dev}"; - substitutions.cudartLib = "${final.cuda_cudart.lib}"; - substitutions.cudartStatic = "${final.cuda_cudart.static}"; + substitutions.cudartFlags = let cudart = final.cuda_cudart; in + builtins.concatStringsSep " " (final.lib.optionals (final ? cuda_cudart) ([ + "-I${final.lib.getDev cudart}/include" + "-L${final.lib.getLib cudart}/lib" + ] ++ final.lib.optionals (builtins.elem "static" cudart.outputs) [ + "-L${cudart.static}/lib" + ])); } ./hooks/setup-cuda-hook.sh) { }); diff --git a/pkgs/development/compilers/cudatoolkit/hooks/setup-cuda-hook.sh b/pkgs/development/compilers/cudatoolkit/hooks/setup-cuda-hook.sh index 5ea57594211c..0272e7938b9a 100644 --- a/pkgs/development/compilers/cudatoolkit/hooks/setup-cuda-hook.sh +++ b/pkgs/development/compilers/cudatoolkit/hooks/setup-cuda-hook.sh @@ -55,8 +55,9 @@ setupCUDAToolkitCompilers() { # CMake's enable_language(CUDA) runs a compiler test and it doesn't account for # CUDAToolkit_ROOT. We have to help it locate libcudart - if [[ -z "${nvccDontPrependCudartFlags-}" ]] ; then - export NVCC_APPEND_FLAGS+=" -L@cudartLib@/lib -L@cudartStatic@/lib -I@cudartInclude@/include" + local cudartFlags="@cudartFlags@" + if [[ -z "${nvccDontPrependCudartFlags-}" ]] && [[ -n "${cudartFlags:-}" ]] ; then + export NVCC_APPEND_FLAGS+=" $cudartFlags" fi }