# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack.package import * class Mpip(AutotoolsPackage): """mpiP: Lightweight, Scalable MPI Profiling""" homepage = "https://software.llnl.gov/mpiP/" url = "https://github.com/LLNL/mpiP/releases/download/3.5/mpip-3.5.tgz" git = "https://github.com/llnl/mpip.git" maintainers("cchambreau") license("Unlicense") version("main", branch="main") version("3.5", sha256="e366843d53fa016fb03903e51c8aac901aa5155edabe64698a8d6fa618a03bbd") variant("demangling", default=True, description="Build with demangling support") variant("setjmp", default=False, description="Use setjmp to generate stack trace") variant("mpi_io", default=True, description="Enable MPI-I/O reporting") variant("mpi_rma", default=True, description="Enable MPI RMA reporting") variant("mpi_nbc", default=True, description="Enable MPI non-blocking collective reporting") variant("bfd", default=True, description="Enable GNU binutils libbfd for source lookup") variant("libunwind", default=True, description="Use libunwind togenerate stack trace") variant( "maxargs", values=int, default=32, description="Set number of command line arguments in report", ) variant( "stackdepth", values=int, default=8, description="Specify maximum report stacktrace depth" ) variant( "internal_stackdepth", values=int, default=3, description="Specify number of internal stack frames", ) variant("add_shared_target", default=False, description="Add shared make target") conflicts("platform=darwin") # make-wrappers.py wrapper generator script requires python depends_on("python@2:", type="build") depends_on("mpi") # '+setjmp' adds '--disable-libunwind' to the confiure args depends_on("unwind", when="+libunwind ~setjmp") # patch to find python3 or python2 for mpip@3.5 patch("enable-python2-python3.patch", when="@3.5") #patch("https://github.com/LLNL/mpiP/commit/8485ec75bb2465a8c23cbc0c435d28b879b19631.patch", # sha256="c3ce232cae65336151fd956cfb10f54c86ed762603e30b8eeaa89eff83df3efa", # when="@3.5") patch("https://github.com/LLNL/mpiP/pull/41/commits/5db0838604a9de6037b808f3011bda46aa0911dc.patch", sha256="ac21423015a4ca80ccd1d2ce50b2c32cf74e936e1511996cd73f62dc00cfc4e1", when="@3.5") def configure_args(self): spec = self.spec config_args = [] config_args.append("--with-cc=%s" % spec["mpi"].mpicc) config_args.append("--with-cxx=%s" % spec["mpi"].mpicxx) config_args.append("--with-f77=%s" % spec["mpi"].mpif77) # mpiP checks for libiberty demangling during configure. # Current mpiP configure functionality allows specifying alternate # demangling support (IBM, Compaq) as an argument, but the usefulness # of this is not clear. # # Since, --enable-demangling doesn't do anything, # providing --disable-demangling in the event that there is an error # with demangling. if "-demangling" in spec: config_args.append("--disable-demangling") if "-mpi_io" in spec: config_args.append("--disable-mpi-io") if "-mpi_rma" in spec: config_args.append("--disable-mpi-rma") if "-mpi_nbc" in spec: config_args.append("--disable-mpi-nbc") if "-bfd" in spec: config_args.append("--disable-bfd") if "-libunwind" in spec: config_args.append("--disable-libunwind") # Simply enabling setjmp may result in libunwind being used, # if available. Adding --disable-libunwind to ensure setjmp is used. if "+setjmp" in spec: config_args.append("--disable-libunwind") config_args.append("--enable-setjmp") maxargs = int(spec.variants["maxargs"].value) config_args.extend(["--enable-maxargs={0}".format(maxargs)]) stackdepth = int(spec.variants["stackdepth"].value) config_args.extend(["--enable-stackdepth={0}".format(stackdepth)]) internal_stackdepth = int(spec.variants["internal_stackdepth"].value) config_args.extend(["--enable-internal-stackdepth={0}".format(internal_stackdepth)]) return config_args # Support 3.4.1 'shared' target for building shared library @property def build_targets(self): targets = [] if "+add_shared_target" in self.spec: targets.append("shared") return targets