diff options
Diffstat (limited to 'pkgs/development/cuda-modules')
5 files changed, 86 insertions, 24 deletions
diff --git a/pkgs/development/cuda-modules/backend-stdenv.nix b/pkgs/development/cuda-modules/backend-stdenv.nix index 3b4c8d47c5e8b..bcca7118b163b 100644 --- a/pkgs/development/cuda-modules/backend-stdenv.nix +++ b/pkgs/development/cuda-modules/backend-stdenv.nix @@ -13,18 +13,14 @@ let gccMajorVersion = nvccCompatibilities.${cudaVersion}.gccMaxMajorVersion; cudaStdenv = stdenvAdapters.useLibsFrom stdenv pkgs."gcc${gccMajorVersion}Stdenv"; passthruExtra = { - nixpkgsCompatibleLibstdcxx = lib.warn "cudaPackages.backendStdenv.nixpkgsCompatibleLibstdcxx is misnamed, deprecated, and will be removed after 24.05" cudaStdenv.cc.cxxStdlib.package; - # cc already exposed + # cudaPackages.backendStdenv.nixpkgsCompatibleLibstdcxx has been removed, + # if you need it you're likely doing something wrong. There has been a + # warning here for a month or so. Now we can no longer return any + # meaningful value in its place and drop the attribute entirely. }; 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; -in -((stdenv.cc.cxxStdlib.kind or null) == "libstdc++") --> lib.versionAtLeast cxxStdlibCuda.version cxxStdlibNixpkgs.version; + /* TODO: Consider testing whether we in fact use the newer libstdc++ */ lib.extendDerivation assertCondition passthruExtra cudaStdenv diff --git a/pkgs/development/cuda-modules/cuda/overrides.nix b/pkgs/development/cuda-modules/cuda/overrides.nix index 37dc7bf29c358..f43d649afbbf3 100644 --- a/pkgs/development/cuda-modules/cuda/overrides.nix +++ b/pkgs/development/cuda-modules/cuda/overrides.nix @@ -44,6 +44,11 @@ attrsets.filterAttrs (attr: _: (builtins.hasAttr attr prev)) { cuda_cudart = prev.cuda_cudart.overrideAttrs ( prevAttrs: { + # Remove once cuda-find-redist-features has a special case for libcuda + outputs = + prevAttrs.outputs + ++ lists.optionals (!(builtins.elem "stubs" prevAttrs.outputs)) [ "stubs" ]; + allowFHSReferences = false; # The libcuda stub's pkg-config doesn't follow the general pattern: @@ -64,6 +69,14 @@ attrsets.filterAttrs (attr: _: (builtins.hasAttr attr prev)) { ln -s libcuda.so lib/stubs/libcuda.so.1 fi ''; + + postFixup = + prevAttrs.postFixup or "" + + '' + moveToOutput lib/stubs "$stubs" + ln -s "$stubs"/lib/stubs/* "$stubs"/lib/ + ln -s "$stubs"/lib/stubs "''${!outputLib}/lib/stubs" + ''; } ); @@ -99,7 +112,6 @@ attrsets.filterAttrs (attr: _: (builtins.hasAttr attr prev)) { useCcForLibs = true; gccForLibs = ccForLibs-wrapper.cc; }; - cxxStdlibDir = ccForLibs-wrapper.cxxStdlib.solib; in { @@ -136,7 +148,6 @@ attrsets.filterAttrs (attr: _: (builtins.hasAttr attr prev)) { # Fix a compatible backend compiler PATH += ${lib.getBin cc}/bin: - LIBRARIES += "-L${cxxStdlibDir}/lib" # Expose the split-out nvvm LIBRARIES =+ -L''${!outputBin}/nvvm/lib @@ -200,20 +211,63 @@ attrsets.filterAttrs (attr: _: (builtins.hasAttr attr prev)) { ); nsight_systems = prev.nsight_systems.overrideAttrs ( - prevAttrs: { - nativeBuildInputs = prevAttrs.nativeBuildInputs ++ [final.pkgs.qt5.wrapQtAppsHook]; + prevAttrs: + let + qt = if lib.versionOlder prevAttrs.version "2022.4.2.1" then final.pkgs.qt5 else final.pkgs.qt6; + qtwayland = + if lib.versions.major qt.qtbase.version == "5" then + lib.getBin qt.qtwayland + else + lib.getLib qt.qtwayland; + qtWaylandPlugins = "${qtwayland}/${qt.qtbase.qtPluginPrefix}"; + in + { + # An ad hoc replacement for + # https://github.com/ConnorBaker/cuda-redist-find-features/issues/11 + env.rmPatterns = toString [ + "nsight-systems/*/*/libQt*" + "nsight-systems/*/*/libstdc*" + "nsight-systems/*/*/libboost*" + "nsight-systems/*/*/lib{ssl,ssh,crypto}*" + "nsight-systems/*/*/lib{arrow,jpeg}*" + "nsight-systems/*/*/Mesa" + "nsight-systems/*/*/python/bin/python" + "nsight-systems/*/*/libexec" + "nsight-systems/*/*/Plugins" + ]; + postPatch = + prevAttrs.postPatch or "" + + '' + for path in $rmPatterns ; do + rm -r "$path" + done + ''; + nativeBuildInputs = prevAttrs.nativeBuildInputs ++ [ qt.wrapQtAppsHook ]; buildInputs = prevAttrs.buildInputs ++ [ + final.cuda_cudart.stubs final.pkgs.alsa-lib + final.pkgs.boost178 final.pkgs.e2fsprogs + final.pkgs.gst_all_1.gst-plugins-base + final.pkgs.gst_all_1.gstreamer final.pkgs.nss final.pkgs.numactl final.pkgs.pulseaudio + final.pkgs.rdma-core + final.pkgs.ucx final.pkgs.wayland final.pkgs.xorg.libXcursor final.pkgs.xorg.libXdamage final.pkgs.xorg.libXrandr final.pkgs.xorg.libXtst + qt.qtbase + (qt.qtdeclarative or qt.full) + (qt.qtsvg or qt.full) + qtWaylandPlugins ]; + + # Older releases require boost 1.70 deprecated in Nixpkgs + meta.broken = prevAttrs.meta.broken or false || lib.versionOlder final.cudaVersion "11.8"; } ); diff --git a/pkgs/development/cuda-modules/generic-builders/manifest.nix b/pkgs/development/cuda-modules/generic-builders/manifest.nix index 38b80ff29f77f..5e837fa36b5e6 100644 --- a/pkgs/development/cuda-modules/generic-builders/manifest.nix +++ b/pkgs/development/cuda-modules/generic-builders/manifest.nix @@ -47,6 +47,8 @@ let # The redistArch is the name of the architecture for which the redistributable is built. # It is `"unsupported"` if the redistributable is not supported on the target platform. redistArch = flags.getRedistArch hostPlatform.system; + + sourceMatchesHost = flags.getNixSystem redistArch == stdenv.hostPlatform.system; in backendStdenv.mkDerivation ( finalAttrs: { @@ -136,7 +138,9 @@ backendStdenv.mkDerivation ( # badPlatformsConditions :: AttrSet Bool # Sets `meta.badPlatforms = meta.platforms` if any of the conditions are true. # Example: Broken on a specific architecture when some condition is met (like targeting Jetson). - badPlatformsConditions = { }; + badPlatformsConditions = { + "No source" = !sourceMatchesHost; + }; # src :: Optional Derivation src = trivial.pipe redistArch [ diff --git a/pkgs/development/cuda-modules/generic-builders/multiplex.nix b/pkgs/development/cuda-modules/generic-builders/multiplex.nix index 6353b07545a4a..abe8ad242a3a3 100644 --- a/pkgs/development/cuda-modules/generic-builders/multiplex.nix +++ b/pkgs/development/cuda-modules/generic-builders/multiplex.nix @@ -52,7 +52,7 @@ let # - Package: ../modules/${pname}/releases/package.nix # FIXME: do this at the module system level - propagatePlatforms = lib.mapAttrs (platform: subset: map (r: r // { inherit platform; }) subset); + propagatePlatforms = lib.mapAttrs (redistArch: packages: map (p: { inherit redistArch; } // p) packages); # All releases across all platforms # See ../modules/${pname}/releases/releases.nix @@ -63,11 +63,11 @@ let # computeName :: Package -> String computeName = {version, ...}: mkVersionedPackageName pname version; - # Check whether a package supports our CUDA version + # Check whether a package supports our CUDA version and platform. # isSupported :: Package -> Bool isSupported = package: - !(strings.hasPrefix "unsupported" package.platform) + redistArch == package.redistArch && strings.versionAtLeast cudaVersion package.minCudaVersion && strings.versionAtLeast package.maxCudaVersion cudaVersion; @@ -76,14 +76,22 @@ let # Value is `"unsupported"` if the platform is not supported. redistArch = flags.getRedistArch hostPlatform.system; - allReleases = lists.flatten (builtins.attrValues releaseSets); + preferable = + p1: p2: (isSupported p2 -> isSupported p1) && (strings.versionAtLeast p1.version p2.version); # All the supported packages we can build for our platform. # perSystemReleases :: List Package - perSystemReleases = releaseSets.${redistArch} or [ ]; + allReleases = lib.pipe releaseSets + [ + (builtins.attrValues) + (lists.flatten) + (builtins.groupBy (p: lib.versions.majorMinor p.version)) + (builtins.mapAttrs (_: builtins.sort preferable)) + (builtins.mapAttrs (_: lib.take 1)) + (builtins.attrValues) + (builtins.concatMap lib.trivial.id) + ]; - preferable = - p1: p2: (isSupported p2 -> isSupported p1) && (strings.versionAtLeast p1.version p2.version); newest = builtins.head (builtins.sort preferable allReleases); # A function which takes the `final` overlay and the `package` being built and returns @@ -107,7 +115,7 @@ let buildPackage = package: let - shims = final.callPackage shimsFn {inherit package redistArch;}; + shims = final.callPackage shimsFn {inherit package; inherit (package) redistArch; }; name = computeName package; drv = final.callPackage ./manifest.nix { inherit pname; @@ -119,7 +127,7 @@ let attrsets.nameValuePair name fixedDrv; # versionedDerivations :: AttrSet Derivation - versionedDerivations = builtins.listToAttrs (lists.map buildPackage perSystemReleases); + versionedDerivations = builtins.listToAttrs (lists.map buildPackage allReleases); defaultDerivation = { ${pname} = (buildPackage newest).value; }; in diff --git a/pkgs/development/cuda-modules/setup-hooks/extension.nix b/pkgs/development/cuda-modules/setup-hooks/extension.nix index 5141bc9717f93..9e352bd5b3af0 100644 --- a/pkgs/development/cuda-modules/setup-hooks/extension.nix +++ b/pkgs/development/cuda-modules/setup-hooks/extension.nix @@ -66,7 +66,7 @@ final: _: { # Pre-cuda_compat CUDA release: meta.badPlatforms = final.lib.optionals (cuda_compat == null) final.lib.platforms.all; - meta.platforms = cuda_compat.platforms or [ ]; + meta.platforms = cuda_compat.meta.platforms or [ ]; } ./auto-add-cuda-compat-runpath.sh ) |