# 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 CrayFftw(Package): """FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST). This package is a wrapper for Cray's version of FFTW. To install this package, list it as an external package in packages.yaml, and make sure to load the correct cray-fftw module. In some cases you need to load cray-mpich before cray-fftw. """ homepage = "https://support.hpe.com/" has_code = False # Skip attempts to fetch source that is not available maintainers = ['haampie', 'lukebroskop'] version('3.3.8.12') version('3.3.8.8') version('3.3.8.7') provides('fftw-api@3') variant( 'precision', values=any_combination_of( 'float', 'double' ).prohibit_empty_set().with_default('float,double'), description='Build the selected floating-point precision libraries' ) variant('openmp', default=False, description="Enable OpenMP support.") variant('mpi', default=True, description='Activate MPI support') depends_on('mpi', when='+mpi') def install(self, spec, prefix): raise InstallError( self.spec.format('{name} is not installable, you need to specify ' 'it as an external package in packages.yaml')) @property def libs(self): # Reduce repetitions of entries query_parameters = list(llnl.util.lang.dedupe( self.spec.last_query.extra_parameters )) # List of all the suffixes associated with float precisions precisions = [ ('float', 'f'), ('double', ''), ] # Retrieve the correct suffixes, or use double as a default suffixes = [v for k, v in precisions if k in query_parameters] or [''] # Construct the list of libraries that needs to be found libraries = [] for sfx in suffixes: if 'mpi' in query_parameters and '+mpi' in self.spec: libraries.append('libfftw3' + sfx + '_mpi') if 'openmp' in query_parameters and '+openmp' in self.spec: libraries.append('libfftw3' + sfx + '_omp') libraries.append('libfftw3' + sfx) return find_libraries(libraries, root=self.prefix, recursive=True)