Coverage for cuda/pathfinder/_dynamic_libs/descriptor_catalog.py: 98.00%
50 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-04 01:32 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-04 01:32 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2# SPDX-License-Identifier: Apache-2.0
4"""Canonical authored descriptor catalog for dynamic libraries."""
6from __future__ import annotations
8from dataclasses import dataclass
9from pathlib import PurePosixPath
10from typing import Literal
12from cuda.pathfinder._utils.ctk_root_canary import CTK_ROOT_CANARY_ANCHOR_LIBNAMES
14PackagedWith = Literal["ctk", "other", "driver"]
15WindowsArch = Literal["x64", "arm64"]
18@dataclass(frozen=True, slots=True)
19class WindowsSearchDirs:
20 """Windows search locations, highest priority first, grouped by architecture."""
22 x64: tuple[str, ...] = ()
23 arm64: tuple[str, ...] = ()
25 @classmethod
26 def x64_only(cls, *paths: str) -> WindowsSearchDirs:
27 return cls(x64=paths) 2a ucGb
29 @classmethod
30 def arm64_only(cls, *paths: str) -> WindowsSearchDirs:
31 return cls(arm64=paths) 2a Gb
33 def for_arch(self, target_arch: str) -> tuple[str, ...]:
34 if target_arch == "x64": 2a HbIbJbKbLbMbNbOb5 Pbb c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Qb6 Rb7 Sb8 Tb9 Ub! Vb# Wb$ Xb% Yb' Zb( 0b) 1b* 2b+ 3b, 4b- 5b. 6b/ 7b: 8b; 9b= !b? #b@ $b[ %b] 'b^ (b_ )b` *b{ +b| ,b} -b~ .bab/bbb:bcb;bdb=beb?bfb@bgb[bhb]bib^bjb_bkb`blb{bmb|bnb}bob~bpbacqbbcrbccsbdctbZ 0 ecub1 2 3 4 vbfcwbgcxbhcybzbicjcAbBbkclcmcncocCbDbEbpcFbqcrcsctc
35 return self.x64 2a HbIbJbKbLbMbNbObPbb c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y QbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcZ 0 ec1 2 3 4 fcgchcicjckclcmcncocpcqcrcsctc
36 if target_arch == "arm64": 25 b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbZ 0 ub1 2 3 4 vbwbxbybzbAbBbCbDbEbFb
37 return self.arm64 25 b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbZ 0 ub1 2 3 4 vbwbxbybzbAbBbCbDbEbFb
38 raise ValueError(f"Unsupported Windows target architecture: {target_arch!r}")
41# Windows CTK before 13.4 was x64-only and used the common bin directory.
42# Native ARM64 support starts with the architecture-qualified 13.4 layout.
43DEFAULT_WINDOWS_CTK_ANCHOR_DIRS = WindowsSearchDirs(
44 x64=("bin/x64", "bin"),
45 arm64=("bin/arm64",),
46)
49def _ctk_windows_wheel_dirs(cuda13_bin_dir: str, cuda12_dir: str) -> WindowsSearchDirs:
50 """Search CUDA 13 first, with the x64-only CUDA 12 wheel as an x64 fallback."""
51 cuda13_bin_path = PurePosixPath(cuda13_bin_dir)
52 return WindowsSearchDirs(
53 x64=((cuda13_bin_path / "x86_64").as_posix(), cuda12_dir),
54 arm64=((cuda13_bin_path / "arm64").as_posix(),),
55 )
58@dataclass(frozen=True, slots=True)
59class DescriptorSpec:
60 """Dynamic-library metadata; ordered search candidates are tried first-to-last."""
62 name: str
63 packaged_with: PackagedWith
64 # Library filenames are authored in search/load preference order, most preferred first.
65 linux_sonames: tuple[str, ...] = ()
66 windows_dlls: tuple[str, ...] = ()
67 supported_windows_arch: tuple[WindowsArch, ...] = ()
68 site_packages_linux: tuple[str, ...] = ()
69 site_packages_windows: WindowsSearchDirs = WindowsSearchDirs()
70 dependencies: tuple[str, ...] = ()
71 optional_dependencies: tuple[str, ...] = ()
72 anchor_rel_dirs_linux: tuple[str, ...] = ("lib64", "lib")
73 anchor_rel_dirs_windows: WindowsSearchDirs = DEFAULT_WINDOWS_CTK_ANCHOR_DIRS
74 install_root_env_vars_linux: tuple[str, ...] = ()
75 install_root_env_rel_dirs_linux: tuple[str, ...] = ()
76 install_root_env_vars_windows: tuple[str, ...] = ()
77 install_root_env_rel_dirs_windows: WindowsSearchDirs = WindowsSearchDirs()
78 program_files_root_globs_windows: WindowsSearchDirs = WindowsSearchDirs()
79 ctk_root_canary_anchor_libnames: tuple[str, ...] = ()
80 requires_add_dll_directory: bool = False
81 requires_rtld_deepbind: bool = False
82 requires_windows_binary_arch_check: bool = False
85DESCRIPTOR_CATALOG: tuple[DescriptorSpec, ...] = (
86 # -----------------------------------------------------------------------
87 # CTK (CUDA Toolkit) libraries
88 # -----------------------------------------------------------------------
89 DescriptorSpec(
90 name="cudart",
91 packaged_with="ctk",
92 linux_sonames=("libcudart.so.13", "libcudart.so.12"),
93 windows_dlls=("cudart64_13.dll", "cudart64_12.dll"),
94 supported_windows_arch=("x64", "arm64"),
95 site_packages_linux=("nvidia/cu13/lib", "nvidia/cuda_runtime/lib"),
96 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cuda_runtime/bin"),
97 ),
98 DescriptorSpec(
99 name="nvfatbin",
100 packaged_with="ctk",
101 linux_sonames=("libnvfatbin.so.13", "libnvfatbin.so.12"),
102 windows_dlls=("nvfatbin_130_0.dll", "nvfatbin_120_0.dll"),
103 supported_windows_arch=("x64", "arm64"),
104 site_packages_linux=("nvidia/cu13/lib", "nvidia/nvfatbin/lib"),
105 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/nvfatbin/bin"),
106 ),
107 DescriptorSpec(
108 name="nvJitLink",
109 packaged_with="ctk",
110 linux_sonames=("libnvJitLink.so.13", "libnvJitLink.so.12"),
111 windows_dlls=("nvJitLink_130_0.dll", "nvJitLink_120_0.dll"),
112 supported_windows_arch=("x64", "arm64"),
113 site_packages_linux=("nvidia/cu13/lib", "nvidia/nvjitlink/lib"),
114 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/nvjitlink/bin"),
115 ),
116 DescriptorSpec(
117 name="nvrtc",
118 packaged_with="ctk",
119 linux_sonames=("libnvrtc.so.13", "libnvrtc.so.12"),
120 windows_dlls=("nvrtc64_130_0.dll", "nvrtc64_120_0.dll"),
121 supported_windows_arch=("x64", "arm64"),
122 site_packages_linux=("nvidia/cu13/lib", "nvidia/cuda_nvrtc/lib"),
123 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cuda_nvrtc/bin"),
124 requires_add_dll_directory=True,
125 ),
126 DescriptorSpec(
127 name="nvvm",
128 packaged_with="ctk",
129 linux_sonames=("libnvvm.so.4", "libnvvm.so"),
130 windows_dlls=("nvvm70.dll", "nvvm64_40_0.dll", "nvvm64.dll"),
131 supported_windows_arch=("x64", "arm64"),
132 site_packages_linux=("nvidia/cu13/lib", "nvidia/cuda_nvcc/nvvm/lib64"),
133 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cuda_nvcc/nvvm/bin"),
134 anchor_rel_dirs_linux=("nvvm/lib64",),
135 # CTK 13.4 installs the ARM64 DLL directly in nvvm/bin, while x64
136 # uses nvvm/bin/x64. Older x64 toolkits also used nvvm/bin, so the
137 # binary in the unqualified directory must be checked at runtime.
138 anchor_rel_dirs_windows=WindowsSearchDirs(
139 x64=("nvvm/bin/x64", "nvvm/bin"),
140 arm64=("nvvm/bin",),
141 ),
142 ctk_root_canary_anchor_libnames=CTK_ROOT_CANARY_ANCHOR_LIBNAMES,
143 # requires_windows_binary_arch_check disambiguates pre-13.4 x64 DLLs
144 # from 13.4+ Arm64 DLLs in nvvm/bin; see
145 # _utils/windows_arch.py for the validation.
146 requires_windows_binary_arch_check=True,
147 ),
148 DescriptorSpec(
149 name="cublas",
150 packaged_with="ctk",
151 linux_sonames=("libcublas.so.13", "libcublas.so.12"),
152 windows_dlls=("cublas64_13.dll", "cublas64_12.dll"),
153 supported_windows_arch=("x64", "arm64"),
154 site_packages_linux=("nvidia/cu13/lib", "nvidia/cublas/lib"),
155 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cublas/bin"),
156 dependencies=("cublasLt",),
157 ),
158 DescriptorSpec(
159 name="cublasLt",
160 packaged_with="ctk",
161 linux_sonames=("libcublasLt.so.13", "libcublasLt.so.12"),
162 windows_dlls=("cublasLt64_13.dll", "cublasLt64_12.dll"),
163 supported_windows_arch=("x64", "arm64"),
164 site_packages_linux=("nvidia/cu13/lib", "nvidia/cublas/lib"),
165 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cublas/bin"),
166 ),
167 DescriptorSpec(
168 name="cufft",
169 packaged_with="ctk",
170 linux_sonames=("libcufft.so.12", "libcufft.so.11"),
171 windows_dlls=("cufft64_12.dll", "cufft64_11.dll"),
172 supported_windows_arch=("x64", "arm64"),
173 site_packages_linux=("nvidia/cu13/lib", "nvidia/cufft/lib"),
174 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cufft/bin"),
175 requires_add_dll_directory=True,
176 ),
177 DescriptorSpec(
178 name="cufftw",
179 packaged_with="ctk",
180 linux_sonames=("libcufftw.so.12", "libcufftw.so.11"),
181 windows_dlls=("cufftw64_12.dll", "cufftw64_11.dll"),
182 supported_windows_arch=("x64", "arm64"),
183 site_packages_linux=("nvidia/cu13/lib", "nvidia/cufft/lib"),
184 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cufft/bin"),
185 dependencies=("cufft",),
186 ),
187 DescriptorSpec(
188 name="curand",
189 packaged_with="ctk",
190 linux_sonames=("libcurand.so.11", "libcurand.so.10"),
191 windows_dlls=("curand64_11.dll", "curand64_10.dll"),
192 supported_windows_arch=("x64", "arm64"),
193 site_packages_linux=("nvidia/cu13/lib", "nvidia/curand/lib"),
194 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/curand/bin"),
195 ),
196 DescriptorSpec(
197 name="cusolver",
198 packaged_with="ctk",
199 linux_sonames=("libcusolver.so.12", "libcusolver.so.11"),
200 windows_dlls=("cusolver64_12.dll", "cusolver64_11.dll"),
201 supported_windows_arch=("x64", "arm64"),
202 site_packages_linux=("nvidia/cu13/lib", "nvidia/cusolver/lib"),
203 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cusolver/bin"),
204 dependencies=("nvJitLink", "cusparse", "cublasLt", "cublas"),
205 ),
206 DescriptorSpec(
207 name="cusolverMg",
208 packaged_with="ctk",
209 linux_sonames=("libcusolverMg.so.12", "libcusolverMg.so.11"),
210 windows_dlls=("cusolverMg64_12.dll", "cusolverMg64_11.dll"),
211 supported_windows_arch=("x64", "arm64"),
212 site_packages_linux=("nvidia/cu13/lib", "nvidia/cusolver/lib"),
213 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cusolver/bin"),
214 dependencies=("nvJitLink", "cublasLt", "cublas"),
215 ),
216 DescriptorSpec(
217 name="cusparse",
218 packaged_with="ctk",
219 linux_sonames=("libcusparse.so.12",),
220 windows_dlls=("cusparse64_12.dll",),
221 supported_windows_arch=("x64", "arm64"),
222 site_packages_linux=("nvidia/cu13/lib", "nvidia/cusparse/lib"),
223 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cusparse/bin"),
224 dependencies=("nvJitLink",),
225 ),
226 DescriptorSpec(
227 name="nppc",
228 packaged_with="ctk",
229 linux_sonames=("libnppc.so.13", "libnppc.so.12"),
230 windows_dlls=("nppc64_13.dll", "nppc64_12.dll"),
231 supported_windows_arch=("x64", "arm64"),
232 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
233 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
234 ),
235 DescriptorSpec(
236 name="nppial",
237 packaged_with="ctk",
238 linux_sonames=("libnppial.so.13", "libnppial.so.12"),
239 windows_dlls=("nppial64_13.dll", "nppial64_12.dll"),
240 supported_windows_arch=("x64", "arm64"),
241 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
242 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
243 dependencies=("nppc",),
244 ),
245 DescriptorSpec(
246 name="nppicc",
247 packaged_with="ctk",
248 linux_sonames=("libnppicc.so.13", "libnppicc.so.12"),
249 windows_dlls=("nppicc64_13.dll", "nppicc64_12.dll"),
250 supported_windows_arch=("x64", "arm64"),
251 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
252 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
253 dependencies=("nppc",),
254 ),
255 DescriptorSpec(
256 name="nppidei",
257 packaged_with="ctk",
258 linux_sonames=("libnppidei.so.13", "libnppidei.so.12"),
259 windows_dlls=("nppidei64_13.dll", "nppidei64_12.dll"),
260 supported_windows_arch=("x64", "arm64"),
261 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
262 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
263 dependencies=("nppc",),
264 ),
265 DescriptorSpec(
266 name="nppif",
267 packaged_with="ctk",
268 linux_sonames=("libnppif.so.13", "libnppif.so.12"),
269 windows_dlls=("nppif64_13.dll", "nppif64_12.dll"),
270 supported_windows_arch=("x64", "arm64"),
271 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
272 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
273 dependencies=("nppc",),
274 ),
275 DescriptorSpec(
276 name="nppig",
277 packaged_with="ctk",
278 linux_sonames=("libnppig.so.13", "libnppig.so.12"),
279 windows_dlls=("nppig64_13.dll", "nppig64_12.dll"),
280 supported_windows_arch=("x64", "arm64"),
281 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
282 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
283 dependencies=("nppc",),
284 ),
285 DescriptorSpec(
286 name="nppim",
287 packaged_with="ctk",
288 linux_sonames=("libnppim.so.13", "libnppim.so.12"),
289 windows_dlls=("nppim64_13.dll", "nppim64_12.dll"),
290 supported_windows_arch=("x64", "arm64"),
291 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
292 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
293 dependencies=("nppc",),
294 ),
295 DescriptorSpec(
296 name="nppist",
297 packaged_with="ctk",
298 linux_sonames=("libnppist.so.13", "libnppist.so.12"),
299 windows_dlls=("nppist64_13.dll", "nppist64_12.dll"),
300 supported_windows_arch=("x64", "arm64"),
301 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
302 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
303 dependencies=("nppc",),
304 ),
305 DescriptorSpec(
306 name="nppisu",
307 packaged_with="ctk",
308 linux_sonames=("libnppisu.so.13", "libnppisu.so.12"),
309 windows_dlls=("nppisu64_13.dll", "nppisu64_12.dll"),
310 supported_windows_arch=("x64", "arm64"),
311 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
312 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
313 dependencies=("nppc",),
314 ),
315 DescriptorSpec(
316 name="nppitc",
317 packaged_with="ctk",
318 linux_sonames=("libnppitc.so.13", "libnppitc.so.12"),
319 windows_dlls=("nppitc64_13.dll", "nppitc64_12.dll"),
320 supported_windows_arch=("x64", "arm64"),
321 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
322 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
323 dependencies=("nppc",),
324 ),
325 DescriptorSpec(
326 name="npps",
327 packaged_with="ctk",
328 linux_sonames=("libnpps.so.13", "libnpps.so.12"),
329 windows_dlls=("npps64_13.dll", "npps64_12.dll"),
330 supported_windows_arch=("x64", "arm64"),
331 site_packages_linux=("nvidia/cu13/lib", "nvidia/npp/lib"),
332 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/npp/bin"),
333 dependencies=("nppc",),
334 ),
335 DescriptorSpec(
336 name="nvblas",
337 packaged_with="ctk",
338 linux_sonames=("libnvblas.so.13", "libnvblas.so.12"),
339 windows_dlls=("nvblas64_13.dll", "nvblas64_12.dll"),
340 supported_windows_arch=("x64", "arm64"),
341 site_packages_linux=("nvidia/cu13/lib", "nvidia/cublas/lib"),
342 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cublas/bin"),
343 dependencies=("cublas", "cublasLt"),
344 ),
345 DescriptorSpec(
346 name="nvjpeg",
347 packaged_with="ctk",
348 linux_sonames=("libnvjpeg.so.13", "libnvjpeg.so.12"),
349 windows_dlls=("nvjpeg64_13.dll", "nvjpeg64_12.dll"),
350 supported_windows_arch=("x64", "arm64"),
351 site_packages_linux=("nvidia/cu13/lib", "nvidia/nvjpeg/lib"),
352 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/nvjpeg/bin"),
353 ),
354 DescriptorSpec(
355 name="cufile",
356 packaged_with="ctk",
357 linux_sonames=("libcufile.so.0",),
358 site_packages_linux=("nvidia/cu13/lib", "nvidia/cufile/lib"),
359 ),
360 DescriptorSpec(
361 name="cupti",
362 packaged_with="ctk",
363 linux_sonames=("libcupti.so.13", "libcupti.so.12"),
364 windows_dlls=(
365 "cupti64_2026.3.0.dll",
366 "cupti64_2026.2.1.dll",
367 "cupti64_2026.2.0.dll",
368 "cupti64_2026.1.1.dll",
369 "cupti64_2026.1.0.dll",
370 "cupti64_2025.4.1.dll",
371 "cupti64_2025.3.1.dll",
372 "cupti64_2025.2.1.dll",
373 "cupti64_2025.1.1.dll",
374 "cupti64_2024.3.2.dll",
375 "cupti64_2024.2.1.dll",
376 "cupti64_2024.1.1.dll",
377 "cupti64_2023.3.1.dll",
378 "cupti64_2023.2.2.dll",
379 "cupti64_2023.1.1.dll",
380 "cupti64_2022.4.1.dll",
381 ),
382 supported_windows_arch=("x64", "arm64"),
383 site_packages_linux=("nvidia/cu13/lib", "nvidia/cuda_cupti/lib"),
384 site_packages_windows=_ctk_windows_wheel_dirs("nvidia/cu13/bin", "nvidia/cuda_cupti/bin"),
385 anchor_rel_dirs_linux=("extras/CUPTI/lib64", "lib"),
386 # CTK 13.4 uses architecture-qualified CUPTI directories. Older
387 # Windows CUPTI toolkits were x64-only and used extras/CUPTI/lib64.
388 anchor_rel_dirs_windows=WindowsSearchDirs(
389 x64=("extras/CUPTI/lib/x64", "extras/CUPTI/lib64", "bin"),
390 arm64=("extras/CUPTI/lib/arm64",),
391 ),
392 ctk_root_canary_anchor_libnames=CTK_ROOT_CANARY_ANCHOR_LIBNAMES,
393 ),
394 DescriptorSpec(
395 name="cudla",
396 packaged_with="ctk",
397 linux_sonames=("libcudla.so.1",),
398 windows_dlls=("cudla.dll",),
399 supported_windows_arch=("arm64",),
400 site_packages_linux=("nvidia/cu13/lib",),
401 # No Windows pip wheel ships cudla.dll today; it is loaded from the local
402 # CUDA Toolkit only, so site_packages_windows is intentionally left empty.
403 anchor_rel_dirs_windows=WindowsSearchDirs.arm64_only("bin/arm64"),
404 ),
405 # -----------------------------------------------------------------------
406 # Third-party / separately packaged libraries
407 # -----------------------------------------------------------------------
408 DescriptorSpec(
409 name="cublasmp",
410 packaged_with="other",
411 linux_sonames=("libcublasmp.so.0",),
412 site_packages_linux=("nvidia/cublasmp/cu13/lib", "nvidia/cublasmp/cu12/lib"),
413 dependencies=("cublas", "cublasLt", "nvshmem_host"),
414 ),
415 DescriptorSpec(
416 name="cufftMp",
417 packaged_with="other",
418 linux_sonames=("libcufftMp.so.12", "libcufftMp.so.11"),
419 site_packages_linux=("nvidia/cufftmp/cu13/lib", "nvidia/cufftmp/cu12/lib"),
420 dependencies=("nvshmem_host",),
421 requires_rtld_deepbind=True,
422 ),
423 DescriptorSpec(
424 name="cudnn",
425 packaged_with="other",
426 linux_sonames=("libcudnn.so.9",),
427 windows_dlls=("cudnn64_9.dll",),
428 supported_windows_arch=("x64", "arm64"),
429 site_packages_linux=("nvidia/cudnn/lib",),
430 site_packages_windows=WindowsSearchDirs.x64_only("nvidia/cudnn/bin"),
431 dependencies=("cublasLt",),
432 optional_dependencies=("nvrtc",),
433 install_root_env_vars_linux=("CUDNN_PATH",),
434 install_root_env_rel_dirs_linux=("lib", "lib64"),
435 # The ARM64 layout is verified only for the standalone archive rooted
436 # at CUDNN_PATH, not for conda, CUDA_PATH, or Program Files installs.
437 anchor_rel_dirs_windows=WindowsSearchDirs.x64_only("bin/x64", "bin"),
438 install_root_env_vars_windows=("CUDNN_PATH",),
439 install_root_env_rel_dirs_windows=WindowsSearchDirs(
440 x64=("bin/x64", "bin"),
441 arm64=("bin/arm64",),
442 ),
443 program_files_root_globs_windows=WindowsSearchDirs.x64_only("NVIDIA/CUDNN/v9.*"),
444 requires_add_dll_directory=True,
445 ),
446 DescriptorSpec(
447 name="cusolverMp",
448 packaged_with="other",
449 linux_sonames=("libcusolverMp.so.0",),
450 site_packages_linux=("nvidia/cu13/lib", "nvidia/cu12/lib"),
451 dependencies=("cublas", "cudart", "cusolver", "nccl"),
452 ),
453 DescriptorSpec(
454 name="mathdx",
455 packaged_with="other",
456 linux_sonames=("libmathdx.so.0",),
457 windows_dlls=("mathdx64_0.dll",),
458 supported_windows_arch=("x64", "arm64"),
459 site_packages_linux=("nvidia/cu13/lib", "nvidia/cu12/lib"),
460 site_packages_windows=WindowsSearchDirs(
461 x64=("nvidia/cu13/bin", "nvidia/cu12/bin"),
462 arm64=("nvidia/cu13/bin", "nvidia/cu12/bin"),
463 ),
464 dependencies=("nvrtc",),
465 ),
466 DescriptorSpec(
467 name="cudss",
468 packaged_with="other",
469 linux_sonames=("libcudss.so.0",),
470 windows_dlls=("cudss64_0.dll",),
471 supported_windows_arch=("x64", "arm64"),
472 site_packages_linux=("nvidia/cu13/lib", "nvidia/cu12/lib"),
473 site_packages_windows=WindowsSearchDirs(
474 x64=("nvidia/cu13/bin", "nvidia/cu12/bin"),
475 arm64=("nvidia/cu13/bin", "nvidia/cu12/bin"),
476 ),
477 dependencies=("cublas", "cublasLt"),
478 ),
479 DescriptorSpec(
480 name="cusparseLt",
481 packaged_with="other",
482 linux_sonames=("libcusparseLt.so.0",),
483 windows_dlls=("cusparseLt.dll",),
484 supported_windows_arch=("x64", "arm64"),
485 site_packages_linux=("nvidia/cu13/lib", "nvidia/cusparselt/lib"),
486 site_packages_windows=WindowsSearchDirs(
487 x64=("nvidia/cu13/bin/x64", "nvidia/cusparselt/bin"),
488 arm64=("nvidia/cu13/bin/arm64",),
489 ),
490 ),
491 DescriptorSpec(
492 name="cutensor",
493 packaged_with="other",
494 linux_sonames=("libcutensor.so.2",),
495 windows_dlls=("cutensor.dll",),
496 supported_windows_arch=("x64", "arm64"),
497 site_packages_linux=("cutensor/lib",),
498 site_packages_windows=WindowsSearchDirs(x64=("cutensor/bin",), arm64=("cutensor/bin",)),
499 dependencies=("cublasLt",),
500 ),
501 DescriptorSpec(
502 name="cutensorMg",
503 packaged_with="other",
504 linux_sonames=("libcutensorMg.so.2",),
505 windows_dlls=("cutensorMg.dll",),
506 supported_windows_arch=("x64", "arm64"),
507 site_packages_linux=("cutensor/lib",),
508 site_packages_windows=WindowsSearchDirs(x64=("cutensor/bin",), arm64=("cutensor/bin",)),
509 dependencies=("cutensor", "cublasLt"),
510 ),
511 DescriptorSpec(
512 name="cutensorMp",
513 packaged_with="other",
514 linux_sonames=("libcutensorMp.so.2",),
515 site_packages_linux=("cutensor/lib",),
516 dependencies=("cutensor", "cublasLt", "cudart", "nccl"),
517 ),
518 DescriptorSpec(
519 name="cudensitymat",
520 packaged_with="other",
521 linux_sonames=("libcudensitymat.so.0",),
522 site_packages_linux=("cuquantum/lib",),
523 dependencies=(
524 "cutensornet",
525 "cutensor",
526 "cusolver",
527 "cublasLt",
528 "cublas",
529 "curand",
530 "cusparse",
531 "nvJitLink",
532 ),
533 ),
534 DescriptorSpec(
535 name="cupauliprop",
536 packaged_with="other",
537 linux_sonames=("libcupauliprop.so.0",),
538 site_packages_linux=("cuquantum/lib",),
539 ),
540 DescriptorSpec(
541 name="cutensornet",
542 packaged_with="other",
543 linux_sonames=("libcutensornet.so.2",),
544 site_packages_linux=("cuquantum/lib",),
545 dependencies=("cutensor", "cublas", "cusolver"),
546 ),
547 DescriptorSpec(
548 name="custabilizer",
549 packaged_with="other",
550 linux_sonames=("libcustabilizer.so.0",),
551 site_packages_linux=("cuquantum/lib",),
552 ),
553 DescriptorSpec(
554 name="custatevec",
555 packaged_with="other",
556 linux_sonames=("libcustatevec.so.1",),
557 site_packages_linux=("cuquantum/lib",),
558 dependencies=("cublas", "cublasLt"),
559 ),
560 DescriptorSpec(
561 name="nccl",
562 packaged_with="other",
563 linux_sonames=("libnccl.so.2",),
564 site_packages_linux=("nvidia/nccl/lib",),
565 install_root_env_vars_linux=("NCCL_HOME",),
566 install_root_env_rel_dirs_linux=("lib", "lib64", "build/lib"),
567 ),
568 DescriptorSpec(
569 name="nvpl_fftw",
570 packaged_with="other",
571 linux_sonames=("libnvpl_fftw.so.0",),
572 site_packages_linux=("nvpl/lib",),
573 ),
574 DescriptorSpec(
575 name="nvshmem_host",
576 packaged_with="other",
577 linux_sonames=("libnvshmem_host.so.3",),
578 site_packages_linux=("nvidia/nvshmem/lib",),
579 ),
580 # -----------------------------------------------------------------------
581 # Driver libraries (system-search only, no CTK cascade)
582 # -----------------------------------------------------------------------
583 DescriptorSpec(
584 name="cuda",
585 packaged_with="driver",
586 linux_sonames=("libcuda.so.1",),
587 windows_dlls=("nvcuda.dll",),
588 supported_windows_arch=("x64", "arm64"),
589 ),
590 DescriptorSpec(
591 name="nvcudla",
592 packaged_with="driver",
593 linux_sonames=("libnvcudla.so",),
594 ),
595 DescriptorSpec(
596 name="nvml",
597 packaged_with="driver",
598 linux_sonames=("libnvidia-ml.so.1",),
599 windows_dlls=("nvml.dll",),
600 supported_windows_arch=("x64", "arm64"),
601 ),
602)