1*da0073e9SAndroid Build Coastguard Worker 2*da0073e9SAndroid Build Coastguard Worker# This module is back-ported from CMake 3.17 and above to work with CMake 3.10 3*da0073e9SAndroid Build Coastguard Worker 4*da0073e9SAndroid Build Coastguard Worker# Distributed under the OSI-approved BSD 3-Clause License. See accompanying 5*da0073e9SAndroid Build Coastguard Worker# file Copyright.txt or https://cmake.org/licensing for details. 6*da0073e9SAndroid Build Coastguard Worker 7*da0073e9SAndroid Build Coastguard Worker#[=======================================================================[.rst: 8*da0073e9SAndroid Build Coastguard WorkerFindCUDAToolkit 9*da0073e9SAndroid Build Coastguard Worker--------------- 10*da0073e9SAndroid Build Coastguard Worker 11*da0073e9SAndroid Build Coastguard Worker.. versionadded:: 3.17 12*da0073e9SAndroid Build Coastguard Worker 13*da0073e9SAndroid Build Coastguard WorkerThis script locates the NVIDIA CUDA toolkit and the associated libraries, but 14*da0073e9SAndroid Build Coastguard Workerdoes not require the ``CUDA`` language be enabled for a given project. This 15*da0073e9SAndroid Build Coastguard Workermodule does not search for the NVIDIA CUDA Samples. 16*da0073e9SAndroid Build Coastguard Worker 17*da0073e9SAndroid Build Coastguard Worker.. versionadded:: 3.19 18*da0073e9SAndroid Build Coastguard Worker QNX support. 19*da0073e9SAndroid Build Coastguard Worker 20*da0073e9SAndroid Build Coastguard WorkerSearch Behavior 21*da0073e9SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^ 22*da0073e9SAndroid Build Coastguard Worker 23*da0073e9SAndroid Build Coastguard WorkerThe CUDA Toolkit search behavior uses the following order: 24*da0073e9SAndroid Build Coastguard Worker 25*da0073e9SAndroid Build Coastguard Worker1. If the ``CUDA`` language has been enabled we will use the directory 26*da0073e9SAndroid Build Coastguard Worker containing the compiler as the first search location for ``nvcc``. 27*da0073e9SAndroid Build Coastguard Worker 28*da0073e9SAndroid Build Coastguard Worker2. If the ``CUDAToolkit_ROOT`` cmake configuration variable (e.g., 29*da0073e9SAndroid Build Coastguard Worker ``-DCUDAToolkit_ROOT=/some/path``) *or* environment variable is defined, it 30*da0073e9SAndroid Build Coastguard Worker will be searched. If both an environment variable **and** a 31*da0073e9SAndroid Build Coastguard Worker configuration variable are specified, the *configuration* variable takes 32*da0073e9SAndroid Build Coastguard Worker precedence. 33*da0073e9SAndroid Build Coastguard Worker 34*da0073e9SAndroid Build Coastguard Worker The directory specified here must be such that the executable ``nvcc`` or 35*da0073e9SAndroid Build Coastguard Worker the appropriate ``version.txt`` file can be found underneath the specified 36*da0073e9SAndroid Build Coastguard Worker directory. 37*da0073e9SAndroid Build Coastguard Worker 38*da0073e9SAndroid Build Coastguard Worker3. If the CUDA_PATH environment variable is defined, it will be searched 39*da0073e9SAndroid Build Coastguard Worker for ``nvcc``. 40*da0073e9SAndroid Build Coastguard Worker 41*da0073e9SAndroid Build Coastguard Worker4. The user's path is searched for ``nvcc`` using :command:`find_program`. If 42*da0073e9SAndroid Build Coastguard Worker this is found, no subsequent search attempts are performed. Users are 43*da0073e9SAndroid Build Coastguard Worker responsible for ensuring that the first ``nvcc`` to show up in the path is 44*da0073e9SAndroid Build Coastguard Worker the desired path in the event that multiple CUDA Toolkits are installed. 45*da0073e9SAndroid Build Coastguard Worker 46*da0073e9SAndroid Build Coastguard Worker5. On Unix systems, if the symbolic link ``/usr/local/cuda`` exists, this is 47*da0073e9SAndroid Build Coastguard Worker used. No subsequent search attempts are performed. No default symbolic link 48*da0073e9SAndroid Build Coastguard Worker location exists for the Windows platform. 49*da0073e9SAndroid Build Coastguard Worker 50*da0073e9SAndroid Build Coastguard Worker6. The platform specific default install locations are searched. If exactly one 51*da0073e9SAndroid Build Coastguard Worker candidate is found, this is used. The default CUDA Toolkit install locations 52*da0073e9SAndroid Build Coastguard Worker searched are: 53*da0073e9SAndroid Build Coastguard Worker 54*da0073e9SAndroid Build Coastguard Worker +-------------+-------------------------------------------------------------+ 55*da0073e9SAndroid Build Coastguard Worker | Platform | Search Pattern | 56*da0073e9SAndroid Build Coastguard Worker +=============+=============================================================+ 57*da0073e9SAndroid Build Coastguard Worker | macOS | ``/Developer/NVIDIA/CUDA-X.Y`` | 58*da0073e9SAndroid Build Coastguard Worker +-------------+-------------------------------------------------------------+ 59*da0073e9SAndroid Build Coastguard Worker | Other Unix | ``/usr/local/cuda-X.Y`` | 60*da0073e9SAndroid Build Coastguard Worker +-------------+-------------------------------------------------------------+ 61*da0073e9SAndroid Build Coastguard Worker | Windows | ``C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y`` | 62*da0073e9SAndroid Build Coastguard Worker +-------------+-------------------------------------------------------------+ 63*da0073e9SAndroid Build Coastguard Worker 64*da0073e9SAndroid Build Coastguard Worker Where ``X.Y`` would be a specific version of the CUDA Toolkit, such as 65*da0073e9SAndroid Build Coastguard Worker ``/usr/local/cuda-9.0`` or 66*da0073e9SAndroid Build Coastguard Worker ``C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0`` 67*da0073e9SAndroid Build Coastguard Worker 68*da0073e9SAndroid Build Coastguard Worker .. note:: 69*da0073e9SAndroid Build Coastguard Worker 70*da0073e9SAndroid Build Coastguard Worker When multiple CUDA Toolkits are installed in the default location of a 71*da0073e9SAndroid Build Coastguard Worker system(e.g., both ``/usr/local/cuda-9.0`` and ``/usr/local/cuda-10.0`` 72*da0073e9SAndroid Build Coastguard Worker exist but the ``/usr/local/cuda`` symbolic link does **not** exist), this 73*da0073e9SAndroid Build Coastguard Worker package is marked as **not** found. 74*da0073e9SAndroid Build Coastguard Worker 75*da0073e9SAndroid Build Coastguard Worker There are too many factors involved in making an automatic decision in 76*da0073e9SAndroid Build Coastguard Worker the presence of multiple CUDA Toolkits being installed. In this 77*da0073e9SAndroid Build Coastguard Worker situation, users are encouraged to either (1) set ``CUDAToolkit_ROOT`` or 78*da0073e9SAndroid Build Coastguard Worker (2) ensure that the correct ``nvcc`` executable shows up in ``$PATH`` for 79*da0073e9SAndroid Build Coastguard Worker :command:`find_program` to find. 80*da0073e9SAndroid Build Coastguard Worker 81*da0073e9SAndroid Build Coastguard WorkerArguments 82*da0073e9SAndroid Build Coastguard Worker^^^^^^^^^ 83*da0073e9SAndroid Build Coastguard Worker 84*da0073e9SAndroid Build Coastguard Worker``[<version>]`` 85*da0073e9SAndroid Build Coastguard Worker The ``[<version>]`` argument requests a version with which the package found 86*da0073e9SAndroid Build Coastguard Worker should be compatible. See :ref:`find_package version format <FIND_PACKAGE_VERSION_FORMAT>` 87*da0073e9SAndroid Build Coastguard Worker for more details. 88*da0073e9SAndroid Build Coastguard Worker 89*da0073e9SAndroid Build Coastguard WorkerOptions 90*da0073e9SAndroid Build Coastguard Worker^^^^^^^ 91*da0073e9SAndroid Build Coastguard Worker 92*da0073e9SAndroid Build Coastguard Worker``REQUIRED`` 93*da0073e9SAndroid Build Coastguard Worker If specified, configuration will error if a suitable CUDA Toolkit is not 94*da0073e9SAndroid Build Coastguard Worker found. 95*da0073e9SAndroid Build Coastguard Worker 96*da0073e9SAndroid Build Coastguard Worker``QUIET`` 97*da0073e9SAndroid Build Coastguard Worker If specified, the search for a suitable CUDA Toolkit will not produce any 98*da0073e9SAndroid Build Coastguard Worker messages. 99*da0073e9SAndroid Build Coastguard Worker 100*da0073e9SAndroid Build Coastguard Worker``EXACT`` 101*da0073e9SAndroid Build Coastguard Worker If specified, the CUDA Toolkit is considered found only if the exact 102*da0073e9SAndroid Build Coastguard Worker ``VERSION`` specified is recovered. 103*da0073e9SAndroid Build Coastguard Worker 104*da0073e9SAndroid Build Coastguard WorkerImported targets 105*da0073e9SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^ 106*da0073e9SAndroid Build Coastguard Worker 107*da0073e9SAndroid Build Coastguard WorkerAn :ref:`imported target <Imported targets>` named ``CUDA::toolkit`` is provided. 108*da0073e9SAndroid Build Coastguard Worker 109*da0073e9SAndroid Build Coastguard WorkerThis module defines :prop_tgt:`IMPORTED` targets for each 110*da0073e9SAndroid Build Coastguard Workerof the following libraries that are part of the CUDAToolkit: 111*da0073e9SAndroid Build Coastguard Worker 112*da0073e9SAndroid Build Coastguard Worker- :ref:`CUDA Runtime Library<cuda_toolkit_rt_lib>` 113*da0073e9SAndroid Build Coastguard Worker- :ref:`CUDA Driver Library<cuda_toolkit_driver_lib>` 114*da0073e9SAndroid Build Coastguard Worker- :ref:`cuBLAS<cuda_toolkit_cuBLAS>` 115*da0073e9SAndroid Build Coastguard Worker- :ref:`cuFFT<cuda_toolkit_cuFFT>` 116*da0073e9SAndroid Build Coastguard Worker- :ref:`cuRAND<cuda_toolkit_cuRAND>` 117*da0073e9SAndroid Build Coastguard Worker- :ref:`cuSOLVER<cuda_toolkit_cuSOLVER>` 118*da0073e9SAndroid Build Coastguard Worker- :ref:`cuSPARSE<cuda_toolkit_cuSPARSE>` 119*da0073e9SAndroid Build Coastguard Worker- :ref:`cuPTI<cuda_toolkit_cupti>` 120*da0073e9SAndroid Build Coastguard Worker- :ref:`NPP<cuda_toolkit_NPP>` 121*da0073e9SAndroid Build Coastguard Worker- :ref:`nvBLAS<cuda_toolkit_nvBLAS>` 122*da0073e9SAndroid Build Coastguard Worker- :ref:`nvGRAPH<cuda_toolkit_nvGRAPH>` 123*da0073e9SAndroid Build Coastguard Worker- :ref:`nvJPEG<cuda_toolkit_nvJPEG>` 124*da0073e9SAndroid Build Coastguard Worker- :ref:`nvidia-ML<cuda_toolkit_nvML>` 125*da0073e9SAndroid Build Coastguard Worker- :ref:`nvRTC<cuda_toolkit_nvRTC>` 126*da0073e9SAndroid Build Coastguard Worker- :ref:`nvToolsExt<cuda_toolkit_nvToolsExt>` 127*da0073e9SAndroid Build Coastguard Worker- :ref:`OpenCL<cuda_toolkit_opencl>` 128*da0073e9SAndroid Build Coastguard Worker- :ref:`cuLIBOS<cuda_toolkit_cuLIBOS>` 129*da0073e9SAndroid Build Coastguard Worker 130*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_rt_lib`: 131*da0073e9SAndroid Build Coastguard Worker 132*da0073e9SAndroid Build Coastguard WorkerCUDA Runtime Library 133*da0073e9SAndroid Build Coastguard Worker"""""""""""""""""""" 134*da0073e9SAndroid Build Coastguard Worker 135*da0073e9SAndroid Build Coastguard WorkerThe CUDA Runtime library (cudart) are what most applications will typically 136*da0073e9SAndroid Build Coastguard Workerneed to link against to make any calls such as `cudaMalloc`, and `cudaFree`. 137*da0073e9SAndroid Build Coastguard Worker 138*da0073e9SAndroid Build Coastguard WorkerTargets Created: 139*da0073e9SAndroid Build Coastguard Worker 140*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cudart`` 141*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cudart_static`` 142*da0073e9SAndroid Build Coastguard Worker 143*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_driver_lib`: 144*da0073e9SAndroid Build Coastguard Worker 145*da0073e9SAndroid Build Coastguard WorkerCUDA Driver Library 146*da0073e9SAndroid Build Coastguard Worker"""""""""""""""""""" 147*da0073e9SAndroid Build Coastguard Worker 148*da0073e9SAndroid Build Coastguard WorkerThe CUDA Driver library (cuda) are used by applications that use calls 149*da0073e9SAndroid Build Coastguard Workersuch as `cuMemAlloc`, and `cuMemFree`. 150*da0073e9SAndroid Build Coastguard Worker 151*da0073e9SAndroid Build Coastguard WorkerTargets Created: 152*da0073e9SAndroid Build Coastguard Worker 153*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cuda_driver`` 154*da0073e9SAndroid Build Coastguard Worker 155*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_cuBLAS`: 156*da0073e9SAndroid Build Coastguard Worker 157*da0073e9SAndroid Build Coastguard WorkercuBLAS 158*da0073e9SAndroid Build Coastguard Worker"""""" 159*da0073e9SAndroid Build Coastguard Worker 160*da0073e9SAndroid Build Coastguard WorkerThe `cuBLAS <https://docs.nvidia.com/cuda/cublas/index.html>`_ library. 161*da0073e9SAndroid Build Coastguard Worker 162*da0073e9SAndroid Build Coastguard WorkerTargets Created: 163*da0073e9SAndroid Build Coastguard Worker 164*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cublas`` 165*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cublas_static`` 166*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cublasLt`` starting in CUDA 10.1 167*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cublasLt_static`` starting in CUDA 10.1 168*da0073e9SAndroid Build Coastguard Worker 169*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_cuFFT`: 170*da0073e9SAndroid Build Coastguard Worker 171*da0073e9SAndroid Build Coastguard WorkercuFFT 172*da0073e9SAndroid Build Coastguard Worker""""" 173*da0073e9SAndroid Build Coastguard Worker 174*da0073e9SAndroid Build Coastguard WorkerThe `cuFFT <https://docs.nvidia.com/cuda/cufft/index.html>`_ library. 175*da0073e9SAndroid Build Coastguard Worker 176*da0073e9SAndroid Build Coastguard WorkerTargets Created: 177*da0073e9SAndroid Build Coastguard Worker 178*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cufft`` 179*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cufftw`` 180*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cufft_static`` 181*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cufft_static_nocallback`` starting in CUDA 9.2, requires CMake 3.23+ 182*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cufftw_static`` 183*da0073e9SAndroid Build Coastguard Worker 184*da0073e9SAndroid Build Coastguard WorkercuRAND 185*da0073e9SAndroid Build Coastguard Worker"""""" 186*da0073e9SAndroid Build Coastguard Worker 187*da0073e9SAndroid Build Coastguard WorkerThe `cuRAND <https://docs.nvidia.com/cuda/curand/index.html>`_ library. 188*da0073e9SAndroid Build Coastguard Worker 189*da0073e9SAndroid Build Coastguard WorkerTargets Created: 190*da0073e9SAndroid Build Coastguard Worker 191*da0073e9SAndroid Build Coastguard Worker- ``CUDA::curand`` 192*da0073e9SAndroid Build Coastguard Worker- ``CUDA::curand_static`` 193*da0073e9SAndroid Build Coastguard Worker 194*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_cuSOLVER`: 195*da0073e9SAndroid Build Coastguard Worker 196*da0073e9SAndroid Build Coastguard WorkercuSOLVER 197*da0073e9SAndroid Build Coastguard Worker"""""""" 198*da0073e9SAndroid Build Coastguard Worker 199*da0073e9SAndroid Build Coastguard WorkerThe `cuSOLVER <https://docs.nvidia.com/cuda/cusolver/index.html>`_ library. 200*da0073e9SAndroid Build Coastguard Worker 201*da0073e9SAndroid Build Coastguard WorkerTargets Created: 202*da0073e9SAndroid Build Coastguard Worker 203*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cusolver`` 204*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cusolver_static`` 205*da0073e9SAndroid Build Coastguard Worker 206*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_cuSPARSE`: 207*da0073e9SAndroid Build Coastguard Worker 208*da0073e9SAndroid Build Coastguard WorkercuSPARSE 209*da0073e9SAndroid Build Coastguard Worker"""""""" 210*da0073e9SAndroid Build Coastguard Worker 211*da0073e9SAndroid Build Coastguard WorkerThe `cuSPARSE <https://docs.nvidia.com/cuda/cusparse/index.html>`_ library. 212*da0073e9SAndroid Build Coastguard Worker 213*da0073e9SAndroid Build Coastguard WorkerTargets Created: 214*da0073e9SAndroid Build Coastguard Worker 215*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cusparse`` 216*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cusparse_static`` 217*da0073e9SAndroid Build Coastguard Worker 218*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_cupti`: 219*da0073e9SAndroid Build Coastguard Worker 220*da0073e9SAndroid Build Coastguard Workercupti 221*da0073e9SAndroid Build Coastguard Worker""""" 222*da0073e9SAndroid Build Coastguard Worker 223*da0073e9SAndroid Build Coastguard WorkerThe `NVIDIA CUDA Profiling Tools Interface <https://developer.nvidia.com/CUPTI>`_. 224*da0073e9SAndroid Build Coastguard Worker 225*da0073e9SAndroid Build Coastguard WorkerTargets Created: 226*da0073e9SAndroid Build Coastguard Worker 227*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cupti`` 228*da0073e9SAndroid Build Coastguard Worker- ``CUDA::cupti_static`` 229*da0073e9SAndroid Build Coastguard Worker 230*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_NPP`: 231*da0073e9SAndroid Build Coastguard Worker 232*da0073e9SAndroid Build Coastguard WorkerNPP 233*da0073e9SAndroid Build Coastguard Worker""" 234*da0073e9SAndroid Build Coastguard Worker 235*da0073e9SAndroid Build Coastguard WorkerThe `NPP <https://docs.nvidia.com/cuda/npp/index.html>`_ libraries. 236*da0073e9SAndroid Build Coastguard Worker 237*da0073e9SAndroid Build Coastguard WorkerTargets Created: 238*da0073e9SAndroid Build Coastguard Worker 239*da0073e9SAndroid Build Coastguard Worker- `nppc`: 240*da0073e9SAndroid Build Coastguard Worker 241*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppc`` 242*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppc_static`` 243*da0073e9SAndroid Build Coastguard Worker 244*da0073e9SAndroid Build Coastguard Worker- `nppial`: Arithmetic and logical operation functions in `nppi_arithmetic_and_logical_operations.h` 245*da0073e9SAndroid Build Coastguard Worker 246*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppial`` 247*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppial_static`` 248*da0073e9SAndroid Build Coastguard Worker 249*da0073e9SAndroid Build Coastguard Worker- `nppicc`: Color conversion and sampling functions in `nppi_color_conversion.h` 250*da0073e9SAndroid Build Coastguard Worker 251*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppicc`` 252*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppicc_static`` 253*da0073e9SAndroid Build Coastguard Worker 254*da0073e9SAndroid Build Coastguard Worker- `nppicom`: JPEG compression and decompression functions in `nppi_compression_functions.h` 255*da0073e9SAndroid Build Coastguard Worker Removed starting in CUDA 11.0, use :ref:`nvJPEG<cuda_toolkit_nvJPEG>` instead. 256*da0073e9SAndroid Build Coastguard Worker 257*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppicom`` 258*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppicom_static`` 259*da0073e9SAndroid Build Coastguard Worker 260*da0073e9SAndroid Build Coastguard Worker- `nppidei`: Data exchange and initialization functions in `nppi_data_exchange_and_initialization.h` 261*da0073e9SAndroid Build Coastguard Worker 262*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppidei`` 263*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppidei_static`` 264*da0073e9SAndroid Build Coastguard Worker 265*da0073e9SAndroid Build Coastguard Worker- `nppif`: Filtering and computer vision functions in `nppi_filter_functions.h` 266*da0073e9SAndroid Build Coastguard Worker 267*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppif`` 268*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppif_static`` 269*da0073e9SAndroid Build Coastguard Worker 270*da0073e9SAndroid Build Coastguard Worker- `nppig`: Geometry transformation functions found in `nppi_geometry_transforms.h` 271*da0073e9SAndroid Build Coastguard Worker 272*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppig`` 273*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppig_static`` 274*da0073e9SAndroid Build Coastguard Worker 275*da0073e9SAndroid Build Coastguard Worker- `nppim`: Morphological operation functions found in `nppi_morphological_operations.h` 276*da0073e9SAndroid Build Coastguard Worker 277*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppim`` 278*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppim_static`` 279*da0073e9SAndroid Build Coastguard Worker 280*da0073e9SAndroid Build Coastguard Worker- `nppist`: Statistics and linear transform in `nppi_statistics_functions.h` and `nppi_linear_transforms.h` 281*da0073e9SAndroid Build Coastguard Worker 282*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppist`` 283*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppist_static`` 284*da0073e9SAndroid Build Coastguard Worker 285*da0073e9SAndroid Build Coastguard Worker- `nppisu`: Memory support functions in `nppi_support_functions.h` 286*da0073e9SAndroid Build Coastguard Worker 287*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppisu`` 288*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppisu_static`` 289*da0073e9SAndroid Build Coastguard Worker 290*da0073e9SAndroid Build Coastguard Worker- `nppitc`: Threshold and compare operation functions in `nppi_threshold_and_compare_operations.h` 291*da0073e9SAndroid Build Coastguard Worker 292*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppitc`` 293*da0073e9SAndroid Build Coastguard Worker - ``CUDA::nppitc_static`` 294*da0073e9SAndroid Build Coastguard Worker 295*da0073e9SAndroid Build Coastguard Worker- `npps`: 296*da0073e9SAndroid Build Coastguard Worker 297*da0073e9SAndroid Build Coastguard Worker - ``CUDA::npps`` 298*da0073e9SAndroid Build Coastguard Worker - ``CUDA::npps_static`` 299*da0073e9SAndroid Build Coastguard Worker 300*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_nvBLAS`: 301*da0073e9SAndroid Build Coastguard Worker 302*da0073e9SAndroid Build Coastguard WorkernvBLAS 303*da0073e9SAndroid Build Coastguard Worker"""""" 304*da0073e9SAndroid Build Coastguard Worker 305*da0073e9SAndroid Build Coastguard WorkerThe `nvBLAS <https://docs.nvidia.com/cuda/nvblas/index.html>`_ libraries. 306*da0073e9SAndroid Build Coastguard WorkerThis is a shared library only. 307*da0073e9SAndroid Build Coastguard Worker 308*da0073e9SAndroid Build Coastguard WorkerTargets Created: 309*da0073e9SAndroid Build Coastguard Worker 310*da0073e9SAndroid Build Coastguard Worker- ``CUDA::nvblas`` 311*da0073e9SAndroid Build Coastguard Worker 312*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_nvGRAPH`: 313*da0073e9SAndroid Build Coastguard Worker 314*da0073e9SAndroid Build Coastguard WorkernvGRAPH 315*da0073e9SAndroid Build Coastguard Worker""""""" 316*da0073e9SAndroid Build Coastguard Worker 317*da0073e9SAndroid Build Coastguard WorkerThe `nvGRAPH <https://docs.nvidia.com/cuda/nvgraph/index.html>`_ library. 318*da0073e9SAndroid Build Coastguard WorkerRemoved starting in CUDA 11.0 319*da0073e9SAndroid Build Coastguard Worker 320*da0073e9SAndroid Build Coastguard WorkerTargets Created: 321*da0073e9SAndroid Build Coastguard Worker 322*da0073e9SAndroid Build Coastguard Worker- ``CUDA::nvgraph`` 323*da0073e9SAndroid Build Coastguard Worker- ``CUDA::nvgraph_static`` 324*da0073e9SAndroid Build Coastguard Worker 325*da0073e9SAndroid Build Coastguard Worker 326*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_nvJPEG`: 327*da0073e9SAndroid Build Coastguard Worker 328*da0073e9SAndroid Build Coastguard WorkernvJPEG 329*da0073e9SAndroid Build Coastguard Worker"""""" 330*da0073e9SAndroid Build Coastguard Worker 331*da0073e9SAndroid Build Coastguard WorkerThe `nvJPEG <https://docs.nvidia.com/cuda/nvjpeg/index.html>`_ library. 332*da0073e9SAndroid Build Coastguard WorkerIntroduced in CUDA 10. 333*da0073e9SAndroid Build Coastguard Worker 334*da0073e9SAndroid Build Coastguard WorkerTargets Created: 335*da0073e9SAndroid Build Coastguard Worker 336*da0073e9SAndroid Build Coastguard Worker- ``CUDA::nvjpeg`` 337*da0073e9SAndroid Build Coastguard Worker- ``CUDA::nvjpeg_static`` 338*da0073e9SAndroid Build Coastguard Worker 339*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_nvRTC`: 340*da0073e9SAndroid Build Coastguard Worker 341*da0073e9SAndroid Build Coastguard WorkernvRTC 342*da0073e9SAndroid Build Coastguard Worker""""" 343*da0073e9SAndroid Build Coastguard Worker 344*da0073e9SAndroid Build Coastguard WorkerThe `nvRTC <https://docs.nvidia.com/cuda/nvrtc/index.html>`_ (Runtime Compilation) library. 345*da0073e9SAndroid Build Coastguard WorkerThis is a shared library only. 346*da0073e9SAndroid Build Coastguard Worker 347*da0073e9SAndroid Build Coastguard WorkerTargets Created: 348*da0073e9SAndroid Build Coastguard Worker 349*da0073e9SAndroid Build Coastguard Worker- ``CUDA::nvrtc`` 350*da0073e9SAndroid Build Coastguard Worker 351*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_nvml`: 352*da0073e9SAndroid Build Coastguard Worker 353*da0073e9SAndroid Build Coastguard Workernvidia-ML 354*da0073e9SAndroid Build Coastguard Worker""""""""" 355*da0073e9SAndroid Build Coastguard Worker 356*da0073e9SAndroid Build Coastguard WorkerThe `NVIDIA Management Library <https://developer.nvidia.com/nvidia-management-library-nvml>`_. 357*da0073e9SAndroid Build Coastguard WorkerThis is a shared library only. 358*da0073e9SAndroid Build Coastguard Worker 359*da0073e9SAndroid Build Coastguard WorkerTargets Created: 360*da0073e9SAndroid Build Coastguard Worker 361*da0073e9SAndroid Build Coastguard Worker- ``CUDA::nvml`` 362*da0073e9SAndroid Build Coastguard Worker 363*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_nvToolsExt`: 364*da0073e9SAndroid Build Coastguard Worker 365*da0073e9SAndroid Build Coastguard WorkernvToolsExt 366*da0073e9SAndroid Build Coastguard Worker"""""""""" 367*da0073e9SAndroid Build Coastguard Worker 368*da0073e9SAndroid Build Coastguard WorkerThe `NVIDIA Tools Extension <https://docs.nvidia.com/gameworks/content/gameworkslibrary/nvtx/nvidia_tools_extension_library_nvtx.htm>`_. 369*da0073e9SAndroid Build Coastguard WorkerThis is a shared library only. 370*da0073e9SAndroid Build Coastguard Worker 371*da0073e9SAndroid Build Coastguard WorkerTargets Created: 372*da0073e9SAndroid Build Coastguard Worker 373*da0073e9SAndroid Build Coastguard Worker- ``CUDA::nvToolsExt`` 374*da0073e9SAndroid Build Coastguard Worker 375*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_opencl`: 376*da0073e9SAndroid Build Coastguard Worker 377*da0073e9SAndroid Build Coastguard WorkerOpenCL 378*da0073e9SAndroid Build Coastguard Worker"""""" 379*da0073e9SAndroid Build Coastguard Worker 380*da0073e9SAndroid Build Coastguard WorkerThe `NVIDIA OpenCL Library <https://developer.nvidia.com/opencl>`_. 381*da0073e9SAndroid Build Coastguard WorkerThis is a shared library only. 382*da0073e9SAndroid Build Coastguard Worker 383*da0073e9SAndroid Build Coastguard WorkerTargets Created: 384*da0073e9SAndroid Build Coastguard Worker 385*da0073e9SAndroid Build Coastguard Worker- ``CUDA::OpenCL`` 386*da0073e9SAndroid Build Coastguard Worker 387*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_cuLIBOS`: 388*da0073e9SAndroid Build Coastguard Worker 389*da0073e9SAndroid Build Coastguard WorkercuLIBOS 390*da0073e9SAndroid Build Coastguard Worker""""""" 391*da0073e9SAndroid Build Coastguard Worker 392*da0073e9SAndroid Build Coastguard WorkerThe cuLIBOS library is a backend thread abstraction layer library which is 393*da0073e9SAndroid Build Coastguard Workerstatic only. The ``CUDA::cublas_static``, ``CUDA::cusparse_static``, 394*da0073e9SAndroid Build Coastguard Worker``CUDA::cufft_static``, ``CUDA::curand_static``, and (when implemented) NPP 395*da0073e9SAndroid Build Coastguard Workerlibraries all automatically have this dependency linked. 396*da0073e9SAndroid Build Coastguard Worker 397*da0073e9SAndroid Build Coastguard WorkerTarget Created: 398*da0073e9SAndroid Build Coastguard Worker 399*da0073e9SAndroid Build Coastguard Worker- ``CUDA::culibos`` 400*da0073e9SAndroid Build Coastguard Worker 401*da0073e9SAndroid Build Coastguard Worker**Note**: direct usage of this target by consumers should not be necessary. 402*da0073e9SAndroid Build Coastguard Worker 403*da0073e9SAndroid Build Coastguard Worker.. _`cuda_toolkit_cuRAND`: 404*da0073e9SAndroid Build Coastguard Worker 405*da0073e9SAndroid Build Coastguard Worker 406*da0073e9SAndroid Build Coastguard Worker 407*da0073e9SAndroid Build Coastguard WorkerResult variables 408*da0073e9SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^ 409*da0073e9SAndroid Build Coastguard Worker 410*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_FOUND`` 411*da0073e9SAndroid Build Coastguard Worker A boolean specifying whether or not the CUDA Toolkit was found. 412*da0073e9SAndroid Build Coastguard Worker 413*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_VERSION`` 414*da0073e9SAndroid Build Coastguard Worker The exact version of the CUDA Toolkit found (as reported by 415*da0073e9SAndroid Build Coastguard Worker ``nvcc --version`` or ``version.txt``). 416*da0073e9SAndroid Build Coastguard Worker 417*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_VERSION_MAJOR`` 418*da0073e9SAndroid Build Coastguard Worker The major version of the CUDA Toolkit. 419*da0073e9SAndroid Build Coastguard Worker 420*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_VERSION_MINOR`` 421*da0073e9SAndroid Build Coastguard Worker The minor version of the CUDA Toolkit. 422*da0073e9SAndroid Build Coastguard Worker 423*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_VERSION_PATCH`` 424*da0073e9SAndroid Build Coastguard Worker The patch version of the CUDA Toolkit. 425*da0073e9SAndroid Build Coastguard Worker 426*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_BIN_DIR`` 427*da0073e9SAndroid Build Coastguard Worker The path to the CUDA Toolkit library directory that contains the CUDA 428*da0073e9SAndroid Build Coastguard Worker executable ``nvcc``. 429*da0073e9SAndroid Build Coastguard Worker 430*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_INCLUDE_DIRS`` 431*da0073e9SAndroid Build Coastguard Worker The path to the CUDA Toolkit ``include`` folder containing the header files 432*da0073e9SAndroid Build Coastguard Worker required to compile a project linking against CUDA. 433*da0073e9SAndroid Build Coastguard Worker 434*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_LIBRARY_DIR`` 435*da0073e9SAndroid Build Coastguard Worker The path to the CUDA Toolkit library directory that contains the CUDA 436*da0073e9SAndroid Build Coastguard Worker Runtime library ``cudart``. 437*da0073e9SAndroid Build Coastguard Worker 438*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_LIBRARY_ROOT`` 439*da0073e9SAndroid Build Coastguard Worker .. versionadded:: 3.18 440*da0073e9SAndroid Build Coastguard Worker 441*da0073e9SAndroid Build Coastguard Worker The path to the CUDA Toolkit directory containing the nvvm directory and 442*da0073e9SAndroid Build Coastguard Worker version.txt. 443*da0073e9SAndroid Build Coastguard Worker 444*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_TARGET_DIR`` 445*da0073e9SAndroid Build Coastguard Worker The path to the CUDA Toolkit directory including the target architecture 446*da0073e9SAndroid Build Coastguard Worker when cross-compiling. When not cross-compiling this will be equivalent to 447*da0073e9SAndroid Build Coastguard Worker the parent directory of ``CUDAToolkit_BIN_DIR``. 448*da0073e9SAndroid Build Coastguard Worker 449*da0073e9SAndroid Build Coastguard Worker``CUDAToolkit_NVCC_EXECUTABLE`` 450*da0073e9SAndroid Build Coastguard Worker The path to the NVIDIA CUDA compiler ``nvcc``. Note that this path may 451*da0073e9SAndroid Build Coastguard Worker **not** be the same as 452*da0073e9SAndroid Build Coastguard Worker :variable:`CMAKE_CUDA_COMPILER <CMAKE_<LANG>_COMPILER>`. ``nvcc`` must be 453*da0073e9SAndroid Build Coastguard Worker found to determine the CUDA Toolkit version as well as determining other 454*da0073e9SAndroid Build Coastguard Worker features of the Toolkit. This variable is set for the convenience of 455*da0073e9SAndroid Build Coastguard Worker modules that depend on this one. 456*da0073e9SAndroid Build Coastguard Worker 457*da0073e9SAndroid Build Coastguard Worker 458*da0073e9SAndroid Build Coastguard Worker#]=======================================================================] 459*da0073e9SAndroid Build Coastguard Worker 460*da0073e9SAndroid Build Coastguard Worker# NOTE: much of this was simply extracted from FindCUDA.cmake. 461*da0073e9SAndroid Build Coastguard Worker 462*da0073e9SAndroid Build Coastguard Worker# James Bigler, NVIDIA Corp (nvidia.com - jbigler) 463*da0073e9SAndroid Build Coastguard Worker# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html 464*da0073e9SAndroid Build Coastguard Worker# 465*da0073e9SAndroid Build Coastguard Worker# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved. 466*da0073e9SAndroid Build Coastguard Worker# 467*da0073e9SAndroid Build Coastguard Worker# Copyright (c) 2007-2009 468*da0073e9SAndroid Build Coastguard Worker# Scientific Computing and Imaging Institute, University of Utah 469*da0073e9SAndroid Build Coastguard Worker# 470*da0073e9SAndroid Build Coastguard Worker# This code is licensed under the MIT License. See the FindCUDA.cmake script 471*da0073e9SAndroid Build Coastguard Worker# for the text of the license. 472*da0073e9SAndroid Build Coastguard Worker 473*da0073e9SAndroid Build Coastguard Worker# The MIT License 474*da0073e9SAndroid Build Coastguard Worker# 475*da0073e9SAndroid Build Coastguard Worker# License for the specific language governing rights and limitations under 476*da0073e9SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a 477*da0073e9SAndroid Build Coastguard Worker# copy of this software and associated documentation files (the "Software"), 478*da0073e9SAndroid Build Coastguard Worker# to deal in the Software without restriction, including without limitation 479*da0073e9SAndroid Build Coastguard Worker# the rights to use, copy, modify, merge, publish, distribute, sublicense, 480*da0073e9SAndroid Build Coastguard Worker# and/or sell copies of the Software, and to permit persons to whom the 481*da0073e9SAndroid Build Coastguard Worker# Software is furnished to do so, subject to the following conditions: 482*da0073e9SAndroid Build Coastguard Worker# 483*da0073e9SAndroid Build Coastguard Worker# The above copyright notice and this permission notice shall be included 484*da0073e9SAndroid Build Coastguard Worker# in all copies or substantial portions of the Software. 485*da0073e9SAndroid Build Coastguard Worker# 486*da0073e9SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 487*da0073e9SAndroid Build Coastguard Worker# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 488*da0073e9SAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 489*da0073e9SAndroid Build Coastguard Worker# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 490*da0073e9SAndroid Build Coastguard Worker# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 491*da0073e9SAndroid Build Coastguard Worker# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 492*da0073e9SAndroid Build Coastguard Worker# DEALINGS IN THE SOFTWARE. 493*da0073e9SAndroid Build Coastguard Worker# 494*da0073e9SAndroid Build Coastguard Worker############################################################################### 495*da0073e9SAndroid Build Coastguard Worker 496*da0073e9SAndroid Build Coastguard Worker# The toolkit is located during compiler detection for CUDA and stored in CMakeCUDACompiler.cmake as 497*da0073e9SAndroid Build Coastguard Worker# CMAKE_CUDA_COMPILER_TOOLKIT_ROOT and CMAKE_CUDA_COMPILER_LIBRARY_ROOT. 498*da0073e9SAndroid Build Coastguard Worker# We compute the rest based on those here to avoid re-searching and to avoid finding a possibly 499*da0073e9SAndroid Build Coastguard Worker# different installation. 500*da0073e9SAndroid Build Coastguard Workerif(CMAKE_CUDA_COMPILER_TOOLKIT_ROOT) 501*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_ROOT_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}") 502*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_LIBRARY_ROOT "${CMAKE_CUDA_COMPILER_LIBRARY_ROOT}") 503*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION "${CMAKE_CUDA_COMPILER_TOOLKIT_VERSION}") 504*da0073e9SAndroid Build Coastguard Worker 505*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_VERSION MATCHES [=[([0-9]+)\.([0-9]+)\.([0-9]+)]=]) 506*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}") 507*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}") 508*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_PATCH "${CMAKE_MATCH_3}") 509*da0073e9SAndroid Build Coastguard Worker endif() 510*da0073e9SAndroid Build Coastguard Workerelse() 511*da0073e9SAndroid Build Coastguard Worker function(_CUDAToolkit_find_root_dir ) 512*da0073e9SAndroid Build Coastguard Worker cmake_parse_arguments(arg "" "" "SEARCH_PATHS;FIND_FLAGS" ${ARGN}) 513*da0073e9SAndroid Build Coastguard Worker 514*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_BIN_DIR) 515*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_SENTINEL_FILE) 516*da0073e9SAndroid Build Coastguard Worker find_program(CUDAToolkit_NVCC_EXECUTABLE 517*da0073e9SAndroid Build Coastguard Worker NAMES nvcc nvcc.exe 518*da0073e9SAndroid Build Coastguard Worker PATHS ${arg_SEARCH_PATHS} 519*da0073e9SAndroid Build Coastguard Worker ${arg_FIND_FLAGS} 520*da0073e9SAndroid Build Coastguard Worker ) 521*da0073e9SAndroid Build Coastguard Worker endif() 522*da0073e9SAndroid Build Coastguard Worker 523*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_NVCC_EXECUTABLE) 524*da0073e9SAndroid Build Coastguard Worker find_file(CUDAToolkit_SENTINEL_FILE 525*da0073e9SAndroid Build Coastguard Worker NAMES version.txt 526*da0073e9SAndroid Build Coastguard Worker PATHS ${arg_SEARCH_PATHS} 527*da0073e9SAndroid Build Coastguard Worker NO_DEFAULT_PATH 528*da0073e9SAndroid Build Coastguard Worker ) 529*da0073e9SAndroid Build Coastguard Worker endif() 530*da0073e9SAndroid Build Coastguard Worker 531*da0073e9SAndroid Build Coastguard Worker if(EXISTS "${CUDAToolkit_NVCC_EXECUTABLE}") 532*da0073e9SAndroid Build Coastguard Worker # If NVCC exists then invoke it to find the toolkit location. 533*da0073e9SAndroid Build Coastguard Worker # This allows us to support wrapper scripts (e.g. ccache or colornvcc), CUDA Toolkit, 534*da0073e9SAndroid Build Coastguard Worker # NVIDIA HPC SDK, and distro's splayed layouts 535*da0073e9SAndroid Build Coastguard Worker execute_process(COMMAND ${CUDAToolkit_NVCC_EXECUTABLE} "-v" "__cmake_determine_cuda" 536*da0073e9SAndroid Build Coastguard Worker OUTPUT_VARIABLE _CUDA_NVCC_OUT ERROR_VARIABLE _CUDA_NVCC_OUT) 537*da0073e9SAndroid Build Coastguard Worker if(_CUDA_NVCC_OUT MATCHES "\\#\\$ TOP=([^\r\n]*)") 538*da0073e9SAndroid Build Coastguard Worker get_filename_component(CUDAToolkit_BIN_DIR "${CMAKE_MATCH_1}/bin" ABSOLUTE) 539*da0073e9SAndroid Build Coastguard Worker else() 540*da0073e9SAndroid Build Coastguard Worker get_filename_component(CUDAToolkit_BIN_DIR "${CUDAToolkit_NVCC_EXECUTABLE}" DIRECTORY) 541*da0073e9SAndroid Build Coastguard Worker endif() 542*da0073e9SAndroid Build Coastguard Worker unset(_CUDA_NVCC_OUT) 543*da0073e9SAndroid Build Coastguard Worker 544*da0073e9SAndroid Build Coastguard Worker mark_as_advanced(CUDAToolkit_BIN_DIR) 545*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}" CACHE PATH "" FORCE) 546*da0073e9SAndroid Build Coastguard Worker endif() 547*da0073e9SAndroid Build Coastguard Worker 548*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_SENTINEL_FILE) 549*da0073e9SAndroid Build Coastguard Worker get_filename_component(CUDAToolkit_BIN_DIR ${CUDAToolkit_SENTINEL_FILE} DIRECTORY ABSOLUTE) 550*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}/bin") 551*da0073e9SAndroid Build Coastguard Worker 552*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}" CACHE PATH "" FORCE) 553*da0073e9SAndroid Build Coastguard Worker mark_as_advanced(CUDAToolkit_BIN_DIR) 554*da0073e9SAndroid Build Coastguard Worker endif() 555*da0073e9SAndroid Build Coastguard Worker endif() 556*da0073e9SAndroid Build Coastguard Worker 557*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_BIN_DIR) 558*da0073e9SAndroid Build Coastguard Worker get_filename_component(CUDAToolkit_ROOT_DIR ${CUDAToolkit_BIN_DIR} DIRECTORY ABSOLUTE) 559*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_ROOT_DIR "${CUDAToolkit_ROOT_DIR}" PARENT_SCOPE) 560*da0073e9SAndroid Build Coastguard Worker endif() 561*da0073e9SAndroid Build Coastguard Worker 562*da0073e9SAndroid Build Coastguard Worker endfunction() 563*da0073e9SAndroid Build Coastguard Worker 564*da0073e9SAndroid Build Coastguard Worker # For NVCC we can easily deduce the SDK binary directory from the compiler path. 565*da0073e9SAndroid Build Coastguard Worker if(CMAKE_CUDA_COMPILER_LOADED AND NOT CUDAToolkit_BIN_DIR AND CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA") 566*da0073e9SAndroid Build Coastguard Worker get_filename_component(CUDAToolkit_BIN_DIR "${CMAKE_CUDA_COMPILER}" DIRECTORY) 567*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_BIN_DIR "${CUDAToolkit_BIN_DIR}" CACHE PATH "") 568*da0073e9SAndroid Build Coastguard Worker # Try language provided path first. 569*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_root_dir(SEARCH_PATHS "${CUDAToolkit_BIN_DIR}" FIND_FLAGS NO_DEFAULT_PATH) 570*da0073e9SAndroid Build Coastguard Worker mark_as_advanced(CUDAToolkit_BIN_DIR) 571*da0073e9SAndroid Build Coastguard Worker endif() 572*da0073e9SAndroid Build Coastguard Worker 573*da0073e9SAndroid Build Coastguard Worker # Try user provided path 574*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_ROOT_DIR AND CUDAToolkit_ROOT) 575*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_root_dir(SEARCH_PATHS "${CUDAToolkit_ROOT}" FIND_FLAGS PATH_SUFFIXES bin NO_DEFAULT_PATH) 576*da0073e9SAndroid Build Coastguard Worker endif() 577*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_ROOT_DIR) 578*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_root_dir(FIND_FLAGS PATHS ENV CUDA_PATH PATH_SUFFIXES bin) 579*da0073e9SAndroid Build Coastguard Worker endif() 580*da0073e9SAndroid Build Coastguard Worker 581*da0073e9SAndroid Build Coastguard Worker # If the user specified CUDAToolkit_ROOT but the toolkit could not be found, this is an error. 582*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_ROOT_DIR AND (DEFINED CUDAToolkit_ROOT OR DEFINED ENV{CUDAToolkit_ROOT})) 583*da0073e9SAndroid Build Coastguard Worker # Declare error messages now, print later depending on find_package args. 584*da0073e9SAndroid Build Coastguard Worker set(fail_base "Could not find nvcc executable in path specified by") 585*da0073e9SAndroid Build Coastguard Worker set(cuda_root_fail "${fail_base} CUDAToolkit_ROOT=${CUDAToolkit_ROOT}") 586*da0073e9SAndroid Build Coastguard Worker set(env_cuda_root_fail "${fail_base} environment variable CUDAToolkit_ROOT=$ENV{CUDAToolkit_ROOT}") 587*da0073e9SAndroid Build Coastguard Worker 588*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_FIND_REQUIRED) 589*da0073e9SAndroid Build Coastguard Worker if(DEFINED CUDAToolkit_ROOT) 590*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR ${cuda_root_fail}) 591*da0073e9SAndroid Build Coastguard Worker elseif(DEFINED ENV{CUDAToolkit_ROOT}) 592*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR ${env_cuda_root_fail}) 593*da0073e9SAndroid Build Coastguard Worker endif() 594*da0073e9SAndroid Build Coastguard Worker else() 595*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_FIND_QUIETLY) 596*da0073e9SAndroid Build Coastguard Worker if(DEFINED CUDAToolkit_ROOT) 597*da0073e9SAndroid Build Coastguard Worker message(STATUS ${cuda_root_fail}) 598*da0073e9SAndroid Build Coastguard Worker elseif(DEFINED ENV{CUDAToolkit_ROOT}) 599*da0073e9SAndroid Build Coastguard Worker message(STATUS ${env_cuda_root_fail}) 600*da0073e9SAndroid Build Coastguard Worker endif() 601*da0073e9SAndroid Build Coastguard Worker endif() 602*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_FOUND FALSE) 603*da0073e9SAndroid Build Coastguard Worker unset(fail_base) 604*da0073e9SAndroid Build Coastguard Worker unset(cuda_root_fail) 605*da0073e9SAndroid Build Coastguard Worker unset(env_cuda_root_fail) 606*da0073e9SAndroid Build Coastguard Worker return() 607*da0073e9SAndroid Build Coastguard Worker endif() 608*da0073e9SAndroid Build Coastguard Worker endif() 609*da0073e9SAndroid Build Coastguard Worker 610*da0073e9SAndroid Build Coastguard Worker # CUDAToolkit_ROOT cmake / env variable not specified, try platform defaults. 611*da0073e9SAndroid Build Coastguard Worker # 612*da0073e9SAndroid Build Coastguard Worker # - Linux: /usr/local/cuda-X.Y 613*da0073e9SAndroid Build Coastguard Worker # - macOS: /Developer/NVIDIA/CUDA-X.Y 614*da0073e9SAndroid Build Coastguard Worker # - Windows: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y 615*da0073e9SAndroid Build Coastguard Worker # 616*da0073e9SAndroid Build Coastguard Worker # We will also search the default symlink location /usr/local/cuda first since 617*da0073e9SAndroid Build Coastguard Worker # if CUDAToolkit_ROOT is not specified, it is assumed that the symlinked 618*da0073e9SAndroid Build Coastguard Worker # directory is the desired location. 619*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_ROOT_DIR) 620*da0073e9SAndroid Build Coastguard Worker if(UNIX) 621*da0073e9SAndroid Build Coastguard Worker if(NOT APPLE) 622*da0073e9SAndroid Build Coastguard Worker set(platform_base "/usr/local/cuda-") 623*da0073e9SAndroid Build Coastguard Worker else() 624*da0073e9SAndroid Build Coastguard Worker set(platform_base "/Developer/NVIDIA/CUDA-") 625*da0073e9SAndroid Build Coastguard Worker endif() 626*da0073e9SAndroid Build Coastguard Worker else() 627*da0073e9SAndroid Build Coastguard Worker set(platform_base "C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v") 628*da0073e9SAndroid Build Coastguard Worker endif() 629*da0073e9SAndroid Build Coastguard Worker 630*da0073e9SAndroid Build Coastguard Worker # Build out a descending list of possible cuda installations, e.g. 631*da0073e9SAndroid Build Coastguard Worker file(GLOB possible_paths "${platform_base}*") 632*da0073e9SAndroid Build Coastguard Worker # Iterate the glob results and create a descending list. 633*da0073e9SAndroid Build Coastguard Worker set(versions) 634*da0073e9SAndroid Build Coastguard Worker foreach(p ${possible_paths}) 635*da0073e9SAndroid Build Coastguard Worker # Extract version number from end of string 636*da0073e9SAndroid Build Coastguard Worker string(REGEX MATCH "[0-9][0-9]?\\.[0-9]$" p_version ${p}) 637*da0073e9SAndroid Build Coastguard Worker if(IS_DIRECTORY ${p} AND p_version) 638*da0073e9SAndroid Build Coastguard Worker list(APPEND versions ${p_version}) 639*da0073e9SAndroid Build Coastguard Worker endif() 640*da0073e9SAndroid Build Coastguard Worker endforeach() 641*da0073e9SAndroid Build Coastguard Worker 642*da0073e9SAndroid Build Coastguard Worker # Sort numerically in descending order, so we try the newest versions first. 643*da0073e9SAndroid Build Coastguard Worker if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18) 644*da0073e9SAndroid Build Coastguard Worker list(SORT versions COMPARE NATURAL ORDER DESCENDING) 645*da0073e9SAndroid Build Coastguard Worker elseif(versions) 646*da0073e9SAndroid Build Coastguard Worker # Alphabetical sort here is not ideal but better than nothing 647*da0073e9SAndroid Build Coastguard Worker list(SORT versions) 648*da0073e9SAndroid Build Coastguard Worker list(REVERSE versions) 649*da0073e9SAndroid Build Coastguard Worker endif() 650*da0073e9SAndroid Build Coastguard Worker 651*da0073e9SAndroid Build Coastguard Worker # With a descending list of versions, populate possible paths to search. 652*da0073e9SAndroid Build Coastguard Worker set(search_paths) 653*da0073e9SAndroid Build Coastguard Worker foreach(v ${versions}) 654*da0073e9SAndroid Build Coastguard Worker list(APPEND search_paths "${platform_base}${v}") 655*da0073e9SAndroid Build Coastguard Worker endforeach() 656*da0073e9SAndroid Build Coastguard Worker 657*da0073e9SAndroid Build Coastguard Worker # Force the global default /usr/local/cuda to the front on Unix. 658*da0073e9SAndroid Build Coastguard Worker if(UNIX) 659*da0073e9SAndroid Build Coastguard Worker list(INSERT search_paths 0 "/usr/local/cuda") 660*da0073e9SAndroid Build Coastguard Worker endif() 661*da0073e9SAndroid Build Coastguard Worker 662*da0073e9SAndroid Build Coastguard Worker # Now search for the toolkit again using the platform default search paths. 663*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_root_dir(SEARCH_PATHS "${search_paths}" FIND_FLAGS PATH_SUFFIXES bin) 664*da0073e9SAndroid Build Coastguard Worker 665*da0073e9SAndroid Build Coastguard Worker # We are done with these variables now, cleanup for caller. 666*da0073e9SAndroid Build Coastguard Worker unset(platform_base) 667*da0073e9SAndroid Build Coastguard Worker unset(possible_paths) 668*da0073e9SAndroid Build Coastguard Worker unset(versions) 669*da0073e9SAndroid Build Coastguard Worker unset(search_paths) 670*da0073e9SAndroid Build Coastguard Worker 671*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_ROOT_DIR) 672*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_FIND_REQUIRED) 673*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Could not find nvcc, please set CUDAToolkit_ROOT.") 674*da0073e9SAndroid Build Coastguard Worker elseif(NOT CUDAToolkit_FIND_QUIETLY) 675*da0073e9SAndroid Build Coastguard Worker message(STATUS "Could not find nvcc, please set CUDAToolkit_ROOT.") 676*da0073e9SAndroid Build Coastguard Worker endif() 677*da0073e9SAndroid Build Coastguard Worker 678*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_FOUND FALSE) 679*da0073e9SAndroid Build Coastguard Worker return() 680*da0073e9SAndroid Build Coastguard Worker endif() 681*da0073e9SAndroid Build Coastguard Worker endif() 682*da0073e9SAndroid Build Coastguard Workerendif() 683*da0073e9SAndroid Build Coastguard Worker 684*da0073e9SAndroid Build Coastguard Workerif(NOT CUDAToolkit_BIN_DIR) 685*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_BIN_DIR "${CUDAToolkit_ROOT_DIR}/bin") 686*da0073e9SAndroid Build Coastguard Workerendif() 687*da0073e9SAndroid Build Coastguard Worker 688*da0073e9SAndroid Build Coastguard Workerif(NOT CUDAToolkit_NVCC_EXECUTABLE) 689*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_NVCC_EXECUTABLE "${CUDAToolkit_BIN_DIR}/nvcc${CMAKE_EXECUTABLE_SUFFIX}") 690*da0073e9SAndroid Build Coastguard Workerendif() 691*da0073e9SAndroid Build Coastguard Worker 692*da0073e9SAndroid Build Coastguard Workerif(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION) 693*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION "${CMAKE_CUDA_COMPILER_TOOLKIT_VERSION}") 694*da0073e9SAndroid Build Coastguard Workerelse() 695*da0073e9SAndroid Build Coastguard Worker function(_CUDAToolkit_find_version_file result_variable) 696*da0073e9SAndroid Build Coastguard Worker # We first check for a non-scattered installation to prefer it over a scattered installation. 697*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_ROOT AND EXISTS "${CUDAToolkit_ROOT}/version.txt") 698*da0073e9SAndroid Build Coastguard Worker set(${result_variable} "${CUDAToolkit_ROOT}/version.txt" PARENT_SCOPE) 699*da0073e9SAndroid Build Coastguard Worker elseif(CUDAToolkit_ROOT_DIR AND EXISTS "${CUDAToolkit_ROOT_DIR}/version.txt") 700*da0073e9SAndroid Build Coastguard Worker set(${result_variable} "${CUDAToolkit_ROOT_DIR}/version.txt" PARENT_SCOPE) 701*da0073e9SAndroid Build Coastguard Worker elseif(CMAKE_SYSROOT_LINK AND EXISTS "${CMAKE_SYSROOT_LINK}/usr/lib/cuda/version.txt") 702*da0073e9SAndroid Build Coastguard Worker set(${result_variable} "${CMAKE_SYSROOT_LINK}/usr/lib/cuda/version.txt" PARENT_SCOPE) 703*da0073e9SAndroid Build Coastguard Worker elseif(EXISTS "${CMAKE_SYSROOT}/usr/lib/cuda/version.txt") 704*da0073e9SAndroid Build Coastguard Worker set(${result_variable} "${CMAKE_SYSROOT}/usr/lib/cuda/version.txt" PARENT_SCOPE) 705*da0073e9SAndroid Build Coastguard Worker endif() 706*da0073e9SAndroid Build Coastguard Worker endfunction() 707*da0073e9SAndroid Build Coastguard Worker 708*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_version_file( _CUDAToolkit_version_file ) 709*da0073e9SAndroid Build Coastguard Worker if(_CUDAToolkit_version_file) 710*da0073e9SAndroid Build Coastguard Worker # CUDAToolkit_LIBRARY_ROOT contains the device library and version file. 711*da0073e9SAndroid Build Coastguard Worker get_filename_component(CUDAToolkit_LIBRARY_ROOT "${_CUDAToolkit_version_file}" DIRECTORY ABSOLUTE) 712*da0073e9SAndroid Build Coastguard Worker endif() 713*da0073e9SAndroid Build Coastguard Worker unset(_CUDAToolkit_version_file) 714*da0073e9SAndroid Build Coastguard Worker 715*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_NVCC_EXECUTABLE AND 716*da0073e9SAndroid Build Coastguard Worker CMAKE_CUDA_COMPILER_VERSION AND 717*da0073e9SAndroid Build Coastguard Worker CUDAToolkit_NVCC_EXECUTABLE STREQUAL CMAKE_CUDA_COMPILER) 718*da0073e9SAndroid Build Coastguard Worker # Need to set these based off the already computed CMAKE_CUDA_COMPILER_VERSION value 719*da0073e9SAndroid Build Coastguard Worker # This if statement will always match, but is used to provide variables for MATCH 1,2,3... 720*da0073e9SAndroid Build Coastguard Worker if(CMAKE_CUDA_COMPILER_VERSION MATCHES [=[([0-9]+)\.([0-9]+)\.([0-9]+)]=]) 721*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}") 722*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}") 723*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_PATCH "${CMAKE_MATCH_3}") 724*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION "${CMAKE_CUDA_COMPILER_VERSION}") 725*da0073e9SAndroid Build Coastguard Worker endif() 726*da0073e9SAndroid Build Coastguard Worker elseif(CUDAToolkit_NVCC_EXECUTABLE) 727*da0073e9SAndroid Build Coastguard Worker # Compute the version by invoking nvcc 728*da0073e9SAndroid Build Coastguard Worker execute_process(COMMAND ${CUDAToolkit_NVCC_EXECUTABLE} "--version" OUTPUT_VARIABLE NVCC_OUT) 729*da0073e9SAndroid Build Coastguard Worker if(NVCC_OUT MATCHES [=[ V([0-9]+)\.([0-9]+)\.([0-9]+)]=]) 730*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}") 731*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}") 732*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_PATCH "${CMAKE_MATCH_3}") 733*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") 734*da0073e9SAndroid Build Coastguard Worker endif() 735*da0073e9SAndroid Build Coastguard Worker unset(NVCC_OUT) 736*da0073e9SAndroid Build Coastguard Worker else() 737*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_version_file(version_file) 738*da0073e9SAndroid Build Coastguard Worker if(version_file) 739*da0073e9SAndroid Build Coastguard Worker file(READ "${version_file}" VERSION_INFO) 740*da0073e9SAndroid Build Coastguard Worker if(VERSION_INFO MATCHES [=[CUDA Version ([0-9]+)\.([0-9]+)\.([0-9]+)]=]) 741*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}") 742*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}") 743*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION_PATCH "${CMAKE_MATCH_3}") 744*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") 745*da0073e9SAndroid Build Coastguard Worker endif() 746*da0073e9SAndroid Build Coastguard Worker endif() 747*da0073e9SAndroid Build Coastguard Worker endif() 748*da0073e9SAndroid Build Coastguard Workerendif() 749*da0073e9SAndroid Build Coastguard Worker 750*da0073e9SAndroid Build Coastguard Worker# Find target directory when crosscompiling. 751*da0073e9SAndroid Build Coastguard Workerif(CMAKE_CROSSCOMPILING) 752*da0073e9SAndroid Build Coastguard Worker if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a") 753*da0073e9SAndroid Build Coastguard Worker # Support for NVPACK 754*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_TARGET_NAME "armv7-linux-androideabi") 755*da0073e9SAndroid Build Coastguard Worker elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm") 756*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_TARGET_NAME "armv7-linux-gnueabihf") 757*da0073e9SAndroid Build Coastguard Worker elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") 758*da0073e9SAndroid Build Coastguard Worker if(ANDROID_ARCH_NAME STREQUAL "arm64") 759*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_TARGET_NAME "aarch64-linux-androideabi") 760*da0073e9SAndroid Build Coastguard Worker elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX") 761*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_TARGET_NAME "aarch64-qnx") 762*da0073e9SAndroid Build Coastguard Worker else() 763*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_TARGET_NAME "aarch64-linux") 764*da0073e9SAndroid Build Coastguard Worker endif(ANDROID_ARCH_NAME STREQUAL "arm64") 765*da0073e9SAndroid Build Coastguard Worker elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") 766*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_TARGET_NAME "x86_64-linux") 767*da0073e9SAndroid Build Coastguard Worker endif() 768*da0073e9SAndroid Build Coastguard Worker 769*da0073e9SAndroid Build Coastguard Worker if(EXISTS "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}") 770*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_TARGET_DIR "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}") 771*da0073e9SAndroid Build Coastguard Worker # add known CUDA target root path to the set of directories we search for programs, libraries and headers 772*da0073e9SAndroid Build Coastguard Worker list(PREPEND CMAKE_FIND_ROOT_PATH "${CUDAToolkit_TARGET_DIR}") 773*da0073e9SAndroid Build Coastguard Worker 774*da0073e9SAndroid Build Coastguard Worker # Mark that we need to pop the root search path changes after we have 775*da0073e9SAndroid Build Coastguard Worker # found all cuda libraries so that searches for our cross-compilation 776*da0073e9SAndroid Build Coastguard Worker # libraries work when another cuda sdk is in CMAKE_PREFIX_PATH or 777*da0073e9SAndroid Build Coastguard Worker # PATh 778*da0073e9SAndroid Build Coastguard Worker set(_CUDAToolkit_Pop_ROOT_PATH True) 779*da0073e9SAndroid Build Coastguard Worker endif() 780*da0073e9SAndroid Build Coastguard Workerendif() 781*da0073e9SAndroid Build Coastguard Worker 782*da0073e9SAndroid Build Coastguard Worker# If not already set we can simply use the toolkit root or it's a scattered installation. 783*da0073e9SAndroid Build Coastguard Workerif(NOT CUDAToolkit_TARGET_DIR) 784*da0073e9SAndroid Build Coastguard Worker # Not cross compiling 785*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_TARGET_DIR "${CUDAToolkit_ROOT_DIR}") 786*da0073e9SAndroid Build Coastguard Worker # Now that we have the real ROOT_DIR, find components inside it. 787*da0073e9SAndroid Build Coastguard Worker list(APPEND CMAKE_PREFIX_PATH ${CUDAToolkit_ROOT_DIR}) 788*da0073e9SAndroid Build Coastguard Worker 789*da0073e9SAndroid Build Coastguard Worker # Mark that we need to pop the prefix path changes after we have 790*da0073e9SAndroid Build Coastguard Worker # found the cudart library. 791*da0073e9SAndroid Build Coastguard Worker set(_CUDAToolkit_Pop_Prefix True) 792*da0073e9SAndroid Build Coastguard Workerendif() 793*da0073e9SAndroid Build Coastguard Worker 794*da0073e9SAndroid Build Coastguard Worker# CUDAToolkit_TARGET_DIR always points to the directory containing the include directory. 795*da0073e9SAndroid Build Coastguard Worker# On a scattered installation /usr, on a non-scattered something like /usr/local/cuda or /usr/local/cuda-10.2/targets/aarch64-linux. 796*da0073e9SAndroid Build Coastguard Workerif(EXISTS "${CUDAToolkit_TARGET_DIR}/include/cuda_runtime.h") 797*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_INCLUDE_DIR "${CUDAToolkit_TARGET_DIR}/include") 798*da0073e9SAndroid Build Coastguard Workerelseif(NOT CUDAToolkit_FIND_QUIETLY) 799*da0073e9SAndroid Build Coastguard Worker message(STATUS "Unable to find cuda_runtime.h in \"${CUDAToolkit_TARGET_DIR}/include\" for CUDAToolkit_INCLUDE_DIR.") 800*da0073e9SAndroid Build Coastguard Workerendif() 801*da0073e9SAndroid Build Coastguard Worker 802*da0073e9SAndroid Build Coastguard Worker# The NVHPC layout moves math library headers and libraries to a sibling directory. 803*da0073e9SAndroid Build Coastguard Worker# Create a separate variable so this directory can be selectively added to math targets. 804*da0073e9SAndroid Build Coastguard Workerif(NOT EXISTS "${CUDAToolkit_INCLUDE_DIR}/cublas_v2.h") 805*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_MATH_INCLUDE_DIR "${CUDAToolkit_TARGET_DIR}/../../math_libs/include") 806*da0073e9SAndroid Build Coastguard Worker get_filename_component(CUDAToolkit_MATH_INCLUDE_DIR "${CUDAToolkit_MATH_INCLUDE_DIR}" ABSOLUTE) 807*da0073e9SAndroid Build Coastguard Worker if(NOT EXISTS "${CUDAToolkit_MATH_INCLUDE_DIR}/cublas_v2.h") 808*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_FIND_QUIETLY) 809*da0073e9SAndroid Build Coastguard Worker message(STATUS "Unable to find cublas_v2.h in either \"${CUDAToolkit_INCLUDE_DIR}\" or \"${CUDAToolkit_MATH_INCLUDE_DIR}\"") 810*da0073e9SAndroid Build Coastguard Worker endif() 811*da0073e9SAndroid Build Coastguard Worker unset(CUDAToolkit_MATH_INCLUDE_DIR) 812*da0073e9SAndroid Build Coastguard Worker endif() 813*da0073e9SAndroid Build Coastguard Workerendif() 814*da0073e9SAndroid Build Coastguard Worker 815*da0073e9SAndroid Build Coastguard Worker# Find the CUDA Runtime Library libcudart 816*da0073e9SAndroid Build Coastguard Workerfind_library(CUDA_CUDART 817*da0073e9SAndroid Build Coastguard Worker NAMES cudart 818*da0073e9SAndroid Build Coastguard Worker PATH_SUFFIXES lib64 lib/x64 819*da0073e9SAndroid Build Coastguard Worker) 820*da0073e9SAndroid Build Coastguard Workerfind_library(CUDA_CUDART 821*da0073e9SAndroid Build Coastguard Worker NAMES cudart 822*da0073e9SAndroid Build Coastguard Worker PATH_SUFFIXES lib64/stubs lib/x64/stubs 823*da0073e9SAndroid Build Coastguard Worker) 824*da0073e9SAndroid Build Coastguard Worker 825*da0073e9SAndroid Build Coastguard Workerif(NOT CUDA_CUDART AND NOT CUDAToolkit_FIND_QUIETLY) 826*da0073e9SAndroid Build Coastguard Worker message(STATUS "Unable to find cudart library.") 827*da0073e9SAndroid Build Coastguard Workerendif() 828*da0073e9SAndroid Build Coastguard Worker 829*da0073e9SAndroid Build Coastguard Workerif(_CUDAToolkit_Pop_Prefix) 830*da0073e9SAndroid Build Coastguard Worker list(REMOVE_AT CMAKE_PREFIX_PATH -1) 831*da0073e9SAndroid Build Coastguard Worker unset(_CUDAToolkit_Pop_Prefix) 832*da0073e9SAndroid Build Coastguard Workerendif() 833*da0073e9SAndroid Build Coastguard Worker 834*da0073e9SAndroid Build Coastguard Worker#----------------------------------------------------------------------------- 835*da0073e9SAndroid Build Coastguard Worker# Perform version comparison and validate all required variables are set. 836*da0073e9SAndroid Build Coastguard Workerinclude(FindPackageHandleStandardArgs) 837*da0073e9SAndroid Build Coastguard Workerfind_package_handle_standard_args(CUDAToolkit 838*da0073e9SAndroid Build Coastguard Worker REQUIRED_VARS 839*da0073e9SAndroid Build Coastguard Worker CUDAToolkit_INCLUDE_DIR 840*da0073e9SAndroid Build Coastguard Worker CUDAToolkit_VERSION 841*da0073e9SAndroid Build Coastguard Worker CUDA_CUDART 842*da0073e9SAndroid Build Coastguard Worker CUDAToolkit_BIN_DIR 843*da0073e9SAndroid Build Coastguard Worker VERSION_VAR 844*da0073e9SAndroid Build Coastguard Worker CUDAToolkit_VERSION 845*da0073e9SAndroid Build Coastguard Worker) 846*da0073e9SAndroid Build Coastguard Worker 847*da0073e9SAndroid Build Coastguard Workermark_as_advanced(CUDA_CUDART 848*da0073e9SAndroid Build Coastguard Worker CUDAToolkit_INCLUDE_DIR 849*da0073e9SAndroid Build Coastguard Worker CUDAToolkit_NVCC_EXECUTABLE 850*da0073e9SAndroid Build Coastguard Worker CUDAToolkit_SENTINEL_FILE 851*da0073e9SAndroid Build Coastguard Worker ) 852*da0073e9SAndroid Build Coastguard Worker 853*da0073e9SAndroid Build Coastguard Worker#----------------------------------------------------------------------------- 854*da0073e9SAndroid Build Coastguard Worker# Construct result variables 855*da0073e9SAndroid Build Coastguard Workerif(CUDAToolkit_FOUND) 856*da0073e9SAndroid Build Coastguard Worker set(CUDAToolkit_INCLUDE_DIRS ${CUDAToolkit_INCLUDE_DIR}) 857*da0073e9SAndroid Build Coastguard Worker get_filename_component(CUDAToolkit_LIBRARY_DIR ${CUDA_CUDART} DIRECTORY ABSOLUTE) 858*da0073e9SAndroid Build Coastguard Workerendif() 859*da0073e9SAndroid Build Coastguard Worker 860*da0073e9SAndroid Build Coastguard Worker#----------------------------------------------------------------------------- 861*da0073e9SAndroid Build Coastguard Worker# Construct import targets 862*da0073e9SAndroid Build Coastguard Workerif(CUDAToolkit_FOUND) 863*da0073e9SAndroid Build Coastguard Worker 864*da0073e9SAndroid Build Coastguard Worker function(_CUDAToolkit_find_and_add_import_lib lib_name) 865*da0073e9SAndroid Build Coastguard Worker cmake_parse_arguments(arg "" "" "ALT;DEPS;EXTRA_HINTS;EXTRA_PATH_SUFFIXES;EXTRA_INCLUDE_DIRS" ${ARGN}) 866*da0073e9SAndroid Build Coastguard Worker 867*da0073e9SAndroid Build Coastguard Worker set(search_names ${lib_name} ${arg_ALT}) 868*da0073e9SAndroid Build Coastguard Worker 869*da0073e9SAndroid Build Coastguard Worker find_library(CUDA_${lib_name}_LIBRARY 870*da0073e9SAndroid Build Coastguard Worker NAMES ${search_names} 871*da0073e9SAndroid Build Coastguard Worker HINTS ${CUDAToolkit_LIBRARY_DIR} 872*da0073e9SAndroid Build Coastguard Worker ENV CUDA_PATH 873*da0073e9SAndroid Build Coastguard Worker ${arg_EXTRA_HINTS} 874*da0073e9SAndroid Build Coastguard Worker PATH_SUFFIXES nvidia/current lib64 lib/x64 lib 875*da0073e9SAndroid Build Coastguard Worker ${arg_EXTRA_PATH_SUFFIXES} 876*da0073e9SAndroid Build Coastguard Worker ) 877*da0073e9SAndroid Build Coastguard Worker # Don't try any stub directories until we have exhausted all other 878*da0073e9SAndroid Build Coastguard Worker # search locations. 879*da0073e9SAndroid Build Coastguard Worker find_library(CUDA_${lib_name}_LIBRARY 880*da0073e9SAndroid Build Coastguard Worker NAMES ${search_names} 881*da0073e9SAndroid Build Coastguard Worker HINTS ${CUDAToolkit_LIBRARY_DIR} 882*da0073e9SAndroid Build Coastguard Worker ENV CUDA_PATH 883*da0073e9SAndroid Build Coastguard Worker ${arg_EXTRA_HINTS} 884*da0073e9SAndroid Build Coastguard Worker PATH_SUFFIXES lib64/stubs lib/x64/stubs lib/stubs stubs 885*da0073e9SAndroid Build Coastguard Worker # Support NVHPC splayed math library layout 886*da0073e9SAndroid Build Coastguard Worker ../../math_libs/${CUDAToolkit_VERSION_MAJOR}.${CUDAToolkit_VERSION_MINOR}/lib64 887*da0073e9SAndroid Build Coastguard Worker ../../math_libs/lib64 888*da0073e9SAndroid Build Coastguard Worker ) 889*da0073e9SAndroid Build Coastguard Worker 890*da0073e9SAndroid Build Coastguard Worker mark_as_advanced(CUDA_${lib_name}_LIBRARY) 891*da0073e9SAndroid Build Coastguard Worker 892*da0073e9SAndroid Build Coastguard Worker if(NOT TARGET CUDA::${lib_name} AND CUDA_${lib_name}_LIBRARY) 893*da0073e9SAndroid Build Coastguard Worker add_library(CUDA::${lib_name} UNKNOWN IMPORTED) 894*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::${lib_name} APPEND PROPERTY 895*da0073e9SAndroid Build Coastguard Worker INTERFACE_INCLUDE_DIRECTORIES "${CUDAToolkit_INCLUDE_DIRS}") 896*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::${lib_name} APPEND PROPERTY 897*da0073e9SAndroid Build Coastguard Worker INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${CUDAToolkit_INCLUDE_DIRS}") 898*da0073e9SAndroid Build Coastguard Worker if(DEFINED CUDAToolkit_MATH_INCLUDE_DIR) 899*da0073e9SAndroid Build Coastguard Worker string(FIND ${CUDA_${lib_name}_LIBRARY} "math_libs" math_libs) 900*da0073e9SAndroid Build Coastguard Worker if(NOT ${math_libs} EQUAL -1) 901*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::${lib_name} APPEND PROPERTY 902*da0073e9SAndroid Build Coastguard Worker INTERFACE_INCLUDE_DIRECTORIES "${CUDAToolkit_MATH_INCLUDE_DIRS}") 903*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::${lib_name} APPEND PROPERTY 904*da0073e9SAndroid Build Coastguard Worker INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${CUDAToolkit_MATH_INCLUDE_DIRS}") 905*da0073e9SAndroid Build Coastguard Worker endif() 906*da0073e9SAndroid Build Coastguard Worker endif() 907*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::${lib_name} PROPERTY IMPORTED_LOCATION "${CUDA_${lib_name}_LIBRARY}") 908*da0073e9SAndroid Build Coastguard Worker foreach(dep ${arg_DEPS}) 909*da0073e9SAndroid Build Coastguard Worker if(TARGET CUDA::${dep}) 910*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::${lib_name} APPEND PROPERTY 911*da0073e9SAndroid Build Coastguard Worker INTERFACE_LINK_LIBRARIES CUDA::${dep}) 912*da0073e9SAndroid Build Coastguard Worker endif() 913*da0073e9SAndroid Build Coastguard Worker endforeach() 914*da0073e9SAndroid Build Coastguard Worker if(arg_EXTRA_INCLUDE_DIRS) 915*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::${lib_name} APPEND PROPERTY 916*da0073e9SAndroid Build Coastguard Worker INTERFACE_INCLUDE_DIRECTORIES "${arg_EXTRA_INCLUDE_DIRS}") 917*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::${lib_name} APPEND PROPERTY 918*da0073e9SAndroid Build Coastguard Worker INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${arg_EXTRA_INCLUDE_DIRS}") 919*da0073e9SAndroid Build Coastguard Worker endif() 920*da0073e9SAndroid Build Coastguard Worker endif() 921*da0073e9SAndroid Build Coastguard Worker endfunction() 922*da0073e9SAndroid Build Coastguard Worker 923*da0073e9SAndroid Build Coastguard Worker if(NOT TARGET CUDA::toolkit) 924*da0073e9SAndroid Build Coastguard Worker add_library(CUDA::toolkit IMPORTED INTERFACE) 925*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::toolkit APPEND PROPERTY 926*da0073e9SAndroid Build Coastguard Worker INTERFACE_INCLUDE_DIRECTORIES "${CUDAToolkit_INCLUDE_DIRS}") 927*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::toolkit APPEND PROPERTY 928*da0073e9SAndroid Build Coastguard Worker INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${CUDAToolkit_INCLUDE_DIRS}") 929*da0073e9SAndroid Build Coastguard Worker endif() 930*da0073e9SAndroid Build Coastguard Worker 931*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cuda_driver ALT cuda) 932*da0073e9SAndroid Build Coastguard Worker 933*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cudart) 934*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cudart_static) 935*da0073e9SAndroid Build Coastguard Worker 936*da0073e9SAndroid Build Coastguard Worker # setup dependencies that are required for cudart_static when building 937*da0073e9SAndroid Build Coastguard Worker # on linux. These are generally only required when using the CUDA toolkit 938*da0073e9SAndroid Build Coastguard Worker # when CUDA language is disabled 939*da0073e9SAndroid Build Coastguard Worker if(NOT TARGET CUDA::cudart_static_deps 940*da0073e9SAndroid Build Coastguard Worker AND TARGET CUDA::cudart_static) 941*da0073e9SAndroid Build Coastguard Worker 942*da0073e9SAndroid Build Coastguard Worker add_library(CUDA::cudart_static_deps IMPORTED INTERFACE) 943*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::cudart_static APPEND PROPERTY 944*da0073e9SAndroid Build Coastguard Worker INTERFACE_LINK_LIBRARIES CUDA::cudart_static_deps) 945*da0073e9SAndroid Build Coastguard Worker 946*da0073e9SAndroid Build Coastguard Worker if(UNIX AND (CMAKE_C_COMPILER OR CMAKE_CXX_COMPILER)) 947*da0073e9SAndroid Build Coastguard Worker find_package(Threads REQUIRED) 948*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::cudart_static_deps APPEND PROPERTY 949*da0073e9SAndroid Build Coastguard Worker INTERFACE_LINK_LIBRARIES Threads::Threads ${CMAKE_DL_LIBS}) 950*da0073e9SAndroid Build Coastguard Worker endif() 951*da0073e9SAndroid Build Coastguard Worker 952*da0073e9SAndroid Build Coastguard Worker if(UNIX AND NOT APPLE AND NOT (CMAKE_SYSTEM_NAME STREQUAL "QNX")) 953*da0073e9SAndroid Build Coastguard Worker # On Linux, you must link against librt when using the static cuda runtime. 954*da0073e9SAndroid Build Coastguard Worker find_library(CUDAToolkit_rt_LIBRARY rt) 955*da0073e9SAndroid Build Coastguard Worker mark_as_advanced(CUDAToolkit_rt_LIBRARY) 956*da0073e9SAndroid Build Coastguard Worker if(NOT CUDAToolkit_rt_LIBRARY) 957*da0073e9SAndroid Build Coastguard Worker message(WARNING "Could not find librt library, needed by CUDA::cudart_static") 958*da0073e9SAndroid Build Coastguard Worker else() 959*da0073e9SAndroid Build Coastguard Worker set_property(TARGET CUDA::cudart_static_deps APPEND PROPERTY 960*da0073e9SAndroid Build Coastguard Worker INTERFACE_LINK_LIBRARIES ${CUDAToolkit_rt_LIBRARY}) 961*da0073e9SAndroid Build Coastguard Worker endif() 962*da0073e9SAndroid Build Coastguard Worker endif() 963*da0073e9SAndroid Build Coastguard Worker endif() 964*da0073e9SAndroid Build Coastguard Worker 965*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(culibos) # it's a static library 966*da0073e9SAndroid Build Coastguard Worker foreach(cuda_lib cublasLt cufft curand cusparse nppc nvjpeg) 967*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(${cuda_lib}) 968*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(${cuda_lib}_static DEPS culibos) 969*da0073e9SAndroid Build Coastguard Worker endforeach() 970*da0073e9SAndroid Build Coastguard Worker 971*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 11.0.0) 972*da0073e9SAndroid Build Coastguard Worker # cublas depends on cublasLt 973*da0073e9SAndroid Build Coastguard Worker # https://docs.nvidia.com/cuda/archive/11.0/cublas/index.html#static-library 974*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cublas DEPS cublasLt) 975*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cublas_static DEPS cublasLt_static) 976*da0073e9SAndroid Build Coastguard Worker else() 977*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cublas) 978*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cublas_static DEPS culibos) 979*da0073e9SAndroid Build Coastguard Worker endif() 980*da0073e9SAndroid Build Coastguard Worker 981*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 11.4) 982*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cuFile ALT cufile DEPS culibos) 983*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cuFile_static ALT cufile_static DEPS culibos) 984*da0073e9SAndroid Build Coastguard Worker 985*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cuFile_rdma ALT cufile_rdma DEPS cuFile culibos) 986*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cuFile_rdma_static ALT cufile_rdma_static DEPS cuFile_static culibos) 987*da0073e9SAndroid Build Coastguard Worker endif() 988*da0073e9SAndroid Build Coastguard Worker 989*da0073e9SAndroid Build Coastguard Worker # cuFFTW depends on cuFFT 990*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cufftw DEPS cufft) 991*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cufftw_static DEPS cufft_static) 992*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 9.2) 993*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cufft_static_nocallback DEPS culibos) 994*da0073e9SAndroid Build Coastguard Worker endif() 995*da0073e9SAndroid Build Coastguard Worker 996*da0073e9SAndroid Build Coastguard Worker # cuSOLVER depends on cuBLAS, and cuSPARSE 997*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cusolver DEPS cublas cusparse) 998*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cusolver_static DEPS cublas_static cusparse_static culibos) 999*da0073e9SAndroid Build Coastguard Worker 1000*da0073e9SAndroid Build Coastguard Worker 1001*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 10.1.2) 1002*da0073e9SAndroid Build Coastguard Worker # cusolver depends on liblapack_static.a starting with CUDA 10.1 update 2, 1003*da0073e9SAndroid Build Coastguard Worker # https://docs.nvidia.com/cuda/archive/11.5.0/cusolver/index.html#static-link-lapack 1004*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cusolver_lapack_static ALT lapack_static) # implementation detail static lib 1005*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cusolver_static DEPS cusolver_lapack_static) 1006*da0073e9SAndroid Build Coastguard Worker endif() 1007*da0073e9SAndroid Build Coastguard Worker 1008*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_VERSION VERSION_GREATER 11.2.1) 1009*da0073e9SAndroid Build Coastguard Worker # cusolver depends on libcusolver_metis and cublasLt 1010*da0073e9SAndroid Build Coastguard Worker # https://docs.nvidia.com/cuda/archive/11.2.2/cusolver/index.html#link-dependency 1011*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cusolver DEPS cublasLt) 1012*da0073e9SAndroid Build Coastguard Worker 1013*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cusolver_metis_static ALT metis_static) # implementation detail static lib 1014*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cusolver_static DEPS cusolver_metis_static cublasLt_static) 1015*da0073e9SAndroid Build Coastguard Worker endif() 1016*da0073e9SAndroid Build Coastguard Worker 1017*da0073e9SAndroid Build Coastguard Worker # nvGRAPH depends on cuRAND, and cuSOLVER. 1018*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(nvgraph DEPS curand cusolver) 1019*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(nvgraph_static DEPS curand_static cusolver_static) 1020*da0073e9SAndroid Build Coastguard Worker 1021*da0073e9SAndroid Build Coastguard Worker # Process the majority of the NPP libraries. 1022*da0073e9SAndroid Build Coastguard Worker foreach(cuda_lib nppial nppicc nppidei nppif nppig nppim nppist nppitc npps nppicom nppisu) 1023*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(${cuda_lib} DEPS nppc) 1024*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(${cuda_lib}_static DEPS nppc_static) 1025*da0073e9SAndroid Build Coastguard Worker endforeach() 1026*da0073e9SAndroid Build Coastguard Worker 1027*da0073e9SAndroid Build Coastguard Worker find_path(CUDAToolkit_CUPTI_INCLUDE_DIR cupti.h PATHS 1028*da0073e9SAndroid Build Coastguard Worker "${CUDAToolkit_ROOT_DIR}/extras/CUPTI/include" 1029*da0073e9SAndroid Build Coastguard Worker "${CUDAToolkit_INCLUDE_DIR}/../extras/CUPTI/include" 1030*da0073e9SAndroid Build Coastguard Worker "${CUDAToolkit_INCLUDE_DIR}" 1031*da0073e9SAndroid Build Coastguard Worker NO_DEFAULT_PATH) 1032*da0073e9SAndroid Build Coastguard Worker mark_as_advanced(CUDAToolkit_CUPTI_INCLUDE_DIR) 1033*da0073e9SAndroid Build Coastguard Worker 1034*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_CUPTI_INCLUDE_DIR) 1035*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cupti 1036*da0073e9SAndroid Build Coastguard Worker EXTRA_PATH_SUFFIXES ../extras/CUPTI/lib64/ 1037*da0073e9SAndroid Build Coastguard Worker ../extras/CUPTI/lib/ 1038*da0073e9SAndroid Build Coastguard Worker EXTRA_INCLUDE_DIRS "${CUDAToolkit_CUPTI_INCLUDE_DIR}") 1039*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(cupti_static 1040*da0073e9SAndroid Build Coastguard Worker EXTRA_PATH_SUFFIXES ../extras/CUPTI/lib64/ 1041*da0073e9SAndroid Build Coastguard Worker ../extras/CUPTI/lib/ 1042*da0073e9SAndroid Build Coastguard Worker EXTRA_INCLUDE_DIRS "${CUDAToolkit_CUPTI_INCLUDE_DIR}") 1043*da0073e9SAndroid Build Coastguard Worker endif() 1044*da0073e9SAndroid Build Coastguard Worker 1045*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(nvrtc DEPS cuda_driver) 1046*da0073e9SAndroid Build Coastguard Worker 1047*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(nvml ALT nvidia-ml nvml) 1048*da0073e9SAndroid Build Coastguard Worker 1049*da0073e9SAndroid Build Coastguard Worker # nvtools can be installed outside the CUDA toolkit directory, 1050*da0073e9SAndroid Build Coastguard Worker # so search the NVTOOLSEXT_PATH windows only environment variable 1051*da0073e9SAndroid Build Coastguard Worker set(nvToolsExt_EXTRA_PATH) 1052*da0073e9SAndroid Build Coastguard Worker if(WIN32) 1053*da0073e9SAndroid Build Coastguard Worker set(nvToolsExt_EXTRA_PATH "C:\\Program Files\\NVIDIA Corporation\\NvToolsExt") 1054*da0073e9SAndroid Build Coastguard Worker endif() 1055*da0073e9SAndroid Build Coastguard Worker 1056*da0073e9SAndroid Build Coastguard Worker find_path(CUDAToolkit_nvToolsExt_INCLUDE_DIR nvToolsExt.h 1057*da0073e9SAndroid Build Coastguard Worker PATHS "${CUDAToolkit_INCLUDE_DIR}" 1058*da0073e9SAndroid Build Coastguard Worker "${CUDAToolkit_ROOT_DIR}" 1059*da0073e9SAndroid Build Coastguard Worker ENV NVTOOLSEXT_PATH 1060*da0073e9SAndroid Build Coastguard Worker "${nvToolsExt_EXTRA_PATH}" 1061*da0073e9SAndroid Build Coastguard Worker PATH_SUFFIXES include 1062*da0073e9SAndroid Build Coastguard Worker NO_DEFAULT_PATH) 1063*da0073e9SAndroid Build Coastguard Worker mark_as_advanced(CUDAToolkit_nvToolsExt_INCLUDE_DIR) 1064*da0073e9SAndroid Build Coastguard Worker 1065*da0073e9SAndroid Build Coastguard Worker if(CUDAToolkit_nvToolsExt_INCLUDE_DIR) 1066*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(nvToolsExt 1067*da0073e9SAndroid Build Coastguard Worker ALT nvToolsExt64 nvToolsExt64_1 1068*da0073e9SAndroid Build Coastguard Worker EXTRA_HINTS ENV NVTOOLSEXT_PATH 1069*da0073e9SAndroid Build Coastguard Worker "${nvToolsExt_EXTRA_PATH}" 1070*da0073e9SAndroid Build Coastguard Worker EXTRA_INCLUDE_DIRS "${CUDAToolkit_nvToolsExt_INCLUDE_DIR}") 1071*da0073e9SAndroid Build Coastguard Worker endif() 1072*da0073e9SAndroid Build Coastguard Worker 1073*da0073e9SAndroid Build Coastguard Worker _CUDAToolkit_find_and_add_import_lib(OpenCL) 1074*da0073e9SAndroid Build Coastguard Workerendif() 1075*da0073e9SAndroid Build Coastguard Worker 1076*da0073e9SAndroid Build Coastguard Workerunset(CUDAToolkit_ROOT_DIR) 1077*da0073e9SAndroid Build Coastguard Worker 1078*da0073e9SAndroid Build Coastguard Workerif(_CUDAToolkit_Pop_ROOT_PATH) 1079*da0073e9SAndroid Build Coastguard Worker list(REMOVE_AT CMAKE_FIND_ROOT_PATH 0) 1080*da0073e9SAndroid Build Coastguard Worker unset(_CUDAToolkit_Pop_ROOT_PATH) 1081*da0073e9SAndroid Build Coastguard Workerendif() 1082