Package updates: Score-P 9, OTF2 3.1, OPARI2 2.9, Cube 4.9 (#49659)

Things done:

* Added variants for llvm plugin and gcc plugin
* Made binutils a proper variant
* Updated dependencies and their associated packages where applicable
* Modernization in progress: idiomatic use of `with_or_without` and `enable_or_disable` where it's trivial, transition towards `spec.satisfies(X)` rather than `X in spec`

TODO:
[x] Clean up RC entry/entries and add final tarball when available
[x] Be consistent about `spec.satisfies` everywhere: consistent enough for now
[x] Add `+mpi_f08` variant (is there a standard name for this?) (for 9.1, as commented)

---------

Co-authored-by: William Williams <william.williams@tu-dresden.de>
Co-authored-by: wrwilliams <wrwilliams@users.noreply.github.com>
Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
This commit is contained in:
Bill Williams 2025-05-20 10:14:40 +02:00 committed by GitHub
parent 72871ebde8
commit 4316c4fb00
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 61 additions and 22 deletions

View File

@ -14,7 +14,7 @@ class Cubelib(AutotoolsPackage):
url = "https://apps.fz-juelich.de/scalasca/releases/cube/4.4/dist/cubelib-4.4.tar.gz" url = "https://apps.fz-juelich.de/scalasca/releases/cube/4.4/dist/cubelib-4.4.tar.gz"
maintainers("swat-jsc", "wrwilliams") maintainers("swat-jsc", "wrwilliams")
version("4.9", sha256="a0658f5bf3f74bf7dcf465ab6e30476751ad07eb93618801bdcf190ba3029443")
version("4.8.2", sha256="d6fdef57b1bc9594f1450ba46cf08f431dd0d4ae595c47e2f3454e17e4ae74f4") version("4.8.2", sha256="d6fdef57b1bc9594f1450ba46cf08f431dd0d4ae595c47e2f3454e17e4ae74f4")
version("4.8.1", sha256="e4d974248963edab48c5d0fc5831146d391b0ae4632cccafe840bf5f12cd80a9") version("4.8.1", sha256="e4d974248963edab48c5d0fc5831146d391b0ae4632cccafe840bf5f12cd80a9")
version("4.8", sha256="171c93ac5afd6bc74c50a9a58efdaf8589ff5cc1e5bd773ebdfb2347b77e2f68") version("4.8", sha256="171c93ac5afd6bc74c50a9a58efdaf8589ff5cc1e5bd773ebdfb2347b77e2f68")

View File

@ -15,6 +15,7 @@ class Cubew(AutotoolsPackage):
maintainers("swat-jsc", "wrwilliams") maintainers("swat-jsc", "wrwilliams")
version("4.9", sha256="4ef74e81c569bf53117459cba5a1ea52b5dac739493fa83be39678840cd2acdd")
version("4.8.2", sha256="4f3bcf0622c2429b8972b5eb3f14d79ec89b8161e3c1cc5862ceda417d7975d2") version("4.8.2", sha256="4f3bcf0622c2429b8972b5eb3f14d79ec89b8161e3c1cc5862ceda417d7975d2")
version("4.8.1", sha256="42cbd743d87c16e805c8e28e79292ab33de259f2cfba46f2682cb35c1bc032d6") version("4.8.1", sha256="42cbd743d87c16e805c8e28e79292ab33de259f2cfba46f2682cb35c1bc032d6")
version("4.8", sha256="73c7f9e9681ee45d71943b66c01cfe675b426e4816e751ed2e0b670563ca4cf3") version("4.8", sha256="73c7f9e9681ee45d71943b66c01cfe675b426e4816e751ed2e0b670563ca4cf3")

View File

@ -21,6 +21,7 @@ class Opari2(AutotoolsPackage):
homepage = "https://www.vi-hps.org/projects/score-p" homepage = "https://www.vi-hps.org/projects/score-p"
url = "https://perftools.pages.jsc.fz-juelich.de/cicd/opari2/tags/opari2-2.0.8/opari2-2.0.8.tar.gz" url = "https://perftools.pages.jsc.fz-juelich.de/cicd/opari2/tags/opari2-2.0.8/opari2-2.0.8.tar.gz"
version("2.0.9", sha256="d57139f757c5666afaaead45ed3d0954a9b98c4a6cef6b22afe672707cffd779")
version("2.0.8", sha256="196e59a2a625e6c795a6124c61e784bad142f9f38df0b4fa4d435ba9b9c19721") version("2.0.8", sha256="196e59a2a625e6c795a6124c61e784bad142f9f38df0b4fa4d435ba9b9c19721")
version("2.0.7", sha256="e302a4cc265eb2a4aa27c16a90eabd9e1e58cb02a191dd1c4d86f9a0df128715") version("2.0.7", sha256="e302a4cc265eb2a4aa27c16a90eabd9e1e58cb02a191dd1c4d86f9a0df128715")
version("2.0.6", sha256="55972289ce66080bb48622110c3189a36e88a12917635f049b37685b9d3bbcb0") version("2.0.6", sha256="55972289ce66080bb48622110c3189a36e88a12917635f049b37685b9d3bbcb0")

View File

@ -14,8 +14,9 @@ class Otf2(AutotoolsPackage):
""" """
homepage = "https://www.vi-hps.org/projects/score-p" homepage = "https://www.vi-hps.org/projects/score-p"
url = "https://perftools.pages.jsc.fz-juelich.de/cicd/otf2/tags/otf2-3.0/otf2-3.0.tar.gz" url = "https://perftools.pages.jsc.fz-juelich.de/cicd/otf2/tags/otf2-3.1/otf2-3.1.tar.gz"
version("3.1.1", sha256="5a4e013a51ac4ed794fe35c55b700cd720346fda7f33ec84c76b86a5fb880a6e")
version("3.1", sha256="09dff2eda692486b88ad5ee189bbc9d7ebc1f17c863108c44ccf9631badbada4")
version("3.0.3", sha256="18a3905f7917340387e3edc8e5766f31ab1af41f4ecc5665da6c769ca21c4ee8") version("3.0.3", sha256="18a3905f7917340387e3edc8e5766f31ab1af41f4ecc5665da6c769ca21c4ee8")
version("3.0", sha256="6fff0728761556e805b140fd464402ced394a3c622ededdb618025e6cdaa6d8c") version("3.0", sha256="6fff0728761556e805b140fd464402ced394a3c622ededdb618025e6cdaa6d8c")
version("2.3", sha256="36957428d37c40d35b6b45208f050fb5cfe23c54e874189778a24b0e9219c7e3") version("2.3", sha256="36957428d37c40d35b6b45208f050fb5cfe23c54e874189778a24b0e9219c7e3")

View File

@ -16,7 +16,7 @@ class Scorep(AutotoolsPackage):
homepage = "https://www.vi-hps.org/projects/score-p" homepage = "https://www.vi-hps.org/projects/score-p"
url = "https://perftools.pages.jsc.fz-juelich.de/cicd/scorep/tags/scorep-7.1/scorep-7.1.tar.gz" url = "https://perftools.pages.jsc.fz-juelich.de/cicd/scorep/tags/scorep-7.1/scorep-7.1.tar.gz"
maintainers("wrwilliams") maintainers("wrwilliams")
version("9.0", sha256="5d0a5db4cc6f31c30ae03c7e6f6245e83667b0ff38a7041ffe8b2e8e581e0997")
version("8.4", sha256="7bbde9a0721d27cc6205baf13c1626833bcfbabb1f33b325a2d67976290f7f8a") version("8.4", sha256="7bbde9a0721d27cc6205baf13c1626833bcfbabb1f33b325a2d67976290f7f8a")
version("8.3", sha256="76c914e6319221c059234597a3bc53da788ed679179ac99c147284dcefb1574a") version("8.3", sha256="76c914e6319221c059234597a3bc53da788ed679179ac99c147284dcefb1574a")
# version 8.2 was immediately superseded before it hit Spack # version 8.2 was immediately superseded before it hit Spack
@ -88,29 +88,51 @@ def url_for_version(self, version):
sha256="d20b3046ba6a89ad9c106bcf372bceb1bd9ab780d4c7dd9e7373f0099b92d933", sha256="d20b3046ba6a89ad9c106bcf372bceb1bd9ab780d4c7dd9e7373f0099b92d933",
) )
# Variants
variant("mpi", default=True, description="Enable MPI support") variant("mpi", default=True, description="Enable MPI support")
variant("papi", default=True, description="Enable PAPI") variant("papi", default=True, description="Enable PAPI")
variant("pdt", default=False, description="Enable PDT") variant("pdt", default=False, description="Enable PDT", when="@:8.4")
variant("shmem", default=False, description="Enable shmem tracing") variant("shmem", default=False, description="Enable shmem tracing")
variant("unwind", default=False, description="Enable sampling via libunwind and lib wrapping") variant("unwind", default=False, description="Enable sampling via libunwind and lib wrapping")
variant("cuda", default=False, description="Enable CUDA support") variant("cuda", default=False, description="Enable CUDA support")
variant("hip", default=False, description="Enable ROCm/HIP support", when="@8.0:") variant("hip", default=False, description="Enable ROCm/HIP support", when="@8.0:")
variant("gcc-plugin", default=True, description="Enable gcc-plugin", when="%gcc") variant("gcc-plugin", default=True, description="Enable gcc-plugin", when="%gcc")
variant(
"llvm-plugin", default=True, description="Enable LLVM compiler plugin", when="@9.0: ^llvm"
)
variant(
"binutils",
default=True,
description="Enable debug info lookup via binutils",
when="^binutils",
)
# Putting this in as preparation. F08 support exists in 9.0 but configure does not respect
# --enable-mpi-f08 and will not until 9.1.
variant("mpi_f08", default=True, description="Enable MPI F08 support", when="@9.1: +mpi")
# Dependencies for SCORE-P are quite tight. See the homepage for more # Dependencies for SCORE-P are quite tight. See the homepage for more
# information. Starting with scorep 4.0 / cube 4.4, Score-P only depends on # information. Starting with scorep 4.0 / cube 4.4, Score-P only depends on
# two components of cube -- cubew and cubelib. # two components of cube -- cubew and cubelib.
# Language dependencies
# TODO: we could allow a +fortran variant here.
depends_on("c", type="build") # generated depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated depends_on("cxx", type="build") # generated
depends_on("fortran", type="build") # generated depends_on("fortran", type="build") # generated
# SCOREP 9
depends_on("gotcha@1.0.8:", type="link", when="@9:")
depends_on("otf2@3.1:", when="@9:")
depends_on("cubew@4.9:", when="@9:")
depends_on("cubelib@4.9:", when="@9:")
depends_on("opari2@2.0.9", when="@9:")
# SCOREP 8 # SCOREP 8
depends_on("binutils", type="link", when="@8:") depends_on("binutils", type="link", when="@8:")
depends_on("otf2@3:", when="@8:") depends_on("otf2@3:", when="@8:")
depends_on("cubew@4.8.2:", when="@8.3:") depends_on("cubew@4.8.2:4.8", when="@8.3:")
depends_on("cubelib@4.8.2:", when="@8.3:") depends_on("cubelib@4.8.2:4.8", when="@8.3:")
depends_on("cubew@4.8:", when="@8:8.2") depends_on("cubew@4.8", when="@8:8.2")
depends_on("cubelib@4.8:", when="@8:8.2") depends_on("cubelib@4.8", when="@8:8.2")
# fall through to Score-P 7's OPARI2, no new release # fall through to Score-P 7's OPARI2, no new release
# SCOREP 7 # SCOREP 7
depends_on("otf2@2.3:2.3.99", when="@7.0:7") depends_on("otf2@2.3:2.3.99", when="@7.0:7")
@ -140,6 +162,7 @@ def url_for_version(self, version):
depends_on("opari2@1.1.4", when="@1.3") depends_on("opari2@1.1.4", when="@1.3")
depends_on("cube@4.2.3", when="@1.3") depends_on("cube@4.2.3", when="@1.3")
# Conditional dependencies for variants
depends_on("mpi@2.2:", when="@7.0:+mpi") depends_on("mpi@2.2:", when="@7.0:+mpi")
depends_on("mpi", when="+mpi") depends_on("mpi", when="+mpi")
depends_on("papi", when="+papi") depends_on("papi", when="+papi")
@ -151,6 +174,7 @@ def url_for_version(self, version):
depends_on("hip@4.2:", when="+hip") depends_on("hip@4.2:", when="+hip")
depends_on("rocprofiler-dev", when="+hip") depends_on("rocprofiler-dev", when="+hip")
depends_on("rocm-smi-lib", when="+hip") depends_on("rocm-smi-lib", when="+hip")
# Score-P requires a case-sensitive file system, and therefore # Score-P requires a case-sensitive file system, and therefore
# does not work on macOS # does not work on macOS
# https://github.com/spack/spack/issues/1609 # https://github.com/spack/spack/issues/1609
@ -158,14 +182,16 @@ def url_for_version(self, version):
# Score-P first has support for ROCm 6.x as of v8.4 # Score-P first has support for ROCm 6.x as of v8.4
conflicts("hip@6.0:", when="@1.0:8.3+hip") conflicts("hip@6.0:", when="@1.0:8.3+hip")
# Utility function: extract the first directory in `root` where
# we find `libname`. Used to handle CUDA irregular layouts.
def find_libpath(self, libname, root): def find_libpath(self, libname, root):
libs = find_libraries(libname, root, shared=True, recursive=True) libs = find_libraries(libname, root, shared=True, recursive=True)
if len(libs.directories) == 0: if len(libs.directories) == 0:
return None return None
return libs.directories[0] return libs.directories[0]
# handle any mapping of Spack compiler names to Score-P args # Handle any mapping of Spack compiler names to Score-P args
# this should continue to exist for backward compatibility # This should continue to exist for backward compatibility
def clean_compiler(self, compiler): def clean_compiler(self, compiler):
renames = {"cce": "cray", "rocmcc": "amdclang"} renames = {"cce": "cray", "rocmcc": "amdclang"}
if compiler in renames: if compiler in renames:
@ -174,7 +200,6 @@ def clean_compiler(self, compiler):
def configure_args(self): def configure_args(self):
spec = self.spec spec = self.spec
config_args = [ config_args = [
"--with-otf2=%s" % spec["otf2"].prefix.bin, "--with-otf2=%s" % spec["otf2"].prefix.bin,
"--with-opari2=%s" % spec["opari2"].prefix.bin, "--with-opari2=%s" % spec["opari2"].prefix.bin,
@ -182,8 +207,7 @@ def configure_args(self):
] ]
cname = self.clean_compiler(spec.compiler.name) cname = self.clean_compiler(spec.compiler.name)
config_args.extend(["--with-nocross-compiler-suite={0}".format(cname)])
config_args.append("--with-nocross-compiler-suite={0}".format(cname))
if self.version >= Version("4.0"): if self.version >= Version("4.0"):
config_args.append("--with-cubew=%s" % spec["cubew"].prefix.bin) config_args.append("--with-cubew=%s" % spec["cubew"].prefix.bin)
@ -198,14 +222,21 @@ def configure_args(self):
if "+pdt" in spec: if "+pdt" in spec:
config_args.append("--with-pdt=%s" % spec["pdt"].prefix.bin) config_args.append("--with-pdt=%s" % spec["pdt"].prefix.bin)
if "+unwind" in spec: config_args.extend(
config_args.append("--with-libunwind=%s" % spec["libunwind"].prefix) self.with_or_without("libunwind", activation_value="prefix", variant="unwind")
)
if "+cuda" in spec: if "+cuda" in spec:
config_args.append("--with-libcudart=%s" % spec["cuda"].prefix) config_args.append("--with-libcudart=%s" % spec["cuda"].prefix)
cuda_driver_path = self.find_libpath("libcuda", spec["cuda"].prefix) cuda_driver_path = self.find_libpath("libcuda", spec["cuda"].prefix)
config_args.append("--with-libcuda-lib=%s" % cuda_driver_path) config_args.append("--with-libcuda-lib=%s" % cuda_driver_path)
if "+hip" in spec: config_args.extend(
config_args.append("--with-rocm=%s" % spec["hip"].prefix) self.with_or_without(
"rocm", activation_value=lambda _: self.spec["hip"].prefix, variant="hip"
)
)
config_args.extend(self.enable_or_disable("llvm-plugin"))
config_args.extend(self.enable_or_disable("gcc-plugin"))
config_args.extend(self.enable_or_disable("mpi_f08"))
if "~shmem" in spec: if "~shmem" in spec:
config_args.append("--without-shmem") config_args.append("--without-shmem")
@ -227,7 +258,7 @@ def configure_args(self):
"^[virtuals=mpi] hpcx-mpi" "^[virtuals=mpi] hpcx-mpi"
): ):
config_args.append("--with-mpi=openmpi") config_args.append("--with-mpi=openmpi")
elif "~mpi" in spec: elif spec.satisfies("~mpi"):
config_args.append("--without-mpi") config_args.append("--without-mpi")
# Let any +mpi that gets here autodetect, which is default # Let any +mpi that gets here autodetect, which is default
# Valid values are bullxmpi|cray|hp|ibmpoe|intel|intel2|intel3|intelpoe|lam|mpibull2 # Valid values are bullxmpi|cray|hp|ibmpoe|intel|intel2|intel3|intelpoe|lam|mpibull2
@ -237,8 +268,13 @@ def configure_args(self):
# (see end of function) # (see end of function)
# but add similar spec.satisfies clauses for any that you need. # but add similar spec.satisfies clauses for any that you need.
# -- wrwilliams 12/2024 # -- wrwilliams 12/2024
if spec.satisfies("^binutils"): config_args.extend(
config_args.append("--with-libbfd=%s" % spec["binutils"].prefix) self.with_or_without(
"libbfd",
activation_value=lambda _: self.spec["binutils"].prefix,
variant="binutils",
)
)
# when you build with gcc, you usually want to use the gcc-plugin! # when you build with gcc, you usually want to use the gcc-plugin!
# see, e.g., GNU Compiler Plug-In in https://scorepci.pages.jsc.fz-juelich.de/scorep-pipelines/docs/scorep-5.0/html/installationfile.html # see, e.g., GNU Compiler Plug-In in https://scorepci.pages.jsc.fz-juelich.de/scorep-pipelines/docs/scorep-5.0/html/installationfile.html
@ -254,7 +290,7 @@ def configure_args(self):
] ]
) )
if "+mpi" in spec: if spec.satisfies("+mpi"):
config_args.extend( config_args.extend(
[ [
"MPICC={0}".format(spec["mpi"].mpicc), "MPICC={0}".format(spec["mpi"].mpicc),