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

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
``spack develop`` command.
When working deep in the graph it is often desirable to have multiple specs marked
as ``develop`` so you don't have to restage and/or do full rebuilds each time you
call ``spack install``. The ``--recursive`` flag can be used in these scenarios
to ensure that all the dependents of the initial spec you provide are also marked
as develop specs. The ``--recursive`` flag requires a pre-concretized environment
so the graph can be traversed from the supplied spec all the way to the root specs.
For packages with ``git`` attributes, git branches, tags, and commits can
also be used as valid concrete versions (see :ref:`version-specifier`).
This means that for a package ``foo``, ``spack develop foo@git.main`` will clone

View File

@ -3,11 +3,13 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
import shutil
from typing import Optional
import llnl.util.tty as tty
import spack.cmd
import spack.config
import spack.environment
import spack.fetch_strategy
import spack.repo
import spack.spec
@ -31,37 +33,33 @@ def setup_parser(subparser):
"--no-clone",
action="store_false",
dest="clone",
default=None,
help="do not clone, the package already exists at the source path",
)
clone_group.add_argument(
"--clone",
action="store_true",
dest="clone",
default=None,
help="clone the package even if the path already exists",
default=True,
help=(
"(default) clone the package unless the path already exists, "
"use --force to overwrite"
),
)
subparser.add_argument(
"-f", "--force", help="remove any files or directories that block cloning source code"
)
subparser.add_argument(
"-r",
"--recursive",
action="store_true",
help="traverse nodes of the graph to mark everything up to the root as a develop spec",
)
arguments.add_common_arguments(subparser, ["spec"])
def _update_config(spec, path):
find_fn = lambda section: spec.name in section
entry = {"spec": str(spec)}
if path != spec.name:
entry["path"] = path
def change_fn(section):
section[spec.name] = entry
spack.config.change_or_add("develop", find_fn, change_fn)
def _retrieve_develop_source(spec: spack.spec.Spec, abspath: str) -> None:
# "steal" the source code via staging API. We ask for a stage
# to be created, then copy it afterwards somewhere else. It would be
@ -83,44 +81,43 @@ def _retrieve_develop_source(spec: spack.spec.Spec, abspath: str) -> None:
package.stage.steal_source(abspath)
def develop(parser, args):
# Note: we could put develop specs in any scope, but I assume
# users would only ever want to do this for either (a) an active
# env or (b) a specified config file (e.g. that is included by
# an environment)
# TODO: when https://github.com/spack/spack/pull/35307 is merged,
# an active env is not required if a scope is specified
env = spack.cmd.require_active_env(cmd_name="develop")
if not args.spec:
if args.clone is False:
raise SpackError("No spec provided to spack develop command")
def assure_concrete_spec(env: spack.environment.Environment, spec: spack.spec.Spec):
version = spec.versions.concrete_range_as_version
if not version:
# first check environment for a matching concrete spec
matching_specs = env.all_matching_specs(spec)
if matching_specs:
version = matching_specs[0].version
test_spec = spack.spec.Spec(f"{spec}@{version}")
for m_spec in matching_specs:
if not m_spec.satisfies(test_spec):
raise SpackError(
f"{spec.name}: has multiple concrete instances in the graph that can't be"
" satisified by a single develop spec. To use `spack develop` ensure one"
" of the following:"
f"\n a) {spec.name} nodes can satisfy the same develop spec (minimally "
"this means they all share the same version)"
f"\n b) Provide a concrete develop spec ({spec.name}@[version]) to clearly"
" indicate what should be developed"
)
else:
# look up the maximum version so infintiy versions are preferred for develop
version = max(spec.package_class.versions.keys())
tty.msg(f"Defaulting to highest version: {spec.name}@{version}")
spec.versions = spack.version.VersionList([version])
# download all dev specs
for name, entry in env.dev_specs.items():
path = entry.get("path", name)
abspath = spack.util.path.canonicalize_path(path, default_wd=env.path)
if os.path.exists(abspath):
msg = "Skipping developer download of %s" % entry["spec"]
msg += " because its path already exists."
tty.msg(msg)
continue
def setup_src_code(spec: spack.spec.Spec, src_path: str, clone: bool = True, force: bool = False):
"""
Handle checking, cloning or overwriting source code
"""
assert spec.versions
# Both old syntax `spack develop pkg@x` and new syntax `spack develop pkg@=x`
# are currently supported.
spec = spack.spec.parse_with_version_concrete(entry["spec"])
_retrieve_develop_source(spec, abspath)
if clone:
_clone(spec, src_path, force)
if not env.dev_specs:
tty.warn("No develop specs to download")
return
specs = spack.cmd.parse_specs(args.spec)
if len(specs) > 1:
raise SpackError("spack develop requires at most one named spec")
spec = specs[0]
if not clone and not os.path.exists(src_path):
raise SpackError(f"Provided path {src_path} does not exist")
version = spec.versions.concrete_range_as_version
if not version:
@ -129,40 +126,114 @@ def develop(parser, args):
tty.msg(f"Defaulting to highest version: {spec.name}@{version}")
spec.versions = spack.version.VersionList([version])
# If user does not specify --path, we choose to create a directory in the
# active environment's directory, named after the spec
path = args.path or spec.name
if not os.path.isabs(path):
abspath = spack.util.path.canonicalize_path(path, default_wd=env.path)
else:
abspath = path
# clone default: only if the path doesn't exist
clone = args.clone
if clone is None:
clone = not os.path.exists(abspath)
def _update_config(spec, path):
find_fn = lambda section: spec.name in section
if not clone and not os.path.exists(abspath):
raise SpackError("Provided path %s does not exist" % abspath)
entry = {"spec": str(spec)}
if path and path != spec.name:
entry["path"] = path
if clone:
if os.path.exists(abspath):
if args.force:
shutil.rmtree(abspath)
else:
msg = "Path %s already exists and cannot be cloned to." % abspath
msg += " Use `spack develop -f` to overwrite."
raise SpackError(msg)
def change_fn(section):
section[spec.name] = entry
_retrieve_develop_source(spec, abspath)
spack.config.change_or_add("develop", find_fn, change_fn)
def update_env(
env: spack.environment.Environment,
spec: spack.spec.Spec,
specified_path: Optional[str] = None,
build_dir: Optional[str] = None,
):
"""
Update the spack.yaml file with additions or changes from a develop call
"""
tty.debug(f"Updating develop config for {env.name} transactionally")
if not specified_path:
dev_entry = env.dev_specs.get(spec.name)
if dev_entry:
specified_path = dev_entry.get("path", None)
tty.debug("Updating develop config for {0} transactionally".format(env.name))
with env.write_transaction():
if args.build_directory is not None:
if build_dir is not None:
spack.config.add(
"packages:{}:package_attributes:build_directory:{}".format(
spec.name, args.build_directory
),
f"packages:{spec.name}:package_attributes:build_directory:{build_dir}",
env.scope_name,
)
_update_config(spec, path)
# add develop spec and update path
_update_config(spec, specified_path)
def _clone(spec: spack.spec.Spec, abspath: str, force: bool = False):
if os.path.exists(abspath):
if force:
shutil.rmtree(abspath)
else:
msg = f"Skipping developer download of {spec.name}"
msg += f" because its path {abspath} already exists."
tty.msg(msg)
return
# cloning can take a while and it's nice to get a message for the longer clones
tty.msg(f"Cloning source code for {spec}")
_retrieve_develop_source(spec, abspath)
def _abs_code_path(
env: spack.environment.Environment, spec: spack.spec.Spec, path: Optional[str] = None
):
src_path = path if path else spec.name
return spack.util.path.canonicalize_path(src_path, default_wd=env.path)
def _dev_spec_generator(args, env):
"""
Generator function to loop over all the develop specs based on how the command is called
If no specs are supplied then loop over the develop specs listed in the environment.
"""
if not args.spec:
if args.clone is False:
raise SpackError("No spec provided to spack develop command")
for name, entry in env.dev_specs.items():
path = entry.get("path", name)
abspath = spack.util.path.canonicalize_path(path, default_wd=env.path)
# Both old syntax `spack develop pkg@x` and new syntax `spack develop pkg@=x`
# are currently supported.
spec = spack.spec.parse_with_version_concrete(entry["spec"])
yield spec, abspath
else:
specs = spack.cmd.parse_specs(args.spec)
if (args.path or args.build_directory) and len(specs) > 1:
raise SpackError(
"spack develop requires at most one named spec when using the --path or"
" --build-directory arguments"
)
for spec in specs:
if args.recursive:
concrete_specs = env.all_matching_specs(spec)
if not concrete_specs:
tty.warn(
f"{spec.name} has no matching concrete specs in the environment and "
"will be skipped. `spack develop --recursive` requires a concretized"
" environment"
)
else:
for s in concrete_specs:
for node_spec in s.traverse(direction="parents", root=True):
tty.debug(f"Recursive develop for {node_spec.name}")
yield node_spec, _abs_code_path(env, node_spec, args.path)
else:
yield spec, _abs_code_path(env, spec, args.path)
def develop(parser, args):
env = spack.cmd.require_active_env(cmd_name="develop")
for spec, abspath in _dev_spec_generator(args, env):
assure_concrete_spec(env, spec)
setup_src_code(spec, abspath, clone=args.clone, force=args.force)
update_env(env, spec, args.path, args.build_directory)

