Merge branch 'develop' into mplegendre-multi_pkgsrc_roots
Conflicts: lib/spack/spack/cmd/create.py lib/spack/spack/cmd/extensions.py lib/spack/spack/cmd/fetch.py lib/spack/spack/cmd/uninstall.py lib/spack/spack/config.py lib/spack/spack/database.py lib/spack/spack/directory_layout.py lib/spack/spack/packages.py lib/spack/spack/spec.py
This commit is contained in:
@@ -1,32 +1,135 @@
|
||||
##############################################################################
|
||||
# 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 *
|
||||
|
||||
import os
|
||||
import os.path
|
||||
|
||||
from llnl.util.filesystem import join_path
|
||||
|
||||
class Tau(Package):
|
||||
"""A portable profiling and tracing toolkit for performance
|
||||
analysis of parallel programs written in Fortran, C, C++, UPC,
|
||||
Java, Python."""
|
||||
"""
|
||||
A portable profiling and tracing toolkit for performance
|
||||
analysis of parallel programs written in Fortran, C, C++, UPC,
|
||||
Java, Python.
|
||||
"""
|
||||
homepage = "http://www.cs.uoregon.edu/research/tau"
|
||||
url = "http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/tau-2.23.1.tar.gz"
|
||||
url = "https://www.cs.uoregon.edu/research/tau/tau_releases/tau-2.25.tar.gz"
|
||||
|
||||
version('2.25', '46cd48fa3f3c4ce0197017b3158a2b43')
|
||||
version('2.24.1', '6635ece6d1f08215b02f5d0b3c1e971b')
|
||||
version('2.24', '57ce33539c187f2e5ec68f0367c76db4')
|
||||
version('2.23.1', '6593b47ae1e7a838e632652f0426fe72')
|
||||
|
||||
# TODO : shmem variant missing
|
||||
variant('download', default=False, description='Downloads and builds various dependencies')
|
||||
variant('scorep', default=False, description='Activates SCOREP support')
|
||||
variant('openmp', default=True, description='Use OpenMP threads')
|
||||
variant('mpi', default=True, description='Specify use of TAU MPI wrapper library')
|
||||
variant('phase', default=True, description='Generate phase based profiles')
|
||||
variant('comm', default=True, description=' Generate profiles with MPI communicator info')
|
||||
|
||||
# TODO : Try to build direct OTF2 support? Some parts of the OTF support library in TAU are non-conformant,
|
||||
# TODO : and fail at compile-time. Further, SCOREP is compiled with OTF2 support.
|
||||
depends_on('pdt') # Required for TAU instrumentation
|
||||
depends_on('scorep', when='+scorep')
|
||||
depends_on('binutils', when='~download')
|
||||
depends_on('mpi', when='+mpi')
|
||||
|
||||
def set_compiler_options(self):
|
||||
|
||||
useropt = ["-O2", self.rpath_args]
|
||||
|
||||
##########
|
||||
# Selecting a compiler with TAU configure is quite tricky:
|
||||
# 1 - compilers are mapped to a given set of strings (and spack cc, cxx, etc. wrappers are not among them)
|
||||
# 2 - absolute paths are not allowed
|
||||
# 3 - the usual environment variables seems not to be checked ('CC', 'CXX' and 'FC')
|
||||
# 4 - if no -cc=<compiler> -cxx=<compiler> is passed tau is built with system compiler silently
|
||||
# (regardless of what %<compiler> is used in the spec)
|
||||
#
|
||||
# In the following we give TAU what he expects and put compilers into PATH
|
||||
compiler_path = os.path.dirname(self.compiler.cc)
|
||||
os.environ['PATH'] = ':'.join([compiler_path, os.environ['PATH']])
|
||||
compiler_options = ['-c++=%s' % self.compiler.cxx_names[0],
|
||||
'-cc=%s' % self.compiler.cc_names[0]]
|
||||
if self.compiler.fc:
|
||||
compiler_options.append('-fortran=%s' % self.compiler.fc_names[0])
|
||||
##########
|
||||
|
||||
# Construct the string of custom compiler flags and append it to compiler related options
|
||||
useropt = ' '.join(useropt)
|
||||
useropt = "-useropt=%s" % useropt
|
||||
compiler_options.append(useropt)
|
||||
return compiler_options
|
||||
|
||||
def install(self, spec, prefix):
|
||||
# TAU isn't happy with directories that have '@' in the path. Sigh.
|
||||
change_sed_delimiter('@', ';', 'configure')
|
||||
change_sed_delimiter('@', ';', 'utils/FixMakefile')
|
||||
change_sed_delimiter('@', ';', 'utils/FixMakefile.sed.default')
|
||||
|
||||
# After that, it's relatively standard.
|
||||
configure("-prefix=%s" % prefix)
|
||||
# TAU configure, despite the name , seems to be a manually written script (nothing related to autotools).
|
||||
# As such it has a few #peculiarities# that make this build quite hackish.
|
||||
options = ["-prefix=%s" % prefix,
|
||||
"-iowrapper",
|
||||
"-pdt=%s" % spec['pdt'].prefix]
|
||||
# If download is active, download and build suggested dependencies
|
||||
if '+download' in spec:
|
||||
options.extend(['-bfd=download',
|
||||
'-unwind=download',
|
||||
'-asmdex=download'])
|
||||
else:
|
||||
options.extend(["-bfd=%s" % spec['binutils'].prefix])
|
||||
# TODO : unwind and asmdex are still missing
|
||||
|
||||
if '+scorep' in spec:
|
||||
options.append("-scorep=%s" % spec['scorep'].prefix)
|
||||
|
||||
if '+openmp' in spec:
|
||||
options.append('-openmp')
|
||||
|
||||
if '+mpi' in spec:
|
||||
options.append('-mpi')
|
||||
|
||||
if '+phase' in spec:
|
||||
options.append('-PROFILEPHASE')
|
||||
|
||||
if '+comm' in spec:
|
||||
options.append('-PROFILECOMMUNICATORS')
|
||||
|
||||
compiler_specific_options = self.set_compiler_options()
|
||||
options.extend(compiler_specific_options)
|
||||
configure(*options)
|
||||
make("install")
|
||||
|
||||
# Link arch-specific directories into prefix since there is
|
||||
# only one arch per prefix the way spack installs.
|
||||
self.link_tau_arch_dirs()
|
||||
|
||||
|
||||
def link_tau_arch_dirs(self):
|
||||
for subdir in os.listdir(self.prefix):
|
||||
for d in ('bin', 'lib'):
|
||||
|
Reference in New Issue
Block a user