Commit 86c28ee6 authored by Adam Joseph's avatar Adam Joseph Committed by Adam Joseph
Browse files

cc-wrapper: relocate proprietary-compiler-specific material

PR #275947, which was self-merged without approvals, inserted
functionality specific to a propriteary closed-source compiler
(CUDA) into cc-wrapper.

This commit relocates this CUDA-specific functionality into the
appropritate place: `cuda-modules`.

It is unclear to me exactly what this function is supposed to be
doing; much of it (like the `.kind` attributes) do not appear to be
used *anywhere* in nixpkgs.  Making sure we don't insert unexplained
deadcode like this is one of the important functions of the review
process.
parent d07ab951
Loading
Loading
Loading
Loading
+0 −19
Original line number Diff line number Diff line
@@ -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
+22 −0
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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
    {