summaryrefslogtreecommitdiff
path: root/lib/spack/docs/build_systems/cudapackage.rst
blob: 42ed61e33f4b7c8b80cb141e30090732c00d9d8d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
.. _cudapackage:

-----------
CudaPackage
-----------

Different from other packages, ``CudaPackage`` does not represent a build
system. Instead its goal is to simplify and unify usage of ``CUDA`` in other
packages.

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Provided variants and dependencies
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

``CudaPackage`` provides ``cuda`` variant (default to ``off``) to enable/disable
``CUDA``, and ``cuda_arch`` variant to optionally specify the architecture.
It also declares dependencies on the ``CUDA`` package ``depends_on('cuda@...')``
based on the architecture as well as specifies conflicts for certain compiler versions.

^^^^^
Usage
^^^^^

In order to use it, just add another base class to your package, for example:

.. code-block:: python

    class MyPackage(CMakePackage, CudaPackage):
        ...
        def cmake_args(self):
            spec = self.spec
            if '+cuda' in spec:
                options.append('-DWITH_CUDA=ON')
                cuda_arch = spec.variants['cuda_arch'].value
                if cuda_arch is not None:
                    options.append('-DCUDA_FLAGS=-arch=sm_{0}'.format(cuda_arch[0]))
            else:
                options.append('-DWITH_CUDA=OFF')