diff options
author | Jon Rood <jon.rood@nrel.gov> | 2022-03-10 18:49:10 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-10 17:49:10 -0800 |
commit | ca3354bdea639ef2c5b65d18842e1423e2a7118d (patch) | |
tree | 2b43c5ee197291d3e2c3b945922bba16472546ac | |
parent | da7419c0352b6427fc1545c25fe11576e3c75635 (diff) | |
download | spack-ca3354bdea639ef2c5b65d18842e1423e2a7118d.tar.gz spack-ca3354bdea639ef2c5b65d18842e1423e2a7118d.tar.bz2 spack-ca3354bdea639ef2c5b65d18842e1423e2a7118d.tar.xz spack-ca3354bdea639ef2c5b65d18842e1423e2a7118d.zip |
amr-wind: Add ROCmPackage (#29448)
* Add ROCmPackage to amr-wind and simplify package.
* Add MPI_ROOT.
* Fix error.
* Fix error.
* Fix append.
* Add hypre rocm dependency.
* Remove itertools import.
-rw-r--r-- | var/spack/repos/builtin/packages/amr-wind/package.py | 95 |
1 files changed, 39 insertions, 56 deletions
diff --git a/var/spack/repos/builtin/packages/amr-wind/package.py b/var/spack/repos/builtin/packages/amr-wind/package.py index 6fa3209a21..68deeb65f5 100644 --- a/var/spack/repos/builtin/packages/amr-wind/package.py +++ b/var/spack/repos/builtin/packages/amr-wind/package.py @@ -3,106 +3,89 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import itertools - from spack import * -def process_amrex_constraints(): - """Map constraints when building with external AMReX""" - a1 = ['+', '~'] - a2 = ['mpi', 'hypre', 'cuda'] - a3 = [[x + y for x in a1] for y in a2] - for k in itertools.product(*a3): - if '+cuda' in k: - for arch in CudaPackage.cuda_arch_values: - yield ''.join(k) + " cuda_arch=%s" % arch - else: - yield ''.join(k) - - -class AmrWind(CMakePackage, CudaPackage): +class AmrWind(CMakePackage, CudaPackage, ROCmPackage): """AMR-Wind is a massively parallel, block-structured adaptive-mesh, incompressible flow sover for wind turbine and wind farm simulations. """ homepage = "https://github.com/Exawind/amr-wind" git = "https://github.com/Exawind/amr-wind.git" - maintainers = ['jrood-nrel', 'michaeljbrazell'] + maintainers = ['jrood-nrel'] tags = ['ecp', 'ecp-apps'] version('main', branch='main', submodules=True) - variant('shared', default=True, - description='Build shared libraries') - variant('unit', default=True, - description='Build unit tests') - variant('tests', default=True, - description='Activate regression tests') - variant('mpi', default=True, - description='Enable MPI support') - variant('openmp', default=False, - description='Enable OpenMP for CPU builds') - variant('netcdf', default=True, - description='Enable NetCDF support') variant('hypre', default=True, description='Enable Hypre integration') variant('masa', default=False, description='Enable MASA integration') + variant('mpi', default=True, + description='Enable MPI support') + variant('netcdf', default=True, + description='Enable NetCDF support') variant('openfast', default=False, description='Enable OpenFAST integration') - variant('internal-amrex', default=True, - description='Use AMRex submodule to build') - - conflicts('+openmp', when='+cuda') - - depends_on('mpi', when='+mpi') - - for opt in process_amrex_constraints(): - dopt = '+particles' + opt - depends_on('amrex@develop' + dopt, when='~internal-amrex' + opt) + variant('openmp', default=False, + description='Enable OpenMP for CPU builds') + variant('shared', default=True, + description='Build shared libraries') + variant('tests', default=True, + description='Activate regression tests') - depends_on('hypre+shared+mpi~int64~cuda@2.20.0:', when='+mpi~cuda+hypre') - depends_on('hypre+shared~mpi~int64~cuda@2.20.0:', when='~mpi~cuda+hypre') + depends_on('hypre~int64+shared@2.20.0:', when='+hypre') + depends_on('hypre+mpi', when='+mpi') for arch in CudaPackage.cuda_arch_values: - depends_on('hypre+shared+mpi~int64+cuda cuda_arch=%s @2.20.0:' % arch, - when='+mpi+cuda+hypre cuda_arch=%s' % arch) - depends_on('hypre+shared~mpi~int64+cuda cuda_arch=%s @2.20.0:' % arch, - when='~mpi+cuda+hypre cuda_arch=%s' % arch) - depends_on('netcdf-c', when='+netcdf') + depends_on('hypre+unified-memory+cuda cuda_arch=%s' % arch, + when='+cuda+hypre cuda_arch=%s' % arch) + for arch in ROCmPackage.amdgpu_targets: + depends_on('hypre+rocm amdgpu_target=%s' % arch, + when='+rocm+hypre amdgpu_target=%s' % arch) depends_on('masa', when='+masa') + depends_on('mpi', when='+mpi') + depends_on('netcdf-c', when='+netcdf') depends_on('openfast+cxx', when='+openfast') + depends_on('py-matplotlib', when='+masa') + depends_on('py-pandas', when='+masa') + + conflicts('+openmp', when='+cuda') + conflicts('+shared', when='+cuda') + + def setup_build_environment(self, env): + # Avoid compile errors with Intel interprocedural optimization + if '%intel' in self.spec: + env.append_flags('CXXFLAGS', '-no-ipo') def cmake_args(self): define = CMakePackage.define vs = ["mpi", "cuda", "openmp", "netcdf", "hypre", "masa", - "openfast", "tests"] + "openfast", "rocm", "tests"] args = [ self.define_from_variant("AMR_WIND_ENABLE_%s" % v.upper(), v) for v in vs ] args += [ - define('CMAKE_EXPORT_COMPILE_COMMANDS', True), define('AMR_WIND_ENABLE_ALL_WARNINGS', True), self.define_from_variant('BUILD_SHARED_LIBS', 'shared'), - self.define_from_variant('AMR_WIND_TEST_WITH_FCOMPARE', 'tests'), ] + if '+mpi' in self.spec: + args.append(define('MPI_HOME', self.spec['mpi'].prefix)) + if '+cuda' in self.spec: amrex_arch = ['{0:.1f}'.format(float(i) / 10.0) for i in self.spec.variants['cuda_arch'].value] if amrex_arch: args.append(define('AMReX_CUDA_ARCH', amrex_arch)) - if '+internal-amrex' in self.spec: - args.append(self.define('AMR_WIND_USE_INTERNAL_AMREX', True)) - else: - args += [ - self.define('AMR_WIND_USE_INTERNAL_AMREX', False), - self.define('AMReX_ROOT', self.spec['amrex'].prefix) - ] + if '+rocm' in self.spec: + args.append(define('CMAKE_CXX_COMPILER', self.spec['hip'].hipcc)) + targets = self.spec.variants['amdgpu_target'].value + args.append('-DAMReX_AMD_ARCH=' + ';'.join(str(x) for x in targets)) return args |