mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-09 22:45:08 +00:00
4f0dadbf38
After final improvements to the official formatter implementation, this commit now performs the first treewide reformat of Nix files using it. This is part of the implementation of RFC 166. Only "inactive" files are reformatted, meaning only files that aren't being touched by any PR with activity in the past 2 months. This is to avoid conflicts for PRs that might soon be merged. Later we can do a full treewide reformat to get the rest, which should not cause as many conflicts. A CI check has already been running for some time to ensure that new and already-formatted files are formatted, so the files being reformatted here should also stay formatted. This commit was automatically created and can be verified using nix-builda08b3a4d19
.tar.gz \ --argstr baseRevb32a094368
result/bin/apply-formatting $NIXPKGS_PATH
346 lines
10 KiB
Nix
346 lines
10 KiB
Nix
{
|
|
cudaVersion,
|
|
runPatches ? [ ],
|
|
autoPatchelfHook,
|
|
autoAddDriverRunpath,
|
|
addDriverRunpath,
|
|
alsa-lib,
|
|
curlMinimal,
|
|
expat,
|
|
fetchurl,
|
|
fontconfig,
|
|
freetype,
|
|
gdk-pixbuf,
|
|
glib,
|
|
glibc,
|
|
gst_all_1,
|
|
gtk2,
|
|
lib,
|
|
libxkbcommon,
|
|
libkrb5,
|
|
krb5,
|
|
makeWrapper,
|
|
markForCudatoolkitRootHook,
|
|
ncurses5,
|
|
numactl,
|
|
nss,
|
|
patchelf,
|
|
perl,
|
|
python3, # FIXME: CUDAToolkit 10 may still need python27
|
|
pulseaudio,
|
|
setupCudaHook,
|
|
stdenv,
|
|
backendStdenv, # E.g. gcc11Stdenv, set in extension.nix
|
|
unixODBC,
|
|
wayland,
|
|
xorg,
|
|
zlib,
|
|
libglut,
|
|
libGLU,
|
|
libsForQt5,
|
|
libtiff,
|
|
qt6Packages,
|
|
qt6,
|
|
rdma-core,
|
|
ucx,
|
|
rsync,
|
|
libglvnd,
|
|
}:
|
|
|
|
let
|
|
# Version info for the classic cudatoolkit packages that contain everything that is in redist.
|
|
releases = builtins.import ./releases.nix;
|
|
release = releases.${cudaVersion};
|
|
in
|
|
|
|
backendStdenv.mkDerivation rec {
|
|
pname = "cudatoolkit";
|
|
inherit (release) version;
|
|
inherit runPatches;
|
|
|
|
dontPatchELF = true;
|
|
dontStrip = true;
|
|
|
|
src = fetchurl { inherit (release) url sha256; };
|
|
|
|
outputs = [
|
|
"out"
|
|
"lib"
|
|
"doc"
|
|
];
|
|
|
|
nativeBuildInputs = [
|
|
perl
|
|
makeWrapper
|
|
rsync
|
|
addDriverRunpath
|
|
autoPatchelfHook
|
|
autoAddDriverRunpath
|
|
markForCudatoolkitRootHook
|
|
] ++ lib.optionals (lib.versionAtLeast version "11.8") [ qt6Packages.wrapQtAppsHook ];
|
|
propagatedBuildInputs = [ setupCudaHook ];
|
|
buildInputs =
|
|
[
|
|
# To get $GDK_PIXBUF_MODULE_FILE via setup-hook
|
|
gdk-pixbuf
|
|
|
|
# For autoPatchelf
|
|
ncurses5
|
|
expat
|
|
python3
|
|
zlib
|
|
glibc
|
|
xorg.libX11
|
|
xorg.libXext
|
|
xorg.libXrender
|
|
xorg.libXt
|
|
xorg.libXtst
|
|
xorg.libXi
|
|
xorg.libXext
|
|
xorg.libXdamage
|
|
xorg.libxcb
|
|
xorg.xcbutilimage
|
|
xorg.xcbutilrenderutil
|
|
xorg.xcbutilwm
|
|
xorg.xcbutilkeysyms
|
|
pulseaudio
|
|
libxkbcommon
|
|
libkrb5
|
|
krb5
|
|
gtk2
|
|
glib
|
|
fontconfig
|
|
freetype
|
|
numactl
|
|
nss
|
|
unixODBC
|
|
alsa-lib
|
|
wayland
|
|
libglvnd
|
|
]
|
|
++ lib.optionals (lib.versionAtLeast version "11.8") [
|
|
(lib.getLib libtiff)
|
|
qt6Packages.qtwayland
|
|
rdma-core
|
|
(ucx.override { enableCuda = false; }) # Avoid infinite recursion
|
|
xorg.libxshmfence
|
|
xorg.libxkbfile
|
|
]
|
|
++ (lib.optionals (lib.versionAtLeast version "12") (
|
|
map lib.getLib ([
|
|
# Used by `/target-linux-x64/CollectX/clx` and `/target-linux-x64/CollectX/libclx_api.so` for:
|
|
# - `libcurl.so.4`
|
|
curlMinimal
|
|
|
|
# Used by `/host-linux-x64/Scripts/WebRTCContainer/setup/neko/server/bin/neko`
|
|
gst_all_1.gstreamer
|
|
gst_all_1.gst-plugins-base
|
|
])
|
|
++ (with qt6; [
|
|
qtmultimedia
|
|
qttools
|
|
qtpositioning
|
|
qtscxml
|
|
qtsvg
|
|
qtwebchannel
|
|
qtwebengine
|
|
])
|
|
));
|
|
|
|
# Prepended to runpaths by autoPatchelf.
|
|
# The order inherited from older rpath preFixup code
|
|
runtimeDependencies = [
|
|
(placeholder "lib")
|
|
(placeholder "out")
|
|
"${placeholder "out"}/nvvm"
|
|
# NOTE: use the same libstdc++ as the rest of nixpkgs, not from backendStdenv
|
|
"${lib.getLib stdenv.cc.cc}/lib64"
|
|
"${placeholder "out"}/jre/lib/amd64/jli"
|
|
"${placeholder "out"}/lib64"
|
|
"${placeholder "out"}/nvvm/lib64"
|
|
];
|
|
|
|
autoPatchelfIgnoreMissingDeps = [
|
|
# This is the hardware-dependent userspace driver that comes from
|
|
# nvidia_x11 package. It must be deployed at runtime in
|
|
# /run/opengl-driver/lib or pointed at by LD_LIBRARY_PATH variable, rather
|
|
# than pinned in runpath
|
|
"libcuda.so.1"
|
|
|
|
# The krb5 expression ships libcom_err.so.3 but cudatoolkit asks for the
|
|
# older
|
|
# This dependency is asked for by target-linux-x64/CollectX/RedHat/x86_64/libssl.so.10
|
|
# - do we even want to use nvidia-shipped libssl?
|
|
"libcom_err.so.2"
|
|
];
|
|
|
|
preFixup = ''
|
|
${lib.getExe' patchelf "patchelf"} $out/lib64/libnvrtc.so --add-needed libnvrtc-builtins.so
|
|
'';
|
|
|
|
unpackPhase = ''
|
|
sh $src --keep --noexec
|
|
'';
|
|
|
|
installPhase =
|
|
''
|
|
runHook preInstall
|
|
mkdir $out
|
|
mkdir -p $out/bin $out/lib64 $out/include $doc
|
|
for dir in pkg/builds/* pkg/builds/cuda_nvcc/nvvm pkg/builds/cuda_cupti/extras/CUPTI; do
|
|
if [ -d $dir/bin ]; then
|
|
mv $dir/bin/* $out/bin
|
|
fi
|
|
if [ -d $dir/doc ]; then
|
|
(cd $dir/doc && find . -type d -exec mkdir -p $doc/\{} \;)
|
|
(cd $dir/doc && find . \( -type f -o -type l \) -exec mv \{} $doc/\{} \;)
|
|
fi
|
|
if [ -L $dir/include ] || [ -d $dir/include ]; then
|
|
(cd $dir/include && find . -type d -exec mkdir -p $out/include/\{} \;)
|
|
(cd $dir/include && find . \( -type f -o -type l \) -exec mv \{} $out/include/\{} \;)
|
|
fi
|
|
if [ -L $dir/lib64 ] || [ -d $dir/lib64 ]; then
|
|
(cd $dir/lib64 && find . -type d -exec mkdir -p $out/lib64/\{} \;)
|
|
(cd $dir/lib64 && find . \( -type f -o -type l \) -exec mv \{} $out/lib64/\{} \;)
|
|
fi
|
|
done
|
|
mv pkg/builds/cuda_nvcc/nvvm $out/nvvm
|
|
|
|
mv pkg/builds/cuda_sanitizer_api $out/cuda_sanitizer_api
|
|
ln -s $out/cuda_sanitizer_api/compute-sanitizer/compute-sanitizer $out/bin/compute-sanitizer
|
|
|
|
mv pkg/builds/nsight_systems/target-linux-x64 $out/target-linux-x64
|
|
mv pkg/builds/nsight_systems/host-linux-x64 $out/host-linux-x64
|
|
rm $out/host-linux-x64/libstdc++.so*
|
|
${lib.optionalString (lib.versionAtLeast version "11.8" && lib.versionOlder version "12")
|
|
# error: auto-patchelf could not satisfy dependency libtiff.so.5 wanted by /nix/store/.......-cudatoolkit-12.0.1/host-linux-x64/Plugins/imageformats/libqtiff.so
|
|
# we only ship libtiff.so.6, so let's use qt plugins built by Nix.
|
|
# TODO: don't copy, come up with a symlink-based "merge"
|
|
''
|
|
rsync ${lib.getLib qt6Packages.qtimageformats}/lib/qt-6/plugins/ $out/host-linux-x64/Plugins/ -aP
|
|
''
|
|
}
|
|
${lib.optionalString (lib.versionAtLeast version "12")
|
|
# Use Qt plugins built by Nix.
|
|
''
|
|
for qtlib in $out/host-linux-x64/Plugins/*/libq*.so; do
|
|
qtdir=$(basename $(dirname $qtlib))
|
|
filename=$(basename $qtlib)
|
|
for qtpkgdir in ${
|
|
lib.concatMapStringsSep " " (x: qt6Packages.${x}) [
|
|
"qtbase"
|
|
"qtimageformats"
|
|
"qtsvg"
|
|
"qtwayland"
|
|
]
|
|
}; do
|
|
if [ -e $qtpkgdir/lib/qt-6/plugins/$qtdir/$filename ]; then
|
|
ln -snf $qtpkgdir/lib/qt-6/plugins/$qtdir/$filename $qtlib
|
|
fi
|
|
done
|
|
done
|
|
''
|
|
}
|
|
|
|
rm -f $out/tools/CUDA_Occupancy_Calculator.xls # FIXME: why?
|
|
|
|
${lib.optionalString (lib.versionAtLeast version "12.0") ''
|
|
rm $out/host-linux-x64/libQt6*
|
|
''}
|
|
|
|
# Fixup path to samples (needed for cuda 6.5 or else nsight will not find them)
|
|
if [ -d "$out"/cuda-samples ]; then
|
|
mv "$out"/cuda-samples "$out"/samples
|
|
fi
|
|
|
|
# Change the #error on GCC > 4.9 to a #warning.
|
|
sed -i $out/include/host_config.h -e 's/#error\(.*unsupported GNU version\)/#warning\1/'
|
|
|
|
# Fix builds with newer glibc version
|
|
sed -i "1 i#define _BITS_FLOATN_H" "$out/include/host_defines.h"
|
|
''
|
|
+
|
|
# Point NVCC at a compatible compiler
|
|
# CUDA_TOOLKIT_ROOT_DIR is legacy,
|
|
# Cf. https://cmake.org/cmake/help/latest/module/FindCUDA.html#input-variables
|
|
''
|
|
mkdir -p $out/nix-support
|
|
cat <<EOF >> $out/nix-support/setup-hook
|
|
cmakeFlags+=' -DCUDA_TOOLKIT_ROOT_DIR=$out'
|
|
EOF
|
|
|
|
# Move some libraries to the lib output so that programs that
|
|
# depend on them don't pull in this entire monstrosity.
|
|
mkdir -p $lib/lib
|
|
mv -v $out/lib64/libcudart* $lib/lib/
|
|
|
|
# Remove OpenCL libraries as they are provided by ocl-icd and driver.
|
|
rm -f $out/lib64/libOpenCL*
|
|
|
|
# nvprof do not find any program to profile if LD_LIBRARY_PATH is not set
|
|
wrapProgram $out/bin/nvprof \
|
|
--prefix LD_LIBRARY_PATH : $out/lib
|
|
''
|
|
# 11.8 includes a broken symlink, include/include, pointing to targets/x86_64-linux/include
|
|
+ lib.optionalString (lib.versions.majorMinor version == "11.8") ''
|
|
rm $out/include/include
|
|
''
|
|
+ ''
|
|
runHook postInstall
|
|
'';
|
|
|
|
postInstall = ''
|
|
for b in nvvp; do
|
|
wrapProgram "$out/bin/$b" \
|
|
--set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE"
|
|
done
|
|
${lib.optionalString (lib.versionAtLeast version "12")
|
|
# Check we don't have any lurking vendored qt libraries that weren't
|
|
# replaced during installPhase
|
|
''
|
|
qtlibfiles=$(find $out -name "libq*.so" -type f)
|
|
if [ ! -z "$qtlibfiles" ]; then
|
|
echo "Found unexpected vendored Qt library files in $out" >&2
|
|
echo $qtlibfiles >&2
|
|
echo "These should be replaced with symlinks in installPhase" >&2
|
|
exit 1
|
|
fi
|
|
''
|
|
}
|
|
'';
|
|
|
|
# cuda-gdb doesn't run correctly when not using sandboxing, so
|
|
# temporarily disabling the install check. This should be set to true
|
|
# when we figure out how to get `cuda-gdb --version` to run correctly
|
|
# when not using sandboxing.
|
|
doInstallCheck = false;
|
|
postInstallCheck = ''
|
|
# Smoke test binaries
|
|
pushd $out/bin
|
|
for f in *; do
|
|
case $f in
|
|
crt) continue;;
|
|
nvcc.profile) continue;;
|
|
nsight_ee_plugins_manage.sh) continue;;
|
|
uninstall_cuda_toolkit_6.5.pl) continue;;
|
|
computeprof|nvvp|nsight) continue;; # GUIs don't feature "--version"
|
|
*) echo "Executing '$f --version':"; ./$f --version;;
|
|
esac
|
|
done
|
|
popd
|
|
'';
|
|
passthru = {
|
|
inherit (backendStdenv) cc;
|
|
majorMinorVersion = lib.versions.majorMinor version;
|
|
majorVersion = lib.versions.majorMinor version;
|
|
};
|
|
|
|
meta = with lib; {
|
|
description = "Deprecated runfile-based CUDAToolkit installation (a compiler for NVIDIA GPUs, math libraries, and tools)";
|
|
homepage = "https://developer.nvidia.com/cuda-toolkit";
|
|
platforms = [ "x86_64-linux" ];
|
|
license = licenses.nvidiaCuda;
|
|
maintainers = teams.cuda.members;
|
|
};
|
|
}
|