diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/openspeedshop-utils/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/openspeedshop-utils/package.py | 321 |
1 files changed, 321 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/openspeedshop-utils/package.py b/var/spack/repos/builtin/packages/openspeedshop-utils/package.py new file mode 100644 index 0000000000..d2ab1df988 --- /dev/null +++ b/var/spack/repos/builtin/packages/openspeedshop-utils/package.py @@ -0,0 +1,321 @@ +# Copyright 2013-2023 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) + +import os + +import spack.store +from spack.package import * +from spack.pkg.builtin.boost import Boost + + +class OpenspeedshopUtils(CMakePackage): + """OpenSpeedShop is a community effort led by Trenza, Inc. + It builds on top of a broad list of community infrastructures, + most notably Dyninst and MRNet from UW, libmonitor from Rice, + and PAPI from UTK. OpenSpeedShop is an open source multi platform + Linux performance tool which is targeted to support performance + analysis of applications running on both single node and large + scale IA64, IA32, EM64T, AMD64, PPC, ARM, Power8, Intel Phi, Blue + Gene and Cray platforms. OpenSpeedShop development is hosted by + Trenza Inc.. The infrastructure and base components of OpenSpeedShop + are released as open source code primarily under LGPL. + openspeedshop-utils is a package that does not have the + qt3 gui. It was created to avoid a conflict between + openspeedshop and cbtf-argonavis-gui based on the fact + that spack will not allow a qt3 and qt4/qt5 dependency in a + packages dependency tree. + """ + + homepage = "http://www.openspeedshop.org" + git = "https://github.com/OpenSpeedShop/openspeedshop.git" + + maintainers = ["jgalarowicz"] + + version("develop", branch="master") + version("2.4.2.1", branch="2.4.2.1") + version("2.4.2", branch="2.4.2") + version("2.4.1", branch="2.4.1") + + variant( + "runtime", default=False, description="build only the runtime libraries and collectors." + ) + variant( + "crayfe", + default=False, + description="build only the FE tool using the runtime_dir \ + to point to target build.", + ) + variant("cuda", default=False, description="build with cuda packages included.") + + variant( + "build_type", + default="RelWithDebInfo", + description="The build type to build", + values=("Debug", "Release", "RelWithDebInfo"), + ) + + # MPI variants + variant( + "openmpi", + default=False, + description="Build mpi collector for openmpi \ + MPI when variant is enabled.", + ) + variant( + "mpt", + default=False, + description="Build mpi collector for SGI \ + MPT MPI when variant is enabled.", + ) + variant( + "mvapich2", + default=False, + description="Build mpi collector for mvapich2\ + MPI when variant is enabled.", + ) + variant( + "mpich2", + default=False, + description="Build mpi collector for mpich2\ + MPI when variant is enabled.", + ) + + depends_on("cmake@3.0.2:", type="build") + + # Dependencies for openspeedshop that are common to all + # the variants of the OpenSpeedShop build + depends_on("libtool", type="build") + depends_on("bison", type="build") + depends_on("flex@2.6.1", type="build") + + # For binutils + depends_on("binutils@2.32", type="build") + + depends_on("elfutils", type="link") + depends_on("libdwarf") + + depends_on("sqlite") + + # For boost + depends_on("boost@1.66.0:1.69.0") + # TODO: replace this with an explicit list of components of Boost, + # for instance depends_on('boost +filesystem') + # See https://github.com/spack/spack/pull/22303 for reference + depends_on(Boost.with_default_variants) + + depends_on("dyninst@10:", when="@2.4.0:9999") + + depends_on("python", type=("build", "run")) + + depends_on("libxml2") + + # Dependencies for the openspeedshop cbtf packages. + depends_on("cbtf@develop", when="@develop", type=("build", "link", "run")) + depends_on("cbtf@1.9.3:9999", when="@2.4.0:9999", type=("build", "link", "run")) + + depends_on("cbtf-krell@develop", when="@develop", type=("build", "link", "run")) + depends_on("cbtf-krell@1.9.3:9999", when="@2.4.0:9999", type=("build", "link", "run")) + + depends_on("cbtf-krell@develop+crayfe", when="@develop+crayfe", type=("build", "link", "run")) + depends_on( + "cbtf-krell@1.9.3:9999+crayfe", when="@2.4.0:9999+crayfe", type=("build", "link", "run") + ) + + depends_on("cbtf-krell@develop+mpich2", when="@develop+mpich2", type=("build", "link", "run")) + depends_on( + "cbtf-krell@1.9.3:9999+mpich2", when="@2.4.0:9999+mpich2", type=("build", "link", "run") + ) + + depends_on("cbtf-krell@develop+mpt", when="@develop+mpt", type=("build", "link", "run")) + depends_on("cbtf-krell@1.9.3:9999+mpt", when="@2.4.0:9999+mpt", type=("build", "link", "run")) + + depends_on( + "cbtf-krell@develop+mvapich2", when="@develop+mvapich2", type=("build", "link", "run") + ) + depends_on( + "cbtf-krell@1.9.3:9999+mvapich2", + when="@2.4.0:9999+mvapich2", + type=("build", "link", "run"), + ) + + depends_on( + "cbtf-krell@develop+openmpi", when="@develop+openmpi", type=("build", "link", "run") + ) + depends_on( + "cbtf-krell@1.9.3:9999+openmpi", when="@2.4.0:9999+openmpi", type=("build", "link", "run") + ) + + depends_on("cbtf-argonavis@develop", when="@develop+cuda", type=("build", "link", "run")) + depends_on("cbtf-argonavis@1.9.3:9999", when="@2.4.0:9999+cuda", type=("build", "link", "run")) + + # For MRNet + depends_on("mrnet@5.0.1-3:+lwthreads", when="@develop", type=("build", "link", "run")) + depends_on("mrnet@5.0.1-3:+lwthreads", when="@2.4.0:9999", type=("build", "link", "run")) + + patch("arm.patch", when="target=aarch64:") + parallel = False + + build_directory = "build_openspeedshop" + + def set_cray_login_node_cmake_options(self, spec, cmake_options): + # Appends to cmake_options the options that will enable the appropriate + # Cray login node libraries + + cray_login_node_options = [] + rt_platform = "cray" + + # How do we get the compute node (CNL) cbtf package install + # directory path? + # spec['cbtf'].prefix is the login node value for this build, as + # we only get here when building the login node components and + # that is all that is known to spack. + be_ck = spack.store.db.query_one("cbtf-krell arch=cray-CNL-haswell") + + # Equivalent to install-tool cmake arg: + # '-DCBTF_KRELL_CN_RUNTIME_DIR=%s' + # % <base dir>/cbtf_v2.4.0elease/compute) + cray_login_node_options.append("-DCBTF_KRELL_CN_RUNTIME_DIR=%s" % be_ck.prefix) + cray_login_node_options.append("-DRUNTIME_PLATFORM=%s" % rt_platform) + + cmake_options.extend(cray_login_node_options) + + def cmake_args(self): + # Appends base options to cmake_args + spec = self.spec + + compile_flags = "-O2 -g -Wall" + + cmake_args = [] + + # Indicate building cbtf vers (transfer rawdata files) + instrumentor_setting = "cbtf" + + if spec.satisfies("+runtime"): + self.set_defaultbase_cmake_options(spec, cmake_args) + + cmake_args.extend( + [ + "-DCMAKE_CXX_FLAGS=%s" % compile_flags, + "-DCMAKE_C_FLAGS=%s" % compile_flags, + "-DINSTRUMENTOR=%s" % instrumentor_setting, + "-DCBTF_DIR=%s" % spec["cbtf"].prefix, + "-DCBTF_KRELL_DIR=%s" % spec["cbtf-krell"].prefix, + "-DMRNET_DIR=%s" % spec["mrnet"].prefix, + ] + ) + + else: + + # Appends base options to cmake_args + self.set_defaultbase_cmake_options(spec, cmake_args) + cmake_args.extend( + [ + "-DCMAKE_CXX_FLAGS=%s" % compile_flags, + "-DCMAKE_C_FLAGS=%s" % compile_flags, + "-DINSTRUMENTOR=%s" % instrumentor_setting, + "-DSQLITE3_DIR=%s" % spec["sqlite"].prefix, + "-DCBTF_DIR=%s" % spec["cbtf"].prefix, + "-DCBTF_KRELL_DIR=%s" % spec["cbtf-krell"].prefix, + "-DMRNET_DIR=%s" % spec["mrnet"].prefix, + ] + ) + + if spec.satisfies("+crayfe"): + # We need to build target/compute node + # components/libraries first then pass + # those libraries to the openspeedshop + # login node build + self.set_cray_login_node_cmake_options(spec, cmake_args) + + cmake_args.extend(["-DBUILD_QT3_GUI=FALSE"]) + + return cmake_args + + def set_defaultbase_cmake_options(self, spec, cmake_options): + # Appends to cmake_options the options that will enable + # the appropriate base level options to the openspeedshop + # cmake build. + python_exe = spec["python"].command.path + python_library = spec["python"].libs[0] + python_include = spec["python"].headers.directories[0] + + base_options = [] + + base_options.append("-DBINUTILS_DIR=%s" % spec["binutils"].prefix) + base_options.append("-DLIBELF_DIR=%s" % spec["elfutils"].prefix) + base_options.append("-DLIBDWARF_DIR=%s" % spec["libdwarf"].prefix) + base_options.append("-DPYTHON_EXECUTABLE=%s" % python_exe) + base_options.append("-DPYTHON_INCLUDE_DIR=%s" % python_include) + base_options.append("-DPYTHON_LIBRARY=%s" % python_library) + base_options.append("-DBoost_NO_SYSTEM_PATHS=TRUE") + base_options.append("-DBoost_NO_BOOST_CMAKE=TRUE") + base_options.append("-DBOOST_ROOT=%s" % spec["boost"].prefix) + base_options.append("-DBoost_DIR=%s" % spec["boost"].prefix) + base_options.append("-DBOOST_LIBRARYDIR=%s" % spec["boost"].prefix.lib) + base_options.append("-DDYNINST_DIR=%s" % spec["dyninst"].prefix) + + cmake_options.extend(base_options) + + def set_mpi_cmake_options(self, spec, cmake_options): + # Appends to cmake_options the options that will enable + # the appropriate MPI implementations + + mpi_options = [] + + # openmpi + if spec.satisfies("+openmpi"): + mpi_options.append("-DOPENMPI_DIR=%s" % spec["openmpi"].prefix) + # mpich + if spec.satisfies("+mpich"): + mpi_options.append("-DMPICH_DIR=%s" % spec["mpich"].prefix) + # mpich2 + if spec.satisfies("+mpich2"): + mpi_options.append("-DMPICH2_DIR=%s" % spec["mpich2"].prefix) + # mvapich + if spec.satisfies("+mvapich"): + mpi_options.append("-DMVAPICH_DIR=%s" % spec["mvapich"].prefix) + # mvapich2 + if spec.satisfies("+mvapich2"): + mpi_options.append("-DMVAPICH2_DIR=%s" % spec["mvapich2"].prefix) + # mpt + if spec.satisfies("+mpt"): + mpi_options.append("-DMPT_DIR=%s" % spec["mpt"].prefix) + + cmake_options.extend(mpi_options) + + def setup_run_environment(self, env): + """Set up the compile and runtime environments for a package.""" + + # Find Dyninst library path, this is needed to + # set the DYNINSTAPI_RT_LIB library which is + # required for OpenSpeedShop to find loop level + # performance information + dyninst_libdir = find_libraries( + "libdyninstAPI_RT", root=self.spec["dyninst"].prefix, shared=True, recursive=True + ) + + # Set Dyninst RT library path to support OSS loop resolution code + env.set("DYNINSTAPI_RT_LIB", dyninst_libdir[0]) + + # Find openspeedshop library path + oss_libdir = find_libraries( + "libopenss-framework", + root=self.spec["openspeedshop-utils"].prefix, + shared=True, + recursive=True, + ) + env.prepend_path("LD_LIBRARY_PATH", os.path.dirname(oss_libdir.joined())) + + env.set("OPENSS_RAWDATA_DIR", ".") + + cbtf_mc = "/sbin/cbtf_mrnet_commnode" + cbtf_lmb = "/sbin/cbtf_libcbtf_mrnet_backend" + env.set("XPLAT_RSH", "ssh") + env.set("MRNET_COMM_PATH", join_path(self.spec["cbtf-krell"].prefix + cbtf_mc)) + env.set("CBTF_MRNET_BACKEND_PATH", join_path(self.spec["cbtf-krell"].prefix + cbtf_lmb)) + env.prepend_path("PATH", self.spec["mrnet"].prefix.bin) + env.prepend_path("PATH", self.spec["cbtf-krell"].prefix.bin) + env.prepend_path("PATH", self.spec["cbtf-krell"].prefix.sbin) + env.prepend_path("PATH", self.spec["python"].prefix.bin) |