summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/spack/cmd/create.py20
-rw-r--r--var/spack/repos/builtin/packages/elk/package.py80
-rw-r--r--var/spack/repos/builtin/packages/openblas/package.py12
3 files changed, 64 insertions, 48 deletions
diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py
index 7071af2686..41bfa741f6 100644
--- a/lib/spack/spack/cmd/create.py
+++ b/lib/spack/spack/cmd/create.py
@@ -1,3 +1,4 @@
+_copyright = """\
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
@@ -22,6 +23,7 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+"""
import string
import os
import hashlib
@@ -47,22 +49,22 @@ from spack.stage import Stage
description = "Create a new package file from an archive URL"
-package_template = string.Template("""\
-# FIXME:
-# This is a template package file for Spack. We've conveniently
-# put "FIXME" labels next to all the things you'll want to change.
+package_template = string.Template(
+ _copyright + """
#
-# Once you've edited all the FIXME's, delete this whole message,
-# save this file, and test out your package like this:
+# This is a template package file for Spack. We've put "FIXME"
+# next to all the things you'll want to change. Once you've handled
+# them, you can save this file and test your package like this:
#
# spack install ${name}
#
-# You can always get back here to change things with:
+# You can edit this file again by typing:
#
# spack edit ${name}
#
-# See the spack documentation for more information on building
-# packages.
+# See the Spack documentation for more information on packaging.
+# If you submit this package back to Spack as a pull request,
+# please first remove this boilerplate and all FIXME comments.
#
from spack import *
diff --git a/var/spack/repos/builtin/packages/elk/package.py b/var/spack/repos/builtin/packages/elk/package.py
index 9367dfdd78..b089e585dd 100644
--- a/var/spack/repos/builtin/packages/elk/package.py
+++ b/var/spack/repos/builtin/packages/elk/package.py
@@ -22,8 +22,9 @@
# 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 *
import spack
+from spack import *
+
class Elk(Package):
'''An all-electron full-potential linearised augmented-plane wave
@@ -35,79 +36,90 @@ class Elk(Package):
version('3.3.17', 'f57f6230d14f3b3b558e5c71f62f0592')
# Elk provides these libraries, but allows you to specify your own
- variant('blas', default=True, description='Build with custom BLAS library')
- variant('lapack', default=True, description='Build with custom LAPACK library')
- variant('fft', default=True, description='Build with custom FFT library')
+ variant('blas', default=True,
+ description='Build with custom BLAS library')
+ variant('lapack', default=True,
+ description='Build with custom LAPACK library')
+ variant('fft', default=True,
+ description='Build with custom FFT library')
# Elk does not provide these libraries, but allows you to use them
- variant('mpi', default=True, description='Enable MPI parallelism')
- variant('openmp', default=True, description='Enable OpenMP support')
- variant('libxc', default=True, description='Link to Libxc functional library')
+ variant('mpi', default=True,
+ description='Enable MPI parallelism')
+ variant('openmp', default=True,
+ description='Enable OpenMP support')
+ variant('libxc', default=True,
+ description='Link to Libxc functional library')
depends_on('blas', when='+blas')
depends_on('lapack', when='+lapack')
depends_on('fftw', when='+fft')
- depends_on('mpi', when='+mpi')
+ depends_on('mpi@2:', when='+mpi')
depends_on('libxc', when='+libxc')
# Cannot be built in parallel
parallel = False
-
def configure(self, spec):
# Dictionary of configuration options
config = {
- 'MAKE': 'make',
- 'F90': join_path(spack.build_env_path, 'f90'),
- 'F77': join_path(spack.build_env_path, 'f77'),
- 'AR': 'ar',
- 'LIB_FFT': 'fftlib.a',
- 'SRC_MPI': 'mpi_stub.f90',
- 'SRC_OMP': 'omp_stub.f90',
- 'SRC_libxc': 'libxcifc_stub.f90',
- 'SRC_FFT': 'zfftifc.f90'
+ 'MAKE': 'make',
+ 'AR': 'ar'
}
# Compiler-specific flags
flags = ''
- if self.compiler.name == 'intel':
- flags = '-O3 -ip -unroll -no-prec-div -openmp'
+ if self.compiler.name == 'intel':
+ flags = '-O3 -ip -unroll -no-prec-div'
elif self.compiler.name == 'gcc':
- flags = '-O3 -ffast-math -funroll-loops -fopenmp'
+ flags = '-O3 -ffast-math -funroll-loops'
elif self.compiler.name == 'pgi':
- flags = '-O3 -mp -lpthread'
+ flags = '-O3 -lpthread'
elif self.compiler.name == 'g95':
flags = '-O3 -fno-second-underscore'
elif self.compiler.name == 'nag':
flags = '-O4 -kind=byte -dusty -dcfuns'
elif self.compiler.name == 'xl':
- flags = '-O3 -qsmp=omp'
+ flags = '-O3'
config['F90_OPTS'] = flags
config['F77_OPTS'] = flags
# BLAS/LAPACK support
+ # Note: BLAS/LAPACK must be compiled with OpenMP support
+ # if the +openmp variant is chosen
blas = 'blas.a'
lapack = 'lapack.a'
- if '+blas' in spec:
- blas = join_path(spec['blas'].prefix.lib, 'libblas.so')
+ if '+blas' in spec:
+ blas = spec['blas'].blas_shared_lib
if '+lapack' in spec:
- lapack = join_path(spec['lapack'].prefix.lib, 'liblapack.so')
- config['LIB_LPK'] = ' '.join([lapack, blas]) # lapack must come before blas
+ lapack = spec['lapack'].lapack_shared_lib
+ # lapack must come before blas
+ config['LIB_LPK'] = ' '.join([lapack, blas])
# FFT support
if '+fft' in spec:
- config['LIB_FFT'] = join_path(spec['fftw'].prefix.lib, 'libfftw3.so')
+ config['LIB_FFT'] = join_path(spec['fftw'].prefix.lib,
+ 'libfftw3.so')
config['SRC_FFT'] = 'zfftifc_fftw.f90'
+ else:
+ config['LIB_FFT'] = 'fftlib.a'
+ config['SRC_FFT'] = 'zfftifc.f90'
# MPI support
if '+mpi' in spec:
- config.pop('SRC_MPI')
- config['F90'] = join_path(spec['mpi'].prefix.bin, 'mpif90')
- config['F77'] = join_path(spec['mpi'].prefix.bin, 'mpif77')
+ config['F90'] = spec['mpi'].mpifc
+ config['F77'] = spec['mpi'].mpif77
+ else:
+ config['F90'] = join_path(spack.build_env_path, 'f90')
+ config['F77'] = join_path(spack.build_env_path, 'f77')
+ config['SRC_MPI'] = 'mpi_stub.f90'
# OpenMP support
if '+openmp' in spec:
- config.pop('SRC_OMP')
+ config['F90_OPTS'] += ' ' + self.compiler.openmp_flag
+ config['F77_OPTS'] += ' ' + self.compiler.openmp_flag
+ else:
+ config['SRC_OMP'] = 'omp_stub.f90'
# Libxc support
if '+libxc' in spec:
@@ -120,13 +132,14 @@ class Elk(Package):
'libxc.f90',
'libxcifc.f90'
])
+ else:
+ config['SRC_libxc'] = 'libxcifc_stub.f90'
# Write configuration options to include file
with open('make.inc', 'w') as inc:
for key in config:
inc.write('{0} = {1}\n'.format(key, config[key]))
-
def install(self, spec, prefix):
# Elk only provides an interactive setup script
self.configure(spec)
@@ -143,4 +156,3 @@ class Elk(Package):
install_tree('examples', join_path(prefix, 'examples'))
install_tree('species', join_path(prefix, 'species'))
-
diff --git a/var/spack/repos/builtin/packages/openblas/package.py b/var/spack/repos/builtin/packages/openblas/package.py
index ebfec4bded..22e49daaa7 100644
--- a/var/spack/repos/builtin/packages/openblas/package.py
+++ b/var/spack/repos/builtin/packages/openblas/package.py
@@ -48,11 +48,13 @@ class Openblas(Package):
patch('make.patch')
def install(self, spec, prefix):
- # Openblas is picky about compilers. Configure fails with
- # FC=/abs/path/to/f77, whereas FC=f77 works fine.
- # To circumvent this, provide basename only:
- make_defs = ['CC=%s' % os.path.basename(spack_cc),
- 'FC=%s' % os.path.basename(spack_f77),
+ # Configure fails to pick up fortran from FC=/abs/path/to/f77, but
+ # works fine with FC=/abs/path/to/gfortran.
+ # When mixing compilers make sure that
+ # $SPACK_ROOT/lib/spack/env/<compiler> have symlinks with reasonable
+ # names and hack them inside lib/spack/spack/compilers/<compiler>.py
+ make_defs = ['CC=%s' % spack_cc,
+ 'FC=%s' % spack_f77,
'MAKE_NO_J=1']
make_targets = ['libs', 'netlib']