View File

@ -17,6 +17,7 @@
pytest = None # type: ignore
import llnl.util.filesystem
import llnl.util.tty as tty
import llnl.util.tty.color as color
from llnl.util.tty.colify import colify
@ -236,6 +237,12 @@ def unit_test(parser, args, unknown_args):
pytest_root = spack.extensions.load_extension(args.extension)
if args.numprocesses is not None and args.numprocesses > 1:
try:
import xdist # noqa: F401
except ImportError:
tty.error("parallel unit-test requires pytest-xdist module")
return 1
pytest_args.extend(
[
"--dist",

View File

@ -1128,11 +1128,6 @@ def user_specs(self):
@property
def dev_specs(self):
if not self._dev_specs:
self._dev_specs = self._read_dev_specs()
return self._dev_specs
def _read_dev_specs(self):
dev_specs = {}
dev_config = spack.config.get("develop", {})
for name, entry in dev_config.items():

View File

@ -16,6 +16,7 @@
import spack.stage
import spack.util.git
import spack.util.path
from spack.error import SpackError
from spack.main import SpackCommand
add = SpackCommand("add")
@ -159,6 +160,7 @@ def check_path(stage, dest):
# Create path to allow develop to modify env
fs.mkdirp(abspath)
develop("--no-clone", "-p", path, "mpich@1.0")
self.check_develop(e, spack.spec.Spec("mpich@=1.0"), path)
# Remove path to ensure develop with no args runs staging code
os.rmdir(abspath)
@ -218,6 +220,40 @@ def test_develop_full_git_repo(
assert len(commits) > 1
def test_recursive(mutable_mock_env_path, install_mockery, mock_fetch):
env("create", "test")
with ev.read("test") as e:
add("indirect-mpich@1.0")
e.concretize()
specs = e.all_specs()
assert len(specs) > 1
develop("--recursive", "mpich")
expected_dev_specs = ["mpich", "direct-mpich", "indirect-mpich"]
for spec in expected_dev_specs:
assert spec in e.dev_specs
def test_develop_fails_with_multiple_concrete_versions(
mutable_mock_env_path, install_mockery, mock_fetch
):
env("create", "test")
with ev.read("test") as e:
add("indirect-mpich@1.0")
add("indirect-mpich@0.9")
e.unify = False
e.concretize()
with pytest.raises(SpackError) as develop_error:
develop("indirect-mpich", fail_on_error=True)
error_str = "has multiple concrete instances in the graph"
assert error_str in str(develop_error.value)
def test_concretize_dev_path_with_at_symbol_in_env(mutable_mock_env_path, tmpdir, mock_packages):
spec_like = "develop-test@develop"

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

View File

@ -363,6 +363,30 @@ def execute(self, env: MutableMapping[str, str]):
env[self.name] = self.separator.join(directories)
class RemoveFirstPath(NameValueModifier):
def execute(self, env: MutableMapping[str, str]):
tty.debug(f"RemoveFirstPath: {self.name}-{str(self.value)}", level=3)
environment_value = env.get(self.name, "")
directories = environment_value.split(self.separator)
directories = [path_to_os_path(os.path.normpath(x)).pop() for x in directories]
val = path_to_os_path(os.path.normpath(self.value)).pop()
if val in directories:
directories.remove(val)
env[self.name] = self.separator.join(directories)
class RemoveLastPath(NameValueModifier):
def execute(self, env: MutableMapping[str, str]):
tty.debug(f"RemoveLastPath: {self.name}-{str(self.value)}", level=3)
environment_value = env.get(self.name, "")
directories = environment_value.split(self.separator)[::-1]
directories = [path_to_os_path(os.path.normpath(x)).pop() for x in directories]
val = path_to_os_path(os.path.normpath(self.value)).pop()
if val in directories:
directories.remove(val)
env[self.name] = self.separator.join(directories[::-1])
class RemovePath(NameValueModifier):
def execute(self, env: MutableMapping[str, str]):
tty.debug(f"RemovePath: {self.name}-{str(self.value)}", level=3)
@ -533,6 +557,30 @@ def prepend_path(self, name: str, path: str, separator: str = os.pathsep):
item = PrependPath(name, path, separator=separator, trace=self._trace())
self.env_modifications.append(item)
@system_env_normalize
def remove_first_path(self, name: str, path: str, separator: str = os.pathsep):
"""Stores a request to remove first instance of path from a list of paths.
Args:
name: name of the environment variable
path: path to be removed
separator: separator for the paths (default: os.pathsep)
"""
item = RemoveFirstPath(name, path, separator=separator, trace=self._trace())
self.env_modifications.append(item)
@system_env_normalize
def remove_last_path(self, name: str, path: str, separator: str = os.pathsep):
"""Stores a request to remove last instance of path from a list of paths.
Args:
name: name of the environment variable
path: path to be removed
separator: separator for the paths (default: os.pathsep)
"""
item = RemoveLastPath(name, path, separator=separator, trace=self._trace())
self.env_modifications.append(item)
@system_env_normalize
def remove_path(self, name: str, path: str, separator: str = os.pathsep):
"""Stores a request to remove a path from a list of paths.
@ -613,9 +661,9 @@ def reversed(self) -> "EnvironmentModifications":
tty.debug("Reversing `Set` environment operation may lose the original value")
rev.unset(envmod.name)
elif isinstance(envmod, AppendPath):
rev.remove_path(envmod.name, envmod.value)
rev.remove_last_path(envmod.name, envmod.value)
elif isinstance(envmod, PrependPath):
rev.remove_path(envmod.name, envmod.value)
rev.remove_first_path(envmod.name, envmod.value)
elif isinstance(envmod, SetPath):
tty.debug("Reversing `SetPath` environment operation may lose the original value")
rev.unset(envmod.name)

View File

@ -33,14 +33,15 @@ endif
# filter this script out of list of open files
if ( $?_sp_lsof ) then
set _sp_source_file = `$_sp_lsof | sed -e 's/^[^/]*//' | grep "/setup-env.csh"`
set _sp_source_file = `$_sp_lsof | \sed -e 's/^[^/]*//' | \grep "/setup-env.csh"`
endif
# This script is in $SPACK_ROOT/share/spack; get the root with dirname
# This script is in $SPACK_ROOT/share/spack.
# Get the root with :h, which is like dirname but it's a csh builtin
if ($?_sp_source_file) then
set _sp_share_spack = `dirname "$_sp_source_file"`
set _sp_share = `dirname "$_sp_share_spack"`
setenv SPACK_ROOT `dirname "$_sp_share"`
set _sp_share_spack = "$_sp_source_file:h"
set _sp_share = "$_sp_share_spack:h"
setenv SPACK_ROOT "$_sp_share:h"
endif
if (! $?SPACK_ROOT) then
@ -73,8 +74,8 @@ _spack_pathadd PATH "$SPACK_ROOT/bin"
eval `spack --print-shell-vars csh`
# Set up module search paths in the user environment
set tcl_roots = `echo $_sp_tcl_roots:q | sed 's/:/ /g'`
set compatible_sys_types = `echo $_sp_compatible_sys_types:q | sed 's/:/ /g'`
set tcl_roots = `echo $_sp_tcl_roots:q | \sed 's/:/ /g'`
set compatible_sys_types = `echo $_sp_compatible_sys_types:q | \sed 's/:/ /g'`
foreach tcl_root ($tcl_roots:q)
foreach systype ($compatible_sys_types:q)
_spack_pathadd MODULEPATH "$tcl_root/$systype"

View File

@ -994,7 +994,7 @@ _spack_dev_build() {
_spack_develop() {
if $list_options
then
SPACK_COMPREPLY="-h --help -p --path -b --build-directory --no-clone --clone -f --force"
SPACK_COMPREPLY="-h --help -p --path -b --build-directory --no-clone --clone -f --force -r --recursive"
else
_all_packages
fi

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'
# spack develop
set -g __fish_spack_optspecs_spack_develop h/help p/path= b/build-directory= no-clone clone f/force=
set -g __fish_spack_optspecs_spack_develop h/help p/path= b/build-directory= no-clone clone f/force= r/recursive
complete -c spack -n '__fish_spack_using_command_pos_remainder 0 develop' -f -k -a '(__fish_spack_specs_or_id)'
complete -c spack -n '__fish_spack_using_command develop' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command develop' -s h -l help -d 'show this help message and exit'
@ -1441,9 +1441,11 @@ complete -c spack -n '__fish_spack_using_command develop' -s b -l build-director
complete -c spack -n '__fish_spack_using_command develop' -l no-clone -f -a clone
complete -c spack -n '__fish_spack_using_command develop' -l no-clone -d 'do not clone, the package already exists at the source path'
complete -c spack -n '__fish_spack_using_command develop' -l clone -f -a clone
complete -c spack -n '__fish_spack_using_command develop' -l clone -d 'clone the package even if the path already exists'
complete -c spack -n '__fish_spack_using_command develop' -l clone -d '(default) clone the package unless the path already exists, use --force to overwrite'
complete -c spack -n '__fish_spack_using_command develop' -s f -l force -r -f -a force
complete -c spack -n '__fish_spack_using_command develop' -s f -l force -r -d 'remove any files or directories that block cloning source code'
complete -c spack -n '__fish_spack_using_command develop' -s r -l recursive -f -a recursive
complete -c spack -n '__fish_spack_using_command develop' -s r -l recursive -d 'traverse nodes of the graph to mark everything up to the root as a develop spec'
# spack diff
set -g __fish_spack_optspecs_spack_diff h/help json first a/attribute= ignore=

View File

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

View File

@ -1,46 +1,87 @@
diff --git a/tools/chapel-py/setup.py b/tools/chapel-py/setup.py
index bee452790c..58ec46d7e6 100644
--- a/tools/chapel-py/setup.py
+++ b/tools/chapel-py/setup.py
@@ -46,7 +46,37 @@ host_cc = str(chpl_variables.get("CHPL_HOST_CC"))
host_cxx = str(chpl_variables.get("CHPL_HOST_CXX"))
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))
host_bin_subdir = str(chpl_variables.get("CHPL_HOST_BIN_SUBDIR"))
+
+# construct the chpl_lib_path from chpl_home, or use the configured-prefix if it exists
+
chpl_lib_path = os.path.join(chpl_home, "lib", "compiler", host_bin_subdir)
+chpl_install_lib_path = None
+@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
+ # 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(')')
+ 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:
+ 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)
+ 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(
+ assert chpl_prefix != "" and chpl_prefix is not None
+ return os.path.join(
+ chpl_prefix,
+ "lib",
+ "chapel",
+ chpl_version_string,
+ "compiler"
+ "compiler",
+ )
+ return None
+
@memoize
def get_chpl_version_from_install():
if get_prefix_install_prefix():
@@ -189,6 +228,8 @@ def _main():
)
parser.add_option('--using-module', action='store_const',
dest='func', const=using_chapel_module)
+ parser.add_option('--configured-install-lib-prefix', action='store_const',
+ dest='func', const=get_chpl_configured_install_lib_prefix)
(options, args) = parser.parse_args()
if options.func:
diff --git a/tools/chapel-py/setup.py b/tools/chapel-py/setup.py
index 0f3dd9fea0..9be2a48cff 100644
--- a/tools/chapel-py/setup.py
+++ b/tools/chapel-py/setup.py
@@ -47,6 +47,18 @@ host_cxx = str(chpl_variables.get("CHPL_HOST_CXX"))
host_bin_subdir = str(chpl_variables.get("CHPL_HOST_BIN_SUBDIR"))
chpl_lib_path = os.path.join(chpl_home, "lib", "compiler", host_bin_subdir)
+# For installations using --prefix, the build and final lib paths are going to
+# differ. figure out the install location now and write it to the rpath
+chpl_home_utils = os.path.join(
+ chpl_home, "util", "chplenv", "chpl_home_utils.py"
+)
+chpl_install_lib_path = (
+ subprocess.check_output(
+ ["python", chpl_home_utils, "--configured-install-lib-prefix"],
+ )
+ .decode(sys.stdout.encoding)
+ .strip()
+)
CXXFLAGS = []
if have_llvm and have_llvm != "none":
@@ -64,10 +94,14 @@ CXXFLAGS += ["-std=c++17", "-I{}/frontend/include".format(chpl_home)]
@@ -64,11 +76,16 @@ CXXFLAGS += ["-std=c++17", "-I{}/frontend/include".format(chpl_home)]
LDFLAGS = []
LDFLAGS += [
"-L{}".format(chpl_lib_path),
@ -49,11 +90,13 @@ index bee452790c..58ec46d7e6 100644
- "-Wl,-rpath",
- chpl_lib_path,
]
+if chpl_install_lib_path is not None:
+if chpl_install_lib_path != "None":
+ LDFLAGS += [
+ "-L{}".format(chpl_install_lib_path),
+ "-Wl,-rpath,{}".format(chpl_install_lib_path),
+ ]
if str(chpl_variables.get("CHPL_SANITIZE")) == "address":
if str(chpl_variables.get("CHPL_HOST_PLATFORM")) == "darwin":
+
os.environ["CC"] = host_cc
os.environ["CXX"] = host_cxx
setup(

View File

@ -1,49 +1,31 @@
diff --git a/tools/chapel-py/setup.py b/tools/chapel-py/setup.py
index 30c2708724..3921143def 100644
index 30c2708724..0cf576ab25 100644
--- a/tools/chapel-py/setup.py
+++ b/tools/chapel-py/setup.py
@@ -47,6 +47,36 @@ host_cxx = str(chpl_variables.get("CHPL_HOST_CXX"))
@@ -47,6 +47,18 @@ host_cxx = str(chpl_variables.get("CHPL_HOST_CXX"))
host_bin_subdir = str(chpl_variables.get("CHPL_HOST_BIN_SUBDIR"))
chpl_lib_path = os.path.join(chpl_home, "lib", "compiler", host_bin_subdir)
+# For installations using --prefix, the lib final lib path is going to be different
+# figure it out now and write it to the rpath
+chpl_install_lib_path = None
+if os.path.exists(os.path.join(chpl_home, "configured-prefix")):
+ with open(os.path.join(chpl_home, "CMakeLists.txt"), "r") as f:
+ # read CMakeLists.txt to get the CHPL_MAJOR_VERSION and CHPL_MINOR_VERSION
+ # and then construct the path from that
+ chpl_major_version = None
+ chpl_minor_version = None
+ for line in f:
+ if "set(CHPL_MAJOR_VERSION" in line:
+ chpl_major_version = line.split()[1].strip(')')
+ if "set(CHPL_MINOR_VERSION" in line:
+ chpl_minor_version = line.split()[1].strip(')')
+ if chpl_major_version is not None and chpl_minor_version is not None:
+ break
+ assert(chpl_major_version is not None and chpl_minor_version is not None)
+ chpl_version_string = "{}.{}".format(chpl_major_version, chpl_minor_version)
+ chpl_prefix = None
+ with open(os.path.join(chpl_home, "configured-prefix"), "r") as f:
+ chpl_prefix = f.read().strip()
+ assert(chpl_prefix is not None)
+ chpl_install_lib_path = os.path.join(
+ chpl_prefix,
+ "lib",
+ "chapel",
+ chpl_version_string,
+ "compiler"
+# For installations using --prefix, the build and final lib paths are going to
+# differ figure out the install location now and write it to the rpath
+chpl_home_utils = os.path.join(
+ chpl_home, "util", "chplenv", "chpl_home_utils.py"
+)
+chpl_install_lib_path = (
+ subprocess.check_output(
+ ["python", chpl_home_utils, "--configured-install-lib-prefix"],
+ )
+ .decode(sys.stdout.encoding)
+ .strip()
+)
+
CXXFLAGS = []
if have_llvm and have_llvm != "none":
@@ -68,6 +98,12 @@ LDFLAGS += [
@@ -68,6 +80,12 @@ LDFLAGS += [
"-lChplFrontendShared",
]
+if chpl_install_lib_path is not None:
+if chpl_install_lib_path != "None":
+ LDFLAGS += [
+ "-L{}".format(chpl_install_lib_path),
+ "-Wl,-rpath,{}".format(chpl_install_lib_path),
@ -52,3 +34,63 @@ index 30c2708724..3921143def 100644
if str(chpl_variables.get("CHPL_SANITIZE")) == "address":
if str(chpl_variables.get("CHPL_HOST_PLATFORM")) == "darwin":
sys.exit(
diff --git a/util/chplenv/chpl_home_utils.py b/util/chplenv/chpl_home_utils.py
index 5f09ffed15..4b93849acd 100644
--- a/util/chplenv/chpl_home_utils.py
+++ b/util/chplenv/chpl_home_utils.py
@@ -54,6 +54,46 @@ install_path_regex = re.compile(
os.path.sep,
os.path.sep))
+@memoize
+def get_chpl_configured_install_lib_prefix():
+ # gets the path to the lib directory for a prefix install, or None if not
+ # a prefix install
+ chpl_home = str(os.getenv("CHPL_HOME"))
+ if os.path.exists(os.path.join(chpl_home, "configured-prefix")):
+ with open(os.path.join(chpl_home, "CMakeLists.txt"), "r") as f:
+ # read CMakeLists.txt to get the CHPL_MAJOR_VERSION and
+ # CHPL_MINOR_VERSION and then construct the path from that
+ chpl_major_version = None
+ chpl_minor_version = None
+ for line in f:
+ if "set(CHPL_MAJOR_VERSION" in line:
+ chpl_major_version = line.split()[1].strip(")")
+ if "set(CHPL_MINOR_VERSION" in line:
+ chpl_minor_version = line.split()[1].strip(")")
+ if (
+ chpl_major_version is not None
+ and chpl_minor_version is not None
+ ):
+ break
+ assert chpl_major_version is not None and chpl_minor_version is not None
+ chpl_version_string = "{}.{}".format(
+ chpl_major_version,
+ chpl_minor_version,
+ )
+ chpl_prefix = None
+ with open(os.path.join(chpl_home, "configured-prefix"), "r") as f:
+ chpl_prefix = f.read().strip()
+ # Problems with the configured-prefix file - maybe empty
+ assert chpl_prefix != "" and chpl_prefix is not None
+ return os.path.join(
+ chpl_prefix,
+ "lib",
+ "chapel",
+ chpl_version_string,
+ "compiler",
+ )
+ return None
+
@memoize
def get_chpl_version_from_install():
if get_prefix_install_prefix():
@@ -189,6 +229,8 @@ def _main():
)
parser.add_option('--using-module', action='store_const',
dest='func', const=using_chapel_module)
+ parser.add_option('--configured-install-lib-prefix', action='store_const',
+ dest='func', const=get_chpl_configured_install_lib_prefix)
(options, args) = parser.parse_args()
if options.func:

View File

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

View File

@ -46,7 +46,7 @@ class Datatransferkit(CMakePackage):
depends_on("trilinos+openmp", when="+openmp")
depends_on("trilinos+stratimikos+belos", when="@master")
depends_on("trilinos@13:13.4.1", when="@3.1-rc2:3.1-rc3")
depends_on("trilinos@14.2:", when="@3.1.0:")
depends_on("trilinos@14.2:16.0", when="@3.1.0:")
def cmake_args(self):
spec = self.spec

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.4", sha256="3ef63dc8d0111042071ee7f7bafa0650c6ce2d7be957ef0b7ec269495a651ff8")
version("1.8.2", sha256="5689f7411165adc953f37974e276a3028db94447c76e8dd92efe910c6d3bae08")
# Skip function that tries to do something if you're root that doesn't work in a container.
# Only tested on 1.15.10, but probably works for other versions as well.
patch(
"meson_post_install.patch",
sha256="d121f842418af606f414ebfc523b51fdd23a2d231e73d66229a4b0ab3486edc4",
when="@1.15.10",
)
variant("xml_docs", default=False, description="Build XML documentation")
variant("system-socket", default="default", description="Location for the DBus system socket")

View File

@ -19,6 +19,10 @@ class Detray(CMakePackage):
license("MPL-2.0", checked_by="stephenswat")
version("0.93.0", sha256="7d56771d213649de836905efbb21b5be59cc966b00417b0b1fa85bfe12ac92da")
version("0.92.0", sha256="512669c1ea51936b0fe871fb5a33450b54161e811e48cc51445dc83fe3338c42")
version("0.91.0", sha256="6aa822f8bdc7339286d2255079a00ecc3204c0e194c5cf9d0fc5b9262c3cfb39")
version("0.90.0", sha256="f965429c33622a48c5a7b007086e22125ddd384860c4de3e010d72e05b5cca70")
version("0.89.0", sha256="b893b7f5434c1c9951433876ef43d1db1b08d36749f062e261b4e6d48e77d5db")
version("0.88.1", sha256="89134c86c6857cb3a821181e3bb0565ebb726dd8b1245678db1681483d792cf9")
version("0.88.0", sha256="bda15501c9c96af961e24ce243982f62051c535b9fe458fb28336a19b54eb47d")

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

View File

@ -19,6 +19,7 @@ class Hugo(GoPackage):
license("Apache-2.0")
version("0.145.0", sha256="f6cfcfa4575ff25a08e68b638367df60b28e28a7917471c5deec6396eae26ae2")
version("0.140.2", sha256="45594ddf39d62d227cfd54c19fb9a09ab851cf537caee6138de0ddd4f1f6f117")
version("0.135.0", sha256="a75c4c684d2125255f214d11b9834a5ec6eb64353f4de2c06952d2b3b7430f0e")
version("0.127.0", sha256="549c7ebdf2ee6b3107ea10a9fbd9932a91bb3f30f7e8839245f6d8e318aca88c")
@ -34,11 +35,12 @@ class Hugo(GoPackage):
version("0.107.0", sha256="31d959a3c1633087d338147782d03bdef65323b67ff3efcec7b40241413e270a")
version("0.106.0", sha256="9219434beb51466487b9f8518edcbc671027c1998e5a5820d76d517e1dfbd96a")
depends_on("go@1.11:", type="build", when="@0.48:")
depends_on("go@1.18:", type="build", when="@0.106:")
depends_on("go@1.20:", type="build", when="@0.123:")
depends_on("go@1.21.8:", type="build", when="@0.131:")
depends_on("go@1.23:", type="build", when="@0.144:")
depends_on("go@1.22.6:", type="build", when="@0.133:")
depends_on("go@1.21.8:", type="build", when="@0.131:")
depends_on("go@1.20:", type="build", when="@0.123:")
depends_on("go@1.18:", type="build", when="@0.106:")
depends_on("go@1.11:", type="build", when="@0.48:")
variant("extended", default=False, description="Enable extended features")

View File

@ -23,6 +23,12 @@ class IntelOneapiAdvisor(IntelOneApiLibraryPackageWithSdk):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/advisor.html"
)
version(
"2025.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/d9566edf-d6dd-4b85-9dda-efdf0ebb199a/intel-advisor-2025.1.0.507_offline.sh",
sha256="7c1222acaef7661e1a444f20627022c0595c21db4678ce26a5922612ddbd868c",
expand=False,
)
version(
"2025.0.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/fe95ae4a-3692-4e31-919d-3e7bdf5832f1/intel-advisor-2025.0.0.798_offline.sh",

View File

@ -26,6 +26,12 @@ class IntelOneapiCcl(IntelOneApiLibraryPackage):
depends_on("intel-oneapi-mpi")
version(
"2021.15.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/8f5d5e38-1626-41c1-9c20-44d966c43ae1/intel-oneccl-2021.15.0.401_offline.sh",
sha256="f6eefe959bcddc7b64bdc52d212ea0a0495c7a18c000f8b3707949695211131a",
expand=False,
)
version(
"2021.14.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/88a7a6db-816c-4cd5-993f-821729da5648/intel-oneccl-2021.14.0.506_offline.sh",

View File

@ -9,6 +9,17 @@
from spack.package import *
versions = [
{
"version": "2025.1.0",
"cpp": {
"url": "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/cd63be99-88b0-4981-bea1-2034fe17f5cf/intel-dpcpp-cpp-compiler-2025.1.0.573_offline.sh",
"sha256": "53489afcc9534e30ad807e94b158abfccf6a7eb3658f59655122d92fbad8fa72",
},
"ftn": {
"url": "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/577ebc28-d0f6-492b-9a43-b04354ce99da/intel-fortran-compiler-2025.1.0.601_offline.sh",
"sha256": "27016329dede8369679f22b4e9f67936837ce7972a1ef4f5c76ee87d7c963c81",
},
},
{
"version": "2025.0.4",
"cpp": {

View File

@ -25,6 +25,12 @@ class IntelOneapiDal(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onedal.html"
)
version(
"2025.4.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/e4da59ef-aa3a-4223-b3a0-4728014113e6/intel-onedal-2025.4.0.655_offline.sh",
sha256="844248e3d4e30ce9eae94bb7a6cc13ad91a419e5251d753eff07d899628b8173",
expand=False,
)
version(
"2025.0.1",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/928ba1dd-c2bc-41f6-a35f-8de41ddf055a/intel-onedal-2025.0.1.19_offline.sh",

View File

@ -25,6 +25,12 @@ class IntelOneapiDnn(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onednn.html"
)
version(
"2025.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9cf476b7-5b8b-4995-ac33-91a446bc0c6e/intel-onednn-2025.1.0.653_offline.sh",
sha256="7dc6d730c01fa7a57485ba58144679f4b35605277c1ab3f0b385cf735f438a44",
expand=False,
)
version(
"2025.0.1",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6cfa324b-1591-4c0b-b8d2-97c5b3b272a7/intel-onednn-2025.0.1.12_offline.sh",

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"
version(
"2025.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/2c7f388d-d457-4d91-8ad9-72771f711ec2/intel-dpcpp-ct-2025.1.0.454_offline.sh",
sha256="d3be6f6711499707052f965ffbad3df3d95de1e8fd8a64e1b1fc70e4e4886b66",
expand=False,
)
version(
"2025.0.1",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6d1e0867-72b4-4670-8efc-3586894ad15f/intel-dpcpp-ct-2025.0.1.19_offline.sh",

View File

@ -21,6 +21,12 @@ class IntelOneapiDpl(IntelOneApiLibraryPackage):
homepage = "https://github.com/oneapi-src/oneDPL"
version(
"2022.8.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/b8f3da7a-9df5-4c04-b831-c46e9b636c70/intel-onedpl-2022.8.0.340_offline.sh",
sha256="0fd73d2fed182106069fe084daa74bb5369ba400a08b5cf61a932028dbaafdcf",
expand=False,
)
version(
"2022.7.1",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/de3c613f-829c-4bdc-aa2b-6129eece3bd9/intel-onedpl-2022.7.1.15_offline.sh",

View File

@ -26,6 +26,12 @@ class IntelOneapiIpp(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/ipp.html"
)
version(
"2022.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/a5a44f80-a3ef-45c3-a7be-d50157434d7c/intel-ipp-2022.1.0.649_offline.sh",
sha256="32aa60f225466ee066032c645448504958c8ae681505061119e63e1fcdb4090f",
expand=False,
)
version(
"2022.0.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/acf220fa-326d-4f6e-9b63-f2da47b6f680/intel-ipp-2022.0.0.809_offline.sh",

View File

@ -27,6 +27,12 @@ class IntelOneapiIppcp(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/ipp.html"
)
version(
"2025.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/02532432-5930-4ac7-8e16-19739bf83fd2/intel-cryptography-primitives-library-2025.1.0.390_offline.sh",
sha256="d16ff8cd46ef08e472816f9deb5a0a0dfaca11f4987a223608b818586412eac8",
expand=False,
)
version(
"2025.0.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/4592da40-6f1c-4d4b-aa5b-0bb97ec66c92/intel-cryptography-primitives-library-2025.0.0.616_offline.sh",

View File

@ -24,6 +24,12 @@ class IntelOneapiMkl(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onemkl.html"
)
version(
"2025.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/dc93af13-2b3f-40c3-a41b-2bc05a707a80/intel-onemkl-2025.1.0.803_offline.sh",
sha256="80a4b1338b48b3fbee55a8dc784f92e5e88d618f1b99d80f5f207a00c86a6638",
expand=False,
)
version(
"2025.0.1",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/246ea40e-5aa7-42a4-81fa-0c029dc8650f/intel-onemkl-2025.0.1.16_offline.sh",

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"
version(
"2021.15.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6b6e395e-8f38-4da3-913d-90a2bcf41028/intel-mpi-2021.15.0.495_offline.sh",
sha256="d4ad297174ce3837444468645e13cfe78f11d9bf2ad9ade2057b2668cccd9385",
expand=False,
)
version(
"2021.14.2",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/201b2570-bc4f-41ee-a6c8-6f7a71a4b840/intel-mpi-2021.14.2.9_offline.sh",

View File

@ -21,6 +21,12 @@ class IntelOneapiTbb(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onetbb.html"
)
version(
"2022.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/5aeb45ec-41a8-46d7-b7b5-1f5ee4f55d61/intel-onetbb-2022.1.0.427_offline.sh",
sha256="549584e5f9b83c655cfcad5ad86af7fc3f701458e5dd9cbca31dc099e4761434",
expand=False,
)
version(
"2022.0.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9d5f5bd1-6021-41f7-aa3e-36d44c4ac190/intel-onetbb-2022.0.0.403_offline.sh",

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"
version(
"2025.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/05b14253-a457-4472-bcf7-d98676542072/intel-vtune-2025.1.0.686_offline.sh",
sha256="26407e12d501e544431535da5e9f3ea2ac56c9c53660b410c3096f2b9aae2a89",
expand=False,
)
version(
"2025.0.1",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1277cea4-34b7-4221-bdbc-4f47a9a5592d/intel-vtune-2025.0.1.16_offline.sh",

View File

@ -20,6 +20,7 @@ class Kentutils(MakefilePackage):
maintainers("teaguesterling")
version("478", sha256="dcbe4bbab811e8634f2993512540d8d1ee279da8c49e8048cdd42b17cbe5ba2b")
version("465", sha256="eef17b1f3182d1d9dc99b5c73a6b0468d5d3bd80470f25d3f7706cc1372e04b0")
version("464", sha256="24e20fe68e2a2894d802c87662f69a62f71b3c15fafb2e4d6c3c425c63638bb2")
version("460", sha256="b955e56ee880074521ef1ab1371491f47e66dc6fdd93b05328386dd675a635fa")
@ -32,9 +33,6 @@ class Kentutils(MakefilePackage):
deprecated=True,
)
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
# The bundled version of kentlib has some custom changes that are used by parts of
# kentlib. See https://github.com/spack/spack/pull/44501#issuecomment-2162789410
# for some additional details. A built-in version SHOULD work for most things though.
@ -45,6 +43,9 @@ class Kentutils(MakefilePackage):
sticky=True,
)
depends_on("c", type="build")
depends_on("cxx", type="build")
with default_args(type=("build", "link", "run")):
depends_on("libpng")
depends_on("openssl")

View File

@ -22,12 +22,10 @@ class KokkosKernels(CMakePackage, CudaPackage):
version("develop", branch="develop")
version("master", branch="master")
version("4.5.01", sha256="c111a6561f23a85af9850d1df1e9015f37a586f1da0be4b6fb1e98001d75e074")
version("4.5.00", sha256="94726a64e349adf6cd276e9fdc1b2bf7ff81efec833e479a5d3024b83f165a59")
version("4.4.01", sha256="4a32bc8330e0113856bdf181df94cc4f9902e3cebb5dc7cea5948f30df03bfa1")
version("4.4.00", sha256="66d5c3f728a8c7689159c97006996164ea00fd39702476220e3dbf2a05c49e8f")
version(
"4.3.01",
sha256="749553a6ea715ba1e56fa0b13b42866bb9880dba7a94e343eadf40d08c68fab8",
@ -129,8 +127,61 @@ class KokkosKernels(CMakePackage, CudaPackage):
url="https://github.com/kokkos/kokkos-kernels/archive/3.0.00.tar.gz",
)
depends_on("cxx", type="build") # generated
variant("shared", default=True, description="Build shared libraries")
variant(
"execspace_cuda",
default=False,
description="Whether to pre instantiate kernels for the execution space Kokkos::Cuda",
)
variant(
"execspace_openmp",
default=False,
description="Whether to pre instantiate kernels for the execution space "
"Kokkos::Experimental::OpenMPTarget",
)
variant(
"execspace_threads",
default=False,
description="Whether to pre instantiate kernels for the execution space Kokkos::Threads",
)
variant(
"execspace_serial",
default=False,
description="Whether to pre instantiate kernels for the execution space Kokkos::Serial",
)
variant(
"memspace_cudauvmspace",
default=False,
description="Whether to pre instantiate kernels for the memory space Kokkos::CudaUVMSpace",
)
variant(
"memspace_cudaspace",
default=False,
description="Whether to pre instantiate kernels for the memory space Kokkos::CudaSpace",
)
variant("serial", default=False, description="Enable serial backend")
variant("openmp", default=False, description="Enable OpenMP backend")
variant("threads", default=False, description="Enable C++ threads backend")
variant(
"ordinals", default="int", values=["int", "int64_t"], multi=True, description="Ordinals"
)
variant(
"offsets",
default="int,size_t",
values=["int", "size_t"],
multi=True,
description="Offsets",
)
variant("layouts", default="left", values=["left", "right"], description="Layouts")
variant(
"scalars",
default="double",
values=["float", "double", "complex_float", "complex_double"],
multi=True,
description="Scalars",
)
depends_on("cxx", type="build")
depends_on("kokkos")
depends_on("kokkos@master", when="@master")
depends_on("kokkos@develop", when="@develop")
@ -158,74 +209,18 @@ class KokkosKernels(CMakePackage, CudaPackage):
depends_on("kokkos@3.2.00", when="@3.2.00")
depends_on("kokkos@3.1.00", when="@3.1.00")
depends_on("kokkos@3.0.00", when="@3.0.00")
depends_on("cmake@3.16:", type="build")
backends = {
"serial": (False, "enable Serial backend (default)"),
"cuda": (False, "enable Cuda backend"),
"openmp": (False, "enable OpenMP backend"),
"threads": (False, "enable C++ threads backend"),
}
for backend in backends:
deflt_bool, descr = backends[backend]
variant(backend.lower(), default=deflt_bool, description=descr)
depends_on("kokkos+%s" % backend.lower(), when="+%s" % backend.lower())
space_etis = {
"execspace_cuda": (
"auto",
"Whether to pre instantiate kernels for the execution space Kokkos::Cuda",
"cuda",
),
"execspace_openmp": (
"auto",
"Whether to pre instantiate kernels for the execution space "
"Kokkos::Experimental::OpenMPTarget",
"openmp",
),
"execspace_threads": (
"auto",
"Whether to build kernels for the execution space Kokkos::Threads",
"threads",
),
"execspace_serial": (
"auto",
"Whether to build kernels for the execution space Kokkos::Serial",
"serial",
),
"memspace_cudauvmspace": (
"auto",
"Whether to pre instantiate kernels for the memory space Kokkos::CudaUVMSpace",
"cuda",
),
"memspace_cudaspace": (
"auto",
"Whether to pre instantiate kernels for the memory space Kokkos::CudaSpace",
"cuda",
),
}
for eti in space_etis:
deflt, descr, backend_required = space_etis[eti]
variant(eti, default=deflt, description=descr)
depends_on("kokkos+%s" % backend_required, when="+%s" % eti)
# kokkos-kernels requires KOKKOS_LAMBDA to be available since 4.0.00
depends_on("kokkos+cuda", when="+execspace_cuda")
depends_on("kokkos+openmp", when="+execspace_openmp")
depends_on("kokkos+threads", when="+execspace_threads")
depends_on("kokkos+serial", when="+execspace_serial")
depends_on("kokkos+cuda", when="+memspace_cudauvmspace")
depends_on("kokkos+cuda", when="+memspace_cudaspace")
depends_on("kokkos+serial", when="+serial")
depends_on("kokkos+cuda", when="+cuda")
depends_on("kokkos+openmp", when="+openmp")
depends_on("kokkos+threads", when="+threads")
depends_on("kokkos+cuda_lambda", when="@4.0.00:+cuda")
numeric_etis = {
"ordinals": (
"int",
"ORDINAL_", # default, cmake name
["int", "int64_t"],
), # allowed values
"offsets": ("int,size_t", "OFFSET_", ["int", "size_t"]),
"layouts": ("left", "LAYOUT", ["left", "right"]),
"scalars": ("double", "", ["float", "double", "complex_float", "complex_double"]),
}
for eti in numeric_etis:
deflt, cmake_name, vals = numeric_etis[eti]
variant(eti, default=deflt, description=eti, values=vals, multi=True)
depends_on("cmake@3.16:", type="build")
tpls = {
# variant name #deflt #spack name #root var name #supporting versions #docstring
@ -246,9 +241,7 @@ class KokkosKernels(CMakePackage, CudaPackage):
for tpl in tpls:
deflt_bool, spackname, rootname, condition, descr = tpls[tpl]
variant(tpl, default=deflt_bool, when=f"{condition}", description=descr)
depends_on(spackname, when="+%s" % tpl)
variant("shared", default=True, description="Build shared libraries")
depends_on(spackname, when=f"+{tpl}")
patch("pr_2296_430.patch", when="@4.3.00:4.4.00")
patch("pr_2296_400.patch", when="@4.0.00:4.2.01")
@ -259,64 +252,49 @@ class KokkosKernels(CMakePackage, CudaPackage):
def cmake_args(self):
spec = self.spec
options = []
options = [
self.define_from_variant("KokkosKernels_INST_EXECSPACE_CUDA", "execspace_cuda"),
self.define_from_variant("KokkosKernels_INST_EXECSPACE_OPENMP", "execspace_openmp"),
self.define_from_variant("KokkosKernels_INST_EXECSPACE_THREADS", "execspace_threads"),
self.define_from_variant("KokkosKernels_INST_EXECSPACE_SERIAL", "execspace_serial"),
self.define_from_variant("KokkosKernels_INST_EXECSPACE_SERIAL", "execspace_serial"),
self.define_from_variant(
"KokkosKernels_INST_MEMSPACE_CUDAUVMSPACE", "memspace_cudauvmspace"
),
self.define_from_variant(
"KokkosKernels_INST_MEMSPACE_CUDASPACE", "memspace_cudaspace"
),
self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
]
isdiy = spec.satisfies("+diy")
if isdiy:
options.append("-DSpack_WORKAROUND=On")
if spec.satisfies("+diy"):
options.append(self.define("Spack_WORKAROUND", True))
options.append("-DKokkos_ROOT=%s" % spec["kokkos"].prefix)
options.append(self.define("Kokkos_ROOT", spec["kokkos"].prefix))
if spec.satisfies("^kokkos+rocm"):
options.append("-DCMAKE_CXX_COMPILER=%s" % spec["hip"].hipcc)
options.append(self.define("CMAKE_CXX_COMPILER", spec["hip"].hipcc))
else:
# Compiler weirdness due to nvcc_wrapper
options.append("-DCMAKE_CXX_COMPILER=%s" % self["kokkos"].kokkos_cxx)
options.append(self.define("CMAKE_CXX_COMPILER", self["kokkos"].kokkos_cxx))
if self.run_tests:
options.append("-DKokkosKernels_ENABLE_TESTS=ON")
options.append(self.define("KokkosKernels_ENABLE_TESTS", True))
for tpl in self.tpls:
on_flag = "+%s" % tpl
off_flag = "~%s" % tpl
dflt, spackname, rootname, condition, descr = self.tpls[tpl]
if on_flag in self.spec:
options.append("-DKokkosKernels_ENABLE_TPL_%s=ON" % tpl.upper())
if spec.satisfies(f"+{tpl}"):
options.append(self.define(f"KokkosKernels_ENABLE_TPL_{tpl.upper()}", True))
if rootname:
options.append("-D%s_ROOT=%s" % (rootname, spec[spackname].prefix))
options.append(self.define(f"{rootname}_ROOT", spec[spackname].prefix))
else:
pass # this should get picked up automatically, we hope
elif off_flag in self.spec:
options.append("-DKokkosKernels_ENABLE_TPL_%s=OFF" % tpl.upper())
pass
for eti in self.numeric_etis:
deflt, cmake_name, vals = self.numeric_etis[eti]
for val in vals:
keyval = "%s=%s" % (eti, val)
cmake_option = "KokkosKernels_INST_%s%s" % (cmake_name.upper(), val.upper())
if keyval in spec:
options.append("-D%s=ON" % cmake_option)
else:
options.append("-D%s=OFF" % cmake_option)
for eti in self.space_etis:
deflt, descr, _ = self.space_etis[eti]
if deflt == "auto":
value = spec.variants[eti].value
# spack does these as strings, not reg booleans
if str(value) == "True":
options.append("-DKokkosKernels_INST_%s=ON" % eti.upper())
elif str(value) == "False":
options.append("-DKokkosKernels_INST_%s=OFF" % eti.upper())
else:
pass # don't pass anything, let CMake decide
else: # simple option
on_flag = "+%s" % eti
off_flag = "~%s" % eti
if on_flag in self.spec:
options.append("-DKokkosKernels_INST_%s=ON" % eti.upper())
elif off_flag in self.spec:
options.append("-DKokkosKernels_INST_%s=OFF" % eti.upper())
options.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
for val in spec.variants["ordinals"].value:
options.append(self.define(f"KokkosKernels_INST_ORDINAL_{val.upper()}", True))
for val in spec.variants["offsets"].value:
options.append(self.define(f"KokkosKernels_INST_OFFSET_{val.upper()}", True))
for val in spec.variants["scalars"].value:
options.append(self.define(f"KokkosKernels_INST_{val.upper()}", True))
layout_value = spec.variants["layouts"].value
options.append(self.define(f"KokkosKernels_INST_LAYOUT{layout_value.upper()}", True))
return options

View File

@ -10,23 +10,30 @@ class Prometheus(MakefilePackage):
systems and service monitoring system."""
homepage = "https://prometheus.io/"
url = "https://github.com/prometheus/prometheus/archive/v2.19.2.tar.gz"
url = "https://github.com/prometheus/prometheus/archive/refs/tags/v2.55.1.tar.gz"
license("Apache-2.0")
version("2.55.1", sha256="f48251f5c89eea6d3b43814499d558bacc4829265419ee69be49c5af98f79573")
version("2.19.2", sha256="d4e84cae2fed6761bb8a80fcc69b6e0e9f274d19dffc0f38fb5845f11da1bbc3")
version("2.19.1", sha256="b72b9b6bdbae246dcc29ef354d429425eb3c0a6e1596fc8b29b502578a4ce045")
version("2.18.2", sha256="a26c106c97d81506e3a20699145c11ea2cce936427a0e96eb2fd0dc7cd1945ba")
version("2.17.1", sha256="d0b53411ea0295c608634ca7ef1d43fa0f5559e7ad50705bf4d64d052e33ddaf")
version("2.17.0", sha256="b5e508f1c747aaf50dd90a48e5e2a3117fec2e9702d0b1c7f97408b87a073009")
version("2.19.2", sha256="f77017846259d01f281ded0d70af834e06ee489d325c9c84de0e68c7d505b42b")
version("2.19.1", sha256="c5bdfb3653b82c1d26e5e14feadf644692289fae42a48e2567629aa2c4a02fc4")
version("2.18.2", sha256="01b4d55aae0a43c9eecb5a660648e45e74ea20f9d4558ff6533058f2050aabd1")
version("2.17.1", sha256="443590c1896cf5096b75d4a30e45381c84a5d17712dc714109ea8cf418b275ac")
version("2.17.0", sha256="c94b13677003838d795c082b95878903d43cd21ab148996d39f1900f00370c97")
depends_on("c", type="build") # generated
depends_on("go", type="build")
depends_on("go@1.17:", type="build", when="@2.37.0:")
depends_on("go@1.16:", type="build", when="@2.33.0:")
depends_on("go@1.14:", type="build", when="@2.23.0:")
depends_on("go@1.13:", type="build", when="@2.17.0:")
depends_on("node-js@16:", type="build", when="@2.31.0:")
depends_on("node-js@11.10.1:", type="build")
depends_on("yarn", type="build")
depends_on("npm", type="build", when="@2.55.1:")
depends_on("npm@7:", type="build", when="@2.31.0:")
depends_on("npm", type="build", when="@2.30.0:")
depends_on("yarn@1", type="build", when="@:2.29.2")
def build(self, spec, prefix):
make("build", parallel=False)

View File

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

View File

@ -18,11 +18,27 @@ class PyPymoo(PythonPackage):
license("Apache-2.0")
version("0.6.1.3", sha256="ab440986cbaede547125ca9d1545781fdee94b719488de44119a86b8e9af526e")
version("0.5.0", sha256="2fbca1716f6b45e430197ce4ce2210070fd3b6b9ec6b17bb25d98486115272c2")
version("0.4.2", sha256="6ec382a7d29c8775088eec7f245a30fd384b42c40f230018dea0e3bcd9aabdf1")
depends_on("cxx", type="build") # generated
depends_on("python@3.4:", type=("build", "run"))
depends_on("py-autograd", type=("build", "run"))
depends_on("py-setuptools", type="build")
with default_args(type="build"):
depends_on("py-setuptools")
depends_on("py-cython@0.29:", when="@0.6.1.3:")
with default_args(type=("build", "run")):
depends_on("python@3.4:")
depends_on("py-autograd")
with when("@0.6.1.3:"):
depends_on("python@3.9:")
depends_on("py-numpy@1.15:")
depends_on("py-scipy@1.1:")
depends_on("py-matplotlib@3:")
depends_on("py-autograd@1.4:")
depends_on("py-cma@3.2.2:")
depends_on("py-alive-progress")
depends_on("py-dill")
depends_on("py-deprecated")

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("yaml-cpp@:0.6.3") # find_package fails with newest version
depends_on("node-js")
depends_on("yarn")
depends_on("yarn@1")
depends_on("pandoc@2.11.4:")
depends_on("icu4c")
depends_on("soci~static+boost+postgresql+sqlite")

View File

@ -84,6 +84,11 @@ def url_for_version(self, version):
patch("gcc7.patch", when="@1.4:3")
patch("gcc10.patch", when="@3.1:6.0")
patch(
"https://gitlab.com/score-p/scorep/-/commit/093ff84f0e155ac1db99bbaa312e028f89affddb.diff",
when="@7:8.4 +gcc-plugin",
sha256="d20b3046ba6a89ad9c106bcf372bceb1bd9ab780d4c7dd9e7373f0099b92d933",
)
variant("mpi", default=True, description="Enable MPI support")
variant("papi", default=True, description="Enable PAPI")
@ -92,6 +97,7 @@ def url_for_version(self, version):
variant("unwind", default=False, description="Enable sampling via libunwind and lib wrapping")
variant("cuda", default=False, description="Enable CUDA support")
variant("hip", default=False, description="Enable ROCm/HIP support", when="@8.0:")
variant("gcc-plugin", default=True, description="Enable gcc-plugin", when="%gcc")
# Dependencies for SCORE-P are quite tight. See the homepage for more
# information. Starting with scorep 4.0 / cube 4.4, Score-P only depends on
# two components of cube -- cubew and cubelib.
@ -230,6 +236,13 @@ def configure_args(self):
if spec.satisfies("^binutils"):
config_args.append("--with-libbfd=%s" % spec["binutils"].prefix)
# when you build with gcc, you usually want to use the gcc-plugin!
# see, e.g., GNU Compiler Plug-In in https://scorepci.pages.jsc.fz-juelich.de/scorep-pipelines/docs/scorep-5.0/html/installationfile.html
if "+gcc-plugin" in spec:
config_args.append("--enable-gcc-plugin")
else:
config_args.append("--disable-gcc-plugin")
config_args.extend(
[
"CFLAGS={0}".format(self.compiler.cc_pic_flag),

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(
"curses",
default=True,
when="@develop,master",
when="@develop,master,14.0.0:",
description="Build support for interactive sst-info",
)
variant("mempools", default=True, description="Use memory pools")
variant(
"debug",
default=False,
description="Enable additional debug output from core and components",
)
variant("trackevents", default=False, description="Enable event and activity tracking")
variant(
"trackperf",
@ -77,37 +83,44 @@ class SstCore(AutotoolsPackage):
depends_on("python@:3.11", type=("build", "run", "link"))
depends_on("mpi", when="+pdes_mpi")
depends_on("zoltan", when="+zoltan")
depends_on("hdf5", when="+hdf5")
depends_on("hdf5 +cxx", when="+hdf5")
depends_on("zlib-api", when="+zlib")
depends_on("gettext")
depends_on("ncurses", when="+curses")
depends_on("ncurses", when="+curses", type=("build", "link"))
for version_name in ("master", "develop"):
depends_on("autoconf@1.68:", type="build", when="@{}".format(version_name))
depends_on("automake@1.11.1:", type="build", when="@{}".format(version_name))
depends_on("libtool@1.2.4:", type="build", when="@{}".format(version_name))
depends_on("m4", type="build", when="@{}".format(version_name))
with when("@develop,master,14.0.0"):
depends_on("autoconf@1.68:", type="build")
depends_on("automake@1.11.1:", type="build")
depends_on("libtool@1.2.4:", type="build")
depends_on("m4", type="build")
# Backport of https://github.com/sstsimulator/sst-core/pull/1110
with when("@14.0.0"):
patch("1110-ncurses_detection.patch", level=0)
# force out-of-source builds
build_directory = "spack-build"
@when("@develop,master")
# 14.0.0 could theoretically be avoided here, but introducing the patch
# (even with autogen changes) causes file created/modified time problems
# that cannot be easily circumvented with `touch`.
@when("@develop,master,14.0.0")
def autoreconf(self, spec, prefix):
bash = which("bash")
bash("autogen.sh")
def configure_args(self):
args = []
if "+zoltan" in self.spec:
args.append("--with-zoltan=%s" % self.spec["zoltan"].prefix)
if "+hdf5" in self.spec:
args.append("--with-hdf5=%s" % self.spec["hdf5"].prefix)
if "+zlib" in self.spec:
args.append("--with-zlib=%s" % self.spec["zlib-api"].prefix)
if "+curses" in self.spec:
args.append("--with-curses={}".format(self.spec["ncurses"].prefix))
args.extend(self.with_or_without("zoltan", activation_value="prefix"))
args.extend(self.with_or_without("hdf5", activation_value="prefix"))
args.extend(
self.with_or_without(
"libz", activation_value=lambda _: self.spec["zlib-api"].prefix, variant="zlib"
)
)
args.extend(self.with_or_without("ncurses", activation_value="prefix", variant="curses"))
if "+pdes_mpi" in self.spec:
if self.spec.satisfies("+pdes_mpi"):
args.append("--enable-mpi")
env["CC"] = self.spec["mpi"].mpicc
env["CXX"] = self.spec["mpi"].mpicxx
@ -116,16 +129,15 @@ def configure_args(self):
else:
args.append("--disable-mpi")
if "+trackevents" in self.spec:
args.append("--enable-event-tracking")
if "+trackperf" in self.spec:
args.append("--enable-perf-tracking")
if "+preview" in self.spec:
args.append("--enable-preview-build")
if "+profile" in self.spec:
args.append("--enable-profile")
args.extend(self.enable_or_disable("mem-pools", variant="mempools"))
args.extend(self.enable_or_disable("debug"))
args.extend(self.enable_or_disable("event-tracking", variant="trackevents"))
args.extend(self.enable_or_disable("perf-tracking", variant="trackperf"))
args.extend(self.enable_or_disable("preview-build", variant="preview"))
args.extend(self.enable_or_disable("profile"))
args.append("--with-python=%s" % self.spec["python"].prefix)
# Required, so no need for with_or_without
args.append(f"--with-python={self.spec['python'].prefix}")
return args
def patch(self):

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="+rocm_rdc")
depends_on("kokkos~complex_align")
depends_on("kokkos@4.5.01", when="@master:")
depends_on("kokkos@4.5.01", when="@16.1")
depends_on("kokkos@4.3.01", when="@16")
depends_on("kokkos@4.2.01", when="@15.1:15")
depends_on("kokkos@4.1.00", when="@14.4:15.0")
depends_on("kokkos-kernels@4.5.01", when="@master:")
depends_on("kokkos-kernels@4.5.01", when="@16.1")
depends_on("kokkos-kernels@4.3.01", when="@16")
depends_on("kokkos-kernels@4.2.01", when="@15.1:15")
depends_on("kokkos@=4.5.01", when="@master:")
depends_on("kokkos@=4.5.01", when="@16.1")
depends_on("kokkos@=4.3.01", when="@16.0")
depends_on("kokkos@=4.2.01", when="@15.1:15")
depends_on("kokkos@=4.1.00", when="@14.4:15.0")
depends_on("kokkos-kernels@=4.5.01", when="@master:")
depends_on("kokkos-kernels@=4.5.01", when="@16.1")
depends_on("kokkos-kernels@=4.3.01", when="@16.0")
depends_on("kokkos-kernels@=4.2.01", when="@15.1:15")
depends_on("kokkos+openmp", when="+openmp")
for a in CudaPackage.cuda_arch_values:
@ -542,6 +542,18 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
when="@13.0.0:13.0.1 +teko gotype=long",
)
# https://github.com/kokkos/kokkos-kernels/pull/2296
patch("13.4.1-kokkoskernel-patch2296.patch", when="@13.4.1 %oneapi@2025:")
# https://github.com/kokkos/kokkos-kernels/pull/2296
patch("14-14.2-kokkoskernel-patch2296.patch", when="@14 %oneapi@2025:")
# https://github.com/trilinos/Trilinos/pull/11676
patch("13.4.1-14-patch11676.patch", when="@13.4.1:14.0 %oneapi@2025:")
# https://github.com/trilinos/Trilinos/pull/11600
patch("13.4.1-patch11600.patch", when="@13.4.1 %oneapi@2025:")
def flag_handler(self, name, flags):
spec = self.spec
is_cce = spec.satisfies("%cce")
@ -557,6 +569,11 @@ def flag_handler(self, name, flags):
flags.append("-no-ipo")
if "+wrapper" in spec:
flags.append("--expt-extended-lambda")
if spec.satisfies("%oneapi@2025:"):
flags.append(
"-Wno-error=missing-template-arg-list-after-template-kw "
"-Wno-missing-template-arg-list-after-template-kw"
)
elif name == "ldflags":
if spec.satisfies("%cce@:14"):
flags.append("-fuse-ld=gold")

View File

@ -9,15 +9,18 @@ class Yarn(Package):
"""Fast, reliable, and secure dependency management."""
homepage = "https://yarnpkg.com"
url = "https://github.com/yarnpkg/yarn/releases/download/v1.22.22/yarn-v1.22.22.tar.gz"
url = "https://github.com/yarnpkg/berry/archive/refs/tags/@yarnpkg/cli/4.6.0.tar.gz"
maintainers("cosmicexplorer")
depends_on("node-js@18.12.0:", type="run", when="@4:")
depends_on("node-js@4.8.0:4.9.1,6.2.2:6.17.1,8:", type="run", when="@1.22.22")
depends_on("node-js@4.0:", type="run")
license("BSD-2-Clause")
version("4.7.0", sha256="3e840034175d50254578c692f795cd79512869ad257f5b2269117b82c14fa0b1")
version("4.6.0", sha256="c3a318af0deb9d284d7c46bf97a28f9d70b156142dcab8ec985481d5818dc651")
version("1.22.22", sha256="88268464199d1611fcf73ce9c0a6c4d44c7d5363682720d8506f6508addf36a0")
version("1.22.4", sha256="bc5316aa110b2f564a71a3d6e235be55b98714660870c5b6b2d2d3f12587fb58")
version("1.22.2", sha256="de4cff575ae7151f8189bf1d747f026695d768d0563e2860df407ab79c70693d")
@ -25,5 +28,17 @@ class Yarn(Package):
version("1.22.0", sha256="de8871c4e2822cba80d58c2e72366fb78567ec56e873493c9ca0cca76c60f9a5")
version("1.21.1", sha256="d1d9f4a0f16f5ed484e814afeb98f39b82d4728c6c8beaafb5abc99c02db6674")
def url_for_version(self, version):
if version < Version("2.0.0"):
return f"https://github.com/yarnpkg/yarn/releases/download/v{version}/yarn-v{version}.tar.gz"
else:
return (
f"https://github.com/yarnpkg/berry/archive/refs/tags/@yarnpkg/cli/{version}.tar.gz"
)
def install(self, spec, prefix):
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")
version("0.14.0", tag="0.14.0", commit="5ad91a646a753cc3eecd8751e61cf458dadd9ac4")
version("0.13.0", tag="0.13.0", commit="cf90dfd3098bef5b3c22d5ab026173b3c357f2dd")
version("0.12.0", tag="0.12.0", commit="a685ab1499d6560c523f0dbce2890dc140671e43")
version("0.11.0", tag="0.11.0", commit="67709b638224ac03820226c6744d8b6ead59184c")