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 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/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", 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/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) 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" 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") 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 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/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") 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") diff --git a/var/spack/repos/builtin/packages/hip/package.py b/var/spack/repos/builtin/packages/hip/package.py index 0dfae26717e..b32ae3e2e62 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( @@ -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=" ") @@ -563,6 +567,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"): 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") 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", 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") 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 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) 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/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") 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}") 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/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), 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): 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..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: @@ -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") 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) 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")