Merge tag 'before-compiler-dependencies' into woptim/rsc-2025-03-0-retro

This commit is contained in:
Adrien M. BERNEDE 2025-04-07 14:30:05 +02:00
commit eb264b1261
51 changed files with 1028 additions and 366 deletions

View File

@ -9,6 +9,7 @@ on:
branches: branches:
- develop - develop
- releases/** - releases/**
merge_group:
concurrency: concurrency:
group: ci-${{github.ref}}-${{github.event.pull_request.number || github.run_number}} group: ci-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
@ -25,13 +26,17 @@ jobs:
packages: ${{ steps.filter.outputs.packages }} packages: ${{ steps.filter.outputs.packages }}
steps: steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
if: ${{ github.event_name == 'push' }} if: ${{ github.event_name == 'push' || github.event_name == 'merge_group' }}
with: with:
fetch-depth: 0 fetch-depth: 0
# For pull requests it's not necessary to checkout the code # For pull requests it's not necessary to checkout the code
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36
id: filter id: filter
with: 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 # See https://github.com/dorny/paths-filter/issues/56 for the syntax used below
# Don't run if we only modified packages in the # Don't run if we only modified packages in the
# built-in repository or documentation # built-in repository or documentation

View File

@ -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 version (and other constraints) passed as the spec argument to the
``spack develop`` command. ``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 For packages with ``git`` attributes, git branches, tags, and commits can
also be used as valid concrete versions (see :ref:`version-specifier`). 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 This means that for a package ``foo``, ``spack develop foo@git.main`` will clone

View File

@ -3,11 +3,13 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT) # SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os import os
import shutil import shutil
from typing import Optional
import llnl.util.tty as tty import llnl.util.tty as tty
import spack.cmd import spack.cmd
import spack.config import spack.config
import spack.environment
import spack.fetch_strategy import spack.fetch_strategy
import spack.repo import spack.repo
import spack.spec import spack.spec
@ -31,37 +33,33 @@ def setup_parser(subparser):
"--no-clone", "--no-clone",
action="store_false", action="store_false",
dest="clone", dest="clone",
default=None,
help="do not clone, the package already exists at the source path", help="do not clone, the package already exists at the source path",
) )
clone_group.add_argument( clone_group.add_argument(
"--clone", "--clone",
action="store_true", action="store_true",
dest="clone", dest="clone",
default=None, default=True,
help="clone the package even if the path already exists", help=(
"(default) clone the package unless the path already exists, "
"use --force to overwrite"
),
) )
subparser.add_argument( subparser.add_argument(
"-f", "--force", help="remove any files or directories that block cloning source code" "-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"]) 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: def _retrieve_develop_source(spec: spack.spec.Spec, abspath: str) -> None:
# "steal" the source code via staging API. We ask for a stage # "steal" the source code via staging API. We ask for a stage
# to be created, then copy it afterwards somewhere else. It would be # 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) package.stage.steal_source(abspath)
def develop(parser, args): def assure_concrete_spec(env: spack.environment.Environment, spec: spack.spec.Spec):
# Note: we could put develop specs in any scope, but I assume version = spec.versions.concrete_range_as_version
# users would only ever want to do this for either (a) an active if not version:
# env or (b) a specified config file (e.g. that is included by # first check environment for a matching concrete spec
# an environment) matching_specs = env.all_matching_specs(spec)
# TODO: when https://github.com/spack/spack/pull/35307 is merged, if matching_specs:
# an active env is not required if a scope is specified version = matching_specs[0].version
env = spack.cmd.require_active_env(cmd_name="develop") test_spec = spack.spec.Spec(f"{spec}@{version}")
if not args.spec: for m_spec in matching_specs:
if args.clone is False: if not m_spec.satisfies(test_spec):
raise SpackError("No spec provided to spack develop command") 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): def setup_src_code(spec: spack.spec.Spec, src_path: str, clone: bool = True, force: bool = False):
msg = "Skipping developer download of %s" % entry["spec"] """
msg += " because its path already exists." Handle checking, cloning or overwriting source code
tty.msg(msg) """
continue assert spec.versions
# Both old syntax `spack develop pkg@x` and new syntax `spack develop pkg@=x` if clone:
# are currently supported. _clone(spec, src_path, force)
spec = spack.spec.parse_with_version_concrete(entry["spec"])
_retrieve_develop_source(spec, abspath)
if not env.dev_specs: if not clone and not os.path.exists(src_path):
tty.warn("No develop specs to download") raise SpackError(f"Provided path {src_path} does not exist")
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]
version = spec.versions.concrete_range_as_version version = spec.versions.concrete_range_as_version
if not version: if not version:
@ -129,40 +126,114 @@ def develop(parser, args):
tty.msg(f"Defaulting to highest version: {spec.name}@{version}") tty.msg(f"Defaulting to highest version: {spec.name}@{version}")
spec.versions = spack.version.VersionList([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 def _update_config(spec, path):
clone = args.clone find_fn = lambda section: spec.name in section
if clone is None:
clone = not os.path.exists(abspath)
if not clone and not os.path.exists(abspath): entry = {"spec": str(spec)}
raise SpackError("Provided path %s does not exist" % abspath) if path and path != spec.name:
entry["path"] = path
if clone: def change_fn(section):
if os.path.exists(abspath): section[spec.name] = entry
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)
_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(): with env.write_transaction():
if args.build_directory is not None: if build_dir is not None:
spack.config.add( spack.config.add(
"packages:{}:package_attributes:build_directory:{}".format( f"packages:{spec.name}:package_attributes:build_directory:{build_dir}",
spec.name, args.build_directory
),
env.scope_name, 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)

View File

@ -17,6 +17,7 @@
pytest = None # type: ignore pytest = None # type: ignore
import llnl.util.filesystem import llnl.util.filesystem
import llnl.util.tty as tty
import llnl.util.tty.color as color import llnl.util.tty.color as color
from llnl.util.tty.colify import colify 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) pytest_root = spack.extensions.load_extension(args.extension)
if args.numprocesses is not None and args.numprocesses > 1: 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( pytest_args.extend(
[ [
"--dist", "--dist",

View File

@ -1128,11 +1128,6 @@ def user_specs(self):
@property @property
def dev_specs(self): 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_specs = {}
dev_config = spack.config.get("develop", {}) dev_config = spack.config.get("develop", {})
for name, entry in dev_config.items(): for name, entry in dev_config.items():

View File

@ -16,6 +16,7 @@
import spack.stage import spack.stage
import spack.util.git import spack.util.git
import spack.util.path import spack.util.path
from spack.error import SpackError
from spack.main import SpackCommand from spack.main import SpackCommand
add = SpackCommand("add") add = SpackCommand("add")
@ -159,6 +160,7 @@ def check_path(stage, dest):
# Create path to allow develop to modify env # Create path to allow develop to modify env
fs.mkdirp(abspath) fs.mkdirp(abspath)
develop("--no-clone", "-p", path, "mpich@1.0") 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 # Remove path to ensure develop with no args runs staging code
os.rmdir(abspath) os.rmdir(abspath)
@ -218,6 +220,40 @@ def test_develop_full_git_repo(
assert len(commits) > 1 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): def test_concretize_dev_path_with_at_symbol_in_env(mutable_mock_env_path, tmpdir, mock_packages):
spec_like = "develop-test@develop" spec_like = "develop-test@develop"

View File

@ -128,17 +128,21 @@ def test_dump_environment(prepare_environment_for_tests, shell_as, shell, tmpdir
def test_reverse_environment_modifications(working_env): 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 = { start_env = {
"PREPEND_PATH": os.sep + os.path.join("path", "to", "prepend", "to"), "PREPEND_PATH": prepend_val + os.pathsep + os.path.join("path", "to", "prepend", "to"),
"APPEND_PATH": os.sep + os.path.join("path", "to", "append", "to"), "APPEND_PATH": os.path.sep
+ os.path.join("path", "to", "append", "to" + os.pathsep + append_val),
"UNSET": "var_to_unset", "UNSET": "var_to_unset",
"APPEND_FLAGS": "flags to append to", "APPEND_FLAGS": "flags to append to",
} }
to_reverse = envutil.EnvironmentModifications() to_reverse = envutil.EnvironmentModifications()
to_reverse.prepend_path("PREPEND_PATH", "/new/path/prepended") to_reverse.prepend_path("PREPEND_PATH", prepend_val)
to_reverse.append_path("APPEND_PATH", "/new/path/appended") to_reverse.append_path("APPEND_PATH", append_val)
to_reverse.set_path("SET_PATH", ["/one/set/path", "/two/set/path"]) to_reverse.set_path("SET_PATH", ["/one/set/path", "/two/set/path"])
to_reverse.set("SET", "a var") to_reverse.set("SET", "a var")
to_reverse.unset("UNSET") to_reverse.unset("UNSET")

View File

@ -363,6 +363,30 @@ def execute(self, env: MutableMapping[str, str]):
env[self.name] = self.separator.join(directories) 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): class RemovePath(NameValueModifier):
def execute(self, env: MutableMapping[str, str]): def execute(self, env: MutableMapping[str, str]):
tty.debug(f"RemovePath: {self.name}-{str(self.value)}", level=3) 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()) item = PrependPath(name, path, separator=separator, trace=self._trace())
self.env_modifications.append(item) 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 @system_env_normalize
def remove_path(self, name: str, path: str, separator: str = os.pathsep): def remove_path(self, name: str, path: str, separator: str = os.pathsep):
"""Stores a request to remove a path from a list of paths. """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") tty.debug("Reversing `Set` environment operation may lose the original value")
rev.unset(envmod.name) rev.unset(envmod.name)
elif isinstance(envmod, AppendPath): elif isinstance(envmod, AppendPath):
rev.remove_path(envmod.name, envmod.value) rev.remove_last_path(envmod.name, envmod.value)
elif isinstance(envmod, PrependPath): elif isinstance(envmod, PrependPath):
rev.remove_path(envmod.name, envmod.value) rev.remove_first_path(envmod.name, envmod.value)
elif isinstance(envmod, SetPath): elif isinstance(envmod, SetPath):
tty.debug("Reversing `SetPath` environment operation may lose the original value") tty.debug("Reversing `SetPath` environment operation may lose the original value")
rev.unset(envmod.name) rev.unset(envmod.name)

View File

@ -33,14 +33,15 @@ endif
# filter this script out of list of open files # filter this script out of list of open files
if ( $?_sp_lsof ) then 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 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 if ($?_sp_source_file) then
set _sp_share_spack = `dirname "$_sp_source_file"` set _sp_share_spack = "$_sp_source_file:h"
set _sp_share = `dirname "$_sp_share_spack"` set _sp_share = "$_sp_share_spack:h"
setenv SPACK_ROOT `dirname "$_sp_share"` setenv SPACK_ROOT "$_sp_share:h"
endif endif
if (! $?SPACK_ROOT) then if (! $?SPACK_ROOT) then
@ -73,8 +74,8 @@ _spack_pathadd PATH "$SPACK_ROOT/bin"
eval `spack --print-shell-vars csh` eval `spack --print-shell-vars csh`
# Set up module search paths in the user environment # Set up module search paths in the user environment
set tcl_roots = `echo $_sp_tcl_roots: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'` set compatible_sys_types = `echo $_sp_compatible_sys_types:q | \sed 's/:/ /g'`
foreach tcl_root ($tcl_roots:q) foreach tcl_root ($tcl_roots:q)
foreach systype ($compatible_sys_types:q) foreach systype ($compatible_sys_types:q)
_spack_pathadd MODULEPATH "$tcl_root/$systype" _spack_pathadd MODULEPATH "$tcl_root/$systype"

View File

@ -994,7 +994,7 @@ _spack_dev_build() {
_spack_develop() { _spack_develop() {
if $list_options if $list_options
then 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 else
_all_packages _all_packages
fi fi

View File

@ -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' complete -c spack -n '__fish_spack_using_command dev-build' -l deprecated -d 'allow concretizer to select deprecated versions'
# spack develop # 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_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 -f -a help
complete -c spack -n '__fish_spack_using_command develop' -s h -l help -d 'show this help message and exit' 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 -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 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 -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 -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 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 # spack diff
set -g __fish_spack_optspecs_spack_diff h/help json first a/attribute= ignore= set -g __fish_spack_optspecs_spack_diff h/help json first a/attribute= ignore=

View File

@ -14,6 +14,7 @@ class IndirectMpich(Package):
url = "http://www.example.com/indirect_mpich-1.0.tar.gz" url = "http://www.example.com/indirect_mpich-1.0.tar.gz"
version("1.0", md5="0123456789abcdef0123456789abcdef") version("1.0", md5="0123456789abcdef0123456789abcdef")
version("0.9", md5="1123456789abcdef0123456789abcdef")
depends_on("mpi") depends_on("mpi")
depends_on("direct-mpich") depends_on("direct-mpich")

View File

@ -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 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 --- a/tools/chapel-py/setup.py
+++ b/tools/chapel-py/setup.py +++ b/tools/chapel-py/setup.py
@@ -46,7 +46,37 @@ host_cc = str(chpl_variables.get("CHPL_HOST_CC")) @@ -47,6 +47,18 @@ host_cxx = str(chpl_variables.get("CHPL_HOST_CXX"))
host_cxx = str(chpl_variables.get("CHPL_HOST_CXX"))
host_bin_subdir = str(chpl_variables.get("CHPL_HOST_BIN_SUBDIR")) 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_lib_path = os.path.join(chpl_home, "lib", "compiler", host_bin_subdir)
+chpl_install_lib_path = None +# For installations using --prefix, the build and final lib paths are going to
+if os.path.exists(os.path.join(chpl_home, "configured-prefix")): +# differ. figure out the install location now and write it to the rpath
+ with open(os.path.join(chpl_home, "CMakeLists.txt"), "r") as f: +chpl_home_utils = os.path.join(
+ # read CMakeLists.txt to get the CHPL_MAJOR_VERSION and CHPL_MINOR_VERSION + chpl_home, "util", "chplenv", "chpl_home_utils.py"
+ # and then construct the path from that +)
+ chpl_major_version = None +chpl_install_lib_path = (
+ chpl_minor_version = None + subprocess.check_output(
+ for line in f: + ["python", chpl_home_utils, "--configured-install-lib-prefix"],
+ if "set(CHPL_MAJOR_VERSION" in line: + )
+ chpl_major_version = line.split()[1].strip(')') + .decode(sys.stdout.encoding)
+ if "set(CHPL_MINOR_VERSION" in line: + .strip()
+ 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"
+ )
CXXFLAGS = [] CXXFLAGS = []
if have_llvm and have_llvm != "none": 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 = []
LDFLAGS += [ LDFLAGS += [
"-L{}".format(chpl_lib_path), "-L{}".format(chpl_lib_path),
@ -49,11 +90,13 @@ index bee452790c..58ec46d7e6 100644
- "-Wl,-rpath", - "-Wl,-rpath",
- chpl_lib_path, - chpl_lib_path,
] ]
+if chpl_install_lib_path is not None:
+if chpl_install_lib_path != "None":
+ LDFLAGS += [ + LDFLAGS += [
+ "-L{}".format(chpl_install_lib_path), + "-L{}".format(chpl_install_lib_path),
+ "-Wl,-rpath,{}".format(chpl_install_lib_path), + "-Wl,-rpath,{}".format(chpl_install_lib_path),
+ ] + ]
+
if str(chpl_variables.get("CHPL_SANITIZE")) == "address": os.environ["CC"] = host_cc
if str(chpl_variables.get("CHPL_HOST_PLATFORM")) == "darwin": os.environ["CXX"] = host_cxx
setup(

View File

@ -1,49 +1,31 @@
diff --git a/tools/chapel-py/setup.py b/tools/chapel-py/setup.py 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 --- a/tools/chapel-py/setup.py
+++ b/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")) host_bin_subdir = str(chpl_variables.get("CHPL_HOST_BIN_SUBDIR"))
chpl_lib_path = os.path.join(chpl_home, "lib", "compiler", 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 +# For installations using --prefix, the build and final lib paths are going to
+# figure it out now and write it to the rpath +# differ figure out the install location now and write it to the rpath
+chpl_install_lib_path = None +chpl_home_utils = os.path.join(
+if os.path.exists(os.path.join(chpl_home, "configured-prefix")): + chpl_home, "util", "chplenv", "chpl_home_utils.py"
+ 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 +chpl_install_lib_path = (
+ # and then construct the path from that + subprocess.check_output(
+ chpl_major_version = None + ["python", chpl_home_utils, "--configured-install-lib-prefix"],
+ chpl_minor_version = None + )
+ for line in f: + .decode(sys.stdout.encoding)
+ if "set(CHPL_MAJOR_VERSION" in line: + .strip()
+ 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"
+ )
+
CXXFLAGS = [] CXXFLAGS = []
if have_llvm and have_llvm != "none": if have_llvm and have_llvm != "none":
@@ -68,6 +98,12 @@ LDFLAGS += [ @@ -68,6 +80,12 @@ LDFLAGS += [
"-lChplFrontendShared", "-lChplFrontendShared",
] ]
+if chpl_install_lib_path is not None: +if chpl_install_lib_path != "None":
+ LDFLAGS += [ + LDFLAGS += [
+ "-L{}".format(chpl_install_lib_path), + "-L{}".format(chpl_install_lib_path),
+ "-Wl,-rpath,{}".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_SANITIZE")) == "address":
if str(chpl_variables.get("CHPL_HOST_PLATFORM")) == "darwin": if str(chpl_variables.get("CHPL_HOST_PLATFORM")) == "darwin":
sys.exit( 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:

View File

@ -58,6 +58,7 @@ class Chapel(AutotoolsPackage, CudaPackage, ROCmPackage):
version("main", branch="main") version("main", branch="main")
version("2.4.0", sha256="a51a472488290df12d1657db2e7118ab519743094f33650f910d92b54c56f315")
version("2.3.0", sha256="0185970388aef1f1fae2a031edf060d5eac4eb6e6b1089e7e3b15a130edd8a31") version("2.3.0", sha256="0185970388aef1f1fae2a031edf060d5eac4eb6e6b1089e7e3b15a130edd8a31")
version("2.2.0", sha256="bb16952a87127028031fd2b56781bea01ab4de7c3466f7b6a378c4d8895754b6") version("2.2.0", sha256="bb16952a87127028031fd2b56781bea01ab4de7c3466f7b6a378c4d8895754b6")
version("2.1.0", sha256="72593c037505dd76e8b5989358b7580a3fdb213051a406adb26a487d26c68c60") version("2.1.0", sha256="72593c037505dd76e8b5989358b7580a3fdb213051a406adb26a487d26c68c60")
@ -71,9 +72,9 @@ class Chapel(AutotoolsPackage, CudaPackage, ROCmPackage):
depends_on("cxx", type="build") # generated depends_on("cxx", type="build") # generated
patch("fix_spack_cc_wrapper_in_cray_prgenv.patch", when="@2.0.0:") 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.patch", when="@2.1.1:2.2 +python-bindings") # PR 26388
patch("fix_chpl_shared_lib_path_2.3.patch", when="@2.2.1: +python-bindings") 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") 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_checkChplInstall.patch", when="@:2.3.0") # PR 26317
patch("fix_llvm_include_path_2.3.patch", when="@=2.3.0 llvm=bundled") # PR 26402 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", "curl": "curl",
"hdf5": "hdf5+hl~mpi", "hdf5": "hdf5+hl~mpi",
"libevent": "libevent", "libevent": "libevent",
"protobuf": "py-protobuf", "protobuf": "protobuf",
"ssl": "openssl", "ssl": "openssl",
"yaml": "libyaml@0.1", "yaml": "libyaml@0.1",
"zmq": "libzmq", "zmq": "libzmq",
@ -608,12 +609,9 @@ def install(self, spec, prefix):
# if working from a non-versioned release/branch (such as main) # if working from a non-versioned release/branch (such as main)
if not self.is_versioned_release(): if not self.is_versioned_release():
install("CMakeLists.txt", join_path(prefix.share, "chapel")) install("CMakeLists.txt", join_path(prefix.share, "chapel"))
install_tree("doc", join_path(prefix.share, "chapel", self._output_version_short, "doc"))
install_tree( install_tree(
"doc", join_path(self.prefix.share, "chapel", self._output_version_short, "doc") "examples", join_path(prefix.share, "chapel", self._output_version_short, "examples")
)
install_tree(
"examples",
join_path(self.prefix.share, "chapel", self._output_version_short, "examples"),
) )
def setup_chpl_platform(self, env): def setup_chpl_platform(self, env):
@ -839,7 +837,7 @@ def _output_version_long(self) -> str:
@llnl.util.lang.memoized @llnl.util.lang.memoized
def _output_version_short(self) -> str: def _output_version_short(self) -> str:
if not self.is_versioned_release(): 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)) spec_vers_str = str(self.spec.version.up_to(2))
return spec_vers_str return spec_vers_str

View File

@ -46,7 +46,7 @@ class Datatransferkit(CMakePackage):
depends_on("trilinos+openmp", when="+openmp") depends_on("trilinos+openmp", when="+openmp")
depends_on("trilinos+stratimikos+belos", when="@master") depends_on("trilinos+stratimikos+belos", when="@master")
depends_on("trilinos@13:13.4.1", when="@3.1-rc2:3.1-rc3") 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): def cmake_args(self):
spec = self.spec spec = self.spec

View File

@ -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()

View File

@ -42,6 +42,13 @@ class Dbus(AutotoolsPackage, MesonPackage):
version("1.8.6", sha256="eded83ca007b719f32761e60fd8b9ffd0f5796a4caf455b01b5a5ef740ebd23f") version("1.8.6", sha256="eded83ca007b719f32761e60fd8b9ffd0f5796a4caf455b01b5a5ef740ebd23f")
version("1.8.4", sha256="3ef63dc8d0111042071ee7f7bafa0650c6ce2d7be957ef0b7ec269495a651ff8") version("1.8.4", sha256="3ef63dc8d0111042071ee7f7bafa0650c6ce2d7be957ef0b7ec269495a651ff8")
version("1.8.2", sha256="5689f7411165adc953f37974e276a3028db94447c76e8dd92efe910c6d3bae08") 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("xml_docs", default=False, description="Build XML documentation")
variant("system-socket", default="default", description="Location for the DBus system socket") variant("system-socket", default="default", description="Location for the DBus system socket")

View File

@ -19,6 +19,10 @@ class Detray(CMakePackage):
license("MPL-2.0", checked_by="stephenswat") 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.89.0", sha256="b893b7f5434c1c9951433876ef43d1db1b08d36749f062e261b4e6d48e77d5db")
version("0.88.1", sha256="89134c86c6857cb3a821181e3bb0565ebb726dd8b1245678db1681483d792cf9") version("0.88.1", sha256="89134c86c6857cb3a821181e3bb0565ebb726dd8b1245678db1681483d792cf9")
version("0.88.0", sha256="bda15501c9c96af961e24ce243982f62051c535b9fe458fb28336a19b54eb47d") version("0.88.0", sha256="bda15501c9c96af961e24ce243982f62051c535b9fe458fb28336a19b54eb47d")

View File

@ -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.0.patch", when="@6.0")
patch("0014-remove-compiler-rt-linkage-for-host.6.1.patch", when="@6.1") 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("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 # See https://github.com/ROCm/HIP/pull/3206
patch( patch(
@ -499,9 +499,10 @@ def set_variables(self, env):
# bin/.hipVersion file can still be parsed. # bin/.hipVersion file can still be parsed.
# See also https://github.com/ROCm/HIP/issues/2223 # See also https://github.com/ROCm/HIP/issues/2223
env.append_path( env.append_path(
"HIPCC_COMPILE_FLAGS_APPEND", "HIPCC_COMPILE_FLAGS_APPEND", f"--rocm-path={paths['rocm-path']}", separator=" "
"--rocm-path={0}".format(paths["rocm-path"]), )
separator=" ", env.append_path(
"HIPCC_LINK_FLAGS_APPEND", f"--rocm-path={paths['rocm-path']}", separator=" "
) )
elif self.spec.satisfies("+cuda"): elif self.spec.satisfies("+cuda"):
env.set("CUDA_PATH", self.spec["cuda"].prefix) env.set("CUDA_PATH", self.spec["cuda"].prefix)
@ -518,6 +519,9 @@ def set_variables(self, env):
f"--gcc-toolchain={self.compiler.prefix}", f"--gcc-toolchain={self.compiler.prefix}",
separator=" ", 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. # This is picked up by CMake when using HIP as a CMake language.
env.append_path("HIPFLAGS", f"--gcc-toolchain={self.compiler.prefix}", separator=" ") env.append_path("HIPFLAGS", f"--gcc-toolchain={self.compiler.prefix}", separator=" ")
@ -563,6 +567,13 @@ def patch(self):
"clr/hipamd/hip-config-amd.cmake", "clr/hipamd/hip-config-amd.cmake",
string=True, 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 perl = self.spec["perl"].command
if self.spec.satisfies("@:5.5"): if self.spec.satisfies("@:5.5"):

View File

@ -19,6 +19,7 @@ class Hugo(GoPackage):
license("Apache-2.0") license("Apache-2.0")
version("0.145.0", sha256="f6cfcfa4575ff25a08e68b638367df60b28e28a7917471c5deec6396eae26ae2")
version("0.140.2", sha256="45594ddf39d62d227cfd54c19fb9a09ab851cf537caee6138de0ddd4f1f6f117") version("0.140.2", sha256="45594ddf39d62d227cfd54c19fb9a09ab851cf537caee6138de0ddd4f1f6f117")
version("0.135.0", sha256="a75c4c684d2125255f214d11b9834a5ec6eb64353f4de2c06952d2b3b7430f0e") version("0.135.0", sha256="a75c4c684d2125255f214d11b9834a5ec6eb64353f4de2c06952d2b3b7430f0e")
version("0.127.0", sha256="549c7ebdf2ee6b3107ea10a9fbd9932a91bb3f30f7e8839245f6d8e318aca88c") version("0.127.0", sha256="549c7ebdf2ee6b3107ea10a9fbd9932a91bb3f30f7e8839245f6d8e318aca88c")
@ -34,11 +35,12 @@ class Hugo(GoPackage):
version("0.107.0", sha256="31d959a3c1633087d338147782d03bdef65323b67ff3efcec7b40241413e270a") version("0.107.0", sha256="31d959a3c1633087d338147782d03bdef65323b67ff3efcec7b40241413e270a")
version("0.106.0", sha256="9219434beb51466487b9f8518edcbc671027c1998e5a5820d76d517e1dfbd96a") version("0.106.0", sha256="9219434beb51466487b9f8518edcbc671027c1998e5a5820d76d517e1dfbd96a")
depends_on("go@1.11:", type="build", when="@0.48:") depends_on("go@1.23:", type="build", when="@0.144:")
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.22.6:", type="build", when="@0.133:") 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") variant("extended", default=False, description="Enable extended features")

View File

@ -23,6 +23,12 @@ class IntelOneapiAdvisor(IntelOneApiLibraryPackageWithSdk):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/advisor.html" "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( version(
"2025.0.0", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/fe95ae4a-3692-4e31-919d-3e7bdf5832f1/intel-advisor-2025.0.0.798_offline.sh",

View File

@ -26,6 +26,12 @@ class IntelOneapiCcl(IntelOneApiLibraryPackage):
depends_on("intel-oneapi-mpi") 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( version(
"2021.14.0", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/88a7a6db-816c-4cd5-993f-821729da5648/intel-oneccl-2021.14.0.506_offline.sh",

View File

@ -9,6 +9,17 @@
from spack.package import * from spack.package import *
versions = [ 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", "version": "2025.0.4",
"cpp": { "cpp": {

View File

@ -25,6 +25,12 @@ class IntelOneapiDal(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onedal.html" "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( version(
"2025.0.1", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/928ba1dd-c2bc-41f6-a35f-8de41ddf055a/intel-onedal-2025.0.1.19_offline.sh",

View File

@ -25,6 +25,12 @@ class IntelOneapiDnn(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onednn.html" "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( version(
"2025.0.1", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6cfa324b-1591-4c0b-b8d2-97c5b3b272a7/intel-onednn-2025.0.1.12_offline.sh",

View File

@ -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" 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( version(
"2025.0.1", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6d1e0867-72b4-4670-8efc-3586894ad15f/intel-dpcpp-ct-2025.0.1.19_offline.sh",

View File

@ -21,6 +21,12 @@ class IntelOneapiDpl(IntelOneApiLibraryPackage):
homepage = "https://github.com/oneapi-src/oneDPL" 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( version(
"2022.7.1", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/de3c613f-829c-4bdc-aa2b-6129eece3bd9/intel-onedpl-2022.7.1.15_offline.sh",

View File

@ -26,6 +26,12 @@ class IntelOneapiIpp(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/ipp.html" "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( version(
"2022.0.0", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/acf220fa-326d-4f6e-9b63-f2da47b6f680/intel-ipp-2022.0.0.809_offline.sh",

View File

@ -27,6 +27,12 @@ class IntelOneapiIppcp(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/ipp.html" "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( version(
"2025.0.0", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/4592da40-6f1c-4d4b-aa5b-0bb97ec66c92/intel-cryptography-primitives-library-2025.0.0.616_offline.sh",

View File

@ -24,6 +24,12 @@ class IntelOneapiMkl(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onemkl.html" "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( version(
"2025.0.1", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/246ea40e-5aa7-42a4-81fa-0c029dc8650f/intel-onemkl-2025.0.1.16_offline.sh",

View File

@ -20,6 +20,12 @@ class IntelOneapiMpi(IntelOneApiLibraryPackage):
homepage = "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/mpi-library.html" 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( version(
"2021.14.2", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/201b2570-bc4f-41ee-a6c8-6f7a71a4b840/intel-mpi-2021.14.2.9_offline.sh",

View File

@ -21,6 +21,12 @@ class IntelOneapiTbb(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onetbb.html" "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( version(
"2022.0.0", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9d5f5bd1-6021-41f7-aa3e-36d44c4ac190/intel-onetbb-2022.0.0.403_offline.sh",

View File

@ -24,6 +24,12 @@ class IntelOneapiVtune(IntelOneApiLibraryPackageWithSdk):
homepage = "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/vtune-profiler.html" 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( version(
"2025.0.1", "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", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1277cea4-34b7-4221-bdbc-4f47a9a5592d/intel-vtune-2025.0.1.16_offline.sh",

View File

@ -20,6 +20,7 @@ class Kentutils(MakefilePackage):
maintainers("teaguesterling") maintainers("teaguesterling")
version("478", sha256="dcbe4bbab811e8634f2993512540d8d1ee279da8c49e8048cdd42b17cbe5ba2b")
version("465", sha256="eef17b1f3182d1d9dc99b5c73a6b0468d5d3bd80470f25d3f7706cc1372e04b0") version("465", sha256="eef17b1f3182d1d9dc99b5c73a6b0468d5d3bd80470f25d3f7706cc1372e04b0")
version("464", sha256="24e20fe68e2a2894d802c87662f69a62f71b3c15fafb2e4d6c3c425c63638bb2") version("464", sha256="24e20fe68e2a2894d802c87662f69a62f71b3c15fafb2e4d6c3c425c63638bb2")
version("460", sha256="b955e56ee880074521ef1ab1371491f47e66dc6fdd93b05328386dd675a635fa") version("460", sha256="b955e56ee880074521ef1ab1371491f47e66dc6fdd93b05328386dd675a635fa")
@ -32,9 +33,6 @@ class Kentutils(MakefilePackage):
deprecated=True, 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 # 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 # 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. # for some additional details. A built-in version SHOULD work for most things though.
@ -45,6 +43,9 @@ class Kentutils(MakefilePackage):
sticky=True, sticky=True,
) )
depends_on("c", type="build")
depends_on("cxx", type="build")
with default_args(type=("build", "link", "run")): with default_args(type=("build", "link", "run")):
depends_on("libpng") depends_on("libpng")
depends_on("openssl") depends_on("openssl")

View File

@ -22,12 +22,10 @@ class KokkosKernels(CMakePackage, CudaPackage):
version("develop", branch="develop") version("develop", branch="develop")
version("master", branch="master") version("master", branch="master")
version("4.5.01", sha256="c111a6561f23a85af9850d1df1e9015f37a586f1da0be4b6fb1e98001d75e074") version("4.5.01", sha256="c111a6561f23a85af9850d1df1e9015f37a586f1da0be4b6fb1e98001d75e074")
version("4.5.00", sha256="94726a64e349adf6cd276e9fdc1b2bf7ff81efec833e479a5d3024b83f165a59") version("4.5.00", sha256="94726a64e349adf6cd276e9fdc1b2bf7ff81efec833e479a5d3024b83f165a59")
version("4.4.01", sha256="4a32bc8330e0113856bdf181df94cc4f9902e3cebb5dc7cea5948f30df03bfa1") version("4.4.01", sha256="4a32bc8330e0113856bdf181df94cc4f9902e3cebb5dc7cea5948f30df03bfa1")
version("4.4.00", sha256="66d5c3f728a8c7689159c97006996164ea00fd39702476220e3dbf2a05c49e8f") version("4.4.00", sha256="66d5c3f728a8c7689159c97006996164ea00fd39702476220e3dbf2a05c49e8f")
version( version(
"4.3.01", "4.3.01",
sha256="749553a6ea715ba1e56fa0b13b42866bb9880dba7a94e343eadf40d08c68fab8", sha256="749553a6ea715ba1e56fa0b13b42866bb9880dba7a94e343eadf40d08c68fab8",
@ -129,8 +127,61 @@ class KokkosKernels(CMakePackage, CudaPackage):
url="https://github.com/kokkos/kokkos-kernels/archive/3.0.00.tar.gz", 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")
depends_on("kokkos@master", when="@master") depends_on("kokkos@master", when="@master")
depends_on("kokkos@develop", when="@develop") 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.2.00", when="@3.2.00")
depends_on("kokkos@3.1.00", when="@3.1.00") depends_on("kokkos@3.1.00", when="@3.1.00")
depends_on("kokkos@3.0.00", when="@3.0.00") depends_on("kokkos@3.0.00", when="@3.0.00")
depends_on("cmake@3.16:", type="build") depends_on("kokkos+cuda", when="+execspace_cuda")
depends_on("kokkos+openmp", when="+execspace_openmp")
backends = { depends_on("kokkos+threads", when="+execspace_threads")
"serial": (False, "enable Serial backend (default)"), depends_on("kokkos+serial", when="+execspace_serial")
"cuda": (False, "enable Cuda backend"), depends_on("kokkos+cuda", when="+memspace_cudauvmspace")
"openmp": (False, "enable OpenMP backend"), depends_on("kokkos+cuda", when="+memspace_cudaspace")
"threads": (False, "enable C++ threads backend"), depends_on("kokkos+serial", when="+serial")
} depends_on("kokkos+cuda", when="+cuda")
depends_on("kokkos+openmp", when="+openmp")
for backend in backends: depends_on("kokkos+threads", when="+threads")
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_lambda", when="@4.0.00:+cuda") depends_on("kokkos+cuda_lambda", when="@4.0.00:+cuda")
depends_on("cmake@3.16:", type="build")
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)
tpls = { tpls = {
# variant name #deflt #spack name #root var name #supporting versions #docstring # variant name #deflt #spack name #root var name #supporting versions #docstring
@ -246,9 +241,7 @@ class KokkosKernels(CMakePackage, CudaPackage):
for tpl in tpls: for tpl in tpls:
deflt_bool, spackname, rootname, condition, descr = tpls[tpl] deflt_bool, spackname, rootname, condition, descr = tpls[tpl]
variant(tpl, default=deflt_bool, when=f"{condition}", description=descr) variant(tpl, default=deflt_bool, when=f"{condition}", description=descr)
depends_on(spackname, when="+%s" % tpl) depends_on(spackname, when=f"+{tpl}")
variant("shared", default=True, description="Build shared libraries")
patch("pr_2296_430.patch", when="@4.3.00:4.4.00") patch("pr_2296_430.patch", when="@4.3.00:4.4.00")
patch("pr_2296_400.patch", when="@4.0.00:4.2.01") patch("pr_2296_400.patch", when="@4.0.00:4.2.01")
@ -259,64 +252,49 @@ class KokkosKernels(CMakePackage, CudaPackage):
def cmake_args(self): def cmake_args(self):
spec = self.spec 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 spec.satisfies("+diy"):
if isdiy: options.append(self.define("Spack_WORKAROUND", True))
options.append("-DSpack_WORKAROUND=On")
options.append("-DKokkos_ROOT=%s" % spec["kokkos"].prefix) options.append(self.define("Kokkos_ROOT", spec["kokkos"].prefix))
if spec.satisfies("^kokkos+rocm"): 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: else:
# Compiler weirdness due to nvcc_wrapper options.append(self.define("CMAKE_CXX_COMPILER", self["kokkos"].kokkos_cxx))
options.append("-DCMAKE_CXX_COMPILER=%s" % self["kokkos"].kokkos_cxx)
if self.run_tests: if self.run_tests:
options.append("-DKokkosKernels_ENABLE_TESTS=ON") options.append(self.define("KokkosKernels_ENABLE_TESTS", True))
for tpl in self.tpls: for tpl in self.tpls:
on_flag = "+%s" % tpl
off_flag = "~%s" % tpl
dflt, spackname, rootname, condition, descr = self.tpls[tpl] dflt, spackname, rootname, condition, descr = self.tpls[tpl]
if on_flag in self.spec: if spec.satisfies(f"+{tpl}"):
options.append("-DKokkosKernels_ENABLE_TPL_%s=ON" % tpl.upper()) options.append(self.define(f"KokkosKernels_ENABLE_TPL_{tpl.upper()}", True))
if rootname: if rootname:
options.append("-D%s_ROOT=%s" % (rootname, spec[spackname].prefix)) options.append(self.define(f"{rootname}_ROOT", spec[spackname].prefix))
else: else:
pass # this should get picked up automatically, we hope pass
elif off_flag in self.spec:
options.append("-DKokkosKernels_ENABLE_TPL_%s=OFF" % tpl.upper())
for eti in self.numeric_etis: for val in spec.variants["ordinals"].value:
deflt, cmake_name, vals = self.numeric_etis[eti] options.append(self.define(f"KokkosKernels_INST_ORDINAL_{val.upper()}", True))
for val in vals: for val in spec.variants["offsets"].value:
keyval = "%s=%s" % (eti, val) options.append(self.define(f"KokkosKernels_INST_OFFSET_{val.upper()}", True))
cmake_option = "KokkosKernels_INST_%s%s" % (cmake_name.upper(), val.upper()) for val in spec.variants["scalars"].value:
if keyval in spec: options.append(self.define(f"KokkosKernels_INST_{val.upper()}", True))
options.append("-D%s=ON" % cmake_option) layout_value = spec.variants["layouts"].value
else: options.append(self.define(f"KokkosKernels_INST_LAYOUT{layout_value.upper()}", True))
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"))
return options return options

View File

@ -10,23 +10,30 @@ class Prometheus(MakefilePackage):
systems and service monitoring system.""" systems and service monitoring system."""
homepage = "https://prometheus.io/" 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") license("Apache-2.0")
version("2.55.1", sha256="f48251f5c89eea6d3b43814499d558bacc4829265419ee69be49c5af98f79573") version("2.55.1", sha256="f48251f5c89eea6d3b43814499d558bacc4829265419ee69be49c5af98f79573")
version("2.19.2", sha256="d4e84cae2fed6761bb8a80fcc69b6e0e9f274d19dffc0f38fb5845f11da1bbc3") version("2.19.2", sha256="f77017846259d01f281ded0d70af834e06ee489d325c9c84de0e68c7d505b42b")
version("2.19.1", sha256="b72b9b6bdbae246dcc29ef354d429425eb3c0a6e1596fc8b29b502578a4ce045") version("2.19.1", sha256="c5bdfb3653b82c1d26e5e14feadf644692289fae42a48e2567629aa2c4a02fc4")
version("2.18.2", sha256="a26c106c97d81506e3a20699145c11ea2cce936427a0e96eb2fd0dc7cd1945ba") version("2.18.2", sha256="01b4d55aae0a43c9eecb5a660648e45e74ea20f9d4558ff6533058f2050aabd1")
version("2.17.1", sha256="d0b53411ea0295c608634ca7ef1d43fa0f5559e7ad50705bf4d64d052e33ddaf") version("2.17.1", sha256="443590c1896cf5096b75d4a30e45381c84a5d17712dc714109ea8cf418b275ac")
version("2.17.0", sha256="b5e508f1c747aaf50dd90a48e5e2a3117fec2e9702d0b1c7f97408b87a073009") version("2.17.0", sha256="c94b13677003838d795c082b95878903d43cd21ab148996d39f1900f00370c97")
depends_on("c", type="build") # generated 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("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): def build(self, spec, prefix):
make("build", parallel=False) make("build", parallel=False)

View File

@ -33,7 +33,7 @@ class PyIpympl(PythonPackage):
depends_on("py-jupyter-packaging@0.7") depends_on("py-jupyter-packaging@0.7")
depends_on("py-jupyterlab@3") depends_on("py-jupyterlab@3")
depends_on("py-setuptools@40.8:") depends_on("py-setuptools@40.8:")
depends_on("yarn") depends_on("yarn@1")
with default_args(type=("build", "run")): with default_args(type=("build", "run")):
depends_on("py-ipython@:8") depends_on("py-ipython@:8")

View File

@ -18,11 +18,27 @@ class PyPymoo(PythonPackage):
license("Apache-2.0") license("Apache-2.0")
version("0.6.1.3", sha256="ab440986cbaede547125ca9d1545781fdee94b719488de44119a86b8e9af526e")
version("0.5.0", sha256="2fbca1716f6b45e430197ce4ce2210070fd3b6b9ec6b17bb25d98486115272c2") version("0.5.0", sha256="2fbca1716f6b45e430197ce4ce2210070fd3b6b9ec6b17bb25d98486115272c2")
version("0.4.2", sha256="6ec382a7d29c8775088eec7f245a30fd384b42c40f230018dea0e3bcd9aabdf1") version("0.4.2", sha256="6ec382a7d29c8775088eec7f245a30fd384b42c40f230018dea0e3bcd9aabdf1")
depends_on("cxx", type="build") # generated depends_on("cxx", type="build") # generated
depends_on("python@3.4:", type=("build", "run")) with default_args(type="build"):
depends_on("py-autograd", type=("build", "run")) depends_on("py-setuptools")
depends_on("py-setuptools", type="build") 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")

View File

@ -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 AMDs 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}")

View File

@ -29,7 +29,7 @@ class Rstudio(CMakePackage):
depends_on("patchelf@0.9:") depends_on("patchelf@0.9:")
depends_on("yaml-cpp@:0.6.3") # find_package fails with newest version depends_on("yaml-cpp@:0.6.3") # find_package fails with newest version
depends_on("node-js") depends_on("node-js")
depends_on("yarn") depends_on("yarn@1")
depends_on("pandoc@2.11.4:") depends_on("pandoc@2.11.4:")
depends_on("icu4c") depends_on("icu4c")
depends_on("soci~static+boost+postgresql+sqlite") depends_on("soci~static+boost+postgresql+sqlite")

View File

@ -84,6 +84,11 @@ def url_for_version(self, version):
patch("gcc7.patch", when="@1.4:3") patch("gcc7.patch", when="@1.4:3")
patch("gcc10.patch", when="@3.1:6.0") 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("mpi", default=True, description="Enable MPI support")
variant("papi", default=True, description="Enable PAPI") 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("unwind", default=False, description="Enable sampling via libunwind and lib wrapping")
variant("cuda", default=False, description="Enable CUDA support") variant("cuda", default=False, description="Enable CUDA support")
variant("hip", default=False, description="Enable ROCm/HIP support", when="@8.0:") 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 # 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 # information. Starting with scorep 4.0 / cube 4.4, Score-P only depends on
# two components of cube -- cubew and cubelib. # two components of cube -- cubew and cubelib.
@ -230,6 +236,13 @@ def configure_args(self):
if spec.satisfies("^binutils"): if spec.satisfies("^binutils"):
config_args.append("--with-libbfd=%s" % spec["binutils"].prefix) 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( config_args.extend(
[ [
"CFLAGS={0}".format(self.compiler.cc_pic_flag), "CFLAGS={0}".format(self.compiler.cc_pic_flag),

View File

@ -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

View File

@ -61,10 +61,16 @@ class SstCore(AutotoolsPackage):
variant( variant(
"curses", "curses",
default=True, default=True,
when="@develop,master", when="@develop,master,14.0.0:",
description="Build support for interactive sst-info", 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("trackevents", default=False, description="Enable event and activity tracking")
variant( variant(
"trackperf", "trackperf",
@ -77,37 +83,44 @@ class SstCore(AutotoolsPackage):
depends_on("python@:3.11", type=("build", "run", "link")) depends_on("python@:3.11", type=("build", "run", "link"))
depends_on("mpi", when="+pdes_mpi") depends_on("mpi", when="+pdes_mpi")
depends_on("zoltan", when="+zoltan") depends_on("zoltan", when="+zoltan")
depends_on("hdf5", when="+hdf5") depends_on("hdf5 +cxx", when="+hdf5")
depends_on("zlib-api", when="+zlib") depends_on("zlib-api", when="+zlib")
depends_on("gettext") depends_on("gettext")
depends_on("ncurses", when="+curses") depends_on("ncurses", when="+curses", type=("build", "link"))
for version_name in ("master", "develop"): with when("@develop,master,14.0.0"):
depends_on("autoconf@1.68:", type="build", when="@{}".format(version_name)) depends_on("autoconf@1.68:", type="build")
depends_on("automake@1.11.1:", type="build", when="@{}".format(version_name)) depends_on("automake@1.11.1:", type="build")
depends_on("libtool@1.2.4:", type="build", when="@{}".format(version_name)) depends_on("libtool@1.2.4:", type="build")
depends_on("m4", type="build", when="@{}".format(version_name)) 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 # force out-of-source builds
build_directory = "spack-build" 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): def autoreconf(self, spec, prefix):
bash = which("bash") bash = which("bash")
bash("autogen.sh") bash("autogen.sh")
def configure_args(self): def configure_args(self):
args = [] args = []
if "+zoltan" in self.spec: args.extend(self.with_or_without("zoltan", activation_value="prefix"))
args.append("--with-zoltan=%s" % self.spec["zoltan"].prefix) args.extend(self.with_or_without("hdf5", activation_value="prefix"))
if "+hdf5" in self.spec: args.extend(
args.append("--with-hdf5=%s" % self.spec["hdf5"].prefix) self.with_or_without(
if "+zlib" in self.spec: "libz", activation_value=lambda _: self.spec["zlib-api"].prefix, variant="zlib"
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("ncurses", activation_value="prefix", variant="curses"))
if "+pdes_mpi" in self.spec: if self.spec.satisfies("+pdes_mpi"):
args.append("--enable-mpi") args.append("--enable-mpi")
env["CC"] = self.spec["mpi"].mpicc env["CC"] = self.spec["mpi"].mpicc
env["CXX"] = self.spec["mpi"].mpicxx env["CXX"] = self.spec["mpi"].mpicxx
@ -116,16 +129,15 @@ def configure_args(self):
else: else:
args.append("--disable-mpi") args.append("--disable-mpi")
if "+trackevents" in self.spec: args.extend(self.enable_or_disable("mem-pools", variant="mempools"))
args.append("--enable-event-tracking") args.extend(self.enable_or_disable("debug"))
if "+trackperf" in self.spec: args.extend(self.enable_or_disable("event-tracking", variant="trackevents"))
args.append("--enable-perf-tracking") args.extend(self.enable_or_disable("perf-tracking", variant="trackperf"))
if "+preview" in self.spec: args.extend(self.enable_or_disable("preview-build", variant="preview"))
args.append("--enable-preview-build") args.extend(self.enable_or_disable("profile"))
if "+profile" in self.spec:
args.append("--enable-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 return args
def patch(self): def patch(self):

View File

@ -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 <iosfwd>
+#include <cstdint>
/*! \file Teuchos_BigUIntDecl.hpp
\brief Arbitrary-precision unsigned integer declaration.

View File

@ -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.
*/

