cudaPackages: use same libstdc++ as the rest of nixpkgs
This commit is contained in:
parent
3cde9b5e4d
commit
bd62420fd3
4 changed files with 35 additions and 10 deletions
|
@ -29,6 +29,7 @@ args@
|
||||||
, python3 # FIXME: CUDAToolkit 10 may still need python27
|
, python3 # FIXME: CUDAToolkit 10 may still need python27
|
||||||
, pulseaudio
|
, pulseaudio
|
||||||
, requireFile
|
, requireFile
|
||||||
|
, stdenv
|
||||||
, backendStdenv # E.g. gcc11Stdenv, set in extension.nix
|
, backendStdenv # E.g. gcc11Stdenv, set in extension.nix
|
||||||
, unixODBC
|
, unixODBC
|
||||||
, wayland
|
, wayland
|
||||||
|
@ -121,8 +122,8 @@ backendStdenv.mkDerivation rec {
|
||||||
(placeholder "lib")
|
(placeholder "lib")
|
||||||
(placeholder "out")
|
(placeholder "out")
|
||||||
"${placeholder "out"}/nvvm"
|
"${placeholder "out"}/nvvm"
|
||||||
# Is it not handled by autoPatchelf automatically?
|
# NOTE: use the same libstdc++ as the rest of nixpkgs, not from backendStdenv
|
||||||
"${lib.getLib backendStdenv.cc.cc}/lib64"
|
"${lib.getLib stdenv.cc.cc}/lib64"
|
||||||
"${placeholder "out"}/jre/lib/amd64/jli"
|
"${placeholder "out"}/jre/lib/amd64/jli"
|
||||||
"${placeholder "out"}/lib64"
|
"${placeholder "out"}/lib64"
|
||||||
"${placeholder "out"}/nvvm/lib64"
|
"${placeholder "out"}/nvvm/lib64"
|
||||||
|
|
|
@ -10,11 +10,17 @@ final: prev: let
|
||||||
finalVersion = cudatoolkitVersions.${final.cudaVersion};
|
finalVersion = cudatoolkitVersions.${final.cudaVersion};
|
||||||
|
|
||||||
# Exposed as cudaPackages.backendStdenv.
|
# Exposed as cudaPackages.backendStdenv.
|
||||||
# We don't call it just "stdenv" to avoid confusion: e.g. this toolchain doesn't contain nvcc.
|
# This is what nvcc uses as a backend,
|
||||||
# Instead, it's the back-end toolchain for nvcc to use.
|
# and it has to be an officially supported one (e.g. gcc11 for cuda11).
|
||||||
# We also use this to link a compatible libstdc++ (backendStdenv.cc.cc.lib)
|
#
|
||||||
|
# It, however, propagates current stdenv's libstdc++ to avoid "GLIBCXX_* not found errors"
|
||||||
|
# when linked with other C++ libraries.
|
||||||
|
# E.g. for cudaPackages_11_8 we use gcc11 with gcc12's libstdc++
|
||||||
# Cf. https://github.com/NixOS/nixpkgs/pull/218265 for context
|
# Cf. https://github.com/NixOS/nixpkgs/pull/218265 for context
|
||||||
backendStdenv = prev.pkgs."${finalVersion.gcc}Stdenv";
|
backendStdenv = final.callPackage ./stdenv.nix {
|
||||||
|
nixpkgsStdenv = prev.pkgs.stdenv;
|
||||||
|
nvccCompatibleStdenv = prev.pkgs.buildPackages."${finalVersion.gcc}Stdenv";
|
||||||
|
};
|
||||||
|
|
||||||
### Add classic cudatoolkit package
|
### Add classic cudatoolkit package
|
||||||
cudatoolkit =
|
cudatoolkit =
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{ lib
|
{ lib
|
||||||
|
, stdenv
|
||||||
, backendStdenv
|
, backendStdenv
|
||||||
, fetchurl
|
, fetchurl
|
||||||
, autoPatchelfHook
|
, autoPatchelfHook
|
||||||
|
@ -30,11 +31,11 @@ backendStdenv.mkDerivation {
|
||||||
];
|
];
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
# autoPatchelfHook will search for a libstdc++ and we're giving it a
|
# autoPatchelfHook will search for a libstdc++ and we're giving it
|
||||||
# "compatible" libstdc++ from the same toolchain that NVCC uses.
|
# one that is compatible with the rest of nixpkgs, even when
|
||||||
#
|
# nvcc forces us to use an older gcc
|
||||||
# NB: We don't actually know if this is the right thing to do
|
# NB: We don't actually know if this is the right thing to do
|
||||||
backendStdenv.cc.cc.lib
|
stdenv.cc.cc.lib
|
||||||
];
|
];
|
||||||
|
|
||||||
dontBuild = true;
|
dontBuild = true;
|
||||||
|
|
17
pkgs/development/compilers/cudatoolkit/stdenv.nix
Normal file
17
pkgs/development/compilers/cudatoolkit/stdenv.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{ nixpkgsStdenv
|
||||||
|
, nvccCompatibleStdenv
|
||||||
|
, overrideCC
|
||||||
|
, wrapCCWith
|
||||||
|
}:
|
||||||
|
|
||||||
|
overrideCC nixpkgsStdenv (wrapCCWith {
|
||||||
|
cc = nvccCompatibleStdenv.cc.cc;
|
||||||
|
|
||||||
|
# This option is for clang's libcxx, but we (ab)use it for gcc's libstdc++.
|
||||||
|
# Note that libstdc++ maintains forward-compatibility: if we load a newer
|
||||||
|
# libstdc++ into the process, we can still use libraries built against an
|
||||||
|
# older libstdc++. This, in practice, means that we should use libstdc++ from
|
||||||
|
# the same stdenv that the rest of nixpkgs uses.
|
||||||
|
# We currently do not try to support anything other than gcc and linux.
|
||||||
|
libcxx = nixpkgsStdenv.cc.cc.lib;
|
||||||
|
})
|
Loading…
Reference in a new issue