geopm-runtime: New package (#42737)
* Add systemd
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
* gobject-introspection: Correct glib versions
- The meson.build requirement that the glib version
is >= the gobject-introspective version is not in place
until v1.76.1.
- Prior to that, the requirement was glib >= 2.58.0.
- Bug introduced in acbf0d99c4
, PR #42222.
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
* util-linux: add v2.39.3
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
* py-natsort: add new versions
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
* geopm-service: default systemd support to true
- Make the dependency sticky to force a failure
if systemd compilation fails, or force
the user to disable the option.
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
* geopm-service: Add initial multi-architecture support
- Restrict arch conflicts to 3.0.1
- Disable cpuid at configure time on non-x86_64 platforms.
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
* geopm-service: update docstrings
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
* Add py-geopmdpy
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
* Add geopm-runtime recipe
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
---------
Signed-off-by: Brad Geltz <brad.geltz@intel.com>
This commit is contained in:
parent
7afa949da1
commit
0e016ba6f5
7 changed files with 343 additions and 20 deletions
143
var/spack/repos/builtin/packages/geopm-runtime/package.py
Normal file
143
var/spack/repos/builtin/packages/geopm-runtime/package.py
Normal file
|
@ -0,0 +1,143 @@
|
|||
# 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
|
||||
|
||||
from spack.package import *
|
||||
|
||||
|
||||
class GeopmRuntime(AutotoolsPackage):
|
||||
"""The Global Extensible Open Power Manager (GEOPM) Runtime is designed to
|
||||
enhance energy efficiency of applications through active hardware
|
||||
configuration."""
|
||||
|
||||
homepage = "https://geopm.github.io"
|
||||
git = "https://github.com/geopm/geopm.git"
|
||||
url = "https://github.com/geopm/geopm/tarball/v3.0.1"
|
||||
|
||||
maintainers("bgeltz", "cmcantalupo")
|
||||
license("BSD-3-Clause")
|
||||
tags = ["e4s"]
|
||||
|
||||
version("develop", branch="dev", get_full_repo=True)
|
||||
version("3.0.1", sha256="32ba1948de58815ee055470dcdea64593d1113a6cad70ce00ab0286c127f8234")
|
||||
|
||||
variant("debug", default=False, description="Enable debug")
|
||||
variant("docs", default=False, description="Create man pages with Sphinx")
|
||||
variant("overhead", default=False, description="Track time spent in GEOPM API calls")
|
||||
variant("beta", default=False, description="Enable beta features")
|
||||
variant("mpi", default=True, description="Enable MPI dependent components")
|
||||
variant("fortran", default=True, description="Build fortran interface")
|
||||
variant("openmp", default=True, description="Build with OpenMP")
|
||||
variant("ompt", default=True, description="Use OpenMP Tools Interface")
|
||||
variant("gnu-ld", default=False, description="Assume C compiler uses gnu-ld")
|
||||
variant("intel-mkl", default=True, description="Build with Intel MKL support")
|
||||
variant(
|
||||
"checkprogs",
|
||||
default=False,
|
||||
description='Build tests (use with "devbuild" or "install --keep-stage")',
|
||||
)
|
||||
|
||||
conflicts("%gcc@:7.2", msg="Requires C++17 support")
|
||||
conflicts("%clang@:4", msg="Requires C++17 support")
|
||||
conflicts("%gcc", when="+ompt")
|
||||
|
||||
conflicts("platform=darwin", msg="Darwin is not supported")
|
||||
conflicts("platform=windows", msg="Windows is not supported")
|
||||
|
||||
conflicts("target=aarch64:", msg="Only available on x86_64", when="@3.0.1")
|
||||
conflicts("target=ppc64:", msg="Only available on x86_64", when="@3.0.1")
|
||||
conflicts("target=ppc64le:", msg="Only available on x86_64", when="@3.0.1")
|
||||
|
||||
# Autotools dependencies
|
||||
depends_on("automake", type="build")
|
||||
depends_on("libtool", type="build")
|
||||
depends_on("file")
|
||||
|
||||
# Docs dependencies
|
||||
depends_on("doxygen", type="build", when="+docs")
|
||||
depends_on("py-sphinx", type="build", when="+docs")
|
||||
depends_on("py-sphinx-rtd-theme@1:", type="build", when="+docs")
|
||||
depends_on("py-sphinxemoji@0.2.0:", type="build", when="+docs")
|
||||
depends_on("py-sphinx-tabs@3.3.1:", type="build", when="+docs")
|
||||
depends_on("py-pygments@2.13.0:", type="build", when="+docs")
|
||||
|
||||
# Other Python dependencies - from scripts/setup.py
|
||||
depends_on("python@3.6:3", type=("build", "run"))
|
||||
depends_on("py-setuptools@53.0.0:", type="build")
|
||||
depends_on("py-cffi@1.14.5:", type="run")
|
||||
depends_on("py-natsort@8.2.0:", type="run")
|
||||
depends_on("py-numpy@1.19.5:", type="run")
|
||||
depends_on("py-pandas@1.1.5:", type="run")
|
||||
depends_on("py-tables@3.7.0:", type="run")
|
||||
depends_on("py-psutil@5.8.0:", type="run")
|
||||
depends_on("py-pyyaml@6.0:", type="run")
|
||||
depends_on("py-docutils@0.18:", type="run", when="+checkprogs")
|
||||
|
||||
# Other dependencies
|
||||
for ver in ["3.0.1", "develop"]:
|
||||
depends_on(f"geopm-service@{ver}", type="build", when=f"@{ver}")
|
||||
depends_on(f"py-geopmdpy@{ver}", type="run", when=f"@{ver}")
|
||||
depends_on("bash-completion")
|
||||
depends_on("unzip")
|
||||
depends_on("mpi@2.2:", when="+mpi")
|
||||
depends_on("libelf")
|
||||
depends_on("numactl", type="run", when="+checkprogs")
|
||||
depends_on("stress-ng", type="run", when="+checkprogs")
|
||||
|
||||
# Intel dependencies
|
||||
depends_on("intel-oneapi-mkl%oneapi", when="+intel-mkl")
|
||||
|
||||
extends("python")
|
||||
|
||||
@property
|
||||
def install_targets(self):
|
||||
target = ["install"]
|
||||
if "+checkprogs" in self.spec:
|
||||
target += ["checkprogs"]
|
||||
return target
|
||||
|
||||
def autoreconf(self, spec, prefix):
|
||||
bash = which("bash")
|
||||
if not spec.version.isdevelop():
|
||||
# Required to workaround missing VERSION files
|
||||
# from GitHub generated source tarballs
|
||||
with open("VERSION_OVERRIDE", "w") as fd:
|
||||
fd.write(f"{spec.version}")
|
||||
bash("./autogen.sh")
|
||||
|
||||
def configure_args(self):
|
||||
args = [
|
||||
"--with-bash-completion-dir="
|
||||
+ join_path(self.spec.prefix, "share", "bash-completion", "completions"),
|
||||
"--disable-geopmd-local",
|
||||
f"--with-geopmd={self.spec['geopm-service'].prefix}",
|
||||
]
|
||||
|
||||
args += self.enable_or_disable("debug")
|
||||
args += self.enable_or_disable("docs")
|
||||
args += self.enable_or_disable("overhead")
|
||||
args += self.enable_or_disable("beta")
|
||||
args += self.enable_or_disable("mpi")
|
||||
args += self.enable_or_disable("fortran")
|
||||
args += self.enable_or_disable("openmp")
|
||||
args += self.enable_or_disable("ompt")
|
||||
args += self.with_or_without("gnu-ld")
|
||||
|
||||
return args
|
||||
|
||||
def setup_run_environment(self, env):
|
||||
# Required to ensure libgeopm.so
|
||||
# can be used with LD_PRELOAD
|
||||
if os.path.isdir(self.prefix.lib64):
|
||||
lib_dir = self.prefix.lib64
|
||||
else:
|
||||
lib_dir = self.prefix.lib
|
||||
env.prepend_path("LD_LIBRARY_PATH", lib_dir)
|
||||
|
||||
if "+checkprogs" in self.spec:
|
||||
env.set("GEOPM_SOURCE", self.stage.source_path)
|
||||
env.prepend_path("PYTHONPATH", self.stage.source_path)
|
||||
env.set("GEOPM_INSTALL", self.prefix)
|
|
@ -9,14 +9,8 @@
|
|||
|
||||
|
||||
class GeopmService(AutotoolsPackage):
|
||||
"""The Global Extensible Open Power Manager (GEOPM) is a framework for
|
||||
exploring power and energy optimizations targeting heterogeneous platforms.
|
||||
The GEOPM package provides many built-in features. A simple use case is
|
||||
reading hardware counters and setting hardware controls with platform
|
||||
independent syntax using a command line tool on a particular compute node.
|
||||
An advanced use case is dynamically coordinating hardware settings across
|
||||
all compute nodes used by a distributed application is response to the
|
||||
application's behavior and requests from the resource manager.
|
||||
"""The Global Extensible Open Power Manager (GEOPM) Service provides a
|
||||
user interface for accessing hardware telemetry and settings securely.
|
||||
|
||||
Note: GEOPM interfaces with hardware using Model Specific Registers (MSRs).
|
||||
For proper usage make sure MSRs are made available via the msr or
|
||||
|
@ -35,11 +29,7 @@ class GeopmService(AutotoolsPackage):
|
|||
|
||||
variant("debug", default=False, description="Enable debug")
|
||||
variant("docs", default=True, description="Create man pages with Sphinx")
|
||||
variant(
|
||||
"systemd",
|
||||
default=False,
|
||||
description="Enable use of systemd (systemd development libraries required)",
|
||||
)
|
||||
variant("systemd", default=True, description="Enable use of systemd/DBus")
|
||||
variant("liburing", default=True, description="Enables the use of liburing for batch I/O")
|
||||
variant(
|
||||
"libcap", default=True, description="Enables the use of libcap to do capabilities checks"
|
||||
|
@ -64,9 +54,9 @@ class GeopmService(AutotoolsPackage):
|
|||
conflicts("platform=darwin", msg="Darwin is not supported")
|
||||
conflicts("platform=windows", msg="Windows is not supported")
|
||||
|
||||
conflicts("target=aarch64:", msg="Only available on x86_64")
|
||||
conflicts("target=ppc64:", msg="Only available on x86_64")
|
||||
conflicts("target=ppc64le:", msg="Only available on x86_64")
|
||||
conflicts("target=aarch64:", msg="Only available on x86_64", when="@3.0.1")
|
||||
conflicts("target=ppc64:", msg="Only available on x86_64", when="@3.0.1")
|
||||
conflicts("target=ppc64le:", msg="Only available on x86_64", when="@3.0.1")
|
||||
|
||||
patch("0001-Support-NVML-via-CUDA-installation.patch", when="+nvml")
|
||||
|
||||
|
@ -78,7 +68,7 @@ class GeopmService(AutotoolsPackage):
|
|||
# Docs dependencies
|
||||
depends_on("doxygen", type="build", when="+docs")
|
||||
depends_on("py-docstring-parser@0.13.0:", type="build", when="+docs")
|
||||
depends_on("py-sphinx@4.5:", type="build", when="+docs")
|
||||
depends_on("py-sphinx", type="build", when="+docs")
|
||||
depends_on("py-sphinx-rtd-theme@1:", type="build", when="+docs")
|
||||
depends_on("py-sphinxemoji@0.2.0:", type="build", when="+docs")
|
||||
depends_on("py-sphinx-tabs@3.3.1:", type="build", when="+docs")
|
||||
|
@ -95,6 +85,7 @@ class GeopmService(AutotoolsPackage):
|
|||
# Other dependencies
|
||||
depends_on("bash-completion")
|
||||
depends_on("unzip")
|
||||
depends_on("systemd", when="+systemd")
|
||||
depends_on("libcap", when="+libcap")
|
||||
depends_on("liburing", when="+liburing")
|
||||
depends_on("oneapi-level-zero", when="+levelzero")
|
||||
|
@ -132,10 +123,16 @@ def configure_args(self):
|
|||
args += self.enable_or_disable("nvml")
|
||||
if "+nvml" in self.spec:
|
||||
args += [
|
||||
"--with-nvml=" + join_path(self.spec["cuda"].prefix, "targets", "x86_64-linux")
|
||||
"--with-nvml="
|
||||
+ join_path(
|
||||
self.spec["cuda"].prefix, "targets", f"{self.spec.target.family}-linux"
|
||||
)
|
||||
]
|
||||
|
||||
args += self.enable_or_disable("rawmsr")
|
||||
with when("@develop"):
|
||||
if self.spec.target.family != "x86_64":
|
||||
args += ["--disable-cpuid"]
|
||||
return args
|
||||
|
||||
def setup_run_environment(self, env):
|
||||
|
|
|
@ -44,9 +44,9 @@ class GobjectIntrospection(MesonPackage, AutotoolsPackage):
|
|||
depends_on("cairo+gobject")
|
||||
depends_on("glib@2.78:", when="@1.78")
|
||||
depends_on("glib@2.76:", when="@1.76")
|
||||
depends_on("glib@2.72:", when="@1.72")
|
||||
depends_on("glib@2.58:", when="@1.72")
|
||||
depends_on("glib@2.56:", when="@1.56")
|
||||
depends_on("glib@2.49.2:", when="@1.49.2:")
|
||||
depends_on("glib@2.49.2:", when="@1.49.2")
|
||||
depends_on("glib@2.48.1", when="@1.48.0")
|
||||
|
||||
depends_on("libffi")
|
||||
|
|
39
var/spack/repos/builtin/packages/py-geopmdpy/package.py
Normal file
39
var/spack/repos/builtin/packages/py-geopmdpy/package.py
Normal file
|
@ -0,0 +1,39 @@
|
|||
# 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 PyGeopmdpy(PythonPackage):
|
||||
"""The Global Extensible Open Power Manager (GEOPM) Service provides a
|
||||
user interface for accessing hardware telemetry and settings securely."""
|
||||
|
||||
homepage = "https://geopm.github.io"
|
||||
git = "https://github.com/geopm/geopm.git"
|
||||
url = "https://github.com/geopm/geopm/tarball/v3.0.1"
|
||||
|
||||
maintainers("bgeltz", "cmcantalupo")
|
||||
license("BSD-3-Clause")
|
||||
tags = ["e4s"]
|
||||
|
||||
version("develop", branch="dev")
|
||||
version("3.0.1", sha256="32ba1948de58815ee055470dcdea64593d1113a6cad70ce00ab0286c127f8234")
|
||||
|
||||
depends_on("py-dasbus@1.6.0:", type=("build", "run"))
|
||||
depends_on("py-cffi@1.14.5:", type="run")
|
||||
depends_on("py-psutil@5.8.0:", type="run")
|
||||
depends_on("py-jsonschema@3.2.0:", type="run")
|
||||
depends_on("py-pyyaml@6.0:", type="run")
|
||||
depends_on("py-setuptools@53.0.0:", type="build")
|
||||
|
||||
build_directory = "service"
|
||||
|
||||
@run_before("install")
|
||||
def populate_version(self):
|
||||
# @develop builds will have a version of 0.0.0
|
||||
if not self.spec.version.isdevelop():
|
||||
with working_dir(join_path("service", "geopmdpy")):
|
||||
with open("version.py", "w") as fd:
|
||||
fd.write(f"__version__ = '{self.spec.version}'")
|
|
@ -14,6 +14,8 @@ class PyNatsort(PythonPackage):
|
|||
|
||||
license("MIT")
|
||||
|
||||
version("8.4.0", sha256="e42c6730e93382f743e09eb24b8d48034d81d089bd259183a88e2c4190e3db90")
|
||||
version("8.2.0", sha256="0ce4562913d89a6f413fc68c9937cb0fc32be1268f73ac4b68e2646aeae458c6")
|
||||
version("7.1.1", sha256="ada96d9ca0db0d44b891718ff7baff5ac34cf5b6d9def356c0f7a8ea67ae2113")
|
||||
version("7.1.0", sha256="c3de32c8e5e91cf4f2dd1655b4c167ca4676cc28ce397050fc8d229582a71f0d")
|
||||
version("7.0.1", sha256="1a422a344d089f7a2acba788087ca6253ca47a544bda677721f99516cdfd8668")
|
||||
|
|
141
var/spack/repos/builtin/packages/systemd/package.py
Normal file
141
var/spack/repos/builtin/packages/systemd/package.py
Normal file
|
@ -0,0 +1,141 @@
|
|||
# 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
|
||||
|
||||
from spack.package import *
|
||||
|
||||
|
||||
class Systemd(MesonPackage):
|
||||
"""systemd is a suite of basic building blocks for a Linux system.
|
||||
It provides a system and service manager that runs as PID 1 and
|
||||
starts the rest of the system."""
|
||||
|
||||
homepage = "https://systemd.io/"
|
||||
url = "https://github.com/systemd/systemd/archive/refs/tags/v255.tar.gz"
|
||||
license("GPL-2.0-only")
|
||||
|
||||
version("255", sha256="28854ffb2cb5f9e07fcbdbaf1e03a80b3462a12edeef84893ca2f37b22e4491e")
|
||||
|
||||
depends_on("meson@0.60.0:", type="build")
|
||||
depends_on("ninja", type="build")
|
||||
depends_on("py-jinja2", type="build")
|
||||
depends_on("util-linux@2.30:") # libmount
|
||||
depends_on("gperf")
|
||||
depends_on("libcap")
|
||||
depends_on("pkgconfig")
|
||||
|
||||
conflicts("%gcc@:8.4")
|
||||
conflicts("%clang@:7")
|
||||
|
||||
def meson_args(self):
|
||||
# Setting prefix is required here because without this the installation
|
||||
# prefix would be repeated twice because of the required use of DESTDIR
|
||||
# during the install phase.
|
||||
# Similarly libdir must be set to prevent the regular prefix path from
|
||||
# influencing the placement of the installed files.
|
||||
args = [
|
||||
"-Dprefix=/",
|
||||
"-Dlibdir=/lib",
|
||||
"-Dlibidn2=disabled",
|
||||
"-Dopenssl=disabled",
|
||||
"-Dpcre2=disabled",
|
||||
"-Dinitrd=false",
|
||||
"-Dresolve=false",
|
||||
"-Defi=false",
|
||||
"-Dtpm=false",
|
||||
"-Dcreate-log-dirs=false",
|
||||
"-Dseccomp=disabled",
|
||||
"-Dselinux=disabled",
|
||||
"-Dapparmor=disabled",
|
||||
"-Dsmack=false",
|
||||
"-Dpolkit=disabled",
|
||||
"-Dima=false",
|
||||
"-Dacl=disabled",
|
||||
"-Daudit=disabled",
|
||||
"-Dblkid=disabled",
|
||||
"-Dfdisk=disabled",
|
||||
"-Dkmod=false",
|
||||
"-Dpam=disabled",
|
||||
"-Dpasswdqc=disabled",
|
||||
"-Dpwquality=disabled",
|
||||
"-Dmicrohttpd=disabled",
|
||||
"-Dlibcryptsetup=disabled",
|
||||
"-Dlibcurl=disabled",
|
||||
"-Dlibiptc=disabled",
|
||||
"-Dqrencode=disabled",
|
||||
"-Dgcrypt=disabled",
|
||||
"-Dgnutls=disabled",
|
||||
"-Dp11kit=disabled",
|
||||
"-Dlibfido2=disabled",
|
||||
"-Dtpm2=disabled",
|
||||
"-Delfutils=disabled",
|
||||
"-Dzlib=disabled",
|
||||
"-Dbzip2=disabled",
|
||||
"-Dxz=disabled",
|
||||
"-Dlz4=disabled",
|
||||
"-Dzstd=disabled",
|
||||
"-Dxkbcommon=disabled",
|
||||
"-Dbootloader=disabled",
|
||||
"-Dnscd=false", # support for...
|
||||
"-Dutmp=false",
|
||||
"-Dhibernate=false",
|
||||
"-Dldconfig=false",
|
||||
"-Denvironment-d=false",
|
||||
"-Dbinfmt=false",
|
||||
"-Dremote=disabled",
|
||||
"-Dfirstboot=false",
|
||||
"-Drandomseed=false",
|
||||
"-Dbacklight=false",
|
||||
"-Dvconsole=false",
|
||||
"-Dvmspawn=disabled",
|
||||
"-Dquotacheck=false",
|
||||
"-Dsysusers=false",
|
||||
"-Dstoragetm=false",
|
||||
"-Dtmpfiles=false",
|
||||
"-Dimportd=disabled",
|
||||
"-Dhwdb=false",
|
||||
"-Drfkill=false",
|
||||
"-Dgshadow=false",
|
||||
"-Dkmod=disabled",
|
||||
"-Dxenctrl=disabled",
|
||||
"-Drepart=disabled", # install the...
|
||||
"-Dsysupdate=disabled",
|
||||
"-Dcoredump=false",
|
||||
"-Dpstore=false",
|
||||
"-Doomd=false",
|
||||
"-Dlogind=false",
|
||||
"-Dhostnamed=false",
|
||||
"-Dlocaled=false",
|
||||
"-Dmachined=false",
|
||||
"-Dportabled=false",
|
||||
"-Dsysext=false",
|
||||
"-Duserdb=false",
|
||||
"-Dhomed=disabled",
|
||||
"-Dnetworkd=false",
|
||||
"-Dtimedated=false",
|
||||
"-Dtimesyncd=false",
|
||||
"-Dxdg-autostart=false",
|
||||
"-Ddefault-network=false", # install...
|
||||
"-Dnss-myhostname=false",
|
||||
"-Dnss-mymachines=disabled",
|
||||
"-Dnss-resolve=disabled",
|
||||
"-Dnss-systemd=false",
|
||||
"-Dhtml=disabled",
|
||||
"-Dtranslations=false",
|
||||
"-Dinstall-sysconfdir=false",
|
||||
"-Dkernel-install=false",
|
||||
"-Dukify=disabled",
|
||||
"-Danalyze=false",
|
||||
]
|
||||
|
||||
return args
|
||||
|
||||
def install(self, spec, prefix):
|
||||
# DESTDIR is required because without it the install phase will attempt
|
||||
# to install files in the root file system by default.
|
||||
os.environ["DESTDIR"] = prefix
|
||||
with working_dir(self.build_directory):
|
||||
ninja("install")
|
|
@ -18,6 +18,7 @@ class UtilLinux(AutotoolsPackage):
|
|||
|
||||
license("GPL-2.0-only")
|
||||
|
||||
version("2.39.3", sha256="40ea07584d56c310455471afa92c119ec259776a561af7159cc802344c2c370d")
|
||||
version("2.39.1", sha256="d7c8a58eb2c7248a32754eb3a3b6772e368b984d9907ada834c2cf3e13024270")
|
||||
version("2.38.1", sha256="0820eb8eea90408047e3715424bc6be771417047f683950fecb4bdd2e2cbbc6e")
|
||||
version("2.38", sha256="c31d4e54f30b56b0f7ec8b342658c07de81378f2c067941c2b886da356f8ad42")
|
||||
|
|
Loading…
Reference in a new issue