diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/care/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/care/package.py | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/care/package.py b/var/spack/repos/builtin/packages/care/package.py new file mode 100644 index 0000000000..7c3b6a6391 --- /dev/null +++ b/var/spack/repos/builtin/packages/care/package.py @@ -0,0 +1,136 @@ +# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack import * + + +class Care(CMakePackage, CudaPackage, ROCmPackage): + """ + Algorithms for chai managed arrays. + """ + + homepage = "https://github.com/LLNL/CARE" + git = "https://github.com/LLNL/CARE.git" + + version('develop', branch='develop', submodules='True') + version('master', branch='main', submodules='True') + version('0.3.0', tag='v0.3.0', submodules='True') + version('0.2.0', tag='v0.2.0', submodules='True') + + variant('openmp', default=False, description='Build Shared Libs') + variant('implicit_conversions', default=True, description='Enable implicit' + 'conversions to/from raw pointers') + variant('benchmarks', default=True, description='Build benchmarks.') + variant('examples', default=True, description='Build examples.') + variant('docs', default=False, description='Build documentation') + # TODO: figure out gtest dependency and then set this default True + # and remove the +tests conflict below. + variant('tests', default=False, description='Build tests') + + depends_on('blt', type='build') + depends_on('blt@0.3.7:', type='build', when='+rocm') + + depends_on('camp') + depends_on('umpire@develop') + depends_on('raja@develop') + depends_on('chai@develop+enable_pick~benchmarks') + + # WARNING: this package currently only supports an internal cub + # package. This will cause a race condition if compiled with another + # package that uses cub. TODO: have all packages point to the same external + # cub package. + depends_on('camp+cuda', when='+cuda') + depends_on('umpire+cuda', when='+cuda') + depends_on('raja+cuda~openmp', when='+cuda') + depends_on('chai+cuda', when='+cuda') + + # variants +rocm and amdgpu_targets are not automatically passed to + # dependencies, so do it manually. + depends_on('camp+rocm', when='+rocm') + depends_on('umpire+rocm', when='+rocm') + depends_on('raja+rocm~openmp', when='+rocm') + depends_on('chai+rocm', when='+rocm') + for val in ROCmPackage.amdgpu_targets: + depends_on('camp amdgpu_target=%s' % val, when='amdgpu_target=%s' % val) + depends_on('umpire amdgpu_target=%s' % val, when='amdgpu_target=%s' % val) + depends_on('raja amdgpu_target=%s' % val, when='amdgpu_target=%s' % val) + depends_on('chai amdgpu_target=%s' % val, when='amdgpu_target=%s' % val) + + conflicts('+openmp', when='+rocm') + conflicts('+openmp', when='+cuda') + + def cmake_args(self): + spec = self.spec + + options = [] + options.append('-DBLT_SOURCE_DIR={0}'.format(spec['blt'].prefix)) + + if '+cuda' in spec: + options.extend([ + '-DENABLE_CUDA=ON', + '-DCUDA_TOOLKIT_ROOT_DIR=' + spec['cuda'].prefix]) + + if not spec.satisfies('cuda_arch=none'): + cuda_arch = spec.variants['cuda_arch'].value + options.append('-DCUDA_ARCH=sm_{0}'.format(cuda_arch[0])) + flag = '-arch sm_{0}'.format(cuda_arch[0]) + options.append('-DCMAKE_CUDA_FLAGS:STRING={0}'.format(flag)) + else: + options.append('-DENABLE_CUDA=OFF') + + if '+rocm' in spec: + options.extend([ + '-DENABLE_HIP=ON', + '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix)]) + + archs = self.spec.variants['amdgpu_target'].value + if archs != 'none': + arch_str = ",".join(archs) + options.append( + '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch_str) + ) + else: + options.append('-DENABLE_HIP=OFF') + + options.append('-DCARE_ENABLE_IMPLICIT_CONVERSIONS={0}'.format( + 'ON' if '+implicit_conversions' in spec else 'OFF')) + + options.append('-DCAMP_DIR:PATH=' + + spec['camp'].prefix.share.camp.cmake) + options.append('-DUMPIRE_DIR:PATH=' + + spec['umpire'].prefix.share.umpire.cmake) + options.append('-DRAJA_DIR:PATH=' + + spec['raja'].prefix.share.raja.cmake) + options.append('-DCHAI_DIR:PATH=' + + spec['chai'].prefix.share.chai.cmake) + + options.append('-DCARE_ENABLE_TESTS={0}'.format( + 'ON' if '+tests' in spec else 'OFF')) + # For tests to work, we also need BLT_ENABLE_TESTS to be on. + # This will take care of the gtest dependency. CARE developers should + # consider consolidating these flags in the future. + options.append('-DBLT_ENABLE_TESTS={0}'.format( + 'ON' if '+tests' in spec else 'OFF')) + + # There are both CARE_ENABLE_* and ENABLE_* variables in here because + # one controls the BLT infrastructure and the other controls the CARE + # infrastructure. The goal is to just be able to use the CARE_ENABLE_* + # variables, but CARE isn't set up correctly for that yet. + options.append('-DENABLE_BENCHMARKS={0}'.format( + 'ON' if '+benchmarks' in spec else 'OFF')) + options.append('-DCARE_ENABLE_BENCHMARKS={0}'.format( + 'ON' if '+benchmarks' in spec else 'OFF')) + + options.append('-DENABLE_EXAMPLES={0}'.format( + 'ON' if '+examples' in spec else 'OFF')) + options.append('-DCARE_ENABLE_EXAMPLES={0}'.format( + 'ON' if '+examples' in spec else 'OFF')) + + options.append('-DENABLE_DOCS={0}'.format( + 'ON' if '+docs' in spec else 'OFF')) + options.append('-DCARE_ENABLE_DOCS={0}'.format( + 'ON' if '+docs' in spec else 'OFF')) + + return options |