76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
# Copyright 2013-2022 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 Hipace(CMakePackage):
|
|
"""Highly efficient Plasma Accelerator Emulation, quasistatic
|
|
particle-in-cell code
|
|
"""
|
|
|
|
homepage = "https://hipace.readthedocs.io"
|
|
url = "https://github.com/Hi-PACE/hipace/archive/refs/tags/v21.09.tar.gz"
|
|
git = "https://github.com/Hi-PACE/hipace.git"
|
|
|
|
maintainers = ['ax3l', 'MaxThevenet', 'SeverinDiederichs']
|
|
|
|
version('develop', branch='development')
|
|
version('21.09', sha256='5d27824fe6aac47ce26ca69759140ab4d7844f9042e436c343c03ea4852825f1')
|
|
|
|
variant('compute',
|
|
default='noacc',
|
|
values=('omp', 'cuda', 'hip', 'sycl', 'noacc'),
|
|
multi=False,
|
|
description='On-node, accelerated computing backend')
|
|
variant('mpi', default=True,
|
|
description='Enable MPI support')
|
|
variant('openpmd', default=True,
|
|
description='Enable openPMD I/O')
|
|
variant('precision',
|
|
default='double',
|
|
values=('single', 'double'),
|
|
multi=False,
|
|
description='Floating point precision (single/double)')
|
|
|
|
depends_on('cmake@3.15.0:', type='build')
|
|
depends_on('cuda@9.2.88:', when='compute=cuda')
|
|
depends_on('mpi', when='+mpi')
|
|
with when('+openpmd'):
|
|
depends_on('openpmd-api@0.14.2:')
|
|
depends_on('openpmd-api ~mpi', when='~mpi')
|
|
depends_on('openpmd-api +mpi', when='+mpi')
|
|
with when('compute=noacc'):
|
|
depends_on('fftw@3: ~mpi', when='~mpi')
|
|
depends_on('fftw@3: +mpi', when='+mpi')
|
|
depends_on('pkgconfig', type='build')
|
|
with when('compute=omp'):
|
|
depends_on('fftw@3: +openmp')
|
|
depends_on('fftw ~mpi', when='~mpi')
|
|
depends_on('fftw +mpi', when='+mpi')
|
|
depends_on('pkgconfig', type='build')
|
|
depends_on('llvm-openmp', when='%apple-clang')
|
|
with when('compute=hip'):
|
|
depends_on('rocfft')
|
|
depends_on('rocprim')
|
|
depends_on('rocrand')
|
|
|
|
def cmake_args(self):
|
|
spec = self.spec
|
|
|
|
args = [
|
|
# do not super-build dependencies
|
|
'-HiPACE_openpmd_internal=OFF',
|
|
# variants
|
|
'-DHiPACE_COMPUTE={0}'.format(
|
|
spec.variants['compute'].value.upper()),
|
|
self.define_from_variant('HiPACE_MPI', 'mpi'),
|
|
self.define_from_variant('HiPACE_OPENPMD', 'openpmd'),
|
|
'-DHiPACE_PRECISION={0}'.format(
|
|
spec.variants['precision'].value.upper()),
|
|
]
|
|
|
|
return args
|