
- 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)
81 lines
2.6 KiB
Python
81 lines
2.6 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 Picsarlite(MakefilePackage):
|
|
"""PICSARlite is a self-contained proxy that adequately portrays the
|
|
computational loads and dataflow of more complex PIC codes.
|
|
"""
|
|
|
|
tags = ['proxy-app', 'ecp-proxy-app']
|
|
|
|
homepage = "https://picsar.net"
|
|
git = "https://bitbucket.org/berkeleylab/picsar.git"
|
|
|
|
version('develop', branch='PICSARlite')
|
|
version('0.1', tag='PICSARlite-0.1')
|
|
|
|
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')
|
|
|
|
@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 build(self, spec, prefix):
|
|
with working_dir('PICSARlite'):
|
|
make(parallel=False)
|
|
|
|
def install(self, spec, prefix):
|
|
mkdirp(prefix.docs)
|
|
install('PICSARlite/README.md', prefix.docs)
|
|
|
|
mkdirp(prefix.bin)
|
|
install('PICSARlite/bin/picsar', prefix.bin)
|