grid: add new package (#31133)
This commit is contained in:
parent
3b3be70226
commit
89f32d51f3
120
var/spack/repos/builtin/packages/grid/package.py
Normal file
120
var/spack/repos/builtin/packages/grid/package.py
Normal file
@ -0,0 +1,120 @@
|
||||
# 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.package import *
|
||||
|
||||
|
||||
class Grid(AutotoolsPackage):
|
||||
"""Data parallel C++ mathematical object library."""
|
||||
|
||||
homepage = "https://github.com/paboyle/Grid"
|
||||
url = "https://github.com/paboyle/Grid/archive/refs/tags/0.8.2.tar.gz"
|
||||
git = "https://github.com/paboyle/Grid.git"
|
||||
|
||||
maintainers = ['giordano']
|
||||
|
||||
version('develop', branch='develop')
|
||||
|
||||
variant('comms', default='mpi',
|
||||
values=('none', 'mpi', 'mpi3', conditional('shmem', when='^cray-mpich')),
|
||||
description='Choose communication interface')
|
||||
variant('fftw', default=True, description='Activate FFTW support')
|
||||
variant('lapack', default=False, description='Activate LAPACK support')
|
||||
variant('hdf5', default=False, description='Activate HDF5 support')
|
||||
variant('lime', default=False, description='Activate LIME support')
|
||||
variant('doxygen-doc', default=False,
|
||||
description='Build the documentation with doxygen')
|
||||
variant('gen-simd-width', default='64',
|
||||
description='Size (in bytes) of the generic SIMD vector type')
|
||||
variant('rng', default='sitmo', values=('sitmo', 'ranlux48', 'mt19937'),
|
||||
multi=False, description='RNG setting')
|
||||
variant('timers', default=True,
|
||||
description='System dependent high-resolution timers')
|
||||
variant('chroma', default=False,
|
||||
description='Chroma regression tests')
|
||||
|
||||
depends_on('autoconf', type='build')
|
||||
depends_on('automake', type='build')
|
||||
depends_on('libtool', type='build')
|
||||
depends_on('m4', type='build')
|
||||
depends_on('gmp')
|
||||
depends_on('mpfr')
|
||||
depends_on('openssl')
|
||||
|
||||
depends_on('mpi', when='comms=mpi')
|
||||
depends_on('cray-mpich', when='comms=shmem')
|
||||
depends_on('mpi@3:', when='comms=mpi3')
|
||||
|
||||
depends_on('fftw-api@3', when='+fftw')
|
||||
|
||||
depends_on('lapack', when='+lapack')
|
||||
|
||||
depends_on('hdf5', when='+hdf5')
|
||||
|
||||
depends_on('c-lime', when='+lime')
|
||||
|
||||
depends_on("doxygen", type="build", when="+doxygen-doc")
|
||||
|
||||
def autoreconf(self, spec, prefix):
|
||||
Executable('./bootstrap.sh')()
|
||||
|
||||
def configure_args(self):
|
||||
spec = self.spec
|
||||
args = ['--with-gmp', '--with-mpfr']
|
||||
|
||||
if spec.satisfies('^intel-mkl'):
|
||||
if '+fftw' in spec or '+lapack' in spec:
|
||||
args.append('--enable-mkl')
|
||||
else:
|
||||
if '+fftw' in spec:
|
||||
args.append('--with-fftw={0}'.format(self.spec['fftw'].prefix))
|
||||
if '+lapack' in spec:
|
||||
args.append('--enable-lapack={0}'.format(self.spec['lapack'].prefix))
|
||||
# lapack is searched only as `-llapack`, so anything else
|
||||
# wouldn't be found, causing an error.
|
||||
args.append('LIBS={0}'.format(self.spec['lapack'].libs.ld_flags))
|
||||
|
||||
if 'comms=none' not in spec:
|
||||
# The build system can easily get very confused about MPI support
|
||||
# and what linker to use. In many case it'd end up building the
|
||||
# code with support for MPI but without using `mpicxx` or linking to
|
||||
# `-lmpi`, wreaking havoc. Forcing `CXX` to be mpicxx should help.
|
||||
args.extend([
|
||||
"CC={0}".format(spec['mpi'].mpicc),
|
||||
"CXX={0}".format(spec['mpi'].mpicxx),
|
||||
])
|
||||
|
||||
args += self.enable_or_disable('timers')
|
||||
args += self.enable_or_disable('chroma')
|
||||
args += self.enable_or_disable('doxygen-doc')
|
||||
|
||||
if 'avx512' in spec.target:
|
||||
args.append('--enable-simd=AVX512')
|
||||
elif 'avx2' in spec.target:
|
||||
args.append('--enable-simd=AVX2')
|
||||
elif 'avx' in spec.target:
|
||||
if 'fma4' in spec.target:
|
||||
args.append('--enable-simd=AVXFMA4')
|
||||
elif 'fma' in spec.target:
|
||||
args.append('--enable-simd=AVXFMA')
|
||||
else:
|
||||
args.append('--enable-simd=AVX')
|
||||
elif 'sse4_2' in spec.target:
|
||||
args.append('--enable-simd=SSE4')
|
||||
elif spec.target == 'a64fx':
|
||||
args.append('--enable-simd=A64FX')
|
||||
elif 'neon' in spec.target:
|
||||
args.append('--enable-simd=NEONv8')
|
||||
else:
|
||||
args.extend([
|
||||
'--enable-simd=GEN',
|
||||
'--enable-gen-simd-width={0}'.format(
|
||||
spec.variants['gen-simd-width'].value)
|
||||
])
|
||||
|
||||
args.append('--enable-comms={0}'.format(spec.variants['comms'].value))
|
||||
args.append('--enable-rng={0}'.format(spec.variants['rng'].value))
|
||||
|
||||
return args
|
Loading…
Reference in New Issue
Block a user