scalasca + dependencies : simplified build after #255

This commit is contained in:
alalazo 2015-12-21 16:10:55 +01:00
parent 0a191d6b09
commit a411c497ab
5 changed files with 106 additions and 159 deletions

View File

@ -1,13 +1,39 @@
# FIXME: Add copyright statement ##############################################################################
# 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 * from spack import *
from contextlib import closing
class Cube(Package): class Cube(Package):
"""Cube the profile viewer for Score-P and Scalasca profiles. It """
displays a multi-dimensional performance space consisting Cube the profile viewer for Score-P and Scalasca profiles. It displays a multi-dimensional performance space
of the dimensions (i) performance metric, (ii) call path, consisting of the dimensions:
and (iii) system resource.""" - performance metric
- call path
- system resource
"""
homepage = "http://www.scalasca.org/software/cube-4.x/download.html" homepage = "http://www.scalasca.org/software/cube-4.x/download.html"
url = "http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz" url = "http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz"
@ -15,44 +41,15 @@ class Cube(Package):
version('4.3.3', '07e109248ed8ffc7bdcce614264a2909', version('4.3.3', '07e109248ed8ffc7bdcce614264a2909',
url='http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3.3.tar.gz') url='http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3.3.tar.gz')
version('4.2.3', '8f95b9531f5a8f8134f279c2767c9b20') version('4.2.3', '8f95b9531f5a8f8134f279c2767c9b20',
url="http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz")
version('4.3TP1', 'a2090fbc7b2ba394bd5c09ba971e237f', # TODO : add variant that builds GUI on top of Qt
url = 'http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3-TP1.tar.gz')
# Using CC as C++ compiler provides quirky workaround for a Score-P build system attempt
# to guess a matching C compiler when configuring scorep-score
backend_user_provided = """\
CC=cc
CXX=CC
F77=f77
FC=f90
#CFLAGS=-fPIC
#CXXFLAGS=-fPIC
"""
frontend_user_provided = """\
CC_FOR_BUILD=cc
CXX_FOR_BUILD=CC
F77_FOR_BUILD=f70
FC_FOR_BUILD=f90
"""
def install(self, spec, prefix): def install(self, spec, prefix):
# Use a custom compiler configuration, otherwise the score-p
# build system messes with spack's compiler settings.
# Create these three files in the build directory
with closing(open("vendor/common/build-config/platforms/platform-backend-user-provided", "w")) as backend_file:
backend_file.write(self.backend_user_provided)
with closing(open("vendor/common/build-config/platforms/platform-frontend-user-provided", "w")) as frontend_file:
frontend_file.write(self.frontend_user_provided)
configure_args = ["--prefix=%s" % prefix, configure_args = ["--prefix=%s" % prefix,
"--with-custom-compilers",
"--without-paraver", "--without-paraver",
"--without-gui"] "--without-gui"]
configure(*configure_args) configure(*configure_args)
make(parallel=False) make(parallel=False)
make("install", parallel=False) make("install", parallel=False)

View File

