From 93ea3f51e77299e4e3c122f0b8f2979c9ac2ec9c Mon Sep 17 00:00:00 2001 From: Alec Scott Date: Mon, 24 Mar 2025 11:07:34 -0400 Subject: [PATCH 01/23] zig: add v0.14.0 (#49629) * zig: add v0.14.0 * Fix commit hash * Fix tag for v0.14.0 --- var/spack/repos/builtin/packages/zig/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/var/spack/repos/builtin/packages/zig/package.py b/var/spack/repos/builtin/packages/zig/package.py index 73a39beff97..651e835d023 100644 --- a/var/spack/repos/builtin/packages/zig/package.py +++ b/var/spack/repos/builtin/packages/zig/package.py @@ -16,6 +16,7 @@ class Zig(CMakePackage): license("MIT") + version("0.14.0", tag="0.14.0", commit="5ad91a646a753cc3eecd8751e61cf458dadd9ac4") version("0.13.0", tag="0.13.0", commit="cf90dfd3098bef5b3c22d5ab026173b3c357f2dd") version("0.12.0", tag="0.12.0", commit="a685ab1499d6560c523f0dbce2890dc140671e43") version("0.11.0", tag="0.11.0", commit="67709b638224ac03820226c6744d8b6ead59184c") From 151af13be2307525f1bf765e59f5817942063b48 Mon Sep 17 00:00:00 2001 From: Ryan Krattiger <80296582+kwryankrattiger@users.noreply.github.com> Date: Mon, 24 Mar 2025 11:25:45 -0500 Subject: [PATCH 02/23] Unit tests: error message when running parallel without xdist (#49632) --- lib/spack/spack/cmd/unit_test.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/spack/spack/cmd/unit_test.py b/lib/spack/spack/cmd/unit_test.py index eadd45ba824..dcd7caf6b9c 100644 --- a/lib/spack/spack/cmd/unit_test.py +++ b/lib/spack/spack/cmd/unit_test.py @@ -17,6 +17,7 @@ pytest = None # type: ignore import llnl.util.filesystem +import llnl.util.tty as tty import llnl.util.tty.color as color from llnl.util.tty.colify import colify @@ -236,6 +237,12 @@ def unit_test(parser, args, unknown_args): pytest_root = spack.extensions.load_extension(args.extension) if args.numprocesses is not None and args.numprocesses > 1: + try: + import xdist # noqa: F401 + except ImportError: + tty.error("parallel unit-test requires pytest-xdist module") + return 1 + pytest_args.extend( [ "--dist", From 5d0b5ed73cf1f35acf5450d4709436fce02709ad Mon Sep 17 00:00:00 2001 From: psakievich Date: Mon, 24 Mar 2025 10:29:27 -0600 Subject: [PATCH 03/23] EnvironmentModifications: fix reverse prepend/append (#49645) pop a single item from front / back resp. instead of remove all instances --- lib/spack/spack/test/util/environment.py | 12 ++++-- lib/spack/spack/util/environment.py | 52 +++++++++++++++++++++++- 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/lib/spack/spack/test/util/environment.py b/lib/spack/spack/test/util/environment.py index 191bfd88073..cbfc523df65 100644 --- a/lib/spack/spack/test/util/environment.py +++ b/lib/spack/spack/test/util/environment.py @@ -128,17 +128,21 @@ def test_dump_environment(prepare_environment_for_tests, shell_as, shell, tmpdir def test_reverse_environment_modifications(working_env): + prepend_val = os.sep + os.path.join("new", "path", "prepended") + append_val = os.sep + os.path.join("new", "path", "appended") + start_env = { - "PREPEND_PATH": os.sep + os.path.join("path", "to", "prepend", "to"), - "APPEND_PATH": os.sep + os.path.join("path", "to", "append", "to"), + "PREPEND_PATH": prepend_val + os.pathsep + os.path.join("path", "to", "prepend", "to"), + "APPEND_PATH": os.path.sep + + os.path.join("path", "to", "append", "to" + os.pathsep + append_val), "UNSET": "var_to_unset", "APPEND_FLAGS": "flags to append to", } to_reverse = envutil.EnvironmentModifications() - to_reverse.prepend_path("PREPEND_PATH", "/new/path/prepended") - to_reverse.append_path("APPEND_PATH", "/new/path/appended") + to_reverse.prepend_path("PREPEND_PATH", prepend_val) + to_reverse.append_path("APPEND_PATH", append_val) to_reverse.set_path("SET_PATH", ["/one/set/path", "/two/set/path"]) to_reverse.set("SET", "a var") to_reverse.unset("UNSET") diff --git a/lib/spack/spack/util/environment.py b/lib/spack/spack/util/environment.py index a22351a2ffe..e52807eda74 100644 --- a/lib/spack/spack/util/environment.py +++ b/lib/spack/spack/util/environment.py @@ -363,6 +363,30 @@ def execute(self, env: MutableMapping[str, str]): env[self.name] = self.separator.join(directories) +class RemoveFirstPath(NameValueModifier): + def execute(self, env: MutableMapping[str, str]): + tty.debug(f"RemoveFirstPath: {self.name}-{str(self.value)}", level=3) + environment_value = env.get(self.name, "") + directories = environment_value.split(self.separator) + directories = [path_to_os_path(os.path.normpath(x)).pop() for x in directories] + val = path_to_os_path(os.path.normpath(self.value)).pop() + if val in directories: + directories.remove(val) + env[self.name] = self.separator.join(directories) + + +class RemoveLastPath(NameValueModifier): + def execute(self, env: MutableMapping[str, str]): + tty.debug(f"RemoveLastPath: {self.name}-{str(self.value)}", level=3) + environment_value = env.get(self.name, "") + directories = environment_value.split(self.separator)[::-1] + directories = [path_to_os_path(os.path.normpath(x)).pop() for x in directories] + val = path_to_os_path(os.path.normpath(self.value)).pop() + if val in directories: + directories.remove(val) + env[self.name] = self.separator.join(directories[::-1]) + + class RemovePath(NameValueModifier): def execute(self, env: MutableMapping[str, str]): tty.debug(f"RemovePath: {self.name}-{str(self.value)}", level=3) @@ -533,6 +557,30 @@ def prepend_path(self, name: str, path: str, separator: str = os.pathsep): item = PrependPath(name, path, separator=separator, trace=self._trace()) self.env_modifications.append(item) + @system_env_normalize + def remove_first_path(self, name: str, path: str, separator: str = os.pathsep): + """Stores a request to remove first instance of path from a list of paths. + + Args: + name: name of the environment variable + path: path to be removed + separator: separator for the paths (default: os.pathsep) + """ + item = RemoveFirstPath(name, path, separator=separator, trace=self._trace()) + self.env_modifications.append(item) + + @system_env_normalize + def remove_last_path(self, name: str, path: str, separator: str = os.pathsep): + """Stores a request to remove last instance of path from a list of paths. + + Args: + name: name of the environment variable + path: path to be removed + separator: separator for the paths (default: os.pathsep) + """ + item = RemoveLastPath(name, path, separator=separator, trace=self._trace()) + self.env_modifications.append(item) + @system_env_normalize def remove_path(self, name: str, path: str, separator: str = os.pathsep): """Stores a request to remove a path from a list of paths. @@ -613,9 +661,9 @@ def reversed(self) -> "EnvironmentModifications": tty.debug("Reversing `Set` environment operation may lose the original value") rev.unset(envmod.name) elif isinstance(envmod, AppendPath): - rev.remove_path(envmod.name, envmod.value) + rev.remove_last_path(envmod.name, envmod.value) elif isinstance(envmod, PrependPath): - rev.remove_path(envmod.name, envmod.value) + rev.remove_first_path(envmod.name, envmod.value) elif isinstance(envmod, SetPath): tty.debug("Reversing `SetPath` environment operation may lose the original value") rev.unset(envmod.name) From 99479b7e77cc977a3925340f1863710988aae347 Mon Sep 17 00:00:00 2001 From: Sreenivasa Murthy Kolam Date: Mon, 24 Mar 2025 22:27:39 +0530 Subject: [PATCH 04/23] rocprofiler-sdk: new package (#49406) * rocprofiler-sdk new package * add license, rocm tag --- .../packages/rocprofiler-sdk/package.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 var/spack/repos/builtin/packages/rocprofiler-sdk/package.py diff --git a/var/spack/repos/builtin/packages/rocprofiler-sdk/package.py b/var/spack/repos/builtin/packages/rocprofiler-sdk/package.py new file mode 100644 index 00000000000..86b1ca5cf32 --- /dev/null +++ b/var/spack/repos/builtin/packages/rocprofiler-sdk/package.py @@ -0,0 +1,56 @@ +# Copyright Spack Project Developers. See COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + + +from spack.package import * + + +class RocprofilerSdk(CMakePackage): + """ROCProfiler-SDK is AMD’s new and improved tooling infrastructure, providing a + hardware-specific low-level performance analysis interface for profiling and + tracing GPU compute applications.""" + + homepage = "https://github.com/ROCm/rocprofiler-sdk" + git = "https://github.com/ROCm/rocprofiler-sdk.git" + url = "https://github.com/ROCm/rocprofiler-sdk/archive/refs/tags/rocm-6.3.2.tar.gz" + + tags = ["rocm"] + + maintainers("afzpatel", "srekolam", "renjithravindrankannath") + + license("MIT") + + version( + "6.3.2", + tag="rocm-6.3.2", + commit="f5d3fd3d3460c74cb8935f0021e31f0bff5cb305", + submodules=True, + ) + version( + "6.3.1", + tag="rocm-6.3.1", + commit="38ac1c8f7d62cbb702f53c7085be16bf1943369a", + submodules=True, + ) + version( + "6.3.0", + tag="rocm-6.3.0", + commit="38ac1c8f7d62cbb702f53c7085be16bf1943369a", + submodules=True, + ) + version( + "6.2.4", + tag="rocm-6.2.4", + commit="03fe8df3622a97161699439dfe933ef8e9e7db8a", + submodules=True, + ) + depends_on("c", type="build") + depends_on("cxx", type="build") + + for ver in ["6.2.4", "6.3.0", "6.3.1", "6.3.2"]: + depends_on(f"hip@{ver}", when=f"@{ver}") + depends_on(f"rocm-cmake@{ver}", when=f"@{ver}") + depends_on(f"aqlprofile@{ver}", when=f"@{ver}") + depends_on(f"rccl@{ver}", when=f"@{ver}") + depends_on(f"rocprofiler-register@{ver}", when=f"@{ver}") From 2c8afc5443f60be3d3fb3612783834ba020303e1 Mon Sep 17 00:00:00 2001 From: Andrey Perestoronin Date: Mon, 24 Mar 2025 17:02:55 +0000 Subject: [PATCH 05/23] Add new 2025.1.0 release for intel-oneapi products (#49642) * Add new versions of intel-oneapi products * restore advisor 2025.0.0 release * fix styling --- .../builtin/packages/intel-oneapi-advisor/package.py | 6 ++++++ .../builtin/packages/intel-oneapi-ccl/package.py | 6 ++++++ .../packages/intel-oneapi-compilers/package.py | 11 +++++++++++ .../builtin/packages/intel-oneapi-dal/package.py | 6 ++++++ .../builtin/packages/intel-oneapi-dnn/package.py | 6 ++++++ .../builtin/packages/intel-oneapi-dpct/package.py | 6 ++++++ .../builtin/packages/intel-oneapi-dpl/package.py | 6 ++++++ .../builtin/packages/intel-oneapi-ipp/package.py | 6 ++++++ .../builtin/packages/intel-oneapi-ippcp/package.py | 6 ++++++ .../builtin/packages/intel-oneapi-mkl/package.py | 6 ++++++ .../builtin/packages/intel-oneapi-mpi/package.py | 6 ++++++ .../builtin/packages/intel-oneapi-tbb/package.py | 6 ++++++ .../builtin/packages/intel-oneapi-vtune/package.py | 6 ++++++ 13 files changed, 83 insertions(+) diff --git a/var/spack/repos/builtin/packages/intel-oneapi-advisor/package.py b/var/spack/repos/builtin/packages/intel-oneapi-advisor/package.py index df9d67be40e..597b9dc4d0e 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-advisor/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-advisor/package.py @@ -23,6 +23,12 @@ class IntelOneapiAdvisor(IntelOneApiLibraryPackageWithSdk): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/advisor.html" ) + version( + "2025.1.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/d9566edf-d6dd-4b85-9dda-efdf0ebb199a/intel-advisor-2025.1.0.507_offline.sh", + sha256="7c1222acaef7661e1a444f20627022c0595c21db4678ce26a5922612ddbd868c", + expand=False, + ) version( "2025.0.0", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/fe95ae4a-3692-4e31-919d-3e7bdf5832f1/intel-advisor-2025.0.0.798_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-ccl/package.py b/var/spack/repos/builtin/packages/intel-oneapi-ccl/package.py index ddeb80a3b0d..c695aeb0215 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-ccl/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-ccl/package.py @@ -26,6 +26,12 @@ class IntelOneapiCcl(IntelOneApiLibraryPackage): depends_on("intel-oneapi-mpi") + version( + "2021.15.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/8f5d5e38-1626-41c1-9c20-44d966c43ae1/intel-oneccl-2021.15.0.401_offline.sh", + sha256="f6eefe959bcddc7b64bdc52d212ea0a0495c7a18c000f8b3707949695211131a", + expand=False, + ) version( "2021.14.0", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/88a7a6db-816c-4cd5-993f-821729da5648/intel-oneccl-2021.14.0.506_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py b/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py index 4e7dfdf634e..7e6961af478 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py @@ -9,6 +9,17 @@ from spack.package import * versions = [ + { + "version": "2025.1.0", + "cpp": { + "url": "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/cd63be99-88b0-4981-bea1-2034fe17f5cf/intel-dpcpp-cpp-compiler-2025.1.0.573_offline.sh", + "sha256": "53489afcc9534e30ad807e94b158abfccf6a7eb3658f59655122d92fbad8fa72", + }, + "ftn": { + "url": "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/577ebc28-d0f6-492b-9a43-b04354ce99da/intel-fortran-compiler-2025.1.0.601_offline.sh", + "sha256": "27016329dede8369679f22b4e9f67936837ce7972a1ef4f5c76ee87d7c963c81", + }, + }, { "version": "2025.0.4", "cpp": { diff --git a/var/spack/repos/builtin/packages/intel-oneapi-dal/package.py b/var/spack/repos/builtin/packages/intel-oneapi-dal/package.py index 1a76d6f818a..b18fcc513d2 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-dal/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-dal/package.py @@ -25,6 +25,12 @@ class IntelOneapiDal(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onedal.html" ) + version( + "2025.4.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/e4da59ef-aa3a-4223-b3a0-4728014113e6/intel-onedal-2025.4.0.655_offline.sh", + sha256="844248e3d4e30ce9eae94bb7a6cc13ad91a419e5251d753eff07d899628b8173", + expand=False, + ) version( "2025.0.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/928ba1dd-c2bc-41f6-a35f-8de41ddf055a/intel-onedal-2025.0.1.19_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-dnn/package.py b/var/spack/repos/builtin/packages/intel-oneapi-dnn/package.py index c699fee0df4..73b4095ad41 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-dnn/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-dnn/package.py @@ -25,6 +25,12 @@ class IntelOneapiDnn(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onednn.html" ) + version( + "2025.1.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9cf476b7-5b8b-4995-ac33-91a446bc0c6e/intel-onednn-2025.1.0.653_offline.sh", + sha256="7dc6d730c01fa7a57485ba58144679f4b35605277c1ab3f0b385cf735f438a44", + expand=False, + ) version( "2025.0.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6cfa324b-1591-4c0b-b8d2-97c5b3b272a7/intel-onednn-2025.0.1.12_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-dpct/package.py b/var/spack/repos/builtin/packages/intel-oneapi-dpct/package.py index d4f761af2e8..c9868d9c33a 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-dpct/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-dpct/package.py @@ -18,6 +18,12 @@ class IntelOneapiDpct(IntelOneApiPackage): homepage = "https://www.intel.com/content/www/us/en/developer/tools/oneapi/dpc-compatibility-tool.html#gs.2p8km6" + version( + "2025.1.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/2c7f388d-d457-4d91-8ad9-72771f711ec2/intel-dpcpp-ct-2025.1.0.454_offline.sh", + sha256="d3be6f6711499707052f965ffbad3df3d95de1e8fd8a64e1b1fc70e4e4886b66", + expand=False, + ) version( "2025.0.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6d1e0867-72b4-4670-8efc-3586894ad15f/intel-dpcpp-ct-2025.0.1.19_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-dpl/package.py b/var/spack/repos/builtin/packages/intel-oneapi-dpl/package.py index 94713cc342c..c9785ee58fd 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-dpl/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-dpl/package.py @@ -21,6 +21,12 @@ class IntelOneapiDpl(IntelOneApiLibraryPackage): homepage = "https://github.com/oneapi-src/oneDPL" + version( + "2022.8.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/b8f3da7a-9df5-4c04-b831-c46e9b636c70/intel-onedpl-2022.8.0.340_offline.sh", + sha256="0fd73d2fed182106069fe084daa74bb5369ba400a08b5cf61a932028dbaafdcf", + expand=False, + ) version( "2022.7.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/de3c613f-829c-4bdc-aa2b-6129eece3bd9/intel-onedpl-2022.7.1.15_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-ipp/package.py b/var/spack/repos/builtin/packages/intel-oneapi-ipp/package.py index ffa2e72fa52..1f59079803b 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-ipp/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-ipp/package.py @@ -26,6 +26,12 @@ class IntelOneapiIpp(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/ipp.html" ) + version( + "2022.1.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/a5a44f80-a3ef-45c3-a7be-d50157434d7c/intel-ipp-2022.1.0.649_offline.sh", + sha256="32aa60f225466ee066032c645448504958c8ae681505061119e63e1fcdb4090f", + expand=False, + ) version( "2022.0.0", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/acf220fa-326d-4f6e-9b63-f2da47b6f680/intel-ipp-2022.0.0.809_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-ippcp/package.py b/var/spack/repos/builtin/packages/intel-oneapi-ippcp/package.py index 4c7185d4747..17546a1590e 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-ippcp/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-ippcp/package.py @@ -27,6 +27,12 @@ class IntelOneapiIppcp(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/ipp.html" ) + version( + "2025.1.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/02532432-5930-4ac7-8e16-19739bf83fd2/intel-cryptography-primitives-library-2025.1.0.390_offline.sh", + sha256="d16ff8cd46ef08e472816f9deb5a0a0dfaca11f4987a223608b818586412eac8", + expand=False, + ) version( "2025.0.0", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/4592da40-6f1c-4d4b-aa5b-0bb97ec66c92/intel-cryptography-primitives-library-2025.0.0.616_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py b/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py index 5579de463ff..16000f3f6b0 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py @@ -24,6 +24,12 @@ class IntelOneapiMkl(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onemkl.html" ) + version( + "2025.1.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/dc93af13-2b3f-40c3-a41b-2bc05a707a80/intel-onemkl-2025.1.0.803_offline.sh", + sha256="80a4b1338b48b3fbee55a8dc784f92e5e88d618f1b99d80f5f207a00c86a6638", + expand=False, + ) version( "2025.0.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/246ea40e-5aa7-42a4-81fa-0c029dc8650f/intel-onemkl-2025.0.1.16_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py b/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py index 609ba05c167..3c2796f06b4 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py @@ -20,6 +20,12 @@ class IntelOneapiMpi(IntelOneApiLibraryPackage): homepage = "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/mpi-library.html" + version( + "2021.15.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6b6e395e-8f38-4da3-913d-90a2bcf41028/intel-mpi-2021.15.0.495_offline.sh", + sha256="d4ad297174ce3837444468645e13cfe78f11d9bf2ad9ade2057b2668cccd9385", + expand=False, + ) version( "2021.14.2", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/201b2570-bc4f-41ee-a6c8-6f7a71a4b840/intel-mpi-2021.14.2.9_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-tbb/package.py b/var/spack/repos/builtin/packages/intel-oneapi-tbb/package.py index ecad4af4b20..1dc2ab29972 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-tbb/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-tbb/package.py @@ -21,6 +21,12 @@ class IntelOneapiTbb(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onetbb.html" ) + version( + "2022.1.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/5aeb45ec-41a8-46d7-b7b5-1f5ee4f55d61/intel-onetbb-2022.1.0.427_offline.sh", + sha256="549584e5f9b83c655cfcad5ad86af7fc3f701458e5dd9cbca31dc099e4761434", + expand=False, + ) version( "2022.0.0", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9d5f5bd1-6021-41f7-aa3e-36d44c4ac190/intel-onetbb-2022.0.0.403_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-vtune/package.py b/var/spack/repos/builtin/packages/intel-oneapi-vtune/package.py index ad5d7e83fd1..71a489d8e98 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-vtune/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-vtune/package.py @@ -24,6 +24,12 @@ class IntelOneapiVtune(IntelOneApiLibraryPackageWithSdk): homepage = "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/vtune-profiler.html" + version( + "2025.1.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/05b14253-a457-4472-bcf7-d98676542072/intel-vtune-2025.1.0.686_offline.sh", + sha256="26407e12d501e544431535da5e9f3ea2ac56c9c53660b410c3096f2b9aae2a89", + expand=False, + ) version( "2025.0.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1277cea4-34b7-4221-bdbc-4f47a9a5592d/intel-vtune-2025.0.1.16_offline.sh", From e15a3b07171a23ceb48af2be55af8c0a36d3e087 Mon Sep 17 00:00:00 2001 From: Afzal Patel <122491982+afzpatel@users.noreply.github.com> Date: Mon, 24 Mar 2025 13:04:19 -0400 Subject: [PATCH 06/23] hip: fix hip-tests error (#49563) --- var/spack/repos/builtin/packages/hip/package.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/var/spack/repos/builtin/packages/hip/package.py b/var/spack/repos/builtin/packages/hip/package.py index 0dfae26717e..57e1e80d0c0 100644 --- a/var/spack/repos/builtin/packages/hip/package.py +++ b/var/spack/repos/builtin/packages/hip/package.py @@ -343,7 +343,7 @@ class Hip(CMakePackage): patch("0014-remove-compiler-rt-linkage-for-host.6.0.patch", when="@6.0") patch("0014-remove-compiler-rt-linkage-for-host.6.1.patch", when="@6.1") patch("0015-reverting-operator-mixup-fix-for-slate.patch", when="@5.6:6.0") - patch("0018-reverting-hipMemoryType-with-memoryType.patch", when="@6.0:") + patch("0018-reverting-hipMemoryType-with-memoryType.patch", when="@6.0:6.2") # See https://github.com/ROCm/HIP/pull/3206 patch( @@ -563,6 +563,13 @@ def patch(self): "clr/hipamd/hip-config-amd.cmake", string=True, ) + if self.spec.satisfies("@6.3: +rocm"): + filter_file( + '"${ROCM_PATH}/llvm"', + self.spec["llvm-amdgpu"].prefix, + "clr/hipamd/hip-config-amd.cmake.in", + string=True, + ) perl = self.spec["perl"].command if self.spec.satisfies("@:5.5"): From ae48faa83a32d3bd67ddd94700c6391b1d276cfd Mon Sep 17 00:00:00 2001 From: Stephen Nicholas Swatman Date: Mon, 24 Mar 2025 18:13:03 +0100 Subject: [PATCH 07/23] detray: add v0.90.0-v0.93.0 (#49658) This commit adds detray versions 0.90.0, 0.91.0, 0.92.0, and 0.93.0. --- var/spack/repos/builtin/packages/detray/package.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/var/spack/repos/builtin/packages/detray/package.py b/var/spack/repos/builtin/packages/detray/package.py index 9c85065618a..c6835a70e60 100644 --- a/var/spack/repos/builtin/packages/detray/package.py +++ b/var/spack/repos/builtin/packages/detray/package.py @@ -19,6 +19,10 @@ class Detray(CMakePackage): license("MPL-2.0", checked_by="stephenswat") + version("0.93.0", sha256="7d56771d213649de836905efbb21b5be59cc966b00417b0b1fa85bfe12ac92da") + version("0.92.0", sha256="512669c1ea51936b0fe871fb5a33450b54161e811e48cc51445dc83fe3338c42") + version("0.91.0", sha256="6aa822f8bdc7339286d2255079a00ecc3204c0e194c5cf9d0fc5b9262c3cfb39") + version("0.90.0", sha256="f965429c33622a48c5a7b007086e22125ddd384860c4de3e010d72e05b5cca70") version("0.89.0", sha256="b893b7f5434c1c9951433876ef43d1db1b08d36749f062e261b4e6d48e77d5db") version("0.88.1", sha256="89134c86c6857cb3a821181e3bb0565ebb726dd8b1245678db1681483d792cf9") version("0.88.0", sha256="bda15501c9c96af961e24ce243982f62051c535b9fe458fb28336a19b54eb47d") From 25761b13e5d83a675c78e24792f0d7f3148d3c92 Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Mon, 24 Mar 2025 12:25:20 -0600 Subject: [PATCH 08/23] kokkos-kernels: rewrite package to fix errors (#49598) * kokkos-kernels: fix eti dependency statements. * kokkos-kernels: rewrite package. * Fix errors. * Style. * Style. * Cleanup. --- .../packages/kokkos-kernels/package.py | 218 ++++++++---------- 1 file changed, 98 insertions(+), 120 deletions(-) diff --git a/var/spack/repos/builtin/packages/kokkos-kernels/package.py b/var/spack/repos/builtin/packages/kokkos-kernels/package.py index 51a17438b06..1f21ee5088c 100644 --- a/var/spack/repos/builtin/packages/kokkos-kernels/package.py +++ b/var/spack/repos/builtin/packages/kokkos-kernels/package.py @@ -22,12 +22,10 @@ class KokkosKernels(CMakePackage, CudaPackage): version("develop", branch="develop") version("master", branch="master") - version("4.5.01", sha256="c111a6561f23a85af9850d1df1e9015f37a586f1da0be4b6fb1e98001d75e074") version("4.5.00", sha256="94726a64e349adf6cd276e9fdc1b2bf7ff81efec833e479a5d3024b83f165a59") version("4.4.01", sha256="4a32bc8330e0113856bdf181df94cc4f9902e3cebb5dc7cea5948f30df03bfa1") version("4.4.00", sha256="66d5c3f728a8c7689159c97006996164ea00fd39702476220e3dbf2a05c49e8f") - version( "4.3.01", sha256="749553a6ea715ba1e56fa0b13b42866bb9880dba7a94e343eadf40d08c68fab8", @@ -129,8 +127,61 @@ class KokkosKernels(CMakePackage, CudaPackage): url="https://github.com/kokkos/kokkos-kernels/archive/3.0.00.tar.gz", ) - depends_on("cxx", type="build") # generated + variant("shared", default=True, description="Build shared libraries") + variant( + "execspace_cuda", + default=False, + description="Whether to pre instantiate kernels for the execution space Kokkos::Cuda", + ) + variant( + "execspace_openmp", + default=False, + description="Whether to pre instantiate kernels for the execution space " + "Kokkos::Experimental::OpenMPTarget", + ) + variant( + "execspace_threads", + default=False, + description="Whether to pre instantiate kernels for the execution space Kokkos::Threads", + ) + variant( + "execspace_serial", + default=False, + description="Whether to pre instantiate kernels for the execution space Kokkos::Serial", + ) + variant( + "memspace_cudauvmspace", + default=False, + description="Whether to pre instantiate kernels for the memory space Kokkos::CudaUVMSpace", + ) + variant( + "memspace_cudaspace", + default=False, + description="Whether to pre instantiate kernels for the memory space Kokkos::CudaSpace", + ) + variant("serial", default=False, description="Enable serial backend") + variant("openmp", default=False, description="Enable OpenMP backend") + variant("threads", default=False, description="Enable C++ threads backend") + variant( + "ordinals", default="int", values=["int", "int64_t"], multi=True, description="Ordinals" + ) + variant( + "offsets", + default="int,size_t", + values=["int", "size_t"], + multi=True, + description="Offsets", + ) + variant("layouts", default="left", values=["left", "right"], description="Layouts") + variant( + "scalars", + default="double", + values=["float", "double", "complex_float", "complex_double"], + multi=True, + description="Scalars", + ) + depends_on("cxx", type="build") depends_on("kokkos") depends_on("kokkos@master", when="@master") depends_on("kokkos@develop", when="@develop") @@ -158,74 +209,18 @@ class KokkosKernels(CMakePackage, CudaPackage): depends_on("kokkos@3.2.00", when="@3.2.00") depends_on("kokkos@3.1.00", when="@3.1.00") depends_on("kokkos@3.0.00", when="@3.0.00") - depends_on("cmake@3.16:", type="build") - - backends = { - "serial": (False, "enable Serial backend (default)"), - "cuda": (False, "enable Cuda backend"), - "openmp": (False, "enable OpenMP backend"), - "threads": (False, "enable C++ threads backend"), - } - - for backend in backends: - deflt_bool, descr = backends[backend] - variant(backend.lower(), default=deflt_bool, description=descr) - depends_on("kokkos+%s" % backend.lower(), when="+%s" % backend.lower()) - - space_etis = { - "execspace_cuda": ( - "auto", - "Whether to pre instantiate kernels for the execution space Kokkos::Cuda", - "cuda", - ), - "execspace_openmp": ( - "auto", - "Whether to pre instantiate kernels for the execution space " - "Kokkos::Experimental::OpenMPTarget", - "openmp", - ), - "execspace_threads": ( - "auto", - "Whether to build kernels for the execution space Kokkos::Threads", - "threads", - ), - "execspace_serial": ( - "auto", - "Whether to build kernels for the execution space Kokkos::Serial", - "serial", - ), - "memspace_cudauvmspace": ( - "auto", - "Whether to pre instantiate kernels for the memory space Kokkos::CudaUVMSpace", - "cuda", - ), - "memspace_cudaspace": ( - "auto", - "Whether to pre instantiate kernels for the memory space Kokkos::CudaSpace", - "cuda", - ), - } - for eti in space_etis: - deflt, descr, backend_required = space_etis[eti] - variant(eti, default=deflt, description=descr) - depends_on("kokkos+%s" % backend_required, when="+%s" % eti) - - # kokkos-kernels requires KOKKOS_LAMBDA to be available since 4.0.00 + depends_on("kokkos+cuda", when="+execspace_cuda") + depends_on("kokkos+openmp", when="+execspace_openmp") + depends_on("kokkos+threads", when="+execspace_threads") + depends_on("kokkos+serial", when="+execspace_serial") + depends_on("kokkos+cuda", when="+memspace_cudauvmspace") + depends_on("kokkos+cuda", when="+memspace_cudaspace") + depends_on("kokkos+serial", when="+serial") + depends_on("kokkos+cuda", when="+cuda") + depends_on("kokkos+openmp", when="+openmp") + depends_on("kokkos+threads", when="+threads") depends_on("kokkos+cuda_lambda", when="@4.0.00:+cuda") - - numeric_etis = { - "ordinals": ( - "int", - "ORDINAL_", # default, cmake name - ["int", "int64_t"], - ), # allowed values - "offsets": ("int,size_t", "OFFSET_", ["int", "size_t"]), - "layouts": ("left", "LAYOUT", ["left", "right"]), - "scalars": ("double", "", ["float", "double", "complex_float", "complex_double"]), - } - for eti in numeric_etis: - deflt, cmake_name, vals = numeric_etis[eti] - variant(eti, default=deflt, description=eti, values=vals, multi=True) + depends_on("cmake@3.16:", type="build") tpls = { # variant name #deflt #spack name #root var name #supporting versions #docstring @@ -246,9 +241,7 @@ class KokkosKernels(CMakePackage, CudaPackage): for tpl in tpls: deflt_bool, spackname, rootname, condition, descr = tpls[tpl] variant(tpl, default=deflt_bool, when=f"{condition}", description=descr) - depends_on(spackname, when="+%s" % tpl) - - variant("shared", default=True, description="Build shared libraries") + depends_on(spackname, when=f"+{tpl}") patch("pr_2296_430.patch", when="@4.3.00:4.4.00") patch("pr_2296_400.patch", when="@4.0.00:4.2.01") @@ -259,64 +252,49 @@ class KokkosKernels(CMakePackage, CudaPackage): def cmake_args(self): spec = self.spec - options = [] + options = [ + self.define_from_variant("KokkosKernels_INST_EXECSPACE_CUDA", "execspace_cuda"), + self.define_from_variant("KokkosKernels_INST_EXECSPACE_OPENMP", "execspace_openmp"), + self.define_from_variant("KokkosKernels_INST_EXECSPACE_THREADS", "execspace_threads"), + self.define_from_variant("KokkosKernels_INST_EXECSPACE_SERIAL", "execspace_serial"), + self.define_from_variant("KokkosKernels_INST_EXECSPACE_SERIAL", "execspace_serial"), + self.define_from_variant( + "KokkosKernels_INST_MEMSPACE_CUDAUVMSPACE", "memspace_cudauvmspace" + ), + self.define_from_variant( + "KokkosKernels_INST_MEMSPACE_CUDASPACE", "memspace_cudaspace" + ), + self.define_from_variant("BUILD_SHARED_LIBS", "shared"), + ] - isdiy = spec.satisfies("+diy") - if isdiy: - options.append("-DSpack_WORKAROUND=On") + if spec.satisfies("+diy"): + options.append(self.define("Spack_WORKAROUND", True)) - options.append("-DKokkos_ROOT=%s" % spec["kokkos"].prefix) + options.append(self.define("Kokkos_ROOT", spec["kokkos"].prefix)) if spec.satisfies("^kokkos+rocm"): - options.append("-DCMAKE_CXX_COMPILER=%s" % spec["hip"].hipcc) + options.append(self.define("CMAKE_CXX_COMPILER", spec["hip"].hipcc)) else: - # Compiler weirdness due to nvcc_wrapper - options.append("-DCMAKE_CXX_COMPILER=%s" % self["kokkos"].kokkos_cxx) + options.append(self.define("CMAKE_CXX_COMPILER", self["kokkos"].kokkos_cxx)) if self.run_tests: - options.append("-DKokkosKernels_ENABLE_TESTS=ON") + options.append(self.define("KokkosKernels_ENABLE_TESTS", True)) for tpl in self.tpls: - on_flag = "+%s" % tpl - off_flag = "~%s" % tpl dflt, spackname, rootname, condition, descr = self.tpls[tpl] - if on_flag in self.spec: - options.append("-DKokkosKernels_ENABLE_TPL_%s=ON" % tpl.upper()) + if spec.satisfies(f"+{tpl}"): + options.append(self.define(f"KokkosKernels_ENABLE_TPL_{tpl.upper()}", True)) if rootname: - options.append("-D%s_ROOT=%s" % (rootname, spec[spackname].prefix)) + options.append(self.define(f"{rootname}_ROOT", spec[spackname].prefix)) else: - pass # this should get picked up automatically, we hope - elif off_flag in self.spec: - options.append("-DKokkosKernels_ENABLE_TPL_%s=OFF" % tpl.upper()) + pass - for eti in self.numeric_etis: - deflt, cmake_name, vals = self.numeric_etis[eti] - for val in vals: - keyval = "%s=%s" % (eti, val) - cmake_option = "KokkosKernels_INST_%s%s" % (cmake_name.upper(), val.upper()) - if keyval in spec: - options.append("-D%s=ON" % cmake_option) - else: - options.append("-D%s=OFF" % cmake_option) - - for eti in self.space_etis: - deflt, descr, _ = self.space_etis[eti] - if deflt == "auto": - value = spec.variants[eti].value - # spack does these as strings, not reg booleans - if str(value) == "True": - options.append("-DKokkosKernels_INST_%s=ON" % eti.upper()) - elif str(value) == "False": - options.append("-DKokkosKernels_INST_%s=OFF" % eti.upper()) - else: - pass # don't pass anything, let CMake decide - else: # simple option - on_flag = "+%s" % eti - off_flag = "~%s" % eti - if on_flag in self.spec: - options.append("-DKokkosKernels_INST_%s=ON" % eti.upper()) - elif off_flag in self.spec: - options.append("-DKokkosKernels_INST_%s=OFF" % eti.upper()) - - options.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared")) + for val in spec.variants["ordinals"].value: + options.append(self.define(f"KokkosKernels_INST_ORDINAL_{val.upper()}", True)) + for val in spec.variants["offsets"].value: + options.append(self.define(f"KokkosKernels_INST_OFFSET_{val.upper()}", True)) + for val in spec.variants["scalars"].value: + options.append(self.define(f"KokkosKernels_INST_{val.upper()}", True)) + layout_value = spec.variants["layouts"].value + options.append(self.define(f"KokkosKernels_INST_LAYOUT{layout_value.upper()}", True)) return options From e3bb0d77bcbee1a70afa8cc3f6f5e818b2bb2211 Mon Sep 17 00:00:00 2001 From: Alec Scott Date: Mon, 24 Mar 2025 15:23:21 -0400 Subject: [PATCH 09/23] hugo: add v0.145.0 (#49576) --- var/spack/repos/builtin/packages/hugo/package.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/var/spack/repos/builtin/packages/hugo/package.py b/var/spack/repos/builtin/packages/hugo/package.py index e08126f9ca5..4bd8996173d 100644 --- a/var/spack/repos/builtin/packages/hugo/package.py +++ b/var/spack/repos/builtin/packages/hugo/package.py @@ -19,6 +19,7 @@ class Hugo(GoPackage): license("Apache-2.0") + version("0.145.0", sha256="f6cfcfa4575ff25a08e68b638367df60b28e28a7917471c5deec6396eae26ae2") version("0.140.2", sha256="45594ddf39d62d227cfd54c19fb9a09ab851cf537caee6138de0ddd4f1f6f117") version("0.135.0", sha256="a75c4c684d2125255f214d11b9834a5ec6eb64353f4de2c06952d2b3b7430f0e") version("0.127.0", sha256="549c7ebdf2ee6b3107ea10a9fbd9932a91bb3f30f7e8839245f6d8e318aca88c") @@ -34,11 +35,12 @@ class Hugo(GoPackage): version("0.107.0", sha256="31d959a3c1633087d338147782d03bdef65323b67ff3efcec7b40241413e270a") version("0.106.0", sha256="9219434beb51466487b9f8518edcbc671027c1998e5a5820d76d517e1dfbd96a") - depends_on("go@1.11:", type="build", when="@0.48:") - depends_on("go@1.18:", type="build", when="@0.106:") - depends_on("go@1.20:", type="build", when="@0.123:") - depends_on("go@1.21.8:", type="build", when="@0.131:") + depends_on("go@1.23:", type="build", when="@0.144:") depends_on("go@1.22.6:", type="build", when="@0.133:") + depends_on("go@1.21.8:", type="build", when="@0.131:") + depends_on("go@1.20:", type="build", when="@0.123:") + depends_on("go@1.18:", type="build", when="@0.106:") + depends_on("go@1.11:", type="build", when="@0.48:") variant("extended", default=False, description="Enable extended features") From fd7dcf3a3fed8ef83a0dc773286cd7562bf59f39 Mon Sep 17 00:00:00 2001 From: Eric Berquist <727571+berquist@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:45:12 -0400 Subject: [PATCH 10/23] sst-core: fix linkage against ncurses, zlib, and HDF5 (#49152) * sst-core: fix for > 14.0.0 requiring ncurses * sst-core: backport fix for curses detection * sst-core: ensure HDF5 is ignored if not specified * sst-core: HDF5 integration is via C++ * sst-core: switch to with_or_without for configure * sst-core: switch to enable_or_disable for configure * sst-core: control memory pools and debug output with variants --- .../sst-core/1110-ncurses_detection.patch | 116 ++++++++++++++++++ .../builtin/packages/sst-core/package.py | 66 ++++++---- 2 files changed, 155 insertions(+), 27 deletions(-) create mode 100644 var/spack/repos/builtin/packages/sst-core/1110-ncurses_detection.patch diff --git a/var/spack/repos/builtin/packages/sst-core/1110-ncurses_detection.patch b/var/spack/repos/builtin/packages/sst-core/1110-ncurses_detection.patch new file mode 100644 index 00000000000..4f6c15e11b1 --- /dev/null +++ b/var/spack/repos/builtin/packages/sst-core/1110-ncurses_detection.patch @@ -0,0 +1,116 @@ +commit a4dbc4ae575dc9bf6f6cac42d011a1ac0d496aa8 +Author: Eric Berquist <727571+berquist@users.noreply.github.com> +Date: 2024-07-29 09:25:13 AM (Mon, 29 Jul 2024 09:25:13 -0600) + + ncurses detection fixes (#1110) + + * may have ncursesw6-config but not ncurses6-config + + * go back to hardcoded lib checks + + * fix using --with-ncurses + + * avoid bad default usage of AC_CHECK_LIB + + * add curses variables to sst.conf + + * unset CURSES_CPPFLAGS and CURSES_LIBS if they're actually wrong + +diff --git config/sst_check_curses.m4 config/sst_check_curses.m4 +index 47699427..1dbe0dcf 100644 +--- config/sst_check_curses.m4 ++++ config/sst_check_curses.m4 +@@ -1,25 +1,34 @@ ++dnl -*- mode: autoconf; -*- ++ + AC_DEFUN([SST_CHECK_CURSES], + [ + sst_check_curses_happy="yes" + +- AC_ARG_WITH([curses], ++ AC_ARG_WITH([ncurses], + [AS_HELP_STRING([--with-ncurses@<:@=DIR or EXEC@:>@], + [Use ncurses library found in DIR or associated with the ncursesN-config utility specified by EXEC])]) + +- AS_IF([test "$with_curses" = "no"], [sst_check_curses_happy="no"]) ++ AS_IF([test "$with_ncurses" = "no"], [sst_check_curses_happy="no"]) + + NCURSES_CONFIG_EXE="no" + + dnl check if user provided a specific ncursesN-config +- AS_IF([test ! -d "$with_curses"], +- [AS_IF([test -x "$with_curses"], +- [NCURSES_CONFIG_EXE=$with_curses])]) ++ AS_IF([test ! -d "$with_ncurses"], ++ [AS_IF([test -x "$with_ncurses"], ++ [NCURSES_CONFIG_EXE=$with_ncurses])]) + + dnl test ncursesN-config + AS_IF([test $NCURSES_CONFIG_EXE = "no"], +- [AS_IF([test -n "$with_curses"], +- [AC_PATH_PROGS([NCURSES_CONFIG_EXE], ["ncurses6-config" "ncurses5.4-config" "ncurses5-config"], ["no"], ["$with_curses/bin"])], +- [AC_PATH_PROGS([NCURSES_CONFIG_EXE], ["ncurses6-config" "ncurses5.4-config" "ncurses5-config"], ["no"])])]) ++ [AS_IF([test -n "$with_ncurses"], ++ [AC_PATH_PROGS([NCURSES_CONFIG_EXE], ++ ["ncurses6-config" "ncursesw6-config" "ncurses5.4-config" "ncurses5-config"], ++ ["no"], ["$with_ncurses/bin"])], ++ [AC_PATH_PROGS([NCURSES_CONFIG_EXE], ++ ["ncurses6-config" "ncursesw6-config" "ncurses5.4-config" "ncurses5-config"], ++ ["no"])])]) ++ ++ AC_MSG_CHECKING([ncurses config binary exists]) ++ AC_MSG_RESULT([$NCURSES_CONFIG_EXE]) + + dnl don't continue if ncursesN-config can't be found rather than look for the + dnl specific libraries +@@ -44,10 +53,27 @@ AC_DEFUN([SST_CHECK_CURSES], + CPPFLAGS="$CPPFLAGS $CURSES_CPPFLAGS" + LDFLAGS="$LDFLAGS $CURSES_LIBS" + +- dnl Check that the specific header exists and that the config-provided lib locations are correct. ++ dnl Check that the specific header exists and that plausible lib ++ dnl locations are correct. + AC_LANG_PUSH([C++]) + AC_CHECK_HEADER([ncurses.h], [], [sst_check_curses_happy="no"]) +- AC_SEARCH_LIBS([initscr], [$CURSES_LIBS], [], [sst_check_curses_happy="no"]) ++ dnl We cannot check that the config-provided lib names are ++ dnl correct, since those are not available at macro expansion ++ dnl time. This is only necessary for platforms where libs are ++ dnl reported but are broken or don't actually exist. ++ dnl ++ dnl If nothing is specified for `action-if-found`, the library ++ dnl will be added to LIBS, which is not correct for our use case. ++ curses_check_lib_tmp="" ++ AS_IF([test "$sst_check_curses_happy" != "no"], ++ [AC_CHECK_LIB([ncursesw], [initscr], [curses_check_lib_tmp="ncursesw is valid"], ++ [AC_CHECK_LIB([ncurses], [initscr], [curses_check_lib_tmp="ncurses is valid"], ++ [AC_CHECK_LIB([curses], [initscr], [curses_check_lib_tmp="curses is valid"], ++ [sst_check_curses_happy="no" ++ CURSES_CPPFLAGS="" ++ CURSES_LIBS="" ++ ])])]) ++ ]) + AC_LANG_POP([C++]) + + CPPFLAGS="$CPPFLAGS_saved" +@@ -63,6 +89,6 @@ AC_DEFUN([SST_CHECK_CURSES], + AC_MSG_CHECKING([for curses library]) + AC_MSG_RESULT([$sst_check_curses_happy]) + +- AS_IF([test "$sst_check_curses_happy" = "no" -a ! -z "$with_curses" -a "$with_curses" != "no"], [$3]) ++ AS_IF([test "$sst_check_curses_happy" = "no" -a ! -z "$with_ncurses" -a "$with_ncurses" != "no"], [$3]) + AS_IF([test "$sst_check_curses_happy" = "yes"], [$1], [$2]) + ]) +diff --git src/sst/sst.conf src/sst/sst.conf +index 13adb002..c30afb0b 100644 +--- src/sst/sst.conf ++++ src/sst/sst.conf +@@ -30,6 +30,8 @@ PYTHON_VERSION3=@PYTHON_VERSION3@ + LIBZ_CPPFLAGS=@LIBZ_CPPFLAGS@ + LIBZ_LDFLAGS=@LIBZ_LDFLAGS@ + LIBZ_LIBS=@LIBZ_LIBS@ ++CURSES_CPPFLAGS=@CURSES_CPPFLAGS@ ++CURSES_LIBS=@CURSES_LIBS@ + ELEMENT_CXXFLAGS=@SST_EXPORT_CXXFLAGS@ @SST_ELEMENT_FPIC_FLAGS@ -DHAVE_CONFIG_H -I@prefix@/include + ELEMENT_LDFLAGS=-shared -fno-common -Wl,-undefined -Wl,dynamic_lookup + pkgconfig=@prefix@/lib/pkgconfig/SST-@PACKAGE_VERSION@.pc diff --git a/var/spack/repos/builtin/packages/sst-core/package.py b/var/spack/repos/builtin/packages/sst-core/package.py index 11521bce99f..1b612f8e89b 100644 --- a/var/spack/repos/builtin/packages/sst-core/package.py +++ b/var/spack/repos/builtin/packages/sst-core/package.py @@ -61,10 +61,16 @@ class SstCore(AutotoolsPackage): variant( "curses", default=True, - when="@develop,master", + when="@develop,master,14.0.0:", description="Build support for interactive sst-info", ) + variant("mempools", default=True, description="Use memory pools") + variant( + "debug", + default=False, + description="Enable additional debug output from core and components", + ) variant("trackevents", default=False, description="Enable event and activity tracking") variant( "trackperf", @@ -77,37 +83,44 @@ class SstCore(AutotoolsPackage): depends_on("python@:3.11", type=("build", "run", "link")) depends_on("mpi", when="+pdes_mpi") depends_on("zoltan", when="+zoltan") - depends_on("hdf5", when="+hdf5") + depends_on("hdf5 +cxx", when="+hdf5") depends_on("zlib-api", when="+zlib") depends_on("gettext") - depends_on("ncurses", when="+curses") + depends_on("ncurses", when="+curses", type=("build", "link")) - for version_name in ("master", "develop"): - depends_on("autoconf@1.68:", type="build", when="@{}".format(version_name)) - depends_on("automake@1.11.1:", type="build", when="@{}".format(version_name)) - depends_on("libtool@1.2.4:", type="build", when="@{}".format(version_name)) - depends_on("m4", type="build", when="@{}".format(version_name)) + with when("@develop,master,14.0.0"): + depends_on("autoconf@1.68:", type="build") + depends_on("automake@1.11.1:", type="build") + depends_on("libtool@1.2.4:", type="build") + depends_on("m4", type="build") + + # Backport of https://github.com/sstsimulator/sst-core/pull/1110 + with when("@14.0.0"): + patch("1110-ncurses_detection.patch", level=0) # force out-of-source builds build_directory = "spack-build" - @when("@develop,master") + # 14.0.0 could theoretically be avoided here, but introducing the patch + # (even with autogen changes) causes file created/modified time problems + # that cannot be easily circumvented with `touch`. + @when("@develop,master,14.0.0") def autoreconf(self, spec, prefix): bash = which("bash") bash("autogen.sh") def configure_args(self): args = [] - if "+zoltan" in self.spec: - args.append("--with-zoltan=%s" % self.spec["zoltan"].prefix) - if "+hdf5" in self.spec: - args.append("--with-hdf5=%s" % self.spec["hdf5"].prefix) - if "+zlib" in self.spec: - args.append("--with-zlib=%s" % self.spec["zlib-api"].prefix) - if "+curses" in self.spec: - args.append("--with-curses={}".format(self.spec["ncurses"].prefix)) + args.extend(self.with_or_without("zoltan", activation_value="prefix")) + args.extend(self.with_or_without("hdf5", activation_value="prefix")) + args.extend( + self.with_or_without( + "libz", activation_value=lambda _: self.spec["zlib-api"].prefix, variant="zlib" + ) + ) + args.extend(self.with_or_without("ncurses", activation_value="prefix", variant="curses")) - if "+pdes_mpi" in self.spec: + if self.spec.satisfies("+pdes_mpi"): args.append("--enable-mpi") env["CC"] = self.spec["mpi"].mpicc env["CXX"] = self.spec["mpi"].mpicxx @@ -116,16 +129,15 @@ def configure_args(self): else: args.append("--disable-mpi") - if "+trackevents" in self.spec: - args.append("--enable-event-tracking") - if "+trackperf" in self.spec: - args.append("--enable-perf-tracking") - if "+preview" in self.spec: - args.append("--enable-preview-build") - if "+profile" in self.spec: - args.append("--enable-profile") + args.extend(self.enable_or_disable("mem-pools", variant="mempools")) + args.extend(self.enable_or_disable("debug")) + args.extend(self.enable_or_disable("event-tracking", variant="trackevents")) + args.extend(self.enable_or_disable("perf-tracking", variant="trackperf")) + args.extend(self.enable_or_disable("preview-build", variant="preview")) + args.extend(self.enable_or_disable("profile")) - args.append("--with-python=%s" % self.spec["python"].prefix) + # Required, so no need for with_or_without + args.append(f"--with-python={self.spec['python'].prefix}") return args def patch(self): From 94b828add1753be456546e3a4c423fcb4cb0072b Mon Sep 17 00:00:00 2001 From: Robert Maaskant Date: Mon, 24 Mar 2025 21:27:10 +0100 Subject: [PATCH 11/23] prometheus: improve dependency specs (#49175) * prometheus: improve dependency specs * fixup! prometheus: improve dependency specs * prometheus: fix typo in nodejs dep * prometheus: fix checksums --- .../builtin/packages/prometheus/package.py | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/var/spack/repos/builtin/packages/prometheus/package.py b/var/spack/repos/builtin/packages/prometheus/package.py index 430e356a90a..9381f214d38 100644 --- a/var/spack/repos/builtin/packages/prometheus/package.py +++ b/var/spack/repos/builtin/packages/prometheus/package.py @@ -10,23 +10,30 @@ class Prometheus(MakefilePackage): systems and service monitoring system.""" homepage = "https://prometheus.io/" - url = "https://github.com/prometheus/prometheus/archive/v2.19.2.tar.gz" + url = "https://github.com/prometheus/prometheus/archive/refs/tags/v2.55.1.tar.gz" license("Apache-2.0") version("2.55.1", sha256="f48251f5c89eea6d3b43814499d558bacc4829265419ee69be49c5af98f79573") - version("2.19.2", sha256="d4e84cae2fed6761bb8a80fcc69b6e0e9f274d19dffc0f38fb5845f11da1bbc3") - version("2.19.1", sha256="b72b9b6bdbae246dcc29ef354d429425eb3c0a6e1596fc8b29b502578a4ce045") - version("2.18.2", sha256="a26c106c97d81506e3a20699145c11ea2cce936427a0e96eb2fd0dc7cd1945ba") - version("2.17.1", sha256="d0b53411ea0295c608634ca7ef1d43fa0f5559e7ad50705bf4d64d052e33ddaf") - version("2.17.0", sha256="b5e508f1c747aaf50dd90a48e5e2a3117fec2e9702d0b1c7f97408b87a073009") + version("2.19.2", sha256="f77017846259d01f281ded0d70af834e06ee489d325c9c84de0e68c7d505b42b") + version("2.19.1", sha256="c5bdfb3653b82c1d26e5e14feadf644692289fae42a48e2567629aa2c4a02fc4") + version("2.18.2", sha256="01b4d55aae0a43c9eecb5a660648e45e74ea20f9d4558ff6533058f2050aabd1") + version("2.17.1", sha256="443590c1896cf5096b75d4a30e45381c84a5d17712dc714109ea8cf418b275ac") + version("2.17.0", sha256="c94b13677003838d795c082b95878903d43cd21ab148996d39f1900f00370c97") depends_on("c", type="build") # generated - depends_on("go", type="build") + depends_on("go@1.17:", type="build", when="@2.37.0:") + depends_on("go@1.16:", type="build", when="@2.33.0:") + depends_on("go@1.14:", type="build", when="@2.23.0:") + depends_on("go@1.13:", type="build", when="@2.17.0:") + + depends_on("node-js@16:", type="build", when="@2.31.0:") depends_on("node-js@11.10.1:", type="build") - depends_on("yarn", type="build") - depends_on("npm", type="build", when="@2.55.1:") + + depends_on("npm@7:", type="build", when="@2.31.0:") + depends_on("npm", type="build", when="@2.30.0:") + depends_on("yarn@1", type="build", when="@:2.29.2") def build(self, spec, prefix): make("build", parallel=False) From e2ed1c230887469341c05cb8da7d2e62f1b02934 Mon Sep 17 00:00:00 2001 From: Robert Maaskant Date: Mon, 24 Mar 2025 21:29:05 +0100 Subject: [PATCH 12/23] py-pymoo: add v0.6.1.3 (#49603) * py-pymoo: add v0.6.1.3 * py-pymoo: use a when context * py-pymoo: group build only dependencies --- .../builtin/packages/py-pymoo/package.py | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/py-pymoo/package.py b/var/spack/repos/builtin/packages/py-pymoo/package.py index 8a7ecef64ec..0be457a17ff 100644 --- a/var/spack/repos/builtin/packages/py-pymoo/package.py +++ b/var/spack/repos/builtin/packages/py-pymoo/package.py @@ -18,11 +18,27 @@ class PyPymoo(PythonPackage): license("Apache-2.0") + version("0.6.1.3", sha256="ab440986cbaede547125ca9d1545781fdee94b719488de44119a86b8e9af526e") version("0.5.0", sha256="2fbca1716f6b45e430197ce4ce2210070fd3b6b9ec6b17bb25d98486115272c2") version("0.4.2", sha256="6ec382a7d29c8775088eec7f245a30fd384b42c40f230018dea0e3bcd9aabdf1") depends_on("cxx", type="build") # generated - depends_on("python@3.4:", type=("build", "run")) - depends_on("py-autograd", type=("build", "run")) - depends_on("py-setuptools", type="build") + with default_args(type="build"): + depends_on("py-setuptools") + depends_on("py-cython@0.29:", when="@0.6.1.3:") + + with default_args(type=("build", "run")): + depends_on("python@3.4:") + depends_on("py-autograd") + + with when("@0.6.1.3:"): + depends_on("python@3.9:") + depends_on("py-numpy@1.15:") + depends_on("py-scipy@1.1:") + depends_on("py-matplotlib@3:") + depends_on("py-autograd@1.4:") + depends_on("py-cma@3.2.2:") + depends_on("py-alive-progress") + depends_on("py-dill") + depends_on("py-deprecated") From 1b829a4a2801c60139aa9e3816d3df73b3bc09be Mon Sep 17 00:00:00 2001 From: Teague Sterling Date: Mon, 24 Mar 2025 13:33:41 -0700 Subject: [PATCH 13/23] kentutils: add v478 (#49521) --- var/spack/repos/builtin/packages/kentutils/package.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/kentutils/package.py b/var/spack/repos/builtin/packages/kentutils/package.py index 65b074b8ff2..b50aed893ac 100644 --- a/var/spack/repos/builtin/packages/kentutils/package.py +++ b/var/spack/repos/builtin/packages/kentutils/package.py @@ -20,6 +20,7 @@ class Kentutils(MakefilePackage): maintainers("teaguesterling") + version("478", sha256="dcbe4bbab811e8634f2993512540d8d1ee279da8c49e8048cdd42b17cbe5ba2b") version("465", sha256="eef17b1f3182d1d9dc99b5c73a6b0468d5d3bd80470f25d3f7706cc1372e04b0") version("464", sha256="24e20fe68e2a2894d802c87662f69a62f71b3c15fafb2e4d6c3c425c63638bb2") version("460", sha256="b955e56ee880074521ef1ab1371491f47e66dc6fdd93b05328386dd675a635fa") @@ -32,9 +33,6 @@ class Kentutils(MakefilePackage): deprecated=True, ) - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - # The bundled version of kentlib has some custom changes that are used by parts of # kentlib. See https://github.com/spack/spack/pull/44501#issuecomment-2162789410 # for some additional details. A built-in version SHOULD work for most things though. @@ -45,6 +43,9 @@ class Kentutils(MakefilePackage): sticky=True, ) + depends_on("c", type="build") + depends_on("cxx", type="build") + with default_args(type=("build", "link", "run")): depends_on("libpng") depends_on("openssl") From 8ac826cca892f9060ced53a071e78e0119dd8aca Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 24 Mar 2025 14:58:47 -0600 Subject: [PATCH 14/23] hip: add missing HIPCC_LINK_FLAGS_APPEND (#49436) * hip: add missing HIPCC_LINK_FLAGS_APPEND --------- Co-authored-by: rbberger --- var/spack/repos/builtin/packages/hip/package.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/hip/package.py b/var/spack/repos/builtin/packages/hip/package.py index 57e1e80d0c0..b32ae3e2e62 100644 --- a/var/spack/repos/builtin/packages/hip/package.py +++ b/var/spack/repos/builtin/packages/hip/package.py @@ -499,9 +499,10 @@ def set_variables(self, env): # bin/.hipVersion file can still be parsed. # See also https://github.com/ROCm/HIP/issues/2223 env.append_path( - "HIPCC_COMPILE_FLAGS_APPEND", - "--rocm-path={0}".format(paths["rocm-path"]), - separator=" ", + "HIPCC_COMPILE_FLAGS_APPEND", f"--rocm-path={paths['rocm-path']}", separator=" " + ) + env.append_path( + "HIPCC_LINK_FLAGS_APPEND", f"--rocm-path={paths['rocm-path']}", separator=" " ) elif self.spec.satisfies("+cuda"): env.set("CUDA_PATH", self.spec["cuda"].prefix) @@ -518,6 +519,9 @@ def set_variables(self, env): f"--gcc-toolchain={self.compiler.prefix}", separator=" ", ) + env.append_path( + "HIPCC_LINK_FLAGS_APPEND", f"--gcc-toolchain={self.compiler.prefix}", separator=" " + ) # This is picked up by CMake when using HIP as a CMake language. env.append_path("HIPFLAGS", f"--gcc-toolchain={self.compiler.prefix}", separator=" ") From 0158fc46aa470a895371e31aca65b8e35409c738 Mon Sep 17 00:00:00 2001 From: psakievich Date: Mon, 24 Mar 2025 17:50:16 -0600 Subject: [PATCH 15/23] Add recursive argument to spack develop (#46885) * Add recursive argument to spack develop This effort allows for a recursive develop call which will traverse from the develop spec given back to the root(s) and mark all packages along the path as develop. If people are doing development across the graph then paying fetch and full rebuild costs every time spack develop is called is unnecessary and expensive. Also remove the constraint for concrete specs and simply take the max(version) if a version is not given. This should default to the highest infinity version which is also the logical best guess for doing development. --- lib/spack/docs/environments.rst | 7 + lib/spack/spack/cmd/develop.py | 227 ++++++++++++------ lib/spack/spack/environment/environment.py | 5 - lib/spack/spack/test/cmd/develop.py | 36 +++ share/spack/spack-completion.bash | 2 +- share/spack/spack-completion.fish | 6 +- .../packages/indirect-mpich/package.py | 1 + 7 files changed, 198 insertions(+), 86 deletions(-) diff --git a/lib/spack/docs/environments.rst b/lib/spack/docs/environments.rst index bcbd88665d6..b73918c5211 100644 --- a/lib/spack/docs/environments.rst +++ b/lib/spack/docs/environments.rst @@ -457,6 +457,13 @@ developed package in the environment are concretized to match the version (and other constraints) passed as the spec argument to the ``spack develop`` command. +When working deep in the graph it is often desirable to have multiple specs marked +as ``develop`` so you don't have to restage and/or do full rebuilds each time you +call ``spack install``. The ``--recursive`` flag can be used in these scenarios +to ensure that all the dependents of the initial spec you provide are also marked +as develop specs. The ``--recursive`` flag requires a pre-concretized environment +so the graph can be traversed from the supplied spec all the way to the root specs. + For packages with ``git`` attributes, git branches, tags, and commits can also be used as valid concrete versions (see :ref:`version-specifier`). This means that for a package ``foo``, ``spack develop foo@git.main`` will clone diff --git a/lib/spack/spack/cmd/develop.py b/lib/spack/spack/cmd/develop.py index 3f3e2c12dc2..e46fde7a4ad 100644 --- a/lib/spack/spack/cmd/develop.py +++ b/lib/spack/spack/cmd/develop.py @@ -3,11 +3,13 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import os import shutil +from typing import Optional import llnl.util.tty as tty import spack.cmd import spack.config +import spack.environment import spack.fetch_strategy import spack.repo import spack.spec @@ -31,37 +33,33 @@ def setup_parser(subparser): "--no-clone", action="store_false", dest="clone", - default=None, help="do not clone, the package already exists at the source path", ) clone_group.add_argument( "--clone", action="store_true", dest="clone", - default=None, - help="clone the package even if the path already exists", + default=True, + help=( + "(default) clone the package unless the path already exists, " + "use --force to overwrite" + ), ) subparser.add_argument( "-f", "--force", help="remove any files or directories that block cloning source code" ) + subparser.add_argument( + "-r", + "--recursive", + action="store_true", + help="traverse nodes of the graph to mark everything up to the root as a develop spec", + ) + arguments.add_common_arguments(subparser, ["spec"]) -def _update_config(spec, path): - find_fn = lambda section: spec.name in section - - entry = {"spec": str(spec)} - if path != spec.name: - entry["path"] = path - - def change_fn(section): - section[spec.name] = entry - - spack.config.change_or_add("develop", find_fn, change_fn) - - def _retrieve_develop_source(spec: spack.spec.Spec, abspath: str) -> None: # "steal" the source code via staging API. We ask for a stage # to be created, then copy it afterwards somewhere else. It would be @@ -83,44 +81,43 @@ def _retrieve_develop_source(spec: spack.spec.Spec, abspath: str) -> None: package.stage.steal_source(abspath) -def develop(parser, args): - # Note: we could put develop specs in any scope, but I assume - # users would only ever want to do this for either (a) an active - # env or (b) a specified config file (e.g. that is included by - # an environment) - # TODO: when https://github.com/spack/spack/pull/35307 is merged, - # an active env is not required if a scope is specified - env = spack.cmd.require_active_env(cmd_name="develop") - if not args.spec: - if args.clone is False: - raise SpackError("No spec provided to spack develop command") +def assure_concrete_spec(env: spack.environment.Environment, spec: spack.spec.Spec): + version = spec.versions.concrete_range_as_version + if not version: + # first check environment for a matching concrete spec + matching_specs = env.all_matching_specs(spec) + if matching_specs: + version = matching_specs[0].version + test_spec = spack.spec.Spec(f"{spec}@{version}") + for m_spec in matching_specs: + if not m_spec.satisfies(test_spec): + raise SpackError( + f"{spec.name}: has multiple concrete instances in the graph that can't be" + " satisified by a single develop spec. To use `spack develop` ensure one" + " of the following:" + f"\n a) {spec.name} nodes can satisfy the same develop spec (minimally " + "this means they all share the same version)" + f"\n b) Provide a concrete develop spec ({spec.name}@[version]) to clearly" + " indicate what should be developed" + ) + else: + # look up the maximum version so infintiy versions are preferred for develop + version = max(spec.package_class.versions.keys()) + tty.msg(f"Defaulting to highest version: {spec.name}@{version}") + spec.versions = spack.version.VersionList([version]) - # download all dev specs - for name, entry in env.dev_specs.items(): - path = entry.get("path", name) - abspath = spack.util.path.canonicalize_path(path, default_wd=env.path) - if os.path.exists(abspath): - msg = "Skipping developer download of %s" % entry["spec"] - msg += " because its path already exists." - tty.msg(msg) - continue +def setup_src_code(spec: spack.spec.Spec, src_path: str, clone: bool = True, force: bool = False): + """ + Handle checking, cloning or overwriting source code + """ + assert spec.versions - # Both old syntax `spack develop pkg@x` and new syntax `spack develop pkg@=x` - # are currently supported. - spec = spack.spec.parse_with_version_concrete(entry["spec"]) - _retrieve_develop_source(spec, abspath) + if clone: + _clone(spec, src_path, force) - if not env.dev_specs: - tty.warn("No develop specs to download") - - return - - specs = spack.cmd.parse_specs(args.spec) - if len(specs) > 1: - raise SpackError("spack develop requires at most one named spec") - - spec = specs[0] + if not clone and not os.path.exists(src_path): + raise SpackError(f"Provided path {src_path} does not exist") version = spec.versions.concrete_range_as_version if not version: @@ -129,40 +126,114 @@ def develop(parser, args): tty.msg(f"Defaulting to highest version: {spec.name}@{version}") spec.versions = spack.version.VersionList([version]) - # If user does not specify --path, we choose to create a directory in the - # active environment's directory, named after the spec - path = args.path or spec.name - if not os.path.isabs(path): - abspath = spack.util.path.canonicalize_path(path, default_wd=env.path) - else: - abspath = path - # clone default: only if the path doesn't exist - clone = args.clone - if clone is None: - clone = not os.path.exists(abspath) +def _update_config(spec, path): + find_fn = lambda section: spec.name in section - if not clone and not os.path.exists(abspath): - raise SpackError("Provided path %s does not exist" % abspath) + entry = {"spec": str(spec)} + if path and path != spec.name: + entry["path"] = path - if clone: - if os.path.exists(abspath): - if args.force: - shutil.rmtree(abspath) - else: - msg = "Path %s already exists and cannot be cloned to." % abspath - msg += " Use `spack develop -f` to overwrite." - raise SpackError(msg) + def change_fn(section): + section[spec.name] = entry - _retrieve_develop_source(spec, abspath) + spack.config.change_or_add("develop", find_fn, change_fn) + + +def update_env( + env: spack.environment.Environment, + spec: spack.spec.Spec, + specified_path: Optional[str] = None, + build_dir: Optional[str] = None, +): + """ + Update the spack.yaml file with additions or changes from a develop call + """ + tty.debug(f"Updating develop config for {env.name} transactionally") + + if not specified_path: + dev_entry = env.dev_specs.get(spec.name) + if dev_entry: + specified_path = dev_entry.get("path", None) - tty.debug("Updating develop config for {0} transactionally".format(env.name)) with env.write_transaction(): - if args.build_directory is not None: + if build_dir is not None: spack.config.add( - "packages:{}:package_attributes:build_directory:{}".format( - spec.name, args.build_directory - ), + f"packages:{spec.name}:package_attributes:build_directory:{build_dir}", env.scope_name, ) - _update_config(spec, path) + # add develop spec and update path + _update_config(spec, specified_path) + + +def _clone(spec: spack.spec.Spec, abspath: str, force: bool = False): + if os.path.exists(abspath): + if force: + shutil.rmtree(abspath) + else: + msg = f"Skipping developer download of {spec.name}" + msg += f" because its path {abspath} already exists." + tty.msg(msg) + return + + # cloning can take a while and it's nice to get a message for the longer clones + tty.msg(f"Cloning source code for {spec}") + _retrieve_develop_source(spec, abspath) + + +def _abs_code_path( + env: spack.environment.Environment, spec: spack.spec.Spec, path: Optional[str] = None +): + src_path = path if path else spec.name + return spack.util.path.canonicalize_path(src_path, default_wd=env.path) + + +def _dev_spec_generator(args, env): + """ + Generator function to loop over all the develop specs based on how the command is called + If no specs are supplied then loop over the develop specs listed in the environment. + """ + if not args.spec: + if args.clone is False: + raise SpackError("No spec provided to spack develop command") + + for name, entry in env.dev_specs.items(): + path = entry.get("path", name) + abspath = spack.util.path.canonicalize_path(path, default_wd=env.path) + # Both old syntax `spack develop pkg@x` and new syntax `spack develop pkg@=x` + # are currently supported. + spec = spack.spec.parse_with_version_concrete(entry["spec"]) + yield spec, abspath + else: + specs = spack.cmd.parse_specs(args.spec) + if (args.path or args.build_directory) and len(specs) > 1: + raise SpackError( + "spack develop requires at most one named spec when using the --path or" + " --build-directory arguments" + ) + + for spec in specs: + if args.recursive: + concrete_specs = env.all_matching_specs(spec) + if not concrete_specs: + tty.warn( + f"{spec.name} has no matching concrete specs in the environment and " + "will be skipped. `spack develop --recursive` requires a concretized" + " environment" + ) + else: + for s in concrete_specs: + for node_spec in s.traverse(direction="parents", root=True): + tty.debug(f"Recursive develop for {node_spec.name}") + yield node_spec, _abs_code_path(env, node_spec, args.path) + else: + yield spec, _abs_code_path(env, spec, args.path) + + +def develop(parser, args): + env = spack.cmd.require_active_env(cmd_name="develop") + + for spec, abspath in _dev_spec_generator(args, env): + assure_concrete_spec(env, spec) + setup_src_code(spec, abspath, clone=args.clone, force=args.force) + update_env(env, spec, args.path, args.build_directory) diff --git a/lib/spack/spack/environment/environment.py b/lib/spack/spack/environment/environment.py index 68d77d78c9e..cbd808ff49e 100644 --- a/lib/spack/spack/environment/environment.py +++ b/lib/spack/spack/environment/environment.py @@ -1128,11 +1128,6 @@ def user_specs(self): @property def dev_specs(self): - if not self._dev_specs: - self._dev_specs = self._read_dev_specs() - return self._dev_specs - - def _read_dev_specs(self): dev_specs = {} dev_config = spack.config.get("develop", {}) for name, entry in dev_config.items(): diff --git a/lib/spack/spack/test/cmd/develop.py b/lib/spack/spack/test/cmd/develop.py index 046d5e9d8fc..e0c13213376 100644 --- a/lib/spack/spack/test/cmd/develop.py +++ b/lib/spack/spack/test/cmd/develop.py @@ -16,6 +16,7 @@ import spack.stage import spack.util.git import spack.util.path +from spack.error import SpackError from spack.main import SpackCommand add = SpackCommand("add") @@ -159,6 +160,7 @@ def check_path(stage, dest): # Create path to allow develop to modify env fs.mkdirp(abspath) develop("--no-clone", "-p", path, "mpich@1.0") + self.check_develop(e, spack.spec.Spec("mpich@=1.0"), path) # Remove path to ensure develop with no args runs staging code os.rmdir(abspath) @@ -218,6 +220,40 @@ def test_develop_full_git_repo( assert len(commits) > 1 +def test_recursive(mutable_mock_env_path, install_mockery, mock_fetch): + env("create", "test") + + with ev.read("test") as e: + add("indirect-mpich@1.0") + e.concretize() + specs = e.all_specs() + + assert len(specs) > 1 + develop("--recursive", "mpich") + + expected_dev_specs = ["mpich", "direct-mpich", "indirect-mpich"] + for spec in expected_dev_specs: + assert spec in e.dev_specs + + +def test_develop_fails_with_multiple_concrete_versions( + mutable_mock_env_path, install_mockery, mock_fetch +): + env("create", "test") + + with ev.read("test") as e: + add("indirect-mpich@1.0") + add("indirect-mpich@0.9") + e.unify = False + e.concretize() + + with pytest.raises(SpackError) as develop_error: + develop("indirect-mpich", fail_on_error=True) + + error_str = "has multiple concrete instances in the graph" + assert error_str in str(develop_error.value) + + def test_concretize_dev_path_with_at_symbol_in_env(mutable_mock_env_path, tmpdir, mock_packages): spec_like = "develop-test@develop" diff --git a/share/spack/spack-completion.bash b/share/spack/spack-completion.bash index 33ea464d776..f2a3c7be1dc 100644 --- a/share/spack/spack-completion.bash +++ b/share/spack/spack-completion.bash @@ -994,7 +994,7 @@ _spack_dev_build() { _spack_develop() { if $list_options then - SPACK_COMPREPLY="-h --help -p --path -b --build-directory --no-clone --clone -f --force" + SPACK_COMPREPLY="-h --help -p --path -b --build-directory --no-clone --clone -f --force -r --recursive" else _all_packages fi diff --git a/share/spack/spack-completion.fish b/share/spack/spack-completion.fish index 0297384f924..654b1b3b43a 100644 --- a/share/spack/spack-completion.fish +++ b/share/spack/spack-completion.fish @@ -1430,7 +1430,7 @@ complete -c spack -n '__fish_spack_using_command dev-build' -l deprecated -f -a complete -c spack -n '__fish_spack_using_command dev-build' -l deprecated -d 'allow concretizer to select deprecated versions' # spack develop -set -g __fish_spack_optspecs_spack_develop h/help p/path= b/build-directory= no-clone clone f/force= +set -g __fish_spack_optspecs_spack_develop h/help p/path= b/build-directory= no-clone clone f/force= r/recursive complete -c spack -n '__fish_spack_using_command_pos_remainder 0 develop' -f -k -a '(__fish_spack_specs_or_id)' complete -c spack -n '__fish_spack_using_command develop' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command develop' -s h -l help -d 'show this help message and exit' @@ -1441,9 +1441,11 @@ complete -c spack -n '__fish_spack_using_command develop' -s b -l build-director complete -c spack -n '__fish_spack_using_command develop' -l no-clone -f -a clone complete -c spack -n '__fish_spack_using_command develop' -l no-clone -d 'do not clone, the package already exists at the source path' complete -c spack -n '__fish_spack_using_command develop' -l clone -f -a clone -complete -c spack -n '__fish_spack_using_command develop' -l clone -d 'clone the package even if the path already exists' +complete -c spack -n '__fish_spack_using_command develop' -l clone -d '(default) clone the package unless the path already exists, use --force to overwrite' complete -c spack -n '__fish_spack_using_command develop' -s f -l force -r -f -a force complete -c spack -n '__fish_spack_using_command develop' -s f -l force -r -d 'remove any files or directories that block cloning source code' +complete -c spack -n '__fish_spack_using_command develop' -s r -l recursive -f -a recursive +complete -c spack -n '__fish_spack_using_command develop' -s r -l recursive -d 'traverse nodes of the graph to mark everything up to the root as a develop spec' # spack diff set -g __fish_spack_optspecs_spack_diff h/help json first a/attribute= ignore= diff --git a/var/spack/repos/builtin.mock/packages/indirect-mpich/package.py b/var/spack/repos/builtin.mock/packages/indirect-mpich/package.py index 66bc3b8b26a..d968e64a111 100644 --- a/var/spack/repos/builtin.mock/packages/indirect-mpich/package.py +++ b/var/spack/repos/builtin.mock/packages/indirect-mpich/package.py @@ -14,6 +14,7 @@ class IndirectMpich(Package): url = "http://www.example.com/indirect_mpich-1.0.tar.gz" version("1.0", md5="0123456789abcdef0123456789abcdef") + version("0.9", md5="1123456789abcdef0123456789abcdef") depends_on("mpi") depends_on("direct-mpich") From aa00c3fe1fe956ce6169657fd6c7f4a10fec53f8 Mon Sep 17 00:00:00 2001 From: Piotr Sacharuk <107190444+PiotrSacharuk@users.noreply.github.com> Date: Tue, 25 Mar 2025 01:05:43 +0100 Subject: [PATCH 16/23] trilinos: Apply workaround for oneAPI compiler for problems with build (#49636) * Fix problem at least with datatransferkit * Include patch 11676 from trilinos * Add patches for trilinos 13.4.1 * style check failed * Update links for patches * additional style check failed --- .../trilinos/13.4.1-14-patch11676.patch | 12 ++++++++++++ .../13.4.1-kokkoskernel-patch2296.patch | 15 +++++++++++++++ .../packages/trilinos/13.4.1-patch11600.patch | 12 ++++++++++++ .../14-14.2-kokkoskernel-patch2296.patch | 15 +++++++++++++++ .../repos/builtin/packages/trilinos/package.py | 17 +++++++++++++++++ 5 files changed, 71 insertions(+) create mode 100644 var/spack/repos/builtin/packages/trilinos/13.4.1-14-patch11676.patch create mode 100644 var/spack/repos/builtin/packages/trilinos/13.4.1-kokkoskernel-patch2296.patch create mode 100644 var/spack/repos/builtin/packages/trilinos/13.4.1-patch11600.patch create mode 100644 var/spack/repos/builtin/packages/trilinos/14-14.2-kokkoskernel-patch2296.patch diff --git a/var/spack/repos/builtin/packages/trilinos/13.4.1-14-patch11676.patch b/var/spack/repos/builtin/packages/trilinos/13.4.1-14-patch11676.patch new file mode 100644 index 00000000000..145ece04df2 --- /dev/null +++ b/var/spack/repos/builtin/packages/trilinos/13.4.1-14-patch11676.patch @@ -0,0 +1,12 @@ +diff --git a/packages/teuchos/core/src/Teuchos_BigUIntDecl.hpp b/packages/teuchos/core/src/Teuchos_BigUIntDecl.hpp +index e82e8be9e9a..b41b0d035af 100644 +--- a/packages/teuchos/core/src/Teuchos_BigUIntDecl.hpp ++++ b/packages/teuchos/core/src/Teuchos_BigUIntDecl.hpp +@@ -43,6 +43,7 @@ + #define TEUCHOS_BIG_UINT_DECL_HPP + + #include ++#include + + /*! \file Teuchos_BigUIntDecl.hpp + \brief Arbitrary-precision unsigned integer declaration. diff --git a/var/spack/repos/builtin/packages/trilinos/13.4.1-kokkoskernel-patch2296.patch b/var/spack/repos/builtin/packages/trilinos/13.4.1-kokkoskernel-patch2296.patch new file mode 100644 index 00000000000..014dbc5db94 --- /dev/null +++ b/var/spack/repos/builtin/packages/trilinos/13.4.1-kokkoskernel-patch2296.patch @@ -0,0 +1,15 @@ +diff --git a/packages/kokkos-kernels/src/sparse/KokkosSparse_spadd_handle.hpp b/packages/kokkos-kernels/src/sparse/KokkosSparse_spadd_handle.hpp +index 917b1038a61..d5e4d30653d 100644 +--- a/packages/kokkos-kernels/src/sparse/KokkosSparse_spadd_handle.hpp ++++ b/packages/kokkos-kernels/src/sparse/KokkosSparse_spadd_handle.hpp +@@ -104,10 +104,6 @@ class SPADDHandle { + */ + size_type get_c_nnz() { return this->result_nnz_size; } + +- void set_sort_option(int option) { this->sort_option = option; } +- +- int get_sort_option() { return this->sort_option; } +- + /** + * \brief Default constructor. + */ diff --git a/var/spack/repos/builtin/packages/trilinos/13.4.1-patch11600.patch b/var/spack/repos/builtin/packages/trilinos/13.4.1-patch11600.patch new file mode 100644 index 00000000000..9f013f71c64 --- /dev/null +++ b/var/spack/repos/builtin/packages/trilinos/13.4.1-patch11600.patch @@ -0,0 +1,12 @@ +diff --git a/packages/kokkos/core/src/impl/Kokkos_MemoryPool.cpp b/packages/kokkos/core/src/impl/Kokkos_MemoryPool.cpp +index 889d821bb1c..3ddc1d3515e 100644 +--- a/packages/kokkos/core/src/impl/Kokkos_MemoryPool.cpp ++++ b/packages/kokkos/core/src/impl/Kokkos_MemoryPool.cpp +@@ -46,6 +46,7 @@ + + #include + #include ++#include + + //---------------------------------------------------------------------------- + //---------------------------------------------------------------------------- diff --git a/var/spack/repos/builtin/packages/trilinos/14-14.2-kokkoskernel-patch2296.patch b/var/spack/repos/builtin/packages/trilinos/14-14.2-kokkoskernel-patch2296.patch new file mode 100644 index 00000000000..4ee9c8b8482 --- /dev/null +++ b/var/spack/repos/builtin/packages/trilinos/14-14.2-kokkoskernel-patch2296.patch @@ -0,0 +1,15 @@ +diff --git a/packages/kokkos-kernels/sparse/src/KokkosSparse_spadd_handle.hpp b/packages/kokkos-kernels/sparse/src/KokkosSparse_spadd_handle.hpp +index 6d726e3da65..01d96f55115 100644 +--- a/packages/kokkos-kernels/sparse/src/KokkosSparse_spadd_handle.hpp ++++ b/packages/kokkos-kernels/sparse/src/KokkosSparse_spadd_handle.hpp +@@ -76,10 +76,6 @@ class SPADDHandle { + */ + size_type get_c_nnz() { return this->result_nnz_size; } + +- void set_sort_option(int option) { this->sort_option = option; } +- +- int get_sort_option() { return this->sort_option; } +- + /** + * \brief Default constructor. + */ diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py index 973ac383974..e1106ce4878 100644 --- a/var/spack/repos/builtin/packages/trilinos/package.py +++ b/var/spack/repos/builtin/packages/trilinos/package.py @@ -542,6 +542,18 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage): when="@13.0.0:13.0.1 +teko gotype=long", ) + # https://github.com/kokkos/kokkos-kernels/pull/2296 + patch("13.4.1-kokkoskernel-patch2296.patch", when="@13.4.1 %oneapi@2025:") + + # https://github.com/kokkos/kokkos-kernels/pull/2296 + patch("14-14.2-kokkoskernel-patch2296.patch", when="@14 %oneapi@2025:") + + # https://github.com/trilinos/Trilinos/pull/11676 + patch("13.4.1-14-patch11676.patch", when="@13.4.1:14.0 %oneapi@2025:") + + # https://github.com/trilinos/Trilinos/pull/11600 + patch("13.4.1-patch11600.patch", when="@13.4.1 %oneapi@2025:") + def flag_handler(self, name, flags): spec = self.spec is_cce = spec.satisfies("%cce") @@ -557,6 +569,11 @@ def flag_handler(self, name, flags): flags.append("-no-ipo") if "+wrapper" in spec: flags.append("--expt-extended-lambda") + if spec.satisfies("%oneapi@2025:"): + flags.append( + "-Wno-error=missing-template-arg-list-after-template-kw " + "-Wno-missing-template-arg-list-after-template-kw" + ) elif name == "ldflags": if spec.satisfies("%cce@:14"): flags.append("-fuse-ld=gold") From 2ced87297db50acc2a860be9febf4cfe92e4f0f0 Mon Sep 17 00:00:00 2001 From: Nicholas Sly Date: Mon, 24 Mar 2025 18:00:39 -0700 Subject: [PATCH 17/23] Add dbus patch for container builds. (#49402) --- .../repos/builtin/packages/dbus/meson_post_install.patch | 9 +++++++++ var/spack/repos/builtin/packages/dbus/package.py | 7 +++++++ 2 files changed, 16 insertions(+) create mode 100644 var/spack/repos/builtin/packages/dbus/meson_post_install.patch diff --git a/var/spack/repos/builtin/packages/dbus/meson_post_install.patch b/var/spack/repos/builtin/packages/dbus/meson_post_install.patch new file mode 100644 index 00000000000..8cd13bca065 --- /dev/null +++ b/var/spack/repos/builtin/packages/dbus/meson_post_install.patch @@ -0,0 +1,9 @@ +diff --git a/meson_post_install.py b/meson_post_install.py +index cfc03b22..1d007ad6 100755 +--- a/meson_post_install.py ++++ b/meson_post_install.py +@@ -103,4 +103,3 @@ def post_install_exe(): + + if __name__ == "__main__": + post_install_relocation() +- post_install_exe() diff --git a/var/spack/repos/builtin/packages/dbus/package.py b/var/spack/repos/builtin/packages/dbus/package.py index 944bc226f75..186f0b8ca83 100644 --- a/var/spack/repos/builtin/packages/dbus/package.py +++ b/var/spack/repos/builtin/packages/dbus/package.py @@ -42,6 +42,13 @@ class Dbus(AutotoolsPackage, MesonPackage): version("1.8.6", sha256="eded83ca007b719f32761e60fd8b9ffd0f5796a4caf455b01b5a5ef740ebd23f") version("1.8.4", sha256="3ef63dc8d0111042071ee7f7bafa0650c6ce2d7be957ef0b7ec269495a651ff8") version("1.8.2", sha256="5689f7411165adc953f37974e276a3028db94447c76e8dd92efe910c6d3bae08") + # Skip function that tries to do something if you're root that doesn't work in a container. + # Only tested on 1.15.10, but probably works for other versions as well. + patch( + "meson_post_install.patch", + sha256="d121f842418af606f414ebfc523b51fdd23a2d231e73d66229a4b0ab3486edc4", + when="@1.15.10", + ) variant("xml_docs", default=False, description="Build XML documentation") variant("system-socket", default="default", description="Location for the DBus system socket") From 20ddb85020f4ba06eb4c4eb21d1367dea479bb45 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Tue, 25 Mar 2025 09:01:28 -0700 Subject: [PATCH 18/23] setup-env.csh: Harden for people who like aliases (#49670) A user had `grep` aliased to `grep -n`, which was causing `csh` setup to fail due to number prefixes in `SPACK_ROOT`. - [x] Prefix invocations of `grep` and `sed` (which are not builtin) with `\` to avoid any aliases. - [x] Avoid using `dirname` altogether -- use csh's `:h` modifier (which does the same thing) instead. Signed-off-by: Todd Gamblin --- share/spack/setup-env.csh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/share/spack/setup-env.csh b/share/spack/setup-env.csh index 77400b1c542..bc8bb25e74e 100644 --- a/share/spack/setup-env.csh +++ b/share/spack/setup-env.csh @@ -33,14 +33,15 @@ endif # filter this script out of list of open files if ( $?_sp_lsof ) then - set _sp_source_file = `$_sp_lsof | sed -e 's/^[^/]*//' | grep "/setup-env.csh"` + set _sp_source_file = `$_sp_lsof | \sed -e 's/^[^/]*//' | \grep "/setup-env.csh"` endif -# This script is in $SPACK_ROOT/share/spack; get the root with dirname +# This script is in $SPACK_ROOT/share/spack. +# Get the root with :h, which is like dirname but it's a csh builtin if ($?_sp_source_file) then - set _sp_share_spack = `dirname "$_sp_source_file"` - set _sp_share = `dirname "$_sp_share_spack"` - setenv SPACK_ROOT `dirname "$_sp_share"` + set _sp_share_spack = "$_sp_source_file:h" + set _sp_share = "$_sp_share_spack:h" + setenv SPACK_ROOT "$_sp_share:h" endif if (! $?SPACK_ROOT) then @@ -73,8 +74,8 @@ _spack_pathadd PATH "$SPACK_ROOT/bin" eval `spack --print-shell-vars csh` # Set up module search paths in the user environment -set tcl_roots = `echo $_sp_tcl_roots:q | sed 's/:/ /g'` -set compatible_sys_types = `echo $_sp_compatible_sys_types:q | sed 's/:/ /g'` +set tcl_roots = `echo $_sp_tcl_roots:q | \sed 's/:/ /g'` +set compatible_sys_types = `echo $_sp_compatible_sys_types:q | \sed 's/:/ /g'` foreach tcl_root ($tcl_roots:q) foreach systype ($compatible_sys_types:q) _spack_pathadd MODULEPATH "$tcl_root/$systype" From 9ac6ecd5ba39ecb055c1496047ed29deeeb32947 Mon Sep 17 00:00:00 2001 From: arezaii Date: Tue, 25 Mar 2025 10:01:58 -0600 Subject: [PATCH 19/23] Chapel 2.4 (#49662) * limit some patches by chapel version * fix short output version if building main * update patches, remove unneeded 'self' refs * fix spack style * update patches with changes from PR * change py-protobuf to just protobuf dep * add PR numbers for patches * fix spack style * update 2.4 sha256 --- .../chapel/fix_chpl_shared_lib_path.patch | 119 ++++++++++++------ .../chapel/fix_chpl_shared_lib_path_2.3.patch | 110 +++++++++++----- .../repos/builtin/packages/chapel/package.py | 18 ++- 3 files changed, 165 insertions(+), 82 deletions(-) diff --git a/var/spack/repos/builtin/packages/chapel/fix_chpl_shared_lib_path.patch b/var/spack/repos/builtin/packages/chapel/fix_chpl_shared_lib_path.patch index 047a657d6ef..44b8667e058 100644 --- a/var/spack/repos/builtin/packages/chapel/fix_chpl_shared_lib_path.patch +++ b/var/spack/repos/builtin/packages/chapel/fix_chpl_shared_lib_path.patch @@ -1,46 +1,87 @@ +diff --git a/util/chplenv/chpl_home_utils.py b/util/chplenv/chpl_home_utils.py +index 5d85153835..b08fc2fc93 100644 +--- a/util/chplenv/chpl_home_utils.py ++++ b/util/chplenv/chpl_home_utils.py +@@ -54,6 +54,45 @@ install_path_regex = re.compile( + os.path.sep, + os.path.sep)) + ++@memoize ++def get_chpl_configured_install_lib_prefix(): ++ # gets the path to the lib directory for a prefix install, or None if not ++ # a prefix install ++ chpl_home = str(os.getenv("CHPL_HOME")) ++ if os.path.exists(os.path.join(chpl_home, "configured-prefix")): ++ with open(os.path.join(chpl_home, "CMakeLists.txt"), "r") as f: ++ # read CMakeLists.txt to get the CHPL_MAJOR_VERSION and ++ # CHPL_MINOR_VERSION and then construct the path from that ++ chpl_major_version = None ++ chpl_minor_version = None ++ for line in f: ++ if "set(CHPL_MAJOR_VERSION" in line: ++ chpl_major_version = line.split()[1].strip(")") ++ if "set(CHPL_MINOR_VERSION" in line: ++ chpl_minor_version = line.split()[1].strip(")") ++ if ( ++ chpl_major_version is not None ++ and chpl_minor_version is not None ++ ): ++ break ++ assert chpl_major_version is not None and chpl_minor_version is not None ++ chpl_version_string = "{}.{}".format( ++ chpl_major_version, ++ chpl_minor_version, ++ ) ++ chpl_prefix = None ++ with open(os.path.join(chpl_home, "configured-prefix"), "r") as f: ++ chpl_prefix = f.read().strip() ++ assert chpl_prefix != "" and chpl_prefix is not None ++ return os.path.join( ++ chpl_prefix, ++ "lib", ++ "chapel", ++ chpl_version_string, ++ "compiler", ++ ) ++ return None ++ + @memoize + def get_chpl_version_from_install(): + if get_prefix_install_prefix(): +@@ -189,6 +228,8 @@ def _main(): + ) + parser.add_option('--using-module', action='store_const', + dest='func', const=using_chapel_module) ++ parser.add_option('--configured-install-lib-prefix', action='store_const', ++ dest='func', const=get_chpl_configured_install_lib_prefix) + (options, args) = parser.parse_args() + + if options.func: + diff --git a/tools/chapel-py/setup.py b/tools/chapel-py/setup.py -index bee452790c..58ec46d7e6 100644 +index 0f3dd9fea0..9be2a48cff 100644 --- a/tools/chapel-py/setup.py +++ b/tools/chapel-py/setup.py -@@ -46,7 +46,37 @@ host_cc = str(chpl_variables.get("CHPL_HOST_CC")) - host_cxx = str(chpl_variables.get("CHPL_HOST_CXX")) +@@ -47,6 +47,18 @@ host_cxx = str(chpl_variables.get("CHPL_HOST_CXX")) host_bin_subdir = str(chpl_variables.get("CHPL_HOST_BIN_SUBDIR")) -+ -+# construct the chpl_lib_path from chpl_home, or use the configured-prefix if it exists -+ chpl_lib_path = os.path.join(chpl_home, "lib", "compiler", host_bin_subdir) -+chpl_install_lib_path = None -+if os.path.exists(os.path.join(chpl_home, "configured-prefix")): -+ with open(os.path.join(chpl_home, "CMakeLists.txt"), "r") as f: -+ # read CMakeLists.txt to get the CHPL_MAJOR_VERSION and CHPL_MINOR_VERSION -+ # and then construct the path from that -+ chpl_major_version = None -+ chpl_minor_version = None -+ for line in f: -+ if "set(CHPL_MAJOR_VERSION" in line: -+ chpl_major_version = line.split()[1].strip(')') -+ if "set(CHPL_MINOR_VERSION" in line: -+ chpl_minor_version = line.split()[1].strip(')') -+ if chpl_major_version is not None and chpl_minor_version is not None: -+ break -+ assert(chpl_major_version is not None and chpl_minor_version is not None) -+ chpl_version_string = "{}.{}".format(chpl_major_version, chpl_minor_version) -+ chpl_prefix = None -+ with open(os.path.join(chpl_home, "configured-prefix"), "r") as f: -+ chpl_prefix = f.read().strip() -+ assert(chpl_prefix is not None) -+ chpl_install_lib_path = os.path.join( -+ chpl_prefix, -+ "lib", -+ "chapel", -+ chpl_version_string, -+ "compiler" -+ ) ++# For installations using --prefix, the build and final lib paths are going to ++# differ. figure out the install location now and write it to the rpath ++chpl_home_utils = os.path.join( ++ chpl_home, "util", "chplenv", "chpl_home_utils.py" ++) ++chpl_install_lib_path = ( ++ subprocess.check_output( ++ ["python", chpl_home_utils, "--configured-install-lib-prefix"], ++ ) ++ .decode(sys.stdout.encoding) ++ .strip() ++) CXXFLAGS = [] if have_llvm and have_llvm != "none": -@@ -64,10 +94,14 @@ CXXFLAGS += ["-std=c++17", "-I{}/frontend/include".format(chpl_home)] +@@ -64,11 +76,16 @@ CXXFLAGS += ["-std=c++17", "-I{}/frontend/include".format(chpl_home)] LDFLAGS = [] LDFLAGS += [ "-L{}".format(chpl_lib_path), @@ -49,11 +90,13 @@ index bee452790c..58ec46d7e6 100644 - "-Wl,-rpath", - chpl_lib_path, ] -+if chpl_install_lib_path is not None: + ++if chpl_install_lib_path != "None": + LDFLAGS += [ + "-L{}".format(chpl_install_lib_path), + "-Wl,-rpath,{}".format(chpl_install_lib_path), + ] - - if str(chpl_variables.get("CHPL_SANITIZE")) == "address": - if str(chpl_variables.get("CHPL_HOST_PLATFORM")) == "darwin": ++ + os.environ["CC"] = host_cc + os.environ["CXX"] = host_cxx + setup( diff --git a/var/spack/repos/builtin/packages/chapel/fix_chpl_shared_lib_path_2.3.patch b/var/spack/repos/builtin/packages/chapel/fix_chpl_shared_lib_path_2.3.patch index c566c7329f7..97b1899d2c5 100644 --- a/var/spack/repos/builtin/packages/chapel/fix_chpl_shared_lib_path_2.3.patch +++ b/var/spack/repos/builtin/packages/chapel/fix_chpl_shared_lib_path_2.3.patch @@ -1,49 +1,31 @@ diff --git a/tools/chapel-py/setup.py b/tools/chapel-py/setup.py -index 30c2708724..3921143def 100644 +index 30c2708724..0cf576ab25 100644 --- a/tools/chapel-py/setup.py +++ b/tools/chapel-py/setup.py -@@ -47,6 +47,36 @@ host_cxx = str(chpl_variables.get("CHPL_HOST_CXX")) +@@ -47,6 +47,18 @@ host_cxx = str(chpl_variables.get("CHPL_HOST_CXX")) host_bin_subdir = str(chpl_variables.get("CHPL_HOST_BIN_SUBDIR")) chpl_lib_path = os.path.join(chpl_home, "lib", "compiler", host_bin_subdir) -+# For installations using --prefix, the lib final lib path is going to be different -+# figure it out now and write it to the rpath -+chpl_install_lib_path = None -+if os.path.exists(os.path.join(chpl_home, "configured-prefix")): -+ with open(os.path.join(chpl_home, "CMakeLists.txt"), "r") as f: -+ # read CMakeLists.txt to get the CHPL_MAJOR_VERSION and CHPL_MINOR_VERSION -+ # and then construct the path from that -+ chpl_major_version = None -+ chpl_minor_version = None -+ for line in f: -+ if "set(CHPL_MAJOR_VERSION" in line: -+ chpl_major_version = line.split()[1].strip(')') -+ if "set(CHPL_MINOR_VERSION" in line: -+ chpl_minor_version = line.split()[1].strip(')') -+ if chpl_major_version is not None and chpl_minor_version is not None: -+ break -+ assert(chpl_major_version is not None and chpl_minor_version is not None) -+ chpl_version_string = "{}.{}".format(chpl_major_version, chpl_minor_version) -+ chpl_prefix = None -+ with open(os.path.join(chpl_home, "configured-prefix"), "r") as f: -+ chpl_prefix = f.read().strip() -+ assert(chpl_prefix is not None) -+ chpl_install_lib_path = os.path.join( -+ chpl_prefix, -+ "lib", -+ "chapel", -+ chpl_version_string, -+ "compiler" -+ ) -+ ++# For installations using --prefix, the build and final lib paths are going to ++# differ figure out the install location now and write it to the rpath ++chpl_home_utils = os.path.join( ++ chpl_home, "util", "chplenv", "chpl_home_utils.py" ++) ++chpl_install_lib_path = ( ++ subprocess.check_output( ++ ["python", chpl_home_utils, "--configured-install-lib-prefix"], ++ ) ++ .decode(sys.stdout.encoding) ++ .strip() ++) CXXFLAGS = [] if have_llvm and have_llvm != "none": -@@ -68,6 +98,12 @@ LDFLAGS += [ +@@ -68,6 +80,12 @@ LDFLAGS += [ "-lChplFrontendShared", ] -+if chpl_install_lib_path is not None: ++if chpl_install_lib_path != "None": + LDFLAGS += [ + "-L{}".format(chpl_install_lib_path), + "-Wl,-rpath,{}".format(chpl_install_lib_path), @@ -52,3 +34,63 @@ index 30c2708724..3921143def 100644 if str(chpl_variables.get("CHPL_SANITIZE")) == "address": if str(chpl_variables.get("CHPL_HOST_PLATFORM")) == "darwin": sys.exit( +diff --git a/util/chplenv/chpl_home_utils.py b/util/chplenv/chpl_home_utils.py +index 5f09ffed15..4b93849acd 100644 +--- a/util/chplenv/chpl_home_utils.py ++++ b/util/chplenv/chpl_home_utils.py +@@ -54,6 +54,46 @@ install_path_regex = re.compile( + os.path.sep, + os.path.sep)) + ++@memoize ++def get_chpl_configured_install_lib_prefix(): ++ # gets the path to the lib directory for a prefix install, or None if not ++ # a prefix install ++ chpl_home = str(os.getenv("CHPL_HOME")) ++ if os.path.exists(os.path.join(chpl_home, "configured-prefix")): ++ with open(os.path.join(chpl_home, "CMakeLists.txt"), "r") as f: ++ # read CMakeLists.txt to get the CHPL_MAJOR_VERSION and ++ # CHPL_MINOR_VERSION and then construct the path from that ++ chpl_major_version = None ++ chpl_minor_version = None ++ for line in f: ++ if "set(CHPL_MAJOR_VERSION" in line: ++ chpl_major_version = line.split()[1].strip(")") ++ if "set(CHPL_MINOR_VERSION" in line: ++ chpl_minor_version = line.split()[1].strip(")") ++ if ( ++ chpl_major_version is not None ++ and chpl_minor_version is not None ++ ): ++ break ++ assert chpl_major_version is not None and chpl_minor_version is not None ++ chpl_version_string = "{}.{}".format( ++ chpl_major_version, ++ chpl_minor_version, ++ ) ++ chpl_prefix = None ++ with open(os.path.join(chpl_home, "configured-prefix"), "r") as f: ++ chpl_prefix = f.read().strip() ++ # Problems with the configured-prefix file - maybe empty ++ assert chpl_prefix != "" and chpl_prefix is not None ++ return os.path.join( ++ chpl_prefix, ++ "lib", ++ "chapel", ++ chpl_version_string, ++ "compiler", ++ ) ++ return None ++ + @memoize + def get_chpl_version_from_install(): + if get_prefix_install_prefix(): +@@ -189,6 +229,8 @@ def _main(): + ) + parser.add_option('--using-module', action='store_const', + dest='func', const=using_chapel_module) ++ parser.add_option('--configured-install-lib-prefix', action='store_const', ++ dest='func', const=get_chpl_configured_install_lib_prefix) + (options, args) = parser.parse_args() + + if options.func: diff --git a/var/spack/repos/builtin/packages/chapel/package.py b/var/spack/repos/builtin/packages/chapel/package.py index 08bf0d15c7a..832435fa5f2 100644 --- a/var/spack/repos/builtin/packages/chapel/package.py +++ b/var/spack/repos/builtin/packages/chapel/package.py @@ -58,6 +58,7 @@ class Chapel(AutotoolsPackage, CudaPackage, ROCmPackage): version("main", branch="main") + version("2.4.0", sha256="a51a472488290df12d1657db2e7118ab519743094f33650f910d92b54c56f315") version("2.3.0", sha256="0185970388aef1f1fae2a031edf060d5eac4eb6e6b1089e7e3b15a130edd8a31") version("2.2.0", sha256="bb16952a87127028031fd2b56781bea01ab4de7c3466f7b6a378c4d8895754b6") version("2.1.0", sha256="72593c037505dd76e8b5989358b7580a3fdb213051a406adb26a487d26c68c60") @@ -71,9 +72,9 @@ class Chapel(AutotoolsPackage, CudaPackage, ROCmPackage): depends_on("cxx", type="build") # generated patch("fix_spack_cc_wrapper_in_cray_prgenv.patch", when="@2.0.0:") - patch("fix_chpl_shared_lib_path.patch", when="@2.1:2.2 +python-bindings") - patch("fix_chpl_shared_lib_path_2.3.patch", when="@2.2.1: +python-bindings") - patch("fix_chpl_line_length.patch") + patch("fix_chpl_shared_lib_path.patch", when="@2.1.1:2.2 +python-bindings") # PR 26388 + patch("fix_chpl_shared_lib_path_2.3.patch", when="@2.2.1:2.3 +python-bindings") # PR 26388 + patch("fix_chpl_line_length.patch", when="@:2.3.0") # PRs 26357, 26381, 26491 patch("fix_checkChplInstall.patch", when="@:2.3.0") # PR 26317 patch("fix_llvm_include_path_2.3.patch", when="@=2.3.0 llvm=bundled") # PR 26402 @@ -142,7 +143,7 @@ class Chapel(AutotoolsPackage, CudaPackage, ROCmPackage): "curl": "curl", "hdf5": "hdf5+hl~mpi", "libevent": "libevent", - "protobuf": "py-protobuf", + "protobuf": "protobuf", "ssl": "openssl", "yaml": "libyaml@0.1", "zmq": "libzmq", @@ -608,12 +609,9 @@ def install(self, spec, prefix): # if working from a non-versioned release/branch (such as main) if not self.is_versioned_release(): install("CMakeLists.txt", join_path(prefix.share, "chapel")) + install_tree("doc", join_path(prefix.share, "chapel", self._output_version_short, "doc")) install_tree( - "doc", join_path(self.prefix.share, "chapel", self._output_version_short, "doc") - ) - install_tree( - "examples", - join_path(self.prefix.share, "chapel", self._output_version_short, "examples"), + "examples", join_path(prefix.share, "chapel", self._output_version_short, "examples") ) def setup_chpl_platform(self, env): @@ -839,7 +837,7 @@ def _output_version_long(self) -> str: @llnl.util.lang.memoized def _output_version_short(self) -> str: if not self.is_versioned_release(): - return self.get_chpl_version_from_cmakelists()[-2] + return ".".join(self.get_chpl_version_from_cmakelists().split(".")[:-1]) spec_vers_str = str(self.spec.version.up_to(2)) return spec_vers_str From c1df1c7ee5bc97f4ce77098f0bb7919afe662fa8 Mon Sep 17 00:00:00 2001 From: Jon Rood Date: Tue, 25 Mar 2025 10:43:13 -0600 Subject: [PATCH 20/23] trilinos: fix kokkos constraints for version 16 (#49643) * trilinos: add equals sign to kokkos dependencies. * Fix some license headers to pass style check. * Generalize a bit. * Generalize a bit more. * datatransferkit: constraing to maximum of trilinos@16.0. --- .../packages/datatransferkit/package.py | 2 +- .../repos/builtin/packages/trilinos/package.py | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/var/spack/repos/builtin/packages/datatransferkit/package.py b/var/spack/repos/builtin/packages/datatransferkit/package.py index 8ac75863bb7..0274324d617 100644 --- a/var/spack/repos/builtin/packages/datatransferkit/package.py +++ b/var/spack/repos/builtin/packages/datatransferkit/package.py @@ -46,7 +46,7 @@ class Datatransferkit(CMakePackage): depends_on("trilinos+openmp", when="+openmp") depends_on("trilinos+stratimikos+belos", when="@master") depends_on("trilinos@13:13.4.1", when="@3.1-rc2:3.1-rc3") - depends_on("trilinos@14.2:", when="@3.1.0:") + depends_on("trilinos@14.2:16.0", when="@3.1.0:") def cmake_args(self): spec = self.spec diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py index e1106ce4878..a405b31fd16 100644 --- a/var/spack/repos/builtin/packages/trilinos/package.py +++ b/var/spack/repos/builtin/packages/trilinos/package.py @@ -425,15 +425,15 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage): depends_on("kokkos-kernels~shared", when="+cuda_rdc") depends_on("kokkos-kernels~shared", when="+rocm_rdc") depends_on("kokkos~complex_align") - depends_on("kokkos@4.5.01", when="@master:") - depends_on("kokkos@4.5.01", when="@16.1") - depends_on("kokkos@4.3.01", when="@16") - depends_on("kokkos@4.2.01", when="@15.1:15") - depends_on("kokkos@4.1.00", when="@14.4:15.0") - depends_on("kokkos-kernels@4.5.01", when="@master:") - depends_on("kokkos-kernels@4.5.01", when="@16.1") - depends_on("kokkos-kernels@4.3.01", when="@16") - depends_on("kokkos-kernels@4.2.01", when="@15.1:15") + depends_on("kokkos@=4.5.01", when="@master:") + depends_on("kokkos@=4.5.01", when="@16.1") + depends_on("kokkos@=4.3.01", when="@16.0") + depends_on("kokkos@=4.2.01", when="@15.1:15") + depends_on("kokkos@=4.1.00", when="@14.4:15.0") + depends_on("kokkos-kernels@=4.5.01", when="@master:") + depends_on("kokkos-kernels@=4.5.01", when="@16.1") + depends_on("kokkos-kernels@=4.3.01", when="@16.0") + depends_on("kokkos-kernels@=4.2.01", when="@15.1:15") depends_on("kokkos+openmp", when="+openmp") for a in CudaPackage.cuda_arch_values: From 4ff43d7fa92ee0d17bf37266d8401375e291f376 Mon Sep 17 00:00:00 2001 From: Alec Scott Date: Tue, 25 Mar 2025 13:07:37 -0400 Subject: [PATCH 21/23] ci: future-proof for enabling GitHub merge queues later (#49665) --- .github/workflows/ci.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 50a65578925..ae2ae2885b3 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -9,6 +9,7 @@ on: branches: - develop - releases/** + merge_group: concurrency: group: ci-${{github.ref}}-${{github.event.pull_request.number || github.run_number}} @@ -25,13 +26,17 @@ jobs: packages: ${{ steps.filter.outputs.packages }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - if: ${{ github.event_name == 'push' }} + if: ${{ github.event_name == 'push' || github.event_name == 'merge_group' }} with: fetch-depth: 0 # For pull requests it's not necessary to checkout the code - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 id: filter with: + # For merge group events, compare against the target branch (main) + base: ${{ github.event_name == 'merge_group' && github.event.merge_group.base_ref || '' }} + # For merge group events, use the merge group head ref + ref: ${{ github.event_name == 'merge_group' && github.event.merge_group.head_sha || github.ref }} # See https://github.com/dorny/paths-filter/issues/56 for the syntax used below # Don't run if we only modified packages in the # built-in repository or documentation From b0dba4ff5ae5bffda15c80702f6527bcb6ef6bae Mon Sep 17 00:00:00 2001 From: Robert Maaskant Date: Tue, 25 Mar 2025 22:37:44 +0100 Subject: [PATCH 22/23] yarn: add v4.6.0, v4.7.0 (#49177) * yarn: v4.6.0 * py-ipympl: pin yarn to v1 * rstudio: pin yarn to v1 * yarn: add v4.7.0 --- .../builtin/packages/py-ipympl/package.py | 2 +- .../repos/builtin/packages/rstudio/package.py | 2 +- .../repos/builtin/packages/yarn/package.py | 19 +++++++++++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/var/spack/repos/builtin/packages/py-ipympl/package.py b/var/spack/repos/builtin/packages/py-ipympl/package.py index 81a937053b4..2db5501a111 100644 --- a/var/spack/repos/builtin/packages/py-ipympl/package.py +++ b/var/spack/repos/builtin/packages/py-ipympl/package.py @@ -33,7 +33,7 @@ class PyIpympl(PythonPackage): depends_on("py-jupyter-packaging@0.7") depends_on("py-jupyterlab@3") depends_on("py-setuptools@40.8:") - depends_on("yarn") + depends_on("yarn@1") with default_args(type=("build", "run")): depends_on("py-ipython@:8") diff --git a/var/spack/repos/builtin/packages/rstudio/package.py b/var/spack/repos/builtin/packages/rstudio/package.py index 1c8ab3eca15..87cca2df384 100644 --- a/var/spack/repos/builtin/packages/rstudio/package.py +++ b/var/spack/repos/builtin/packages/rstudio/package.py @@ -29,7 +29,7 @@ class Rstudio(CMakePackage): depends_on("patchelf@0.9:") depends_on("yaml-cpp@:0.6.3") # find_package fails with newest version depends_on("node-js") - depends_on("yarn") + depends_on("yarn@1") depends_on("pandoc@2.11.4:") depends_on("icu4c") depends_on("soci~static+boost+postgresql+sqlite") diff --git a/var/spack/repos/builtin/packages/yarn/package.py b/var/spack/repos/builtin/packages/yarn/package.py index c9921dff4ad..c470eadb91f 100644 --- a/var/spack/repos/builtin/packages/yarn/package.py +++ b/var/spack/repos/builtin/packages/yarn/package.py @@ -9,15 +9,18 @@ class Yarn(Package): """Fast, reliable, and secure dependency management.""" homepage = "https://yarnpkg.com" - url = "https://github.com/yarnpkg/yarn/releases/download/v1.22.22/yarn-v1.22.22.tar.gz" + url = "https://github.com/yarnpkg/berry/archive/refs/tags/@yarnpkg/cli/4.6.0.tar.gz" maintainers("cosmicexplorer") + depends_on("node-js@18.12.0:", type="run", when="@4:") depends_on("node-js@4.8.0:4.9.1,6.2.2:6.17.1,8:", type="run", when="@1.22.22") depends_on("node-js@4.0:", type="run") license("BSD-2-Clause") + version("4.7.0", sha256="3e840034175d50254578c692f795cd79512869ad257f5b2269117b82c14fa0b1") + version("4.6.0", sha256="c3a318af0deb9d284d7c46bf97a28f9d70b156142dcab8ec985481d5818dc651") version("1.22.22", sha256="88268464199d1611fcf73ce9c0a6c4d44c7d5363682720d8506f6508addf36a0") version("1.22.4", sha256="bc5316aa110b2f564a71a3d6e235be55b98714660870c5b6b2d2d3f12587fb58") version("1.22.2", sha256="de4cff575ae7151f8189bf1d747f026695d768d0563e2860df407ab79c70693d") @@ -25,5 +28,17 @@ class Yarn(Package): version("1.22.0", sha256="de8871c4e2822cba80d58c2e72366fb78567ec56e873493c9ca0cca76c60f9a5") version("1.21.1", sha256="d1d9f4a0f16f5ed484e814afeb98f39b82d4728c6c8beaafb5abc99c02db6674") + def url_for_version(self, version): + if version < Version("2.0.0"): + return f"https://github.com/yarnpkg/yarn/releases/download/v{version}/yarn-v{version}.tar.gz" + else: + return ( + f"https://github.com/yarnpkg/berry/archive/refs/tags/@yarnpkg/cli/{version}.tar.gz" + ) + def install(self, spec, prefix): - install_tree(".", prefix) + if spec.version < Version("2.0.0"): + install_tree(".", prefix) + else: + mkdirp(prefix.bin) + install("packages/yarnpkg-cli/bin/yarn.js", prefix.bin.yarn) From bd41863797ff3cb714f3e0d3c4cba06bc4af2421 Mon Sep 17 00:00:00 2001 From: Melven Roehrig-Zoellner Date: Tue, 25 Mar 2025 22:45:53 +0100 Subject: [PATCH 23/23] scorep: ensure gcc-plugin is built, patch gcc@14 (#49257) * scorep: ensure gcc-plugin is built, patch gcc@14 * scorep: patch only to non-deprecated versions --- var/spack/repos/builtin/packages/scorep/package.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/var/spack/repos/builtin/packages/scorep/package.py b/var/spack/repos/builtin/packages/scorep/package.py index dbbecaaa3e9..5d4ec214c60 100644 --- a/var/spack/repos/builtin/packages/scorep/package.py +++ b/var/spack/repos/builtin/packages/scorep/package.py @@ -84,6 +84,11 @@ def url_for_version(self, version): patch("gcc7.patch", when="@1.4:3") patch("gcc10.patch", when="@3.1:6.0") + patch( + "https://gitlab.com/score-p/scorep/-/commit/093ff84f0e155ac1db99bbaa312e028f89affddb.diff", + when="@7:8.4 +gcc-plugin", + sha256="d20b3046ba6a89ad9c106bcf372bceb1bd9ab780d4c7dd9e7373f0099b92d933", + ) variant("mpi", default=True, description="Enable MPI support") variant("papi", default=True, description="Enable PAPI") @@ -92,6 +97,7 @@ def url_for_version(self, version): variant("unwind", default=False, description="Enable sampling via libunwind and lib wrapping") variant("cuda", default=False, description="Enable CUDA support") variant("hip", default=False, description="Enable ROCm/HIP support", when="@8.0:") + variant("gcc-plugin", default=True, description="Enable gcc-plugin", when="%gcc") # 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 # two components of cube -- cubew and cubelib. @@ -230,6 +236,13 @@ def configure_args(self): if spec.satisfies("^binutils"): config_args.append("--with-libbfd=%s" % spec["binutils"].prefix) + # 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 + if "+gcc-plugin" in spec: + config_args.append("--enable-gcc-plugin") + else: + config_args.append("--disable-gcc-plugin") + config_args.extend( [ "CFLAGS={0}".format(self.compiler.cc_pic_flag),