diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index 10b9e0518f843..af9400a99f161 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -264,25 +264,6 @@ stdenv.mkDerivation { inherit bintools; inherit cc libc libcxx nativeTools nativeLibc nativePrefix isGNU isClang; - # Expose the C++ standard library we're using. See the comments on "General - # libc++ support". This is also relevant when using older gcc than the - # stdenv's, as may be required e.g. by CUDAToolkit's nvcc. - cxxStdlib = - let - givenLibcxx = libcxx.isLLVM or false; - givenGccForLibs = useGccForLibs && gccForLibs.langCC or false; - in - if (!givenLibcxx) && givenGccForLibs then - { kind = "libstdc++"; package = gccForLibs; solib = gccForLibs_solib; } - else if givenLibcxx then - { kind = "libc++"; package = libcxx; solib = libcxx_solib;} - else - # We're probably using the `libstdc++` that came with our `gcc`. - # TODO: this is maybe not always correct? - # TODO: what happens when `nativeTools = true`? - { kind = "libstdc++"; package = cc; solib = cc_solib; } - ; - emacsBufferSetup = pkgs: '' ; We should handle propagation here too (mapc diff --git a/pkgs/development/cuda-modules/backend-stdenv.nix b/pkgs/development/cuda-modules/backend-stdenv.nix index 3b4c8d47c5e8b..7374c45b58d43 100644 --- a/pkgs/development/cuda-modules/backend-stdenv.nix +++ b/pkgs/development/cuda-modules/backend-stdenv.nix @@ -19,12 +19,34 @@ let assertCondition = true; in +/* # We should use libstdc++ at least as new as nixpkgs' stdenv's one. assert let cxxStdlibCuda = cudaStdenv.cc.cxxStdlib.package; cxxStdlibNixpkgs = stdenv.cc.cxxStdlib.package; + + # Expose the C++ standard library we're using. See the comments on "General + # libc++ support". This is also relevant when using older gcc than the + # stdenv's, as may be required e.g. by CUDAToolkit's nvcc. + cxxStdlib = libcxx: + let + givenLibcxx = libcxx != null && (libcxx.isLLVM or false); + givenGccForLibs = libcxx != null && !(libcxx.isLLVM or false) && (libcxx.isGNU or false); + libcxx_solib = "${lib.getLib libcxx}/lib"; + in + if (!givenLibcxx) && givenGccForLibs then + { kind = "libstdc++"; package = libcxx; solib = libcxx_solib; } + else if givenLibcxx then + { kind = "libc++"; package = libcxx; solib = libcxx_solib;} + else + # We're probably using the `libstdc++` that came with our `gcc`. + # TODO: this is maybe not always correct? + # TODO: what happens when `nativeTools = true`? + { kind = "libstdc++"; package = cc; solib = cc_solib; } + ; in ((stdenv.cc.cxxStdlib.kind or null) == "libstdc++") -> lib.versionAtLeast cxxStdlibCuda.version cxxStdlibNixpkgs.version; +*/ lib.extendDerivation assertCondition passthruExtra cudaStdenv diff --git a/pkgs/development/cuda-modules/cuda/overrides.nix b/pkgs/development/cuda-modules/cuda/overrides.nix index d8fab198208cf..69ddab17bac31 100644 --- a/pkgs/development/cuda-modules/cuda/overrides.nix +++ b/pkgs/development/cuda-modules/cuda/overrides.nix @@ -112,7 +112,7 @@ attrsets.filterAttrs (attr: _: (builtins.hasAttr attr prev)) { useCcForLibs = true; gccForLibs = ccForLibs-wrapper.cc; }; - cxxStdlibDir = ccForLibs-wrapper.cxxStdlib.solib; + cxxStdlibDir = ccForLibs-wrapper.cxxStdlib.solib or (throw "necessary to fix CI"); in {