1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# 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 import *
from spack.pkg.builtin.boost import Boost
class Amp(CMakePackage):
"""The Advanced Multi-Physics (AMP) package.
The Advanced Multi-Physics (AMP) package is an open source parallel
object-oriented computational framework that is designed with single
and multi-domain multi-physics applications in mind.
"""
homepage = "https://bitbucket.org/AdvancedMultiPhysics/amp"
hg = homepage
version('develop')
variant('boost', default=True, description='Build with support for Boost')
variant('hdf5', default=True, description='Build with support for HDF5')
variant('hypre', default=True, description='Build with support for hypre')
variant('libmesh', default=True, description='Build with libmesh support')
variant('mpi', default=True, description='Build with MPI support')
variant('netcdf', default=True, description='Build with NetCDF support')
variant('petsc', default=True, description='Build with Petsc support')
variant('shared', default=True, description='Build shared libraries')
variant('silo', default=True, description='Build with support for Silo')
variant('sundials', default=True, description='Build with support for Sundials')
variant('trilinos', default=True, description='Build with support for Trilinos')
variant('zlib', default=True, description='Build with support for zlib')
# Everything should be compiled position independent (-fpic)
depends_on('blas')
depends_on('lapack')
# TODO: replace this with an explicit list of components of Boost,
# for instance depends_on('boost +filesystem')
# See https://github.com/spack/spack/pull/22303 for reference
depends_on(Boost.with_default_variants, when='+boost')
depends_on('hdf5', when='+hdf5')
depends_on('hypre', when='+hypre')
depends_on('libmesh', when='+libmesh')
depends_on('netcdf-c', when='+netcdf')
depends_on('petsc', when='+petsc')
depends_on('silo', when='+silo')
depends_on('sundials', when='+sundials')
depends_on('trilinos', when='+trilinos')
depends_on('zlib', when="+zlib")
# MPI related dependencies
depends_on('mpi', when='+mpi')
def cmake_args(self):
spec = self.spec
options = [
self.define('TPL_URL', 'https://bitbucket.org/AdvancedMultiPhysics/tpl-builder'),
self.define('AMP_DATA_URL', 'https://bitbucket.org/AdvancedMultiPhysics/amp/downloads/AMP-Data.tar.gz'),
self.define('AMP_ENABLE_TESTS', 'OFF'),
self.define('AMP_ENABLE_EXAMPLES', 'OFF'),
self.define('AMP_ENABLE_CXX11', 'ON'),
self.define('CXX_STD', '11'),
self.define_from_variant('BUILD_SHARED_LIBS', 'shared'),
self.define('USE_MPI', '0'),
]
if '+mpi' in spec:
options.extend([
self.define('CMAKE_C_COMPILER', spec['mpi'].mpicc),
self.define('CMAKE_CXX_COMPILER', spec['mpi'].mpicxx),
self.define('CMAKE_Fortran_COMPILER', spec['mpi'].mpifc),
self.define('MPI_COMPILER', '1'),
self.define('MPIEXEC', spec['mpi'].prefix.bin),
])
else:
options.extend([
self.define('CMAKE_C_COMPILER', self.compiler.cc),
self.define('CMAKE_CXX_COMPILER', self.compiler.cxx),
self.define('CMAKE_Fortran_COMPILER', self.compiler.fc),
])
tpl_list = ["LAPACK"]
blas, lapack = spec['blas'].libs, spec['lapack'].libs
options.extend([
self.define('TPL_LAPACK_INSTALL_DIR', spec['lapack'].prefix),
self.define('TPL_BLAS_LIBRARY_NAMES', ';'.join(blas.names)),
self.define('TPL_BLAS_LIBRARY_DIRS', ';'.join(blas.directories)),
self.define('TPL_LAPACK_LIBRARY_NAMES', ';'.join(lapack.names)),
self.define('TPL_LAPACK_LIBRARY_DIRS', ';'.join(lapack.directories)),
])
for vname in (
'boost', 'hdf5', 'hypre', 'libmesh', 'petsc',
'silo', 'sundials', 'trilinos', 'zlib',
):
if '+' + vname in spec:
tpl_list.append(vname.upper())
options.append(self.define(
'TPL_{0}_INSTALL_DIR'.format(vname.upper()),
spec[vname].prefix
))
if '+netcdf' in spec:
tpl_list.append("NETCDF")
options.append(self.define(
'TPL_NETCDF_INSTALL_DIR', spec['netcdf-c'].prefix
))
options.append(self.define('TPL_LIST', ';'.join(tpl_list)))
return options
|