@ -1,18 +1,38 @@
# FIXME: Add copyright statement here ##############################################################################
# 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 * from spack import *
from contextlib import closing
class Opari2(Package): class Opari2(Package):
"""OPARI2 is a source-to-source instrumentation tool for OpenMP and """
hybrid codes. It surrounds OpenMP directives and runtime library OPARI2 is a source-to-source instrumentation tool for OpenMP and hybrid codes. It surrounds OpenMP directives and
calls with calls to the POMP2 measurement interface. runtime library calls with calls to the POMP2 measurement interface. OPARI2 will provide you with a new
OPARI2 will provide you with a new initialization method that allows initialization method that allows for multi-directory and parallel builds as well as the usage of pre-instrumented
for multi-directory and parallel builds as well as the usage of libraries. Furthermore, an efficient way of tracking parent-child relationships was added. Additionally, we extended
pre-instrumented libraries. Furthermore, an efficient way of OPARI2 to support instrumentation of OpenMP 3.0 tied tasks.
tracking parent-child relationships was added. Additionally, we """
extended OPARI2 to support instrumentation of OpenMP 3.0
tied tasks. """
homepage = "http://www.vi-hps.org/projects/score-p" homepage = "http://www.vi-hps.org/projects/score-p"
url = "http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.2.tar.gz" url = "http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.2.tar.gz"
@ -21,47 +41,8 @@ class Opari2(Package):
url='http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.4.tar.gz') url='http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.4.tar.gz')
version('1.1.2', '9a262c7ca05ff0ab5f7775ae96f3539e') version('1.1.2', '9a262c7ca05ff0ab5f7775ae96f3539e')
backend_user_provided = """\
CC=cc
CXX=c++
F77=f77
FC=f90
CFLAGS=-fPIC
CXXFLAGS=-fPIC
"""
frontend_user_provided = """\
CC_FOR_BUILD=cc
CXX_FOR_BUILD=c++
F77_FOR_BUILD=f70
FC_FOR_BUILD=f90
CFLAGS_FOR_BUILD=-fPIC
CXXFLAGS_FOR_BUILD=-fPIC
"""
mpi_user_provided = """\
MPICC=mpicc
MPICXX=mpicxx
MPIF77=mpif77
MPIFC=mpif90
MPI_CFLAGS=-fPIC
MPI_CXXFLAGS=-fPIC
"""
def install(self, spec, prefix): def install(self, spec, prefix):
# Use a custom compiler configuration, otherwise the score-p
# build system messes with spack's compiler settings.
# Create these three files in the build directory
with closing(open("platform-backend-user-provided", "w")) as backend_file:
backend_file.write(self.backend_user_provided)
with closing(open("platform-frontend-user-provided", "w")) as frontend_file:
frontend_file.write(self.frontend_user_provided)
with closing(open("platform-mpi-user-provided", "w")) as mpi_file:
mpi_file.write(self.mpi_user_provided)
# FIXME: Modify the configure line to suit your build system here.
configure("--prefix=%s" % prefix, configure("--prefix=%s" % prefix,
"--with-custom-compilers",
"--enable-shared") "--enable-shared")
# FIXME: Add logic to build and install here
make() make()
make("install") make("install")

View File

@ -1,12 +1,35 @@
# FIXME: Add copyright ##############################################################################
# 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 * from spack import *
from contextlib import closing
import os
class Otf2(Package): class Otf2(Package):
"""The Open Trace Format 2 is a highly scalable, memory efficient event """
trace data format plus support library.""" The Open Trace Format 2 is a highly scalable, memory efficient event trace data format plus support library.
"""
homepage = "http://www.vi-hps.org/score-p" homepage = "http://www.vi-hps.org/score-p"
url = "http://www.vi-hps.org/upload/packages/otf2/otf2-1.4.tar.gz" url = "http://www.vi-hps.org/upload/packages/otf2/otf2-1.4.tar.gz"
@ -22,57 +45,11 @@ class Otf2(Package):
version('1.2.1', '8fb3e11fb7489896596ae2c7c83d7fc8', version('1.2.1', '8fb3e11fb7489896596ae2c7c83d7fc8',
url="http://www.vi-hps.org/upload/packages/otf2/otf2-1.2.1.tar.gz") url="http://www.vi-hps.org/upload/packages/otf2/otf2-1.2.1.tar.gz")
backend_user_provided = """\
CC=cc
CXX=c++
F77=f77
FC=f90
CFLAGS=-fPIC
CXXFLAGS=-fPIC
"""
frontend_user_provided = """\
CC_FOR_BUILD=cc
CXX_FOR_BUILD=c++
F77_FOR_BUILD=f70
FC_FOR_BUILD=f90
CFLAGS_FOR_BUILD=-fPIC
CXXFLAGS_FOR_BUILD=-fPIC
"""
mpi_user_provided = """\
MPICC=cc
MPICXX=c++
MPIF77=f77
MPIFC=f90
MPI_CFLAGS=-fPIC
MPI_CXXFLAGS=-fPIC
"""
@when('@:1.2.1')
def version_specific_args(self):
return ["--with-platform=disabled", "CC=cc", "CXX=c++", "F77=f77", "F90=f90", "CFLAGS=-fPIC", "CXXFLAGS=-fPIC"]
@when('@1.3:')
def version_specific_args(self):
# TODO: figure out what scorep's build does as of otf2 1.3
return ["--with-custom-compilers"]
def install(self, spec, prefix): def install(self, spec, prefix):
# Use a custom compiler configuration, otherwise the score-p
# build system messes with spack's compiler settings.
# Create these three files in the build directory
with closing(open("platform-backend-user-provided", "w")) as backend_file:
backend_file.write(self.backend_user_provided)
with closing(open("platform-frontend-user-provided", "w")) as frontend_file:
frontend_file.write(self.frontend_user_provided)
with closing(open("platform-mpi-user-provided", "w")) as mpi_file:
mpi_file.write(self.mpi_user_provided)
configure_args=["--prefix=%s" % prefix, configure_args=["--prefix=%s" % prefix,
"--enable-shared"] "--enable-shared",
"CFLAGS=-fPIC",
configure_args.extend(self.version_specific_args()) "CXXFLAGS=-fPIC"]
configure(*configure_args) configure(*configure_args)
make() make()
make("install") make("install")

