diff options
Diffstat (limited to 'var')
-rw-r--r-- | var/spack/repos/builtin/packages/superlu/package.py | 77 |
1 files changed, 74 insertions, 3 deletions
diff --git a/var/spack/repos/builtin/packages/superlu/package.py b/var/spack/repos/builtin/packages/superlu/package.py index d9cff650b6..8e23a2a14e 100644 --- a/var/spack/repos/builtin/packages/superlu/package.py +++ b/var/spack/repos/builtin/packages/superlu/package.py @@ -23,6 +23,8 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## from spack import * +import glob +import os class Superlu(Package): @@ -34,21 +36,90 @@ class Superlu(Package): url = "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_5.2.1.tar.gz" version('5.2.1', '3a1a9bff20cb06b7d97c46d337504447') + version('4.3', 'b72c6309f25e9660133007b82621ba7c') + variant('fpic', default=False, + description='Build with position independent code') + + depends_on('cmake', when='@5.2.1:', type='build') depends_on('blas') + # CMake installation method + @when('@5.2.1:') def install(self, spec, prefix): cmake_args = [ - '-DCMAKE_POSITION_INDEPENDENT_CODE=ON', - # BLAS support '-Denable_blaslib=OFF', '-DBLAS_blas_LIBRARY={0}'.format(spec['blas'].blas_libs.joined()) ] + if '+fpic' in spec: + cmake_args.extend([ + '-DCMAKE_POSITION_INDEPENDENT_CODE=ON' + ]) + cmake_args.extend(std_cmake_args) with working_dir('spack-build', create=True): cmake('..', *cmake_args) - make() make('install') + + # Pre-cmake installation method + @when('@4.3') + def install(self, spec, prefix): + config = [] + + # Define make.inc file + config.extend([ + 'PLAT = _x86_64', + 'SuperLUroot = %s' % self.stage.source_path, + # 'SUPERLULIB = $(SuperLUroot)/lib/libsuperlu$(PLAT).a', + 'SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_{0}.a' \ + .format(self.spec.version), + 'BLASDEF = -DUSE_VENDOR_BLAS', + 'BLASLIB = {0}'.format(spec['blas'].blas_libs.ld_flags), + # or BLASLIB = -L/usr/lib64 -lblas + 'TMGLIB = libtmglib.a', + 'LIBS = $(SUPERLULIB) $(BLASLIB)', + 'ARCH = ar', + 'ARCHFLAGS = cr', + 'RANLIB = {0}'.format('ranlib' if which('ranlib') else 'echo'), + 'CC = {0}'.format(os.environ['CC']), + 'FORTRAN = {0}'.format(os.environ['FC']), + 'LOADER = {0}'.format(os.environ['CC']), + 'CDEFS = -DAdd_' + ]) + + if '+fpic' in spec: + config.extend([ + # Use these lines instead when pic_flag capability arrives + # 'CFLAGS = -O3 {0}'.format(self.compiler.pic_flag), + # 'NOOPTS = {0}'.format(self.compiler.pic_flag), + # 'FFLAGS = -O2 {0}'.format(self.compiler.pic_flag), + # 'LOADOPTS = {0}'.format(self.compiler.pic_flag) + 'CFLAGS = -O3 -fPIC', + 'NOOPTS = -fPIC', + 'FFLAGS = -O2 -fPIC', + 'LOADOPTS = -fPIC' + ]) + else: + config.extend([ + 'CFLAGS = -O3', + 'NOOPTS = ', + 'FFLAGS = -O2', + 'LOADOPTS = ' + ]) + + # Write configuration options to make.inc file + with open('make.inc', 'w') as inc: + for option in config: + inc.write('{0}\n'.format(option)) + + make(parallel=False) + + # Install manually + install_tree('lib', prefix.lib) + headers = glob.glob(join_path('SRC', '*.h')) + mkdir(prefix.include) + for h in headers: + install(h, prefix.include) |