summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth R. Johnson <johnsonsr@ornl.gov>2022-03-21 12:54:58 -0400
committerGitHub <noreply@github.com>2022-03-21 10:54:58 -0600
commitfa554d763e7c350a08925fe5632922315108e934 (patch)
tree6aec7c3f125cfaa3a9bc480499ff472abe837bfe
parentb4b8aaf3bcdce18482f97e3736f97c9c80e3b766 (diff)
downloadspack-fa554d763e7c350a08925fe5632922315108e934.tar.gz
spack-fa554d763e7c350a08925fe5632922315108e934.tar.bz2
spack-fa554d763e7c350a08925fe5632922315108e934.tar.xz
spack-fa554d763e7c350a08925fe5632922315108e934.zip
vecgeom: fix cuda arch (#29582)
* vecgeom: fix cuda arch * vecgeom: change 'options' to 'args' * vecgeom: add spec to locals * vecgeom: suppress architecture specializations when cuda
-rw-r--r--var/spack/repos/builtin/packages/vecgeom/package.py53
1 files changed, 28 insertions, 25 deletions
diff --git a/var/spack/repos/builtin/packages/vecgeom/package.py b/var/spack/repos/builtin/packages/vecgeom/package.py
index 1676a520b0..caaf2eb4b0 100644
--- a/var/spack/repos/builtin/packages/vecgeom/package.py
+++ b/var/spack/repos/builtin/packages/vecgeom/package.py
@@ -74,20 +74,20 @@ class Vecgeom(CMakePackage, CudaPackage):
depends_on('xerces-c cxxstd=' + std, when='+gdml cxxstd=' + std)
def cmake_args(self):
- # Possible target options are from the main CMakeLists.txt, assuming
+ # Possible target args are from the main CMakeLists.txt, assuming
# "best" is last
- target = self.spec.target
- vecgeom_arch = "sse2 sse3 ssse3 sse4.1 sse4.2 avx avx2".split()
- for feature in reversed(vecgeom_arch):
- if feature.replace('.', '_') in target:
- target_instructions = feature
- break
- else:
- # No features available (could be 'generic' arch)
- target_instructions = 'empty'
+ spec = self.spec
+
+ target_instructions = 'empty'
+ if '~cuda' in spec:
+ vecgeom_arch = "sse2 sse3 ssse3 sse4.1 sse4.2 avx avx2".split()
+ for feature in reversed(vecgeom_arch):
+ if feature.replace('.', '_') in spec.target:
+ target_instructions = feature
+ break
define = CMakePackage.define
- options = [
+ args = [
define('BACKEND', 'Scalar'),
define('BUILTIN_VECCORE', False),
define('NO_SPECIALIZATION', True),
@@ -99,29 +99,32 @@ class Vecgeom(CMakePackage, CudaPackage):
self.define_from_variant('ROOT'),
]
- if self.spec.satisfies('@:1.1.18'):
- options.append(self.define_from_variant('CUDA'))
+ if spec.satisfies('@:1.1.18'):
+ args.append(self.define_from_variant('CUDA'))
+ arch = spec.variants['cuda_arch'].value
+ if len(arch) != 1 or arch[0] == 'none':
+ raise InstallError("Exactly one cuda_arch must be specified")
+ args.append(define('CUDA_ARCH', arch[0]))
else:
- options.append(self.define_from_variant('VECGEOM_ENABLE_CUDA', 'cuda'))
+ args.append(self.define_from_variant('VECGEOM_ENABLE_CUDA', 'cuda'))
+ # This will add an (ignored) empty string if no values are
+ # selected, otherwise will add a CMake list of arch values
+ args.append(self.define(
+ 'CMAKE_CUDA_ARCHITECTURES', spec.variants['cuda_arch'].value
+ ))
# Set testing flags
build_tests = self.run_tests
- options.extend([
+ args.extend([
define('BUILD_TESTING', build_tests),
define('CTEST', build_tests),
- define('GDMLTESTING', build_tests and '+gdml' in self.spec),
+ define('GDMLTESTING', build_tests and '+gdml' in spec),
])
- if '+cuda' in self.spec:
- arch = self.spec.variants['cuda_arch'].value
- if len(arch) != 1 or arch[0] == 'none':
- raise InstallError("Exactly one cuda_arch must be specified")
- options.append(define('CUDA_ARCH', arch[0]))
-
- if self.spec.satisfies("@:0.5.2"):
- options.extend([
+ if spec.satisfies("@:0.5.2"):
+ args.extend([
define('USOLIDS', True),
define('USOLIDS_VECGEOM', True),
])
- return options
+ return args