View File

@ -44,7 +44,7 @@ class Scalasca(Package):
depends_on("mpi") depends_on("mpi")
########## ##########
# Fix dependencies for Scalasca according to what stated in the release page # Hard-code dependencies for Scalasca according to what stated in the release page
# The OTF2 library path should be detected automatically from SCOREP # The OTF2 library path should be detected automatically from SCOREP
# SCALASCA 2.2.2 # SCALASCA 2.2.2
depends_on("scorep@1.4:", when='@2.2.2') depends_on("scorep@1.4:", when='@2.2.2')

View File

@ -28,9 +28,9 @@
class Scorep(Package): class Scorep(Package):
""" """
The Score-P measurement infrastructure is a highly scalable and The Score-P measurement infrastructure is a highly scalable and easy-to-use tool suite for profiling, event
easy-to-use tool suite for profiling, event tracing, and online tracing, and online analysis of HPC applications.
analysis of HPC applications.""" """
homepage = "http://www.vi-hps.org/projects/score-p" homepage = "http://www.vi-hps.org/projects/score-p"
url = "http://www.vi-hps.org/upload/packages/scorep/scorep-1.2.3.tar.gz" url = "http://www.vi-hps.org/upload/packages/scorep/scorep-1.2.3.tar.gz"
@ -55,15 +55,6 @@ class Scorep(Package):
depends_on("mpi") depends_on("mpi")
depends_on("papi") depends_on("papi")
def get_compiler_config_line(self):
backend_user_provided = ['CC=%s' % self.compiler.cc_names[0],
'CXX=%s' % self.compiler.cxx_names[0],
'F77=%s' % self.compiler.f77_names[0] if len(self.compiler.f77_names) else "",
'FC=%s' % self.compiler.fc_names[0] if len(self.compiler.fc_names) else "",
'CFLAGS=-fPIC %s' % self.rpath_args,
'CXXFLAGS=-fPIC %s'% self.rpath_args]
return backend_user_provided
def install(self, spec, prefix): def install(self, spec, prefix):
configure = Executable( join_path(self.stage.source_path, 'configure') ) configure = Executable( join_path(self.stage.source_path, 'configure') )
with working_dir('spack-build', create=True): with working_dir('spack-build', create=True):
@ -73,8 +64,9 @@ def install(self, spec, prefix):
"--with-cube=%s" % spec['cube'].prefix.bin, "--with-cube=%s" % spec['cube'].prefix.bin,
"--with-papi-header=%s" % spec['papi'].prefix.include, "--with-papi-header=%s" % spec['papi'].prefix.include,
"--with-papi-lib=%s" % spec['papi'].prefix.lib, "--with-papi-lib=%s" % spec['papi'].prefix.lib,
"--enable-shared"] "--enable-shared",
configure_args.extend(self.get_compiler_config_line()) "CFLAGS=-fPIC",
"CXXFLAGS=-fPIC"]
configure(*configure_args) configure(*configure_args)
make() make()
make("install") make("install")