View File

@ -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 <ostream>
#include <sstream>
+#include <cstdint>
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------

View File

@ -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.
*/

View File

@ -425,15 +425,15 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
depends_on("kokkos-kernels~shared", when="+cuda_rdc") depends_on("kokkos-kernels~shared", when="+cuda_rdc")
depends_on("kokkos-kernels~shared", when="+rocm_rdc") depends_on("kokkos-kernels~shared", when="+rocm_rdc")
depends_on("kokkos~complex_align") depends_on("kokkos~complex_align")
depends_on("kokkos@4.5.01", when="@master:") depends_on("kokkos@=4.5.01", when="@master:")
depends_on("kokkos@4.5.01", when="@16.1") depends_on("kokkos@=4.5.01", when="@16.1")
depends_on("kokkos@4.3.01", when="@16") depends_on("kokkos@=4.3.01", when="@16.0")
depends_on("kokkos@4.2.01", when="@15.1:15") depends_on("kokkos@=4.2.01", when="@15.1:15")
depends_on("kokkos@4.1.00", when="@14.4:15.0") 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="@master:")
depends_on("kokkos-kernels@4.5.01", when="@16.1") depends_on("kokkos-kernels@=4.5.01", when="@16.1")
depends_on("kokkos-kernels@4.3.01", when="@16") depends_on("kokkos-kernels@=4.3.01", when="@16.0")
depends_on("kokkos-kernels@4.2.01", when="@15.1:15") depends_on("kokkos-kernels@=4.2.01", when="@15.1:15")
depends_on("kokkos+openmp", when="+openmp") depends_on("kokkos+openmp", when="+openmp")
for a in CudaPackage.cuda_arch_values: 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", 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): def flag_handler(self, name, flags):
spec = self.spec spec = self.spec
is_cce = spec.satisfies("%cce") is_cce = spec.satisfies("%cce")
@ -557,6 +569,11 @@ def flag_handler(self, name, flags):
flags.append("-no-ipo") flags.append("-no-ipo")
if "+wrapper" in spec: if "+wrapper" in spec:
flags.append("--expt-extended-lambda") 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": elif name == "ldflags":
if spec.satisfies("%cce@:14"): if spec.satisfies("%cce@:14"):
flags.append("-fuse-ld=gold") flags.append("-fuse-ld=gold")

