Paraview: uses canonical cuda_arch variant (#23257)
cuda_arch in ParaView will no longer accept CUDA architecture names
This commit is contained in:
parent
a81ec88c6c
commit
4c0f1bf4e4
1 changed files with 49 additions and 7 deletions
|
@ -3,6 +3,7 @@
|
|||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
import itertools
|
||||
import os
|
||||
|
||||
from spack import *
|
||||
|
@ -53,10 +54,7 @@ class Paraview(CMakePackage, CudaPackage):
|
|||
description='Builds a shared version of the library')
|
||||
variant('kits', default=True,
|
||||
description='Use module kits')
|
||||
variant('cuda_arch', default='native', multi=False,
|
||||
values=('native', 'fermi', 'kepler', 'maxwell',
|
||||
'pascal', 'volta', 'turing', 'ampere', 'all', 'none'),
|
||||
description='CUDA architecture')
|
||||
|
||||
variant('advanced_debug', default=False, description="Enable all other debug flags beside build_type, such as VTK_DEBUG_LEAK")
|
||||
|
||||
conflicts('+python', when='+python3')
|
||||
|
@ -68,6 +66,17 @@ class Paraview(CMakePackage, CudaPackage):
|
|||
# See commit: https://gitlab.kitware.com/paraview/paraview/-/commit/798d328c
|
||||
conflicts('~opengl2', when='@5.5:')
|
||||
|
||||
# We only support one single Architecture
|
||||
for _arch, _other_arch in itertools.permutations(CudaPackage.cuda_arch_values, 2):
|
||||
conflicts(
|
||||
'cuda_arch={0}'.format(_arch),
|
||||
when='cuda_arch={0}'.format(_other_arch),
|
||||
msg='Paraview only accepts one architecture value'
|
||||
)
|
||||
|
||||
for _arch in range(10, 14):
|
||||
conflicts('cuda_arch=%d' % _arch, when="+cuda", msg='ParaView requires cuda_arch >= 20')
|
||||
|
||||
depends_on('cmake@3.3:', type='build')
|
||||
|
||||
# Workaround for
|
||||
|
@ -366,9 +375,42 @@ def nvariant_bool(feature):
|
|||
else:
|
||||
cmake_args.append('-DVTKm_ENABLE_CUDA:BOOL=%s' %
|
||||
variant_bool('+cuda'))
|
||||
if spec.satisfies('+cuda') and not spec.satisfies('cuda_arch=native'):
|
||||
cmake_args.append('-DVTKm_CUDA_Architecture=%s' %
|
||||
spec.variants['cuda_arch'].value)
|
||||
|
||||
# VTK-m expects cuda_arch to be the arch name vs. the arch version.
|
||||
if spec.satisfies('+cuda'):
|
||||
supported_cuda_archs = {
|
||||
|
||||
# VTK-m and transitively ParaView does not support Tesla Arch
|
||||
'20': 'fermi',
|
||||
'21': 'fermi',
|
||||
'30': 'kepler',
|
||||
'32': 'kepler',
|
||||
'35': 'kepler',
|
||||
'37': 'kepler',
|
||||
'50': 'maxwel',
|
||||
'52': 'maxwel',
|
||||
'53': 'maxwel',
|
||||
'60': 'pascal',
|
||||
'61': 'pascal',
|
||||
'62': 'pascal',
|
||||
'70': 'volta',
|
||||
'72': 'volta',
|
||||
'75': 'turing',
|
||||
'80': 'ampere',
|
||||
'86': 'ampere',
|
||||
}
|
||||
|
||||
cuda_arch_value = 'native'
|
||||
requested_arch = spec.variants['cuda_arch'].value
|
||||
|
||||
# ParaView/VTK-m only accepts one arch, default to first element
|
||||
if requested_arch[0] != 'none':
|
||||
try:
|
||||
cuda_arch_value = supported_cuda_archs[requested_arch[0]]
|
||||
except KeyError:
|
||||
raise InstallError("Incompatible cuda_arch=" + requested_arch[0])
|
||||
|
||||
cmake_args.append(self.define('VTKm_CUDA_Architecture', cuda_arch_value))
|
||||
|
||||
if 'darwin' in spec.architecture:
|
||||
cmake_args.extend([
|
||||
|
|
Loading…
Reference in a new issue