portfolio: 0.71.2 -> 0.72.2 (#360387)
[NixPkgs.git] / pkgs / development / python-modules / cupy / default.nix
blobe0f3e8311db102d54ce669b2314894292b216382
2   lib,
3   buildPythonPackage,
4   fetchFromGitHub,
5   cython_0,
6   fastrlock,
7   numpy,
8   wheel,
9   pytestCheckHook,
10   mock,
11   setuptools,
12   cudaPackages,
13   addDriverRunpath,
14   pythonOlder,
15   symlinkJoin,
16   fetchpatch
19 let
20   inherit (cudaPackages) cudnn cutensor nccl;
21   outpaths = with cudaPackages; [
22       cuda_cccl # <nv/target>
23       cuda_cudart
24       cuda_nvcc # <crt/host_defines.h>
25       cuda_nvprof
26       cuda_nvrtc
27       cuda_nvtx
28       cuda_profiler_api
29       libcublas
30       libcufft
31       libcurand
32       libcusolver
33       libcusparse
35       # Missing:
36       # cusparselt
37   ];
38   cudatoolkit-joined = symlinkJoin {
39     name = "cudatoolkit-joined-${cudaPackages.cudaVersion}";
40     paths = outpaths ++ lib.concatMap (f: lib.map f outpaths) [lib.getLib lib.getDev (lib.getOutput "static") (lib.getOutput "stubs")];
41   };
43 buildPythonPackage rec {
44   pname = "cupy";
45   version = "13.3.0";
46   format = "setuptools";
48   disabled = pythonOlder "3.7";
50   src = fetchFromGitHub {
51     owner = "cupy";
52     repo = "cupy";
53     rev = "refs/tags/v${version}";
54     hash = "sha256-eQZwOGCaWZ4b0JCHZlrPHVQVXQwSkibHb02j0czAMt8=";
55     fetchSubmodules = true;
56   };
58   patches = [
59     (fetchpatch {
60       url =
61         "https://github.com/cfhammill/cupy/commit/67526c756e4a0a70f0420bf0e7f081b8a35a8ee5.patch";
62       hash = "sha256-WZgexBdM9J0ep5s+9CGZriVq0ZidCRccox+g0iDDywQ=";
63     })
64   ];
66   # See https://docs.cupy.dev/en/v10.2.0/reference/environment.html. Seting both
67   # CUPY_NUM_BUILD_JOBS and CUPY_NUM_NVCC_THREADS to NIX_BUILD_CORES results in
68   # a small amount of thrashing but it turns out there are a large number of
69   # very short builds and a few extremely long ones, so setting both ends up
70   # working nicely in practice.
71   preConfigure = ''
72     export CUPY_NUM_BUILD_JOBS="$NIX_BUILD_CORES"
73     export CUPY_NUM_NVCC_THREADS="$NIX_BUILD_CORES"
74   '';
76   nativeBuildInputs = [
77     setuptools
78     wheel
79     addDriverRunpath
80     cython_0
81     cudaPackages.cuda_nvcc
82   ];
84   buildInputs = [
85     cudatoolkit-joined
86     cudnn
87     cutensor
88     nccl
89   ];
91   NVCC = "${lib.getExe cudaPackages.cuda_nvcc}"; # FIXME: splicing/buildPackages
92   CUDA_PATH = "${cudatoolkit-joined}";
94   propagatedBuildInputs = [
95     fastrlock
96     numpy
97   ];
99   nativeCheckInputs = [
100     pytestCheckHook
101     mock
102   ];
104   # Won't work with the GPU, whose drivers won't be accessible from the build
105   # sandbox
106   doCheck = false;
108   postFixup = ''
109     find $out -type f \( -name '*.so' -or -name '*.so.*' \) | while read lib; do
110       addDriverRunpath "$lib"
111     done
112   '';
114   enableParallelBuilding = true;
116   meta = with lib; {
117     description = "NumPy-compatible matrix library accelerated by CUDA";
118     homepage = "https://cupy.chainer.org/";
119     changelog = "https://github.com/cupy/cupy/releases/tag/v${version}";
120     license = licenses.mit;
121     platforms = [ "x86_64-linux" ];
122     maintainers = with maintainers; [ hyphon81 ];
123   };