From 89f32d51f35da7158d01cab5fb6ef9b98b03009b Mon Sep 17 00:00:00 2001 From: Mosè Giordano Date: Thu, 16 Jun 2022 08:00:09 +0100 Subject: grid: add new package (#31133) --- var/spack/repos/builtin/packages/grid/package.py | 120 +++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 var/spack/repos/builtin/packages/grid/package.py diff --git a/var/spack/repos/builtin/packages/grid/package.py b/var/spack/repos/builtin/packages/grid/package.py new file mode 100644 index 0000000000..f868743efc --- /dev/null +++ b/var/spack/repos/builtin/packages/grid/package.py @@ -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 -- cgit v1.2.3-60-g2f50