2019-01-01 14:04:23 +08:00
|
|
|
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
|
2018-10-08 04:52:23 +08:00
|
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
2016-05-12 12:22:25 +08:00
|
|
|
#
|
2018-10-08 04:52:23 +08:00
|
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
|
2014-06-21 08:15:32 +08:00
|
|
|
from spack import *
|
|
|
|
|
2015-01-13 03:38:32 +08:00
|
|
|
# typical working line with extrae 3.0.1
|
2016-08-10 16:50:00 +08:00
|
|
|
# ./configure
|
|
|
|
# --prefix=/usr/local
|
|
|
|
# --with-mpi=/usr/lib64/mpi/gcc/openmpi
|
|
|
|
# --with-unwind=/usr/local
|
|
|
|
# --with-papi=/usr
|
|
|
|
# --with-dwarf=/usr
|
|
|
|
# --with-elf=/usr
|
|
|
|
# --with-dyninst=/usr
|
|
|
|
# --with-binutils=/usr
|
|
|
|
# --with-xml-prefix=/usr
|
|
|
|
# --enable-openmp
|
|
|
|
# --enable-nanos
|
|
|
|
# --enable-pthread
|
|
|
|
# --disable-parallel-merge
|
|
|
|
#
|
|
|
|
# LDFLAGS=-pthread
|
|
|
|
|
2015-01-13 03:38:32 +08:00
|
|
|
|
2019-08-31 02:28:14 +08:00
|
|
|
class Extrae(AutotoolsPackage):
|
2014-08-01 05:09:38 +08:00
|
|
|
"""Extrae is the package devoted to generate tracefiles which can
|
|
|
|
be analyzed later by Paraver. Extrae is a tool that uses
|
|
|
|
different interposition mechanisms to inject probes into the
|
|
|
|
target application so as to gather information regarding the
|
|
|
|
application performance. The Extrae instrumentation package can
|
|
|
|
instrument the MPI programin model, and the following parallel
|
|
|
|
programming models either alone or in conjunction with MPI :
|
|
|
|
OpenMP, CUDA, OpenCL, pthread, OmpSs"""
|
2017-02-23 03:03:25 +08:00
|
|
|
homepage = "https://tools.bsc.es/extrae"
|
|
|
|
url = "https://ftp.tools.bsc.es/extrae/extrae-3.4.1-src.tar.bz2"
|
2019-08-31 02:28:14 +08:00
|
|
|
version('3.7.1', sha256='95810b057f95e91bfc89813eb8bd320dfe40614fc8e98c63d95c5101c56dd213')
|
2017-02-23 03:03:25 +08:00
|
|
|
version('3.4.1', '69001f5cfac46e445d61eeb567bc8844')
|
2014-06-21 08:15:32 +08:00
|
|
|
|
2019-08-31 02:28:14 +08:00
|
|
|
depends_on("autoconf", type='build')
|
|
|
|
depends_on("automake", type='build')
|
|
|
|
depends_on("libtool", type='build')
|
|
|
|
depends_on("m4", type='build')
|
|
|
|
|
2015-01-13 03:38:32 +08:00
|
|
|
depends_on("mpi")
|
2014-06-21 08:15:32 +08:00
|
|
|
depends_on("libunwind")
|
|
|
|
depends_on("boost")
|
|
|
|
depends_on("libdwarf")
|
|
|
|
depends_on("papi")
|
2017-03-10 02:36:32 +08:00
|
|
|
depends_on("elf", type="link")
|
2016-09-30 03:37:07 +08:00
|
|
|
depends_on("libxml2")
|
2019-08-31 02:28:14 +08:00
|
|
|
depends_on("numactl")
|
|
|
|
depends_on("binutils+libiberty")
|
|
|
|
depends_on("gettext")
|
2017-03-10 02:36:32 +08:00
|
|
|
# gettext dependency added to find -lintl
|
|
|
|
# https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined
|
2014-06-21 08:15:32 +08:00
|
|
|
|
2019-08-31 02:28:14 +08:00
|
|
|
build_directory = 'spack-build'
|
|
|
|
|
|
|
|
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')
|
2014-06-21 08:15:32 +08:00
|
|
|
|
2019-08-31 02:28:14 +08:00
|
|
|
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)
|
2017-03-10 02:36:32 +08:00
|
|
|
|
|
|
|
# This was added due to configure failure
|
|
|
|
# https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined
|
2019-08-31 02:28:14 +08:00
|
|
|
args.append('LDFLAGS=-lintl')
|
2017-03-10 02:36:32 +08:00
|
|
|
|
2019-08-31 02:28:14 +08:00
|
|
|
return(args)
|
|
|
|
|
|
|
|
def install(self, spec, prefix):
|
|
|
|
with working_dir(self.build_directory):
|
|
|
|
# parallel installs are buggy prior to 3.7
|
|
|
|
# see https://github.com/bsc-performance-tools/extrae/issues/18
|
|
|
|
if(spec.satisfies('@3.7:')):
|
|
|
|
make('install', parallel=True)
|
|
|
|
else:
|
|
|
|
make('install', parallel=False)
|
|
|
|
|
|
|
|
def setup_environment(self, spack_env, run_env):
|
|
|
|
# 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)
|