View File

@ -9,15 +9,18 @@ class Yarn(Package):
"""Fast, reliable, and secure dependency management.""" """Fast, reliable, and secure dependency management."""
homepage = "https://yarnpkg.com" 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") 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.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") depends_on("node-js@4.0:", type="run")
license("BSD-2-Clause") 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.22", sha256="88268464199d1611fcf73ce9c0a6c4d44c7d5363682720d8506f6508addf36a0")
version("1.22.4", sha256="bc5316aa110b2f564a71a3d6e235be55b98714660870c5b6b2d2d3f12587fb58") version("1.22.4", sha256="bc5316aa110b2f564a71a3d6e235be55b98714660870c5b6b2d2d3f12587fb58")
version("1.22.2", sha256="de4cff575ae7151f8189bf1d747f026695d768d0563e2860df407ab79c70693d") version("1.22.2", sha256="de4cff575ae7151f8189bf1d747f026695d768d0563e2860df407ab79c70693d")
@ -25,5 +28,17 @@ class Yarn(Package):
version("1.22.0", sha256="de8871c4e2822cba80d58c2e72366fb78567ec56e873493c9ca0cca76c60f9a5") version("1.22.0", sha256="de8871c4e2822cba80d58c2e72366fb78567ec56e873493c9ca0cca76c60f9a5")
version("1.21.1", sha256="d1d9f4a0f16f5ed484e814afeb98f39b82d4728c6c8beaafb5abc99c02db6674") 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): 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)

View File

@ -16,6 +16,7 @@ class Zig(CMakePackage):
license("MIT") license("MIT")
version("0.14.0", tag="0.14.0", commit="5ad91a646a753cc3eecd8751e61cf458dadd9ac4")
version("0.13.0", tag="0.13.0", commit="cf90dfd3098bef5b3c22d5ab026173b3c357f2dd") version("0.13.0", tag="0.13.0", commit="cf90dfd3098bef5b3c22d5ab026173b3c357f2dd")
version("0.12.0", tag="0.12.0", commit="a685ab1499d6560c523f0dbce2890dc140671e43") version("0.12.0", tag="0.12.0", commit="a685ab1499d6560c523f0dbce2890dc140671e43")
version("0.11.0", tag="0.11.0", commit="67709b638224ac03820226c6744d8b6ead59184c") version("0.11.0", tag="0.11.0", commit="67709b638224ac03820226c6744d8b6ead59184c")