Merge branch 'develop' into packages/elpa

This commit is contained in:
alalazo 2016-01-21 08:33:59 +01:00
commit a8132470e4
8 changed files with 119 additions and 34 deletions

4
lib/spack/env/cc vendored
View File

@ -94,11 +94,11 @@ case "$command" in
command="$SPACK_CXX" command="$SPACK_CXX"
language="C++" language="C++"
;; ;;
f90|fc|f95|gfortran|ifort|pgf90|xlf90) f90|fc|f95|gfortran|ifort|pgf90|xlf90|nagfor)
command="$SPACK_FC" command="$SPACK_FC"
language="Fortran 90" language="Fortran 90"
;; ;;
f77|gfortran|ifort|pgf77|xlf) f77|gfortran|ifort|pgf77|xlf|nagfor)
command="$SPACK_F77" command="$SPACK_F77"
language="Fortran 77" language="Fortran 77"
;; ;;

1
lib/spack/env/nag/nagfor vendored Symbolic link
View File

@ -0,0 +1 @@
../cc

View File

@ -32,7 +32,7 @@
import spack import spack
import spack.cmd import spack.cmd
description="Print out locations of various diectories used by Spack" description="Print out locations of various directories used by Spack"
def setup_parser(subparser): def setup_parser(subparser):
global directories global directories

View File

@ -24,6 +24,7 @@
############################################################################## ##############################################################################
import os import os
import re import re
import subprocess
import itertools import itertools
from datetime import datetime from datetime import datetime
@ -51,7 +52,7 @@ def _verify_executables(*paths):
def get_compiler_version(compiler_path, version_arg, regex='(.*)'): def get_compiler_version(compiler_path, version_arg, regex='(.*)'):
if not compiler_path in _version_cache: if not compiler_path in _version_cache:
compiler = Executable(compiler_path) compiler = Executable(compiler_path)
output = compiler(version_arg, return_output=True, error=os.devnull) output = compiler(version_arg, return_output=True, error=subprocess.STDOUT)
match = re.search(regex, output) match = re.search(regex, output)
_version_cache[compiler_path] = match.group(1) if match else 'unknown' _version_cache[compiler_path] = match.group(1) if match else 'unknown'

View File

@ -51,7 +51,7 @@
if platform.system() == 'Darwin': if platform.system() == 'Darwin':
_default_order = ['clang', 'gcc', 'intel'] _default_order = ['clang', 'gcc', 'intel']
else: else:
_default_order = ['gcc', 'intel', 'pgi', 'clang', 'xlc'] _default_order = ['gcc', 'intel', 'pgi', 'clang', 'xlc', 'nag']
def _auto_compiler_spec(function): def _auto_compiler_spec(function):

View File

@ -0,0 +1,33 @@
from spack.compiler import *
class Nag(Compiler):
# Subclasses use possible names of C compiler
cc_names = []
# Subclasses use possible names of C++ compiler
cxx_names = []
# Subclasses use possible names of Fortran 77 compiler
f77_names = ['nagfor']
# Subclasses use possible names of Fortran 90 compiler
fc_names = ['nagfor']
# Named wrapper links within spack.build_env_path
link_paths = { # Use default wrappers for C and C++, in case provided in compilers.yaml
'cc' : 'cc',
'cxx' : 'cxx',
'f77' : 'nag/nagfor',
'fc' : 'nag/nagfor' }
@classmethod
def default_version(self, comp):
"""The '-V' option works for nag compilers.
Output looks like this::
NAG Fortran Compiler Release 6.0(Hibiya) Build 1037
Product NPL6A60NA for x86-64 Linux
Copyright 1990-2015 The Numerical Algorithms Group Ltd., Oxford, U.K.
"""
return get_compiler_version(
comp, '-V', r'NAG Fortran Compiler Release ([0-9.]+)')

View File

@ -1,5 +1,31 @@
##############################################################################
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (as published by
# the Free Software Foundation) version 2.1 dated February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import * from spack import *
class Hdf5(Package): class Hdf5(Package):
"""HDF5 is a data model, library, and file format for storing and managing """HDF5 is a data model, library, and file format for storing and managing
data. It supports an unlimited variety of datatypes, and is designed for data. It supports an unlimited variety of datatypes, and is designed for
@ -7,7 +33,7 @@ class Hdf5(Package):
""" """
homepage = "http://www.hdfgroup.org/HDF5/" homepage = "http://www.hdfgroup.org/HDF5/"
url = "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.13/src/hdf5-1.8.13.tar.gz" url = "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.13/src/hdf5-1.8.13.tar.gz"
list_url = "http://www.hdfgroup.org/ftp/HDF5/releases" list_url = "http://www.hdfgroup.org/ftp/HDF5/releases"
list_depth = 3 list_depth = 3
@ -15,26 +41,53 @@ class Hdf5(Package):
version('1.8.15', '03cccb5b33dbe975fdcd8ae9dc021f24') version('1.8.15', '03cccb5b33dbe975fdcd8ae9dc021f24')
version('1.8.13', 'c03426e9e77d7766944654280b467289') version('1.8.13', 'c03426e9e77d7766944654280b467289')
variant('debug', default=False, description='Builds a debug version of the library')
variant('cxx', default=True, description='Enable C++ support') variant('cxx', default=True, description='Enable C++ support')
variant('fortran', default=True, description='Enable Fortran support') variant('fortran', default=True, description='Enable Fortran support')
variant('unsupported', default=False, description='Enables unsupported configuration options')
variant('mpi', default=False, description='Enable MPI support') variant('mpi', default=False, description='Enable MPI support')
variant('threadsafe', default=False, description='Enable multithreading') variant('threadsafe', default=False, description='Enable thread-safe capabilities')
depends_on("mpi", when='+mpi') depends_on("mpi", when='+mpi')
depends_on("zlib") depends_on("zlib")
# TODO: currently hard-coded to use OpenMPI def validate(self, spec):
"""
Checks if incompatible variants have been activated at the same time
:param spec: spec of the package
:raises RuntimeError: in case of inconsistencies
"""
if '+fortran' in spec and not self.compiler.fc:
msg = 'cannot build a fortran variant without a fortran compiler'
raise RuntimeError(msg)
if '+threadsafe' in spec and ('+cxx' in spec or '+fortran' in spec):
raise RuntimeError("cannot use variant +threadsafe with either +cxx or +fortran")
def install(self, spec, prefix): def install(self, spec, prefix):
self.validate(spec)
# Handle compilation after spec validation
extra_args = [] extra_args = []
if '+debug' in spec:
extra_args.append('--enable-debug=all')
else:
extra_args.append('--enable-production')
if '+unsupported' in spec:
extra_args.append("--enable-unsupported")
if '+cxx' in spec: if '+cxx' in spec:
extra_args.extend([ extra_args.append('--enable-cxx')
'--enable-cxx'
])
if '+fortran' in spec: if '+fortran' in spec:
extra_args.extend([ extra_args.extend([
'--enable-fortran', '--enable-fortran',
'--enable-fortran2003' '--enable-fortran2003'
]) ])
if '+mpi' in spec: if '+mpi' in spec:
# The HDF5 configure script warns if cxx and mpi are enabled # The HDF5 configure script warns if cxx and mpi are enabled
# together. There doesn't seem to be a real reason for this, except # together. There doesn't seem to be a real reason for this, except
@ -43,27 +96,26 @@ def install(self, spec, prefix):
# this is not actually a problem. # this is not actually a problem.
extra_args.extend([ extra_args.extend([
"--enable-parallel", "--enable-parallel",
"--enable-unsupported",
"CC=%s" % spec['mpi'].prefix.bin + "/mpicc", "CC=%s" % spec['mpi'].prefix.bin + "/mpicc",
"CXX=%s" % spec['mpi'].prefix.bin + "/mpic++",
"FC=%s" % spec['mpi'].prefix.bin + "/mpifort",
]) ])
if '+threads' in spec:
if '+cxx' in spec or '+fortran' in spec: if '+cxx' in spec:
die("Cannot use variant +threads with either +cxx or +fortran") extra_args.append("CXX=%s" % spec['mpi'].prefix.bin + "/mpic++")
if '+fortran' in spec:
extra_args.append("FC=%s" % spec['mpi'].prefix.bin + "/mpifort")
if '+threadsafe' in spec:
extra_args.extend([ extra_args.extend([
'--enable-threadsafe', '--enable-threadsafe',
'--disable-hl', '--disable-hl',
'CPPFLAGS=-DHDatexit=""',
'CFLAGS=-DHDatexit=""'
]) ])
configure( configure(
"--prefix=%s" % prefix, "--prefix=%s" % prefix,
"--with-zlib=%s" % spec['zlib'].prefix, "--with-zlib=%s" % spec['zlib'].prefix,
"--enable-shared", "--enable-shared", # TODO : this should be enabled by default, remove it?
*extra_args) *extra_args)
make() make()
make("install") make("install")

View File

@ -19,43 +19,44 @@ class Openmpi(Package):
version('1.10.1', 'f0fcd77ed345b7eafb431968124ba16e') version('1.10.1', 'f0fcd77ed345b7eafb431968124ba16e')
version('1.10.0', '280cf952de68369cebaca886c5ce0304') version('1.10.0', '280cf952de68369cebaca886c5ce0304')
version('1.8.8', '0dab8e602372da1425e9242ae37faf8c') version('1.8.8', '0dab8e602372da1425e9242ae37faf8c')
version('1.6.5', '03aed2a4aa4d0b27196962a2a65fc475') version('1.6.5', '03aed2a4aa4d0b27196962a2a65fc475')
patch('ad_lustre_rwcontig_open_source.patch', when="@1.6.5") patch('ad_lustre_rwcontig_open_source.patch', when="@1.6.5")
patch('llnl-platforms.patch', when="@1.6.5") patch('llnl-platforms.patch', when="@1.6.5")
patch('configure.patch', when="@1.10.0:") patch('configure.patch', when="@1.10.0:")
variant('psm', default=False, description='Build support for the PSM library.') variant('psm', default=False, description='Build support for the PSM library.')
variant('verbs', default=False, description='Build support for OpenFabrics verbs.') variant('verbs', default=False, description='Build support for OpenFabrics verbs.')
# TODO : variant support for other schedulers is missing
variant('tm', default=False, description='Build TM (Torque, PBSPro, and compatible) support')
provides('mpi@:2.2', when='@1.6.5') provides('mpi@:2.2', when='@1.6.5')
provides('mpi@:3.0', when='@1.7.5:') provides('mpi@:3.0', when='@1.7.5:')
depends_on('hwloc') depends_on('hwloc')
def url_for_version(self, version): def url_for_version(self, version):
return "http://www.open-mpi.org/software/ompi/v%s/downloads/openmpi-%s.tar.bz2" % (version.up_to(2), version) return "http://www.open-mpi.org/software/ompi/v%s/downloads/openmpi-%s.tar.bz2" % (version.up_to(2), version)
def setup_dependent_environment(self, module, spec, dep_spec): def setup_dependent_environment(self, module, spec, dep_spec):
"""For dependencies, make mpicc's use spack wrapper.""" """For dependencies, make mpicc's use spack wrapper."""
os.environ['OMPI_CC'] = 'cc' os.environ['OMPI_CC'] = 'cc'
os.environ['OMPI_CXX'] = 'c++' os.environ['OMPI_CXX'] = 'c++'
os.environ['OMPI_FC'] = 'f90' os.environ['OMPI_FC'] = 'f90'
os.environ['OMPI_F77'] = 'f77' os.environ['OMPI_F77'] = 'f77'
def install(self, spec, prefix): def install(self, spec, prefix):
config_args = ["--prefix=%s" % prefix, config_args = ["--prefix=%s" % prefix,
"--with-hwloc=%s" % spec['hwloc'].prefix, "--with-hwloc=%s" % spec['hwloc'].prefix,
"--with-tm", # necessary for Torque support
"--enable-shared", "--enable-shared",
"--enable-static"] "--enable-static"]
# Variants # Variants
if '+tm' in spec:
config_args.append("--with-tm") # necessary for Torque support
if '+psm' in spec: if '+psm' in spec:
config_args.append("--with-psm") config_args.append("--with-psm")
@ -85,7 +86,6 @@ def install(self, spec, prefix):
self.filter_compilers() self.filter_compilers()
def filter_compilers(self): def filter_compilers(self):
"""Run after install to make the MPI compilers use the """Run after install to make the MPI compilers use the
compilers that Spack built the package with. compilers that Spack built the package with.
@ -94,7 +94,7 @@ def filter_compilers(self):
to Spack's generic cc, c++ and f90. We want them to to Spack's generic cc, c++ and f90. We want them to
be bound to whatever compiler they were built with. be bound to whatever compiler they were built with.
""" """
kwargs = { 'ignore_absent' : True, 'backup' : False, 'string' : False } kwargs = {'ignore_absent': True, 'backup': False, 'string': False}
dir = os.path.join(self.prefix, 'share/openmpi/') dir = os.path.join(self.prefix, 'share/openmpi/')
cc_wrappers = ['mpicc-vt-wrapper-data.txt', 'mpicc-wrapper-data.txt', cc_wrappers = ['mpicc-vt-wrapper-data.txt', 'mpicc-wrapper-data.txt',
@ -132,5 +132,3 @@ def filter_compilers(self):
if not os.path.islink(path): if not os.path.islink(path):
filter_file('compiler=.*', 'compiler=%s' % self.compiler.fc, filter_file('compiler=.*', 'compiler=%s' % self.compiler.fc,
path, **kwargs) path, **kwargs)