summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--var/spack/repos/builtin/packages/lci/package.py197
1 files changed, 197 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/lci/package.py b/var/spack/repos/builtin/packages/lci/package.py
new file mode 100644
index 0000000000..1c3a3260ad
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lci/package.py
@@ -0,0 +1,197 @@
+# 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 *
+
+
+def is_positive_int(val):
+ try:
+ return int(val) > 0
+ except ValueError:
+ return val == "auto"
+
+
+class Lci(CMakePackage):
+ """LCI: the Lightweight Communication Interface"""
+
+ homepage = "https://github.com/uiuc-hpc/lci"
+ url = "https://github.com/uiuc-hpc/lci/archive/refs/tags/v1.7.7.tar.gz"
+ git = "https://github.com/uiuc-hpc/lci.git"
+
+ maintainers("omor1", "JiakunYan")
+
+ license("MIT")
+
+ version("master", branch="master")
+ version("1.7.7", sha256="c310f699b7b4317a2f5c3557f85c240fe3c85d2d06618dd248434ef807d53779")
+ version("1.7.6", sha256="c88ccea2ad277ed38fc23187771b52b6fb212ed4429114717bfa8887ed21665c")
+ version("1.7.5", sha256="13e4084c9e7aaf55966ba5aa0423164b8fd21ee7526fc62017b3c9b3db99cb83")
+ version("1.7.4", sha256="00c6ef06bf90a02b55c72076dedf912580dcb1fb59fdc0e771d9e1a71283b72f")
+ version("1.7.3", sha256="3c47d51d4925e6700294ac060c88a73c26ca6e9df5b4010d0e90b0bf5e505040")
+
+ variant(
+ "fabric",
+ default="ibv",
+ values=("ofi", "ibv", "ucx"),
+ multi=False,
+ description="Communication fabric",
+ )
+
+ variant("examples", default=False, description="Build LCI examples")
+ variant("tests", default=False, description="Build LCI tests")
+ variant("benchmarks", default=False, description="Build LCI benchmarks")
+ variant("docs", default=False, description="Build LCI documentation")
+
+ variant(
+ "cache-line",
+ default="auto",
+ values=is_positive_int,
+ description="Cache line size, in bytes",
+ )
+
+ variant(
+ "multithread-progress",
+ default=True,
+ description="Enable thread-safe LCI_progress function",
+ )
+ variant("dreg", default="auto", description="Whether to use registration cache by default")
+ variant(
+ "packet-size",
+ default="auto",
+ values=is_positive_int,
+ description="Size of packet by default",
+ )
+ variant(
+ "npackets",
+ default="auto",
+ values=is_positive_int,
+ description="Number of packets by default",
+ )
+ variant(
+ "fabric-nsends-max",
+ default="auto",
+ values=is_positive_int,
+ description="Max number of send descriptors that can be posted (send queue length) "
+ "at the fabric layer by default",
+ )
+ variant(
+ "fabric-nrecvs-max",
+ default="auto",
+ values=is_positive_int,
+ description="Max number of receive descriptors that can be posted (receive queue length) "
+ "at the fabric layer by default",
+ )
+ variant(
+ "fabric-ncqes-max",
+ default="auto",
+ values=is_positive_int,
+ description="Max number of completion queue entries that can be posted "
+ "(completion queue length) at the fabric layer by default",
+ )
+
+ variant("debug", default=False, description="Enable the debug mode")
+ variant("pcounter", default=False, description="Enable the performance counters")
+ variant(
+ "papi", default=False, description="Enable the PAPI plugin to collect hardware counters"
+ )
+
+ variant(
+ "enable-pm",
+ description="Process management backends to enable",
+ values=disjoint_sets(("auto",), ("pmix", "pmi2", "pmi1", "mpi", "local"))
+ .prohibit_empty_set()
+ .with_default("auto")
+ .with_non_feature_values("auto"),
+ )
+ variant(
+ "default-pm",
+ description="Order of process management backends to try by default",
+ values=disjoint_sets(("auto",), ("pmix", "pmi2", "pmi1", "mpi", "local"), ("cray",))
+ .prohibit_empty_set()
+ .with_default("auto")
+ .with_non_feature_values("auto"),
+ )
+
+ generator("ninja", "make", default="ninja")
+
+ depends_on("cmake@3.12:", type="build")
+ depends_on("libfabric", when="fabric=ofi")
+ depends_on("rdma-core", when="fabric=ibv")
+ depends_on("ucx", when="fabric=ucx")
+ depends_on("mpi", when="enable-pm=mpi")
+ depends_on("papi", when="+papi")
+ depends_on("doxygen", when="+docs")
+ depends_on("cray-pmi", when="default-pm=cray")
+
+ def cmake_args(self):
+ args = [
+ self.define_from_variant("LCI_SERVER", "fabric"),
+ self.define("LCI_FORCE_SERVER", True),
+ self.define_from_variant("LCI_WITH_EXAMPLES", "examples"),
+ self.define_from_variant("LCI_WITH_TESTS", "tests"),
+ self.define_from_variant("LCI_WITH_BENCHMARKS", "benchmarks"),
+ self.define_from_variant("LCI_WITH_DOC", "docs"),
+ self.define_from_variant("LCI_ENABLE_MULTITHREAD_PROGRESS", "multithread-progress"),
+ self.define_from_variant("LCI_DEBUG", "debug"),
+ self.define_from_variant("LCI_USE_PERFORMANCE_COUNTER", "pcounter"),
+ self.define_from_variant("LCI_USE_PAPI", "papi"),
+ ]
+
+ if not self.spec.satisfies("dreg=auto"):
+ args.append(self.define_from_variant("LCI_USE_DREG_DEFAULT", "dreg"))
+
+ if not self.spec.satisfies("enable-pm=auto"):
+ args.extend(
+ [
+ self.define(
+ "LCT_PMI_BACKEND_ENABLE_PMI1", self.spec.satisfies("enable-pm=pmi1")
+ ),
+ self.define(
+ "LCT_PMI_BACKEND_ENABLE_PMI2", self.spec.satisfies("enable-pm=pmi2")
+ ),
+ self.define(
+ "LCT_PMI_BACKEND_ENABLE_MPI", self.spec.satisfies("enable-pm=mpi")
+ ),
+ self.define(
+ "LCT_PMI_BACKEND_ENABLE_PMIX", self.spec.satisfies("enable-pm=pmix")
+ ),
+ ]
+ )
+
+ if self.spec.satisfies("default-pm=cray"):
+ args.extend(
+ [
+ self.define("LCI_PMI_BACKEND_DEFAULT", "pmi1"),
+ self.define("LCT_PMI_BACKEND_ENABLE_PMI1", True),
+ ]
+ )
+ elif not self.spec.satisfies("default-pm=auto"):
+ args.append(self.define_from_variant("LCI_PMI_BACKEND_DEFAULT", "default-pm"))
+
+ if not self.spec.satisfies("cache-line=auto"):
+ args.append(self.define_from_variant("LCI_CACHE_LINE", "cache-line"))
+
+ if not self.spec.satisfies("packet-size=auto"):
+ args.append(self.define_from_variant("LCI_PACKET_SIZE_DEFAULT", "packet-size"))
+
+ if not self.spec.satisfies("npackets=auto"):
+ args.append(self.define_from_variant("LCI_SERVER_NUM_PKTS_DEFAULT", "npackets"))
+
+ if not self.spec.satisfies("fabric-nsends-max=auto"):
+ args.append(
+ self.define_from_variant("LCI_SERVER_MAX_SENDS_DEFAULT", "fabric-nsends-max")
+ )
+
+ if not self.spec.satisfies("fabric-nrecvs-max=auto"):
+ args.append(
+ self.define_from_variant("LCI_SERVER_MAX_RECVS_DEFAULT", "fabric-nrecvs-max")
+ )
+
+ if not self.spec.satisfies("fabric-ncqes-max=auto"):
+ args.append(
+ self.define_from_variant("LCI_SERVER_MAX_CQES_DEFAULT", "fabric-ncqes-max")
+ )
+
+ return args