Merge remote-tracking branch 'upstream/develop' into develop
This commit is contained in:
commit
9d2ef9f453
@ -794,6 +794,34 @@ Environment modules
|
||||
Spack provides some limited integration with environment module
|
||||
systems to make it easier to use the packages it provides.
|
||||
|
||||
|
||||
Installing Environment Modules
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In order to use Spack's generated environment modules, you must have
|
||||
installed the *Environment Modules* package. On many Linux
|
||||
distributions, this can be installed from the vendor's repository.
|
||||
For example: ```yum install environment-modules``
|
||||
(Fedora/RHEL/CentOS). If your Linux distribution does not have
|
||||
Environment Modules, you can get it with Spack:
|
||||
|
||||
1. Install with::
|
||||
|
||||
spack install environment-modules
|
||||
|
||||
2. Activate with::
|
||||
|
||||
MODULES_HOME=`spack location -i environment-modules`
|
||||
MODULES_VERSION=`ls -1 $MODULES_HOME/Modules | head -1`
|
||||
${MODULES_HOME}/Modules/${MODULES_VERSION}/bin/add.modules
|
||||
|
||||
This adds to your ``.bashrc`` (or similar) files, enabling Environment
|
||||
Modules when you log in. It will ask your permission before changing
|
||||
any files.
|
||||
|
||||
Spack and Environment Modules
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You can enable shell support by sourcing some files in the
|
||||
``/share/spack`` directory.
|
||||
|
||||
|
@ -304,7 +304,7 @@ def setup_package(pkg):
|
||||
|
||||
# traverse in postorder so package can use vars from its dependencies
|
||||
spec = pkg.spec
|
||||
for dspec in pkg.spec.traverse(order='post'):
|
||||
for dspec in pkg.spec.traverse(order='post', root=False):
|
||||
# If a user makes their own package repo, e.g.
|
||||
# spack.repos.mystuff.libelf.Libelf, and they inherit from
|
||||
# an existing class like spack.repos.original.libelf.Libelf,
|
||||
@ -321,6 +321,7 @@ def setup_package(pkg):
|
||||
dpkg.setup_dependent_package(pkg.module, spec)
|
||||
dpkg.setup_dependent_environment(spack_env, run_env, spec)
|
||||
|
||||
set_module_variables_for_package(pkg, pkg.module)
|
||||
pkg.setup_environment(spack_env, run_env)
|
||||
|
||||
# Make sure nothing's strange about the Spack environment.
|
||||
|
@ -23,8 +23,10 @@ class Dealii(Package):
|
||||
|
||||
# required dependencies, light version
|
||||
depends_on ("blas")
|
||||
depends_on ("boost", when='~mpi')
|
||||
depends_on ("boost+mpi", when='+mpi')
|
||||
# Boost 1.58 is blacklisted, see https://github.com/dealii/dealii/issues/1591
|
||||
# require at least 1.59
|
||||
depends_on ("boost@1.59.0:", when='~mpi')
|
||||
depends_on ("boost@1.59.0:+mpi", when='+mpi')
|
||||
depends_on ("bzip2")
|
||||
depends_on ("cmake")
|
||||
depends_on ("lapack")
|
||||
@ -174,6 +176,19 @@ def install(self, spec, prefix):
|
||||
make('release')
|
||||
make('run',parallel=False)
|
||||
|
||||
# An example which uses Metis + PETSc
|
||||
# FIXME: switch step-18 to MPI
|
||||
with working_dir('examples/step-18'):
|
||||
print('=====================================')
|
||||
print('============= Step-18 ===============')
|
||||
print('=====================================')
|
||||
# list the number of cycles to speed up
|
||||
filter_file(r'(end_time = 10;)', ('end_time = 3;'), 'step-18.cc')
|
||||
if '^petsc' in spec and '^metis' in spec:
|
||||
cmake('.')
|
||||
make('release')
|
||||
make('run',parallel=False)
|
||||
|
||||
# take step-40 which can use both PETSc and Trilinos
|
||||
# FIXME: switch step-40 to MPI run
|
||||
with working_dir('examples/step-40'):
|
||||
|
@ -0,0 +1,38 @@
|
||||
from spack import *
|
||||
|
||||
|
||||
class EnvironmentModules(Package):
|
||||
"""The Environment Modules package provides for the dynamic
|
||||
modification of a user's environment via modulefiles."""
|
||||
|
||||
homepage = "https://sourceforge.net/p/modules/wiki/Home/"
|
||||
url = "http://prdownloads.sourceforge.net/modules/modules-3.2.10.tar.gz"
|
||||
|
||||
version('3.2.10', '8b097fdcb90c514d7540bb55a3cb90fb')
|
||||
|
||||
# Dependencies:
|
||||
depends_on('tcl')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
tcl_spec = spec['tcl']
|
||||
|
||||
# See: https://sourceforge.net/p/modules/bugs/62/
|
||||
CPPFLAGS = ['-DUSE_INTERP_ERRORLINE']
|
||||
config_args = [
|
||||
"--without-tclx",
|
||||
"--with-tclx-ver=0.0",
|
||||
"--prefix=%s" % prefix,
|
||||
"--with-tcl=%s" % join_path(tcl_spec.prefix, 'lib'), # It looks for tclConfig.sh
|
||||
"--with-tcl-ver=%d.%d" % (tcl_spec.version.version[0], tcl_spec.version.version[1]),
|
||||
'--disable-debug',
|
||||
'--disable-dependency-tracking',
|
||||
'--disable-silent-rules',
|
||||
'--disable-versioning',
|
||||
'--datarootdir=%s' % prefix.share,
|
||||
'CPPFLAGS=%s' % ' '.join(CPPFLAGS)
|
||||
]
|
||||
|
||||
|
||||
configure(*config_args)
|
||||
make()
|
||||
make('install')
|
51
var/spack/repos/builtin/packages/ipopt/package.py
Normal file
51
var/spack/repos/builtin/packages/ipopt/package.py
Normal file
@ -0,0 +1,51 @@
|
||||
from spack import *
|
||||
|
||||
class Ipopt(Package):
|
||||
"""Ipopt (Interior Point OPTimizer, pronounced eye-pea-Opt) is a
|
||||
software package for large-scale nonlinear optimization."""
|
||||
homepage = "https://projects.coin-or.org/Ipopt"
|
||||
url = "http://www.coin-or.org/download/source/Ipopt/Ipopt-3.12.4.tgz"
|
||||
|
||||
version('3.12.4', '12a8ecaff8dd90025ddea6c65b49cb03')
|
||||
version('3.12.3', 'c560cbfa9cbf62acf8b485823c255a1b')
|
||||
version('3.12.2', 'ec1e855257d7de09e122c446506fb00d')
|
||||
version('3.12.1', 'ceaf895ce80c77778f2cab68ba9f17f3')
|
||||
version('3.12.0', 'f7dfc3aa106a6711a85214de7595e827')
|
||||
|
||||
depends_on("blas")
|
||||
depends_on("lapack")
|
||||
depends_on("pkg-config")
|
||||
depends_on("mumps+double~mpi")
|
||||
|
||||
def install(self, spec, prefix):
|
||||
# Dependency directories
|
||||
blas_dir = spec['blas'].prefix
|
||||
lapack_dir = spec['lapack'].prefix
|
||||
mumps_dir = spec['mumps'].prefix
|
||||
|
||||
# Add directory with fake MPI headers in sequential MUMPS
|
||||
# install to header search path
|
||||
mumps_flags = "-ldmumps -lmumps_common -lpord -lmpiseq"
|
||||
mumps_libcmd = "-L%s " % mumps_dir.lib + mumps_flags
|
||||
|
||||
# By convention, spack links blas & lapack libs to libblas & liblapack
|
||||
blas_lib = "-L%s" % blas_dir.lib + " -lblas"
|
||||
lapack_lib = "-L%s" % lapack_dir.lib + " -llapack"
|
||||
|
||||
configure_args = [
|
||||
"--prefix=%s" % prefix,
|
||||
"--with-mumps-incdir=%s" % mumps_dir.include,
|
||||
"--with-mumps-lib=%s" % mumps_libcmd,
|
||||
"--enable-shared",
|
||||
"--with-blas-incdir=%s" % blas_dir.include,
|
||||
"--with-blas-lib=%s" % blas_lib,
|
||||
"--with-lapack-incdir=%s" % lapack_dir.include,
|
||||
"--with-lapack-lib=%s" % lapack_lib
|
||||
]
|
||||
|
||||
configure(*configure_args)
|
||||
|
||||
# IPOPT does not build correctly in parallel on OS X
|
||||
make(parallel=False)
|
||||
make("test", parallel=False)
|
||||
make("install", parallel=False)
|
@ -79,10 +79,28 @@ def install(self, spec, prefix):
|
||||
if '+double' in spec:
|
||||
filter_file('REALTYPEWIDTH 32', 'REALTYPEWIDTH 64', metis_header)
|
||||
|
||||
# Make clang 7.3 happy.
|
||||
# Prevents "ld: section __DATA/__thread_bss extends beyond end of file"
|
||||
# See upstream LLVM issue https://llvm.org/bugs/show_bug.cgi?id=27059
|
||||
# Adopted from https://github.com/Homebrew/homebrew-science/blob/master/metis.rb
|
||||
if spec.satisfies('%clang@7.3.0'):
|
||||
filter_file('#define MAX_JBUFS 128', '#define MAX_JBUFS 24', join_path(source_directory, 'GKlib', 'error.c'))
|
||||
|
||||
with working_dir(build_directory, create=True):
|
||||
cmake(source_directory, *options)
|
||||
make()
|
||||
make("install")
|
||||
# now run some tests:
|
||||
for f in ["4elt", "copter2", "mdual"]:
|
||||
graph = join_path(source_directory,'graphs','%s.graph' % f)
|
||||
Executable(join_path(prefix.bin,'graphchk'))(graph)
|
||||
Executable(join_path(prefix.bin,'gpmetis'))(graph,'2')
|
||||
Executable(join_path(prefix.bin,'ndmetis'))(graph)
|
||||
|
||||
graph = join_path(source_directory,'graphs','test.mgraph')
|
||||
Executable(join_path(prefix.bin,'gpmetis'))(graph,'2')
|
||||
graph = join_path(source_directory,'graphs','metis.mesh')
|
||||
Executable(join_path(prefix.bin,'mpmetis'))(graph,'2')
|
||||
|
||||
# install GKlib headers, which will be needed for ParMETIS
|
||||
GKlib_dist = join_path(prefix.include,'GKlib')
|
||||
|
@ -1,25 +0,0 @@
|
||||
from spack import *
|
||||
|
||||
class Modules(Package):
|
||||
""" The Environment Modules package provides for the dynamic modification of a user's environment via modulefiles. """
|
||||
|
||||
homepage = "http://modules.sf.net"
|
||||
url = "http://downloads.sourceforge.net/project/modules/Modules/modules-3.2.10/modules-3.2.10.tar.gz"
|
||||
|
||||
version('3.2.10', '8b097fdcb90c514d7540bb55a3cb90fb')
|
||||
|
||||
depends_on("tcl")
|
||||
|
||||
def install(self, spec, prefix):
|
||||
|
||||
options = ['--prefix=%s' % prefix,
|
||||
'--disable-debug',
|
||||
'--disable-dependency-tracking',
|
||||
'--disable-silent-rules',
|
||||
'--disable-versioning',
|
||||
'--datarootdir=%s' % prefix.share,
|
||||
'CPPFLAGS=-DUSE_INTERP_ERRORLINE']
|
||||
|
||||
configure(*options)
|
||||
make()
|
||||
make("install")
|
@ -1,5 +1,5 @@
|
||||
from spack import *
|
||||
import os, sys
|
||||
import os, sys, glob
|
||||
|
||||
class Mumps(Package):
|
||||
"""MUMPS: a MUltifrontal Massively Parallel sparse direct Solver"""
|
||||
@ -164,10 +164,13 @@ def install(self, spec, prefix):
|
||||
|
||||
install_tree('lib', prefix.lib)
|
||||
install_tree('include', prefix.include)
|
||||
if '~mpi' in spec:
|
||||
|
||||
if '~mpi' in spec:
|
||||
lib_dsuffix = '.dylib' if sys.platform == 'darwin' else '.so'
|
||||
lib_suffix = lib_dsuffix if '+shared' in spec else '.a'
|
||||
install('libseq/libmpiseq%s' % lib_suffix, prefix.lib)
|
||||
for f in glob.glob(join_path('libseq','*.h')):
|
||||
install(f, prefix.include)
|
||||
|
||||
# FIXME: extend the tests to mpirun -np 2 (or alike) when build with MPI
|
||||
# FIXME: use something like numdiff to compare blessed output with the current
|
||||
|
@ -10,10 +10,18 @@ class SuiteSparse(Package):
|
||||
|
||||
version('4.5.1', 'f0ea9aad8d2d1ffec66a5b6bfeff5319')
|
||||
|
||||
# FIXME: (see below)
|
||||
# variant('tbb', default=True, description='Build with Intel TBB')
|
||||
|
||||
depends_on('blas')
|
||||
depends_on('lapack')
|
||||
|
||||
depends_on('metis@5.1.0', when='@4.5.1')
|
||||
# FIXME:
|
||||
# in @4.5.1. TBB support in SPQR seems to be broken as TBB-related linkng flags
|
||||
# does not seem to be used, which leads to linking errors on Linux.
|
||||
# Try re-enabling in future versions.
|
||||
# depends_on('tbb', when='+tbb')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
# The build system of SuiteSparse is quite old-fashioned
|
||||
@ -21,16 +29,35 @@ def install(self, spec, prefix):
|
||||
# with a lot of convoluted logic in it.
|
||||
# Any kind of customization will need to go through filtering of that file
|
||||
|
||||
# FIXME : this actually uses the current workaround
|
||||
# FIXME : (blas / lapack always provide libblas and liblapack as aliases)
|
||||
make('install', 'INSTALL=%s' % prefix,
|
||||
make_args = ['INSTALL=%s' % prefix]
|
||||
|
||||
# inject Spack compiler wrappers
|
||||
# inject Spack compiler wrappers
|
||||
make_args.extend([
|
||||
'AUTOCC=no',
|
||||
'CC=cc',
|
||||
'CXX=c++',
|
||||
'F77=f77',
|
||||
])
|
||||
|
||||
# BLAS arguments require path to libraries
|
||||
'BLAS=-lblas',
|
||||
'LAPACK=-llapack')
|
||||
# use Spack's metis in CHOLMOD/Partition module,
|
||||
# otherwise internal Metis will be compiled
|
||||
make_args.extend([
|
||||
'MY_METIS_LIB=-L%s -lmetis' % spec['metis'].prefix.lib,
|
||||
'MY_METIS_INC=%s' % spec['metis'].prefix.include,
|
||||
])
|
||||
|
||||
# Intel TBB in SuiteSparseQR
|
||||
if '+tbb' in spec:
|
||||
make_args.extend([
|
||||
'SPQR_CONFIG=-DHAVE_TBB',
|
||||
'TBB=-L%s -ltbb' % spec['tbb'].prefix.lib,
|
||||
])
|
||||
|
||||
# BLAS arguments require path to libraries
|
||||
# FIXME : (blas / lapack always provide libblas and liblapack as aliases)
|
||||
make_args.extend([
|
||||
'BLAS=-lblas',
|
||||
'LAPACK=-llapack'
|
||||
])
|
||||
|
||||
make('install', *make_args)
|
||||
|
Loading…
Reference in New Issue
Block a user