
- Fix trailing whitespace missed by the bug described in #12755. - Fix other style issues that have crept in over time (this can happen when flake8 adds new checks with new versions)
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
# 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 Picsar(MakefilePackage):
|
|
"""PICSAR is a high performance library of optimized versions of the key
|
|
functionalities of the PIC loop.
|
|
"""
|
|
|
|
homepage = "https://picsar.net"
|
|
git = "https://bitbucket.org/berkeleylab/picsar.git"
|
|
|
|
version('develop', branch='master')
|
|
|
|
variant('prod', default=True, description='Production mode (without FFTW)')
|
|
variant('prod_spectral', default=False,
|
|
description='Production mode with spectral solver and FFTW')
|
|
variant('debug', default=False, description='Debug mode')
|
|
variant('vtune', default=False, description='Vtune profiling')
|
|
variant('sde', default=False, description='sde profiling')
|
|
variant('map', default=False, description='Allinea Map profiling')
|
|
variant('library', default=False,
|
|
description='Create static and dynamic library')
|
|
|
|
depends_on('mpi')
|
|
depends_on('fftw@3.0: +mpi', when='+prod_spectral')
|
|
|
|
parallel = False
|
|
|
|
@property
|
|
def build_targets(self):
|
|
targets = []
|
|
targets.append('FC={0}'.format(self.spec['mpi'].mpifc))
|
|
targets.append('CC={0}'.format(self.spec['mpi'].mpicc))
|
|
|
|
comp = 'user'
|
|
vendors = {'%gcc': 'gnu', '%intel': 'intel'}
|
|
for key, value in vendors.items():
|
|
if self.spec.satisfies(key):
|
|
comp = value
|
|
targets.append('COMP={0}'.format(comp))
|
|
if comp == 'user':
|
|
targets.append(
|
|
'FARGS={0}{1}'.format('-g -O3 ', self.compiler.openmp_flag))
|
|
|
|
if '+prod' in self.spec:
|
|
mode = 'prod'
|
|
elif '+prod_spectral' in self.spec:
|
|
mode = 'prod_spectral'
|
|
elif '+debug' in self.spec:
|
|
mode = 'debug'
|
|
elif '+vtune' in self.spec:
|
|
mode = 'vtune'
|
|
elif '+sde' in self.spec:
|
|
mode = 'sde'
|
|
elif '+map' in self.spec:
|
|
mode = 'map'
|
|
elif '+library' in self.spec:
|
|
mode = 'library'
|
|
targets.append('MODE = {0}'.format(mode))
|
|
|
|
targets.append('SYS = default')
|
|
|
|
return targets
|
|
|
|
def install(self, spec, prefix):
|
|
mkdirp(prefix.docs)
|
|
install('README.md', prefix.docs)
|
|
|
|
mkdirp(prefix.bin)
|
|
install('fortran_bin/picsar', prefix.bin)
|