extrae package: add 3.7.1, optionalise dyninst, papi (#11978)

* Convert to Autotools package
* dyninst and papi are now optional (off by default)
* limit dyninst version to < 10 (see
  https://github.com/bsc-performance-tools/extrae/issues/30)
* Add numactl dependency
* Enable parallel installs for 3.7 and later
* Set EXTRAE_HOME in module files and for dependent package installs
* Generalize cxx11 support flag (previously it was using a specific
  syntax and this updates it to use the cxx11 support flag for the
  compiler in use).
This commit is contained in:
Phil Tooley 2019-08-30 19:28:14 +01:00 committed by Peter Scheibel
parent 517846003f
commit f759eda3ae

View file

@ -24,7 +24,7 @@
# LDFLAGS=-pthread # LDFLAGS=-pthread
class Extrae(Package): class Extrae(AutotoolsPackage):
"""Extrae is the package devoted to generate tracefiles which can """Extrae is the package devoted to generate tracefiles which can
be analyzed later by Paraver. Extrae is a tool that uses be analyzed later by Paraver. Extrae is a tool that uses
different interposition mechanisms to inject probes into the different interposition mechanisms to inject probes into the
@ -35,54 +35,76 @@ class Extrae(Package):
OpenMP, CUDA, OpenCL, pthread, OmpSs""" OpenMP, CUDA, OpenCL, pthread, OmpSs"""
homepage = "https://tools.bsc.es/extrae" homepage = "https://tools.bsc.es/extrae"
url = "https://ftp.tools.bsc.es/extrae/extrae-3.4.1-src.tar.bz2" url = "https://ftp.tools.bsc.es/extrae/extrae-3.4.1-src.tar.bz2"
version('3.7.1', sha256='95810b057f95e91bfc89813eb8bd320dfe40614fc8e98c63d95c5101c56dd213')
version('3.4.1', '69001f5cfac46e445d61eeb567bc8844') version('3.4.1', '69001f5cfac46e445d61eeb567bc8844')
depends_on("autoconf", type='build')
depends_on("automake", type='build')
depends_on("libtool", type='build')
depends_on("m4", type='build')
depends_on("mpi") depends_on("mpi")
depends_on("dyninst")
depends_on("libunwind") depends_on("libunwind")
depends_on("boost") depends_on("boost")
depends_on("libdwarf") depends_on("libdwarf")
depends_on("papi") depends_on("papi")
depends_on("elf", type="link") depends_on("elf", type="link")
depends_on("libxml2") depends_on("libxml2")
depends_on("numactl")
depends_on("binutils+libiberty")
depends_on("gettext")
# gettext dependency added to find -lintl # gettext dependency added to find -lintl
# https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined # https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined
depends_on("gettext")
depends_on("binutils+libiberty")
def install(self, spec, prefix): build_directory = 'spack-build'
if 'openmpi' in spec:
mpi = spec['openmpi']
elif 'mpich' in spec:
mpi = spec['mpich']
elif 'mvapich2' in spec:
mpi = spec['mvapich2']
extra_config_args = [] variant('dyninst', default=False, description="Use dyninst for dynamic code installation")
depends_on('dyninst@:9', when='+dyninst')
variant('papi', default=True, description="Use PAPI to collect performance counters")
depends_on('papi', when='+papi')
def configure_args(self):
spec = self.spec
args = ["--with-mpi=%s" % spec['mpi'].prefix,
"--with-unwind=%s" % spec['libunwind'].prefix,
"--with-boost=%s" % spec['boost'].prefix,
"--with-dwarf=%s" % spec['libdwarf'].prefix,
"--with-elf=%s" % spec['elf'].prefix,
"--with-xml-prefix=%s" % spec['libxml2'].prefix,
"--with-binutils=%s" % spec['binutils'].prefix]
args += (["--with-papi=%s" % spec['papi'].prefix]
if '+papi' in self.spec else
["--without-papi"])
args += (["--with-dyninst=%s" % spec['dyninst'].prefix]
if '+dyninst' in self.spec else
["--without-dyninst"])
if spec.satisfies("^dyninst@9.3.0:"):
make.add_default_arg("CXXFLAGS=%s" % self.compiler.cxx11_flag)
args.append("CXXFLAGS=%s" % self.compiler.cxx11_flag)
# This was added due to configure failure # This was added due to configure failure
# https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined # https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined
extra_config_args.append('LDFLAGS=-lintl') args.append('LDFLAGS=-lintl')
if spec.satisfies("^dyninst@9.3.0:"): return(args)
make.add_default_arg('CXXFLAGS=-std=c++11')
extra_config_args.append('CXXFLAGS=-std=c++11')
configure("--prefix=%s" % prefix, def install(self, spec, prefix):
"--with-mpi=%s" % mpi.prefix, with working_dir(self.build_directory):
"--with-unwind=%s" % spec['libunwind'].prefix, # parallel installs are buggy prior to 3.7
"--with-dyninst=%s" % spec['dyninst'].prefix, # see https://github.com/bsc-performance-tools/extrae/issues/18
"--with-boost=%s" % spec['boost'].prefix, if(spec.satisfies('@3.7:')):
"--with-dwarf=%s" % spec['libdwarf'].prefix, make('install', parallel=True)
"--with-papi=%s" % spec['papi'].prefix, else:
"--with-dyninst-headers=%s" % spec[ make('install', parallel=False)
'dyninst'].prefix.include,
"--with-elf=%s" % spec['elf'].prefix,
"--with-xml-prefix=%s" % spec['libxml2'].prefix,
"--with-binutils=%s" % spec['binutils'].prefix,
"--with-dyninst-libs=%s" % spec['dyninst'].prefix.lib,
*extra_config_args)
make() def setup_environment(self, spack_env, run_env):
make("install", parallel=False) # set EXTRAE_HOME in the module file
run_env.set('EXTRAE_HOME', self.prefix)
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
# set EXTRAE_HOME for everyone using the Extrae package
spack_env.set('EXTRAE_HOME', self.prefix)