Add SpFFT: sparse 3D FFT library (#13458)

* Add SpFFT: sparse 3D FFT library

SpFFT is required as a dependency for SIRIUS

* cleanup

* add missing dependency
This commit is contained in:
Simon Pintarelli 2019-10-29 04:57:07 +01:00 committed by Adam J. Stewart
parent bc930f310f
commit aad8ea172c

View File

@ -0,0 +1,44 @@
# Copyright 2013-2019 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 Spfft(CMakePackage):
"""Sparse 3D FFT library with MPI, OpenMP, CUDA and ROCm support."""
homepage = "https://github.com/eth-cscs/SpFFT"
url = "https://github.com/eth-cscs/SpFFT/archive/v0.9.8.zip"
version('0.9.8', sha256='f49fa51316bbfa68309e951d2375e1f6904120c93868cbe13bc2974c0b801a3f')
variant('openmp', default=True, description="Build with OpenMP support")
variant('mpi', default=True, description="enable MPI")
variant('single_precision', default=False, description="Sinlge precision")
variant('gpu_direct', default=False, description="GPU aware MPI")
variant('static', default=False, description="build static library")
variant('cuda', default=False, description="CUDA")
variant('build_type', default='Release', description='CMake build type',
values=('Debug', 'Release', 'RelWithDebInfo'))
depends_on('fftw')
depends_on('mpi', when='+mpi')
depends_on('cuda', when='+cuda')
def cmake_args(self):
args = []
if self.spec.satisfies('+openmp'):
args += ["-DSPFFT_OMP=On"]
if self.spec.satisfies('+mpi'):
args += ["-DSPFFT_MPI=On"]
if self.spec.satisfies('+single_precision'):
args += ["-DSPFFT_SINGLE_PRECISION=On"]
if self.spec.satisfies('+gpu_direct'):
args += ["-DSPFFT_GPU_DIRECT=On"]
if self.spec.satisfies('+cuda'):
args += ["-DSPFFT_BACKEND=CUDA"]
if self.spec.satisfies('+cuda'):
args += ["-DSPFFT_BACKEND=CUDA"]
return args