Compare commits

..

2 Commits

Author SHA1 Message Date
Tom Scogland
d4a607d316 Merge branch 'develop' into load-run-deps 2023-09-29 19:02:09 +01:00
Tom Scogland
da4e825754 cmd/load: only process run deps for load
original patch thanks to @tgamblin
fixes #37704
2023-09-29 19:58:52 +02:00
296 changed files with 2686 additions and 11581 deletions

View File

@@ -23,7 +23,7 @@ jobs:
operating_system: ["ubuntu-latest", "macos-latest"]
steps:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # @v2
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # @v2
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # @v2
with:
python-version: ${{inputs.python_version}}
- name: Install Python packages

View File

@@ -17,7 +17,7 @@ jobs:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
with:
fetch-depth: 0
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1
with:
python-version: 3.9
- name: Install Python packages

View File

@@ -50,7 +50,7 @@ jobs:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # @v2
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # @v2
with:
python-version: ${{ matrix.python-version }}
- name: Install System packages
@@ -97,7 +97,7 @@ jobs:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # @v2
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # @v2
with:
python-version: '3.11'
- name: Install System packages
@@ -155,7 +155,7 @@ jobs:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # @v2
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # @v2
with:
python-version: '3.11'
- name: Install System packages
@@ -190,7 +190,7 @@ jobs:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # @v2
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # @v2
with:
python-version: ${{ matrix.python-version }}
- name: Install Python packages

View File

@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1
with:
python-version: '3.11'
cache: 'pip'
@@ -38,7 +38,7 @@ jobs:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
with:
fetch-depth: 0
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1
with:
python-version: '3.11'
cache: 'pip'

View File

@@ -18,7 +18,7 @@ jobs:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
with:
fetch-depth: 0
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1
with:
python-version: 3.9
- name: Install Python packages
@@ -42,7 +42,7 @@ jobs:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
with:
fetch-depth: 0
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1
with:
python-version: 3.9
- name: Install Python packages
@@ -66,7 +66,7 @@ jobs:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
with:
fetch-depth: 0
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236
- uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1
with:
python-version: 3.9
- name: Install Python packages

View File

@@ -27,53 +27,12 @@
# And here's the CITATION.cff format:
#
cff-version: 1.2.0
type: software
message: "If you are referencing Spack in a publication, please cite the paper below."
title: "The Spack Package Manager: Bringing Order to HPC Software Chaos"
abstract: >-
Large HPC centers spend considerable time supporting software for thousands of users, but the complexity of HPC software is quickly outpacing the capabilities of existing software management tools.
Scientific applications require specific versions of compilers, MPI, and other dependency libraries, so using a single, standard software stack is infeasible.
However, managing many configurations is difficult because the configuration space is combinatorial in size.
We introduce Spack, a tool used at Lawrence Livermore National Laboratory to manage this complexity.
Spack provides a novel, re- cursive specification syntax to invoke parametric builds of packages and dependencies.
It allows any number of builds to coexist on the same system, and it ensures that installed packages can find their dependencies, regardless of the environment.
We show through real-world use cases that Spack supports diverse and demanding applications, bringing order to HPC software chaos.
preferred-citation:
title: "The Spack Package Manager: Bringing Order to HPC Software Chaos"
type: conference-paper
url: "https://tgamblin.github.io/pubs/spack-sc15.pdf"
doi: "10.1145/2807591.2807623"
url: "https://github.com/spack/spack"
authors:
- family-names: "Gamblin"
given-names: "Todd"
- family-names: "LeGendre"
given-names: "Matthew"
- family-names: "Collette"
given-names: "Michael R."
- family-names: "Lee"
given-names: "Gregory L."
- family-names: "Moody"
given-names: "Adam"
- family-names: "de Supinski"
given-names: "Bronis R."
- family-names: "Futral"
given-names: "Scott"
conference:
name: "Supercomputing 2015 (SC15)"
city: "Austin"
region: "Texas"
country: "US"
date-start: 2015-11-15
date-end: 2015-11-20
month: 11
year: 2015
identifiers:
- description: "The concept DOI of the work."
type: doi
value: 10.1145/2807591.2807623
- description: "The DOE Document Release Number of the work"
type: other
value: "LLNL-CONF-669890"
authors:
- family-names: "Gamblin"
given-names: "Todd"
- family-names: "LeGendre"
@@ -88,3 +47,12 @@ authors:
given-names: "Bronis R."
- family-names: "Futral"
given-names: "Scott"
title: "The Spack Package Manager: Bringing Order to HPC Software Chaos"
conference:
name: "Supercomputing 2015 (SC15)"
city: "Austin"
region: "Texas"
country: "USA"
month: November 15-20
year: 2015
notes: LLNL-CONF-669890

View File

@@ -41,4 +41,4 @@ concretizer:
# "none": allows a single node for any package in the DAG.
# "minimal": allows the duplication of 'build-tools' nodes only (e.g. py-setuptools, cmake etc.)
# "full" (experimental): allows separation of the entire build-tool stack (e.g. the entire "cmake" subDAG)
strategy: minimal
strategy: none

View File

@@ -1,3 +1,4 @@
package_list.html
command_index.rst
spack*.rst
llnl*.rst

View File

@@ -45,8 +45,7 @@ Listing available packages
To install software with Spack, you need to know what software is
available. You can see a list of available package names at the
`packages.spack.io <https://packages.spack.io>`_ website, or
using the ``spack list`` command.
:ref:`package-list` webpage, or using the ``spack list`` command.
.. _cmd-spack-list:
@@ -61,7 +60,7 @@ can install:
:ellipsis: 10
There are thousands of them, so we've truncated the output above, but you
can find a `full list here <https://packages.spack.io>`_.
can find a :ref:`full list here <package-list>`.
Packages are listed by name in alphabetical order.
A pattern to match with no wildcards, ``*`` or ``?``,
will be treated as though it started and ended with

View File

@@ -3,103 +3,6 @@
SPDX-License-Identifier: (Apache-2.0 OR MIT)
.. _concretizer-options:
==========================================
Concretization Settings (concretizer.yaml)
==========================================
The ``concretizer.yaml`` configuration file allows to customize aspects of the
algorithm used to select the dependencies you install. The default configuration
is the following:
.. literalinclude:: _spack_root/etc/spack/defaults/concretizer.yaml
:language: yaml
--------------------------------
Reuse already installed packages
--------------------------------
The ``reuse`` attribute controls whether Spack will prefer to use installed packages (``true``), or
whether it will do a "fresh" installation and prefer the latest settings from
``package.py`` files and ``packages.yaml`` (``false``).
You can use:
.. code-block:: console
% spack install --reuse <spec>
to enable reuse for a single installation, and you can use:
.. code-block:: console
spack install --fresh <spec>
to do a fresh install if ``reuse`` is enabled by default.
``reuse: true`` is the default.
------------------------------------------
Selection of the target microarchitectures
------------------------------------------
The options under the ``targets`` attribute control which targets are considered during a solve.
Currently the options in this section are only configurable from the ``concretizer.yaml`` file
and there are no corresponding command line arguments to enable them for a single solve.
The ``granularity`` option can take two possible values: ``microarchitectures`` and ``generic``.
If set to:
.. code-block:: yaml
concretizer:
targets:
granularity: microarchitectures
Spack will consider all the microarchitectures known to ``archspec`` to label nodes for
compatibility. If instead the option is set to:
.. code-block:: yaml
concretizer:
targets:
granularity: generic
Spack will consider only generic microarchitectures. For instance, when running on an
Haswell node, Spack will consider ``haswell`` as the best target in the former case and
``x86_64_v3`` as the best target in the latter case.
The ``host_compatible`` option is a Boolean option that determines whether or not the
microarchitectures considered during the solve are constrained to be compatible with the
host Spack is currently running on. For instance, if this option is set to ``true``, a
user cannot concretize for ``target=icelake`` while running on an Haswell node.
---------------
Duplicate nodes
---------------
The ``duplicates`` attribute controls whether the DAG can contain multiple configurations of
the same package. This is mainly relevant for build dependencies, which may have their version
pinned by some nodes, and thus be required at different versions by different nodes in the same
DAG.
The ``strategy`` option controls how the solver deals with duplicates. If the value is ``none``,
then a single configuration per package is allowed in the DAG. This means, for instance, that only
a single ``cmake`` or a single ``py-setuptools`` version is allowed. The result would be a slightly
faster concretization, at the expense of making a few specs unsolvable.
If the value is ``minimal`` Spack will allow packages tagged as ``build-tools`` to have duplicates.
This allows, for instance, to concretize specs whose nodes require different, and incompatible, ranges
of some build tool. For instance, in the figure below the latest `py-shapely` requires a newer `py-setuptools`,
while `py-numpy` still needs an older version:
.. figure:: images/shapely_duplicates.svg
:scale: 70 %
:align: center
Up to Spack v0.20 ``duplicates:strategy:none`` was the default (and only) behavior. From Spack v0.21 the
default behavior is ``duplicates:strategy:minimal``.
.. _build-settings:
================================
@@ -329,6 +232,76 @@ Specific limitations include:
then Spack will not add a new external entry (``spack config blame packages``
can help locate all external entries).
.. _concretizer-options:
----------------------
Concretizer options
----------------------
``packages.yaml`` gives the concretizer preferences for specific packages,
but you can also use ``concretizer.yaml`` to customize aspects of the
algorithm it uses to select the dependencies you install:
.. literalinclude:: _spack_root/etc/spack/defaults/concretizer.yaml
:language: yaml
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Reuse already installed packages
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The ``reuse`` attribute controls whether Spack will prefer to use installed packages (``true``), or
whether it will do a "fresh" installation and prefer the latest settings from
``package.py`` files and ``packages.yaml`` (``false``).
You can use:
.. code-block:: console
% spack install --reuse <spec>
to enable reuse for a single installation, and you can use:
.. code-block:: console
spack install --fresh <spec>
to do a fresh install if ``reuse`` is enabled by default.
``reuse: true`` is the default.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Selection of the target microarchitectures
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The options under the ``targets`` attribute control which targets are considered during a solve.
Currently the options in this section are only configurable from the ``concretizer.yaml`` file
and there are no corresponding command line arguments to enable them for a single solve.
The ``granularity`` option can take two possible values: ``microarchitectures`` and ``generic``.
If set to:
.. code-block:: yaml
concretizer:
targets:
granularity: microarchitectures
Spack will consider all the microarchitectures known to ``archspec`` to label nodes for
compatibility. If instead the option is set to:
.. code-block:: yaml
concretizer:
targets:
granularity: generic
Spack will consider only generic microarchitectures. For instance, when running on an
Haswell node, Spack will consider ``haswell`` as the best target in the former case and
``x86_64_v3`` as the best target in the latter case.
The ``host_compatible`` option is a Boolean option that determines whether or not the
microarchitectures considered during the solve are constrained to be compatible with the
host Spack is currently running on. For instance, if this option is set to ``true``, a
user cannot concretize for ``target=icelake`` while running on an Haswell node.
.. _package-requirements:
--------------------

View File

@@ -25,8 +25,8 @@ use Spack to build packages with the tools.
The Spack Python class ``IntelOneapiPackage`` is a base class that is
used by ``IntelOneapiCompilers``, ``IntelOneapiMkl``,
``IntelOneapiTbb`` and other classes to implement the oneAPI
packages. Search for ``oneAPI`` at `<packages.spack.io>`_ for the full
list of available oneAPI packages, or use::
packages. See the :ref:`package-list` for the full list of available
oneAPI packages or use::
spack list -d oneAPI

View File

@@ -48,6 +48,9 @@
os.environ["COLIFY_SIZE"] = "25x120"
os.environ["COLUMNS"] = "120"
# Generate full package list if needed
subprocess.call(["spack", "list", "--format=html", "--update=package_list.html"])
# Generate a command index if an update is needed
subprocess.call(
[

View File

@@ -310,11 +310,53 @@ Once all of the dependencies are installed, you can try building the documentati
$ make clean
$ make
If you see any warning or error messages, you will have to correct those before your PR
is accepted. If you are editing the documentation, you should be running the
documentation tests to make sure there are no errors. Documentation changes can result
in some obfuscated warning messages. If you don't understand what they mean, feel free
to ask when you submit your PR.
If you see any warning or error messages, you will have to correct those before
your PR is accepted.
If you are editing the documentation, you should obviously be running the
documentation tests. But even if you are simply adding a new package, your
changes could cause the documentation tests to fail:
.. code-block:: console
package_list.rst:8745: WARNING: Block quote ends without a blank line; unexpected unindent.
At first, this error message will mean nothing to you, since you didn't edit
that file. Until you look at line 8745 of the file in question:
.. code-block:: rst
Description:
NetCDF is a set of software libraries and self-describing, machine-
independent data formats that support the creation, access, and sharing
of array-oriented scientific data.
Our documentation includes :ref:`a list of all Spack packages <package-list>`.
If you add a new package, its docstring is added to this page. The problem in
this case was that the docstring looked like:
.. code-block:: python
class Netcdf(Package):
"""
NetCDF is a set of software libraries and self-describing,
machine-independent data formats that support the creation,
access, and sharing of array-oriented scientific data.
"""
Docstrings cannot start with a newline character, or else Sphinx will complain.
Instead, they should look like:
.. code-block:: python
class Netcdf(Package):
"""NetCDF is a set of software libraries and self-describing,
machine-independent data formats that support the creation,
access, and sharing of array-oriented scientific data."""
Documentation changes can result in much more obfuscated warning messages.
If you don't understand what they mean, feel free to ask when you submit
your PR.
--------
Coverage

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 108 KiB

View File

@@ -54,16 +54,9 @@ or refer to the full manual below.
features
getting_started
basic_usage
Tutorial: Spack 101 <https://spack-tutorial.readthedocs.io>
replace_conda_homebrew
.. toctree::
:maxdepth: 2
:caption: Links
Tutorial (spack-tutorial.rtfd.io) <https://spack-tutorial.readthedocs.io>
Packages (packages.spack.io) <https://packages.spack.io>
Binaries (binaries.spack.io) <https://cache.spack.io>
.. toctree::
:maxdepth: 2
:caption: Reference
@@ -79,6 +72,7 @@ or refer to the full manual below.
repositories
binary_caches
command_index
package_list
chain
extensions
pipelines

View File

@@ -0,0 +1,17 @@
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
Spack Project Developers. See the top-level COPYRIGHT file for details.
SPDX-License-Identifier: (Apache-2.0 OR MIT)
.. _package-list:
============
Package List
============
This is a list of things you can install using Spack. It is
automatically generated based on the packages in this Spack
version.
.. raw:: html
:file: package_list.html

View File

@@ -4,7 +4,7 @@
SPDX-License-Identifier: (Apache-2.0 OR MIT)
=====================================
Spack for Homebrew/Conda Users
Using Spack to Replace Homebrew/Conda
=====================================
Spack is an incredibly powerful package manager, designed for supercomputers
@@ -191,18 +191,18 @@ The ``--fresh`` flag tells Spack to use the latest version of every package
where possible instead of trying to optimize for reuse of existing installed
packages.
The ``--force`` flag in addition tells Spack to overwrite its previous
concretization decisions, allowing you to choose a new version of Python.
If any of the new packages like Bash are already installed, ``spack install``
The ``--force`` flag in addition tells Spack to overwrite its previous
concretization decisions, allowing you to choose a new version of Python.
If any of the new packages like Bash are already installed, ``spack install``
won't re-install them, it will keep the symlinks in place.
-----------------------------------
Updating & Cleaning Up Old Packages
-----------------------------------
If you're looking to mimic the behavior of Homebrew, you may also want to
clean up out-of-date packages from your environment after an upgrade. To
upgrade your entire software stack within an environment and clean up old
If you're looking to mimic the behavior of Homebrew, you may also want to
clean up out-of-date packages from your environment after an upgrade. To
upgrade your entire software stack within an environment and clean up old
package versions, simply run the following commands:
.. code-block:: console
@@ -212,9 +212,9 @@ package versions, simply run the following commands:
$ spack concretize --fresh --force
$ spack install
$ spack gc
Running ``spack mark -i --all`` tells Spack to mark all of the existing
packages within an environment as "implicitly" installed. This tells
Running ``spack mark -i --all`` tells Spack to mark all of the existing
packages within an environment as "implicitly" installed. This tells
spack's garbage collection system that these packages should be cleaned up.
Don't worry however, this will not remove your entire environment.
@@ -223,8 +223,8 @@ a fresh concretization and will re-mark any packages that should remain
installed as "explicitly" installed.
**Note:** if you use multiple spack environments you should re-run ``spack install``
in each of your environments prior to running ``spack gc`` to prevent spack
from uninstalling any shared packages that are no longer required by the
in each of your environments prior to running ``spack gc`` to prevent spack
from uninstalling any shared packages that are no longer required by the
environment you just upgraded.
--------------

View File

@@ -2,10 +2,10 @@ sphinx==7.2.6
sphinxcontrib-programoutput==0.17
sphinx_design==0.5.0
sphinx-rtd-theme==1.3.0
python-levenshtein==0.22.0
python-levenshtein==0.21.1
docutils==0.18.1
pygments==2.16.1
urllib3==2.0.6
urllib3==2.0.5
pytest==7.4.2
isort==5.12.0
black==23.9.1

View File

@@ -1,8 +1,9 @@
Name, Supported Versions, Notes, Requirement Reason
Python, 3.6--3.12, , Interpreter for Spack
Python, 3.6--3.11, , Interpreter for Spack
C/C++ Compilers, , , Building software
make, , , Build software
patch, , , Build software
bash, , , Compiler wrappers
tar, , , Extract/create archives
gzip, , , Compress/Decompress archives
unzip, , , Compress/Decompress archives
1 Name Supported Versions Notes Requirement Reason
2 Python 3.6--3.12 3.6--3.11 Interpreter for Spack
3 C/C++ Compilers Building software
4 make Build software
5 patch Build software
6 bash Compiler wrappers
7 tar Extract/create archives
8 gzip Compress/Decompress archives
9 unzip Compress/Decompress archives

View File

@@ -23,7 +23,7 @@
import warnings
from contextlib import closing, contextmanager
from gzip import GzipFile
from typing import Dict, List, NamedTuple, Optional, Tuple, Union
from typing import List, NamedTuple, Optional, Union
from urllib.error import HTTPError, URLError
import llnl.util.filesystem as fsys
@@ -216,11 +216,11 @@ def _associate_built_specs_with_mirror(self, cache_key, mirror_url):
with self._index_file_cache.read_transaction(cache_key):
db._read_from_file(cache_path)
except spack_db.InvalidDatabaseVersionError as e:
tty.warn(
msg = (
f"you need a newer Spack version to read the buildcache index for the "
f"following mirror: '{mirror_url}'. {e.database_version_message}"
)
return
raise BuildcacheIndexError(msg) from e
spec_list = db.query_local(installed=False, in_buildcache=True)
@@ -625,7 +625,8 @@ def buildinfo_file_name(prefix):
"""
Filename of the binary package meta-data file
"""
return os.path.join(prefix, ".spack/binary_distribution")
name = os.path.join(prefix, ".spack/binary_distribution")
return name
def read_buildinfo_file(prefix):
@@ -1157,99 +1158,57 @@ def gzip_compressed_tarfile(path):
yield tar
def _tarinfo_name(p: str):
return p.lstrip("/")
def deterministic_tarinfo(tarinfo: tarfile.TarInfo):
# We only add files, symlinks, hardlinks, and directories
# No character devices, block devices and FIFOs should ever enter a tarball.
if tarinfo.isdev():
return None
# For distribution, it makes no sense to user/group data; since (a) they don't exist
# on other machines, and (b) they lead to surprises as `tar x` run as root will change
# ownership if it can. We want to extract as the current user. By setting owner to root,
# root will extract as root, and non-privileged user will extract as themselves.
tarinfo.uid = 0
tarinfo.gid = 0
tarinfo.uname = ""
tarinfo.gname = ""
# Reset mtime to epoch time, our prefixes are not truly immutable, so files may get
# touched; as long as the content does not change, this ensures we get stable tarballs.
tarinfo.mtime = 0
# Normalize mode
if tarinfo.isfile() or tarinfo.islnk():
# If user can execute, use 0o755; else 0o644
# This is to avoid potentially unsafe world writable & exeutable files that may get
# extracted when Python or tar is run with privileges
tarinfo.mode = 0o644 if tarinfo.mode & 0o100 == 0 else 0o755
else: # symbolic link and directories
tarinfo.mode = 0o755
return tarinfo
def tarfile_of_spec_prefix(tar: tarfile.TarFile, prefix: str) -> None:
"""Create a tarfile of an install prefix of a spec. Skips existing buildinfo file.
Only adds regular files, symlinks and dirs. Skips devices, fifos. Preserves hardlinks.
Normalizes permissions like git. Tar entries are added in depth-first pre-order, with
dir entries partitioned by file | dir, and sorted alphabetically, for reproducibility.
Partitioning ensures only one dir is in memory at a time, and sorting improves compression.
Args:
tar: tarfile object to add files to
prefix: absolute install prefix of spec"""
if not os.path.isabs(prefix) or not os.path.isdir(prefix):
raise ValueError(f"prefix '{prefix}' must be an absolute path to a directory")
hardlink_to_tarinfo_name: Dict[Tuple[int, int], str] = dict()
stat_key = lambda stat: (stat.st_dev, stat.st_ino)
try: # skip buildinfo file if it exists
files_to_skip = [stat_key(os.lstat(buildinfo_file_name(prefix)))]
except OSError:
files_to_skip = []
dir_stack = [prefix]
while dir_stack:
dir = dir_stack.pop()
# Add the dir before its contents
dir_info = tarfile.TarInfo(_tarinfo_name(dir))
dir_info.type = tarfile.DIRTYPE
dir_info.mode = 0o755
tar.addfile(dir_info)
# Sort by name: reproducible & improves compression
with os.scandir(dir) as it:
entries = sorted(it, key=lambda entry: entry.name)
new_dirs = []
for entry in entries:
if entry.is_dir(follow_symlinks=False):
new_dirs.append(entry.path)
continue
file_info = tarfile.TarInfo(_tarinfo_name(entry.path))
s = entry.stat(follow_symlinks=False)
# Skip existing binary distribution files.
id = stat_key(s)
if id in files_to_skip:
continue
# Normalize the mode
file_info.mode = 0o644 if s.st_mode & 0o100 == 0 else 0o755
if entry.is_symlink():
file_info.type = tarfile.SYMTYPE
file_info.linkname = os.readlink(entry.path)
tar.addfile(file_info)
elif entry.is_file(follow_symlinks=False):
# Deduplicate hardlinks
if s.st_nlink > 1:
if id in hardlink_to_tarinfo_name:
file_info.type = tarfile.LNKTYPE
file_info.linkname = hardlink_to_tarinfo_name[id]
tar.addfile(file_info)
continue
hardlink_to_tarinfo_name[id] = file_info.name
# If file not yet seen, copy it.
file_info.type = tarfile.REGTYPE
file_info.size = s.st_size
with open(entry.path, "rb") as f:
tar.addfile(file_info, f)
dir_stack.extend(reversed(new_dirs)) # we pop, so reverse to stay alphabetical
def tar_add_metadata(tar: tarfile.TarFile, path: str, data: dict):
# Serialize buildinfo for the tarball
bstring = syaml.dump(data, default_flow_style=True).encode("utf-8")
tarinfo = tarfile.TarInfo(name=path)
tarinfo.size = len(bstring)
tar.addfile(deterministic_tarinfo(tarinfo), io.BytesIO(bstring))
def _do_create_tarball(tarfile_path: str, binaries_dir: str, buildinfo: dict):
def deterministic_tarinfo_without_buildinfo(tarinfo: tarfile.TarInfo):
"""Skip buildinfo file when creating a tarball, and normalize other tarinfo fields."""
if tarinfo.name.endswith("/.spack/binary_distribution"):
return None
return deterministic_tarinfo(tarinfo)
def _do_create_tarball(tarfile_path: str, binaries_dir: str, pkg_dir: str, buildinfo: dict):
with gzip_compressed_tarfile(tarfile_path) as tar:
# Tarball the install prefix
tarfile_of_spec_prefix(tar, binaries_dir)
# Serialize buildinfo for the tarball
bstring = syaml.dump(buildinfo, default_flow_style=True).encode("utf-8")
tarinfo = tarfile.TarInfo(name=_tarinfo_name(buildinfo_file_name(binaries_dir)))
tarinfo.type = tarfile.REGTYPE
tarinfo.size = len(bstring)
tarinfo.mode = 0o644
tar.addfile(tarinfo, io.BytesIO(bstring))
tar.add(name=binaries_dir, arcname=pkg_dir, filter=deterministic_tarinfo_without_buildinfo)
tar_add_metadata(tar, buildinfo_file_name(pkg_dir), buildinfo)
class PushOptions(NamedTuple):
@@ -1321,12 +1280,14 @@ def _build_tarball_in_stage_dir(spec: Spec, out_url: str, stage_dir: str, option
):
raise NoOverwriteException(url_util.format(remote_specfile_path))
pkg_dir = os.path.basename(spec.prefix.rstrip(os.path.sep))
binaries_dir = spec.prefix
# create info for later relocation and create tar
buildinfo = get_buildinfo_dict(spec)
_do_create_tarball(tarfile_path, binaries_dir, buildinfo)
_do_create_tarball(tarfile_path, binaries_dir, pkg_dir, buildinfo)
# get the sha256 checksum of the tarball
checksum = checksum_tarball(tarfile_path)

View File

@@ -10,7 +10,7 @@
import spack.builder
import spack.package_base
from spack.directives import build_system, conflicts, depends_on, variant
from spack.directives import build_system, depends_on, variant
from spack.multimethod import when
from ._checks import BaseBuilder, execute_build_time_tests
@@ -47,13 +47,6 @@ class MesonPackage(spack.package_base.PackageBase):
variant("strip", default=False, description="Strip targets on install")
depends_on("meson", type="build")
depends_on("ninja", type="build")
# Python detection in meson requires distutils to be importable, but distutils no longer
# exists in Python 3.12. In Spack, we can't use setuptools as distutils replacement,
# because the distutils-precedence.pth startup file that setuptools ships with is not run
# when setuptools is in PYTHONPATH; it has to be in system site-packages. In a future meson
# release, the distutils requirement will be dropped, so this conflict can be relaxed.
# We have patches to make it work with meson 1.1 and above.
conflicts("^python@3.12:", when="^meson@:1.0")
def flags_to_build_system_args(self, flags):
"""Produces a list of all command line arguments to pass the specified

View File

@@ -6,7 +6,6 @@
import os
import re
import shutil
import stat
from typing import Optional
import archspec
@@ -26,7 +25,6 @@
from spack.directives import build_system, depends_on, extends, maintainers
from spack.error import NoHeadersError, NoLibrariesError, SpecError
from spack.install_test import test_part
from spack.util.executable import Executable
from spack.version import Version
from ._checks import BaseBuilder, execute_install_time_tests
@@ -353,51 +351,6 @@ def libs(self):
raise NoLibrariesError(msg.format(self.spec.name, root))
def fixup_shebangs(path: str, old_interpreter: bytes, new_interpreter: bytes):
# Recurse into the install prefix and fixup shebangs
exe = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
dirs = [path]
hardlinks = set()
while dirs:
with os.scandir(dirs.pop()) as entries:
for entry in entries:
if entry.is_dir(follow_symlinks=False):
dirs.append(entry.path)
continue
# Only consider files, not symlinks
if not entry.is_file(follow_symlinks=False):
continue
lstat = entry.stat(follow_symlinks=False)
# Skip over files that are not executable
if not (lstat.st_mode & exe):
continue
# Don't modify hardlinks more than once
if lstat.st_nlink > 1:
key = (lstat.st_ino, lstat.st_dev)
if key in hardlinks:
continue
hardlinks.add(key)
# Finally replace shebangs if any.
with open(entry.path, "rb+") as f:
contents = f.read(2)
if contents != b"#!":
continue
contents += f.read()
if old_interpreter not in contents:
continue
f.seek(0)
f.write(contents.replace(old_interpreter, new_interpreter))
f.truncate()
@spack.builder.builder("python_pip")
class PythonPipBuilder(BaseBuilder):
phases = ("install",)
@@ -494,36 +447,8 @@ def global_options(self, spec, prefix):
"""
return []
@property
def _build_venv_path(self):
"""Return the path to the virtual environment used for building when
python is external."""
return os.path.join(self.spec.package.stage.path, "build_env")
@property
def _build_venv_python(self) -> Executable:
"""Return the Python executable in the build virtual environment when
python is external."""
return Executable(os.path.join(self._build_venv_path, "bin", "python"))
def install(self, pkg, spec, prefix):
"""Install everything from build directory."""
python: Executable = spec["python"].command
# Since we invoke pip with --no-build-isolation, we have to make sure that pip cannot
# execute hooks from user and system site-packages.
if spec["python"].external:
# There are no environment variables to disable the system site-packages, so we use a
# virtual environment instead. The downside of this approach is that pip produces
# incorrect shebangs that refer to the virtual environment, which we have to fix up.
python("-m", "venv", "--without-pip", self._build_venv_path)
pip = self._build_venv_python
else:
# For a Spack managed Python, system site-packages is empty/unused by design, so it
# suffices to disable user site-packages, for which there is an environment variable.
pip = python
pip.add_default_env("PYTHONNOUSERSITE", "1")
pip.add_default_arg("-m")
pip.add_default_arg("pip")
args = PythonPipBuilder.std_args(pkg) + ["--prefix=" + prefix]
@@ -547,31 +472,8 @@ def install(self, pkg, spec, prefix):
else:
args.append(".")
pip = inspect.getmodule(pkg).pip
with fs.working_dir(self.build_directory):
pip(*args)
@spack.builder.run_after("install")
def fixup_shebangs_pointing_to_build(self):
"""When installing a package using an external python, we use a temporary virtual
environment which improves build isolation. The downside is that pip produces shebangs
that point to the temporary virtual environment. This method fixes them up to point to the
underlying Python."""
# No need to fixup shebangs if no build venv was used. (this post install function also
# runs when install was overridden in another package, so check existence of the venv path)
if not os.path.exists(self._build_venv_path):
return
# Use sys.executable, since that's what pip uses.
interpreter = (
lambda python: python("-c", "import sys; print(sys.executable)", output=str)
.strip()
.encode("utf-8")
)
fixup_shebangs(
path=self.spec.prefix,
old_interpreter=interpreter(self._build_venv_python),
new_interpreter=interpreter(self.spec["python"].command),
)
spack.builder.run_after("install")(execute_install_time_tests)

View File

@@ -64,7 +64,7 @@ class RacketBuilder(spack.builder.Builder):
@property
def subdirectory(self):
if self.pkg.racket_name:
if self.racket_name:
return "pkgs/{0}".format(self.pkg.racket_name)
return None

View File

@@ -50,9 +50,6 @@
TEMP_STORAGE_MIRROR_NAME = "ci_temporary_mirror"
SPACK_RESERVED_TAGS = ["public", "protected", "notary"]
SHARED_PR_MIRROR_URL = "s3://spack-binaries-prs/shared_pr_mirror"
JOB_NAME_FORMAT = (
"{name}{@version} {/hash:7} {%compiler.name}{@compiler.version}{arch=architecture}"
)
spack_gpg = spack.main.SpackCommand("gpg")
spack_compiler = spack.main.SpackCommand("compiler")
@@ -72,23 +69,48 @@ def __exit__(self, exc_type, exc_value, exc_traceback):
return False
def get_job_name(spec: spack.spec.Spec, build_group: str = ""):
"""Given a spec and possibly a build group, return the job name. If the
resulting name is longer than 255 characters, it will be truncated.
def get_job_name(spec, osarch, build_group):
"""Given the necessary parts, format the gitlab job name
Arguments:
spec (spack.spec.Spec): Spec job will build
osarch: Architecture TODO: (this is a spack.spec.ArchSpec,
but sphinx doesn't recognize the type and fails).
build_group (str): Name of build group this job belongs to (a CDash
notion)
Returns: The job name
"""
job_name = spec.format(JOB_NAME_FORMAT)
item_idx = 0
format_str = ""
format_args = []
format_str += "{{{0}}}".format(item_idx)
format_args.append(spec.name)
item_idx += 1
format_str += "/{{{0}}}".format(item_idx)
format_args.append(spec.dag_hash(7))
item_idx += 1
format_str += " {{{0}}}".format(item_idx)
format_args.append(spec.version)
item_idx += 1
format_str += " {{{0}}}".format(item_idx)
format_args.append(spec.compiler)
item_idx += 1
format_str += " {{{0}}}".format(item_idx)
format_args.append(osarch)
item_idx += 1
if build_group:
job_name = "{0} {1}".format(job_name, build_group)
format_str += " {{{0}}}".format(item_idx)
format_args.append(build_group)
item_idx += 1
return job_name[:255]
return format_str.format(*format_args)
def _remove_reserved_tags(tags):
@@ -315,7 +337,7 @@ def _spec_matches(spec, match_string):
def _format_job_needs(
dep_jobs, build_group, prune_dag, rebuild_decisions, enable_artifacts_buildcache
dep_jobs, osname, build_group, prune_dag, rebuild_decisions, enable_artifacts_buildcache
):
needs_list = []
for dep_job in dep_jobs:
@@ -325,7 +347,7 @@ def _format_job_needs(
if not prune_dag or rebuild:
needs_list.append(
{
"job": get_job_name(dep_job, build_group),
"job": get_job_name(dep_job, dep_job.architecture, build_group),
"artifacts": enable_artifacts_buildcache,
}
)
@@ -1001,7 +1023,8 @@ def main_script_replacements(cmd):
if "after_script" in job_object:
job_object["after_script"] = _unpack_script(job_object["after_script"])
job_name = get_job_name(release_spec, build_group)
osname = str(release_spec.architecture)
job_name = get_job_name(release_spec, osname, build_group)
job_vars = job_object.setdefault("variables", {})
job_vars["SPACK_JOB_SPEC_DAG_HASH"] = release_spec_dag_hash
@@ -1028,6 +1051,7 @@ def main_script_replacements(cmd):
job_object["needs"].extend(
_format_job_needs(
dep_jobs,
osname,
build_group,
prune_dag,
rebuild_decisions,

View File

@@ -268,7 +268,7 @@ def _matching_specs(specs: List[Spec]) -> List[Spec]:
return [spack.cmd.disambiguate_spec(s, ev.active_environment(), installed=any) for s in specs]
def push_fn(args: argparse.Namespace):
def push_fn(args):
"""create a binary package and push it to a mirror"""
if args.spec_file:
tty.warn(
@@ -414,7 +414,7 @@ def preview_fn(args):
)
def check_fn(args: argparse.Namespace):
def check_fn(args):
"""check specs against remote binary mirror(s) to see if any need to be rebuilt
this command uses the process exit code to indicate its result, specifically, if the
@@ -429,7 +429,7 @@ def check_fn(args: argparse.Namespace):
specs = spack.cmd.parse_specs(args.spec or args.spec_file)
if specs:
specs = _matching_specs(specs)
specs = _matching_specs(specs, specs)
else:
specs = spack.cmd.require_active_env("buildcache check").all_specs()

View File

@@ -112,7 +112,9 @@ def load(parser, args):
if "dependencies" in args.things_to_load:
include_roots = "package" in args.things_to_load
specs = [
dep for spec in specs for dep in spec.traverse(root=include_roots, order="post")
dep
for spec in specs
for dep in spec.traverse(root=include_roots, order="post", deptype=("run"))
]
env_mod = spack.util.environment.EnvironmentModifications()

View File

@@ -299,36 +299,36 @@ def find_windows_compiler_bundled_packages() -> List[str]:
class WindowsKitExternalPaths:
plat_major_ver = None
if sys.platform == "win32":
plat_major_ver = str(winOs.windows_version()[0])
@staticmethod
def find_windows_kit_roots() -> List[str]:
def find_windows_kit_roots() -> Optional[str]:
"""Return Windows kit root, typically %programfiles%\\Windows Kits\\10|11\\"""
if sys.platform != "win32":
return []
return None
program_files = os.environ["PROGRAMFILES(x86)"]
kit_base = os.path.join(program_files, "Windows Kits", "**")
return glob.glob(kit_base)
kit_base = os.path.join(
program_files, "Windows Kits", WindowsKitExternalPaths.plat_major_ver
)
return kit_base
@staticmethod
def find_windows_kit_bin_paths(kit_base: Optional[str] = None) -> List[str]:
"""Returns Windows kit bin directory per version"""
kit_base = WindowsKitExternalPaths.find_windows_kit_roots() if not kit_base else kit_base
assert kit_base, "Unexpectedly empty value for Windows kit base path"
kit_paths = []
for kit in kit_base:
kit_bin = os.path.join(kit, "bin")
kit_paths.extend(glob.glob(os.path.join(kit_bin, "[0-9]*", "*\\")))
return kit_paths
assert kit_base is not None, "unexpected value for kit_base"
kit_bin = os.path.join(kit_base, "bin")
return glob.glob(os.path.join(kit_bin, "[0-9]*", "*\\"))
@staticmethod
def find_windows_kit_lib_paths(kit_base: Optional[str] = None) -> List[str]:
"""Returns Windows kit lib directory per version"""
kit_base = WindowsKitExternalPaths.find_windows_kit_roots() if not kit_base else kit_base
assert kit_base, "Unexpectedly empty value for Windows kit base path"
kit_paths = []
for kit in kit_base:
kit_lib = os.path.join(kit, "Lib")
kit_paths.extend(glob.glob(os.path.join(kit_lib, "[0-9]*", "*", "*\\")))
return kit_paths
assert kit_base is not None, "unexpected value for kit_base"
kit_lib = os.path.join(kit_base, "Lib")
return glob.glob(os.path.join(kit_lib, "[0-9]*", "*", "*\\"))
@staticmethod
def find_windows_driver_development_kit_paths() -> List[str]:
@@ -347,30 +347,23 @@ def find_windows_kit_reg_installed_roots_paths() -> List[str]:
if not reg:
# couldn't find key, return empty list
return []
kit_root_reg = re.compile(r"KitsRoot[0-9]+")
root_paths = []
for kit_root in filter(kit_root_reg.match, reg.get_values().keys()):
root_paths.extend(
WindowsKitExternalPaths.find_windows_kit_lib_paths(reg.get_value(kit_root).value)
)
return root_paths
return WindowsKitExternalPaths.find_windows_kit_lib_paths(
reg.get_value("KitsRoot%s" % WindowsKitExternalPaths.plat_major_ver).value
)
@staticmethod
def find_windows_kit_reg_sdk_paths() -> List[str]:
sdk_paths = []
sdk_regex = re.compile(r"v[0-9]+.[0-9]+")
windows_reg = spack.util.windows_registry.WindowsRegistryView(
"SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft SDKs\\Windows",
reg = spack.util.windows_registry.WindowsRegistryView(
"SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v%s.0"
% WindowsKitExternalPaths.plat_major_ver,
root_key=spack.util.windows_registry.HKEY.HKEY_LOCAL_MACHINE,
)
for key in filter(sdk_regex.match, [x.name for x in windows_reg.get_subkeys()]):
reg = windows_reg.get_subkey(key)
sdk_paths.extend(
WindowsKitExternalPaths.find_windows_kit_lib_paths(
reg.get_value("InstallationFolder").value
)
)
return sdk_paths
if not reg:
# couldn't find key, return empty list
return []
return WindowsKitExternalPaths.find_windows_kit_lib_paths(
reg.get_value("InstallationFolder").value
)
def find_win32_additional_install_paths() -> List[str]:

View File

@@ -11,6 +11,7 @@
def _for_each_enabled(spec, method_name, explicit=None):
"""Calls a method for each enabled module"""
spack.modules.ensure_modules_are_enabled_or_warn()
set_names = set(spack.config.get("modules", {}).keys())
for name in set_names:
enabled = spack.config.get("modules:%s:enable" % name)

View File

@@ -7,10 +7,15 @@
include Tcl non-hierarchical modules, Lua hierarchical modules, and others.
"""
from .common import disable_modules
from .common import disable_modules, ensure_modules_are_enabled_or_warn
from .lmod import LmodModulefileWriter
from .tcl import TclModulefileWriter
__all__ = ["TclModulefileWriter", "LmodModulefileWriter", "disable_modules"]
__all__ = [
"TclModulefileWriter",
"LmodModulefileWriter",
"disable_modules",
"ensure_modules_are_enabled_or_warn",
]
module_types = {"tcl": TclModulefileWriter, "lmod": LmodModulefileWriter}

View File

@@ -33,8 +33,10 @@
import datetime
import inspect
import os.path
import pathlib
import re
import string
import warnings
from typing import Optional
import llnl.util.filesystem
@@ -818,6 +820,43 @@ def verbose(self):
return self.conf.verbose
def ensure_modules_are_enabled_or_warn():
"""Ensures that, if a custom configuration file is found with custom configuration for the
default tcl module set, then tcl module file generation is enabled. Otherwise, a warning
is emitted.
"""
# TODO (v0.21 - Remove this function)
# Check if TCL module generation is enabled, return early if it is
enabled = spack.config.get("modules:default:enable", [])
if "tcl" in enabled:
return
# Check if we have custom TCL module sections
for scope in spack.config.CONFIG.file_scopes:
# Skip default configuration
if scope.name.startswith("default"):
continue
data = spack.config.get("modules:default:tcl", scope=scope.name)
if data:
config_file = pathlib.Path(scope.path)
if not scope.name.startswith("env"):
config_file = config_file / "modules.yaml"
break
else:
return
# If we are here we have a custom "modules" section in "config_file"
msg = (
f"detected custom TCL modules configuration in {config_file}, while TCL module file "
f"generation for the default module set is disabled. "
f"In Spack v0.20 module file generation has been disabled by default. To enable "
f"it run:\n\n\t$ spack config add 'modules:default:enable:[tcl]'\n"
)
warnings.warn(msg)
class BaseModuleFileWriter:
def __init__(self, spec, module_set_name, explicit=None):
self.spec = spec

View File

@@ -73,10 +73,10 @@
#: Valid name for specs and variants. Here we are not using
#: the previous "w[\w.-]*" since that would match most
#: characters that can be part of a word in any language
IDENTIFIER = r"(?:[a-zA-Z_0-9][a-zA-Z_0-9\-]*)"
DOTTED_IDENTIFIER = rf"(?:{IDENTIFIER}(?:\.{IDENTIFIER})+)"
GIT_HASH = r"(?:[A-Fa-f0-9]{40})"
GIT_VERSION = rf"(?:(?:git\.(?:{DOTTED_IDENTIFIER}|{IDENTIFIER}))|(?:{GIT_HASH}))"
IDENTIFIER = r"([a-zA-Z_0-9][a-zA-Z_0-9\-]*)"
DOTTED_IDENTIFIER = rf"({IDENTIFIER}(\.{IDENTIFIER})+)"
GIT_HASH = r"([A-Fa-f0-9]{40})"
GIT_VERSION = rf"((git\.({DOTTED_IDENTIFIER}|{IDENTIFIER}))|({GIT_HASH}))"
NAME = r"[a-zA-Z_0-9][a-zA-Z_0-9\-.]*"
@@ -85,15 +85,15 @@
#: A filename starts either with a "." or a "/" or a "{name}/,
# or on Windows, a drive letter followed by a colon and "\"
# or "." or {name}\
WINDOWS_FILENAME = r"(?:\.|[a-zA-Z0-9-_]*\\|[a-zA-Z]:\\)(?:[a-zA-Z0-9-_\.\\]*)(?:\.json|\.yaml)"
UNIX_FILENAME = r"(?:\.|\/|[a-zA-Z0-9-_]*\/)(?:[a-zA-Z0-9-_\.\/]*)(?:\.json|\.yaml)"
WINDOWS_FILENAME = r"(\.|[a-zA-Z0-9-_]*\\|[a-zA-Z]:\\)([a-zA-Z0-9-_\.\\]*)(\.json|\.yaml)"
UNIX_FILENAME = r"(\.|\/|[a-zA-Z0-9-_]*\/)([a-zA-Z0-9-_\.\/]*)(\.json|\.yaml)"
if not IS_WINDOWS:
FILENAME = UNIX_FILENAME
else:
FILENAME = WINDOWS_FILENAME
VALUE = r"(?:[a-zA-Z_0-9\-+\*.,:=\~\/\\]+)"
QUOTED_VALUE = r"[\"']+(?:[a-zA-Z_0-9\-+\*.,:=\~\/\\\s]+)[\"']+"
VALUE = r"([a-zA-Z_0-9\-+\*.,:=\~\/\\]+)"
QUOTED_VALUE = r"[\"']+([a-zA-Z_0-9\-+\*.,:=\~\/\\\s]+)[\"']+"
VERSION = r"=?([a-zA-Z0-9_][a-zA-Z_0-9\-\.]*\b)"
VERSION_RANGE = rf"({VERSION}\s*:\s*{VERSION}(?!\s*=)|:\s*{VERSION}(?!\s*=)|{VERSION}\s*:|:)"
@@ -125,34 +125,34 @@ class TokenType(TokenBase):
"""
# Dependency
DEPENDENCY = r"(?:\^)"
DEPENDENCY = r"(\^)"
# Version
VERSION_HASH_PAIR = rf"(?:@(?:{GIT_VERSION})=(?:{VERSION}))"
VERSION = rf"(?:@\s*(?:{VERSION_LIST}))"
VERSION_HASH_PAIR = rf"(@({GIT_VERSION})=({VERSION}))"
VERSION = rf"(@\s*({VERSION_LIST}))"
# Variants
PROPAGATED_BOOL_VARIANT = rf"(?:(?:\+\+|~~|--)\s*{NAME})"
BOOL_VARIANT = rf"(?:[~+-]\s*{NAME})"
PROPAGATED_KEY_VALUE_PAIR = rf"(?:{NAME}\s*==\s*(?:{VALUE}|{QUOTED_VALUE}))"
KEY_VALUE_PAIR = rf"(?:{NAME}\s*=\s*(?:{VALUE}|{QUOTED_VALUE}))"
PROPAGATED_BOOL_VARIANT = rf"((\+\+|~~|--)\s*{NAME})"
BOOL_VARIANT = rf"([~+-]\s*{NAME})"
PROPAGATED_KEY_VALUE_PAIR = rf"({NAME}\s*==\s*({VALUE}|{QUOTED_VALUE}))"
KEY_VALUE_PAIR = rf"({NAME}\s*=\s*({VALUE}|{QUOTED_VALUE}))"
# Compilers
COMPILER_AND_VERSION = rf"(?:%\s*(?:{NAME})(?:[\s]*)@\s*(?:{VERSION_LIST}))"
COMPILER = rf"(?:%\s*(?:{NAME}))"
COMPILER_AND_VERSION = rf"(%\s*({NAME})([\s]*)@\s*({VERSION_LIST}))"
COMPILER = rf"(%\s*({NAME}))"
# FILENAME
FILENAME = rf"(?:{FILENAME})"
FILENAME = rf"({FILENAME})"
# Package name
FULLY_QUALIFIED_PACKAGE_NAME = rf"(?:{DOTTED_IDENTIFIER})"
UNQUALIFIED_PACKAGE_NAME = rf"(?:{IDENTIFIER})"
FULLY_QUALIFIED_PACKAGE_NAME = rf"({DOTTED_IDENTIFIER})"
UNQUALIFIED_PACKAGE_NAME = rf"({IDENTIFIER})"
# DAG hash
DAG_HASH = rf"(?:/(?:{HASH}))"
DAG_HASH = rf"(/({HASH}))"
# White spaces
WS = r"(?:\s+)"
WS = r"(\s+)"
class ErrorTokenType(TokenBase):
"""Enum with regexes for error analysis"""
# Unexpected character
UNEXPECTED = r"(?:.[\s]*)"
UNEXPECTED = r"(.[\s]*)"
class Token:

View File

@@ -312,19 +312,21 @@ def from_json(cls, stream, repository):
def to_json(self, stream):
sjson.dump({"patches": self.index}, stream)
def patch_for_package(self, sha256: str, pkg):
def patch_for_package(self, sha256, pkg):
"""Look up a patch in the index and build a patch object for it.
Arguments:
sha256: sha256 hash to look up
sha256 (str): sha256 hash to look up
pkg (spack.package_base.PackageBase): Package object to get patch for.
We build patch objects lazily because building them requires that
we have information about the package's location in its repo."""
we have information about the package's location in its repo.
"""
sha_index = self.index.get(sha256)
if not sha_index:
raise PatchLookupError(
f"Couldn't find patch for package {pkg.fullname} with sha256: {sha256}"
raise NoSuchPatchError(
"Couldn't find patch for package %s with sha256: %s" % (pkg.fullname, sha256)
)
# Find patches for this class or any class it inherits from
@@ -333,8 +335,8 @@ def patch_for_package(self, sha256: str, pkg):
if patch_dict:
break
else:
raise PatchLookupError(
f"Couldn't find patch for package {pkg.fullname} with sha256: {sha256}"
raise NoSuchPatchError(
"Couldn't find patch for package %s with sha256: %s" % (pkg.fullname, sha256)
)
# add the sha256 back (we take it out on write to save space,
@@ -403,9 +405,5 @@ class NoSuchPatchError(spack.error.SpackError):
"""Raised when a patch file doesn't exist."""
class PatchLookupError(NoSuchPatchError):
"""Raised when a patch file cannot be located from sha256."""
class PatchDirectiveError(spack.error.SpackError):
"""Raised when the wrong arguments are suppled to the patch directive."""

View File

@@ -2595,7 +2595,6 @@ class SpecBuilder:
r"^node_compiler$",
r"^package_hash$",
r"^root$",
r"^variant_default_value_from_cli$",
r"^virtual_node$",
r"^virtual_root$",
]

View File

@@ -20,7 +20,7 @@
% Integrity constraints on DAG nodes
:- attr("root", PackageNode), not attr("node", PackageNode).
:- attr("version", PackageNode, _), not attr("node", PackageNode), not attr("virtual_node", PackageNode).
:- attr("version", PackageNode), not attr("node", PackageNode).
:- attr("node_version_satisfies", PackageNode), not attr("node", PackageNode).
:- attr("hash", PackageNode, _), not attr("node", PackageNode).
:- attr("node_platform", PackageNode, _), not attr("node", PackageNode).
@@ -58,6 +58,7 @@ unification_set(SetID, ChildNode) :- attr("depends_on", ParentNode, ChildNode, T
unification_set(("build", node(X, Child)), node(X, Child))
:- attr("depends_on", ParentNode, node(X, Child), Type),
Type == "build",
SetID != "generic_build",
multiple_unification_sets(Child),
unification_set(SetID, ParentNode).
@@ -67,18 +68,18 @@ unification_set("generic_build", node(X, Child))
not multiple_unification_sets(Child),
unification_set(_, ParentNode).
% Any dependency of type "build" in a unification set that is in the leaf unification set,
% stays in that unification set
unification_set(SetID, ChildNode)
:- attr("depends_on", ParentNode, ChildNode, Type),
Type == "build",
SetID == "generic_build",
unification_set(SetID, ParentNode).
unification_set(SetID, VirtualNode)
:- provider(PackageNode, VirtualNode),
unification_set(SetID, PackageNode).
% Do not allow split dependencies, for now. This ensures that we don't construct graphs where e.g.
% a python extension depends on setuptools@63.4 as a run dependency, but uses e.g. setuptools@68
% as a build dependency.
%
% We'll need to relax the rule before we get to actual cross-compilation
:- depends_on(ParentNode, node(X, Dependency)), depends_on(ParentNode, node(Y, Dependency)), X < Y.
#defined multiple_unification_sets/1.
%----

View File

@@ -5,8 +5,6 @@
import collections
from typing import List, Set
from llnl.util import lang
import spack.deptypes as dt
import spack.package_base
import spack.repo
@@ -97,17 +95,8 @@ def _compute_cache_values(self):
)
self._link_run_virtuals.update(self._possible_virtuals)
for x in self._link_run:
build_dependencies = spack.repo.PATH.get_pkg_class(x).dependencies_of_type(dt.BUILD)
virtuals, reals = lang.stable_partition(
build_dependencies, spack.repo.PATH.is_virtual_safe
)
self._possible_virtuals.update(virtuals)
for virtual_dep in virtuals:
providers = spack.repo.PATH.providers_for(virtual_dep)
self._direct_build.update(str(x) for x in providers)
self._direct_build.update(reals)
current = spack.repo.PATH.get_pkg_class(x).dependencies_of_type(dt.BUILD)
self._direct_build.update(current)
self._total_build = set(
spack.package_base.possible_dependencies(

View File

@@ -74,7 +74,6 @@
import spack.deptypes as dt
import spack.error
import spack.hash_types as ht
import spack.patch
import spack.paths
import spack.platforms
import spack.provider_index
@@ -1605,20 +1604,13 @@ def _add_dependency(self, spec: "Spec", *, depflag: dt.DepFlag, virtuals: Tuple[
try:
dspec = next(dspec for dspec in orig if depflag == dspec.depflag)
except StopIteration:
current_deps = ", ".join(
dt.flag_to_chars(x.depflag) + " " + x.spec.short_spec for x in orig
)
raise DuplicateDependencyError(
f"{self.short_spec} cannot depend on '{spec.short_spec}' multiple times.\n"
f"\tRequired: {dt.flag_to_chars(depflag)}\n"
f"\tDependency: {current_deps}"
)
raise DuplicateDependencyError("Cannot depend on '%s' twice" % spec)
try:
dspec.spec.constrain(spec)
except spack.error.UnsatisfiableSpecError:
raise DuplicateDependencyError(
f"Cannot depend on incompatible specs '{dspec.spec}' and '{spec}'"
"Cannot depend on incompatible specs '%s' and '%s'" % (dspec.spec, spec)
)
def add_dependency_edge(
@@ -3907,15 +3899,7 @@ def patches(self):
for sha256 in self.variants["patches"]._patches_in_order_of_appearance:
index = spack.repo.PATH.patch_index
pkg_cls = spack.repo.PATH.get_pkg_class(self.name)
try:
patch = index.patch_for_package(sha256, pkg_cls)
except spack.patch.PatchLookupError as e:
raise spack.error.SpecError(
f"{e}. This usually means the patch was modified or removed. "
"To fix this, either reconcretize or use the original package "
"repository"
) from e
patch = index.patch_for_package(sha256, pkg_cls)
self._patches.append(patch)
return self._patches

View File

@@ -899,21 +899,22 @@ def test_tarball_doesnt_include_buildinfo_twice(tmpdir):
tarball = str(tmpdir.join("prefix.tar.gz"))
bindist._do_create_tarball(
tarfile_path=tarball, binaries_dir=p.strpath, buildinfo={"metadata": "new"}
tarfile_path=tarball,
binaries_dir=str(p),
pkg_dir="my-pkg-prefix",
buildinfo={"metadata": "new"},
)
expected_prefix = p.strpath.lstrip("/")
# Verify we don't have a repeated binary_distribution file,
# and that the tarball contains the new one, not the old one.
with tarfile.open(tarball) as tar:
assert syaml.load(tar.extractfile(f"{expected_prefix}/.spack/binary_distribution")) == {
assert syaml.load(tar.extractfile("my-pkg-prefix/.spack/binary_distribution")) == {
"metadata": "new"
}
assert tar.getnames() == [
f"{expected_prefix}",
f"{expected_prefix}/.spack",
f"{expected_prefix}/.spack/binary_distribution",
"my-pkg-prefix",
"my-pkg-prefix/.spack",
"my-pkg-prefix/.spack/binary_distribution",
]
@@ -934,17 +935,15 @@ def test_reproducible_tarball_is_reproducible(tmpdir):
# Create a tarball with a certain mtime of bin/app
os.utime(app, times=(0, 0))
bindist._do_create_tarball(tarball_1, binaries_dir=p.strpath, buildinfo=buildinfo)
bindist._do_create_tarball(tarball_1, binaries_dir=p, pkg_dir="pkg", buildinfo=buildinfo)
# Do it another time with different mtime of bin/app
os.utime(app, times=(10, 10))
bindist._do_create_tarball(tarball_2, binaries_dir=p.strpath, buildinfo=buildinfo)
bindist._do_create_tarball(tarball_2, binaries_dir=p, pkg_dir="pkg", buildinfo=buildinfo)
# They should be bitwise identical:
assert filecmp.cmp(tarball_1, tarball_2, shallow=False)
expected_prefix = p.strpath.lstrip("/")
# Sanity check for contents:
with tarfile.open(tarball_1, mode="r") as f:
for m in f.getmembers():
@@ -952,11 +951,11 @@ def test_reproducible_tarball_is_reproducible(tmpdir):
assert m.uname == m.gname == ""
assert set(f.getnames()) == {
f"{expected_prefix}",
f"{expected_prefix}/bin",
f"{expected_prefix}/bin/app",
f"{expected_prefix}/.spack",
f"{expected_prefix}/.spack/binary_distribution",
"pkg",
"pkg/bin",
"pkg/bin/app",
"pkg/.spack",
"pkg/.spack/binary_distribution",
}
@@ -980,23 +979,21 @@ def test_tarball_normalized_permissions(tmpdir):
with open(data, "w", opener=lambda path, flags: os.open(path, flags, 0o477)) as f:
f.write("hello world")
bindist._do_create_tarball(tarball, binaries_dir=p.strpath, buildinfo={})
expected_prefix = p.strpath.lstrip("/")
bindist._do_create_tarball(tarball, binaries_dir=p, pkg_dir="pkg", buildinfo={})
with tarfile.open(tarball) as tar:
path_to_member = {member.name: member for member in tar.getmembers()}
# directories should have 0o755
assert path_to_member[f"{expected_prefix}"].mode == 0o755
assert path_to_member[f"{expected_prefix}/bin"].mode == 0o755
assert path_to_member[f"{expected_prefix}/.spack"].mode == 0o755
assert path_to_member["pkg"].mode == 0o755
assert path_to_member["pkg/bin"].mode == 0o755
assert path_to_member["pkg/.spack"].mode == 0o755
# executable-by-user files should be 0o755
assert path_to_member[f"{expected_prefix}/bin/app"].mode == 0o755
assert path_to_member["pkg/bin/app"].mode == 0o755
# not-executable-by-user files should be 0o644
assert path_to_member[f"{expected_prefix}/share/file"].mode == 0o644
assert path_to_member["pkg/share/file"].mode == 0o644
def test_tarball_common_prefix(dummy_prefix, tmpdir):
@@ -1065,50 +1062,3 @@ def test_tarfile_with_files_outside_common_prefix(tmpdir, dummy_prefix):
ValueError, match="Tarball contains file /etc/config_file outside of prefix"
):
bindist._ensure_common_prefix(tarfile.open("broken.tar", mode="r"))
def test_tarfile_of_spec_prefix(tmpdir):
"""Tests whether hardlinks, symlinks, files and dirs are added correctly,
and that the order of entries is correct."""
prefix = tmpdir.mkdir("prefix")
prefix.ensure("a_directory", dir=True).join("file").write("hello")
prefix.ensure("c_directory", dir=True).join("file").write("hello")
prefix.ensure("b_directory", dir=True).join("file").write("hello")
prefix.join("file").write("hello")
os.symlink(prefix.join("file"), prefix.join("symlink"))
os.link(prefix.join("file"), prefix.join("hardlink"))
file = tmpdir.join("example.tar")
with tarfile.open(file, mode="w") as tar:
bindist.tarfile_of_spec_prefix(tar, prefix.strpath)
expected_prefix = prefix.strpath.lstrip("/")
with tarfile.open(file, mode="r") as tar:
# Verify that entries are added in depth-first pre-order, files preceding dirs,
# entries ordered alphabetically
assert tar.getnames() == [
f"{expected_prefix}",
f"{expected_prefix}/file",
f"{expected_prefix}/hardlink",
f"{expected_prefix}/symlink",
f"{expected_prefix}/a_directory",
f"{expected_prefix}/a_directory/file",
f"{expected_prefix}/b_directory",
f"{expected_prefix}/b_directory/file",
f"{expected_prefix}/c_directory",
f"{expected_prefix}/c_directory/file",
]
# Check that the types are all correct
assert tar.getmember(f"{expected_prefix}").isdir()
assert tar.getmember(f"{expected_prefix}/file").isreg()
assert tar.getmember(f"{expected_prefix}/hardlink").islnk()
assert tar.getmember(f"{expected_prefix}/symlink").issym()
assert tar.getmember(f"{expected_prefix}/a_directory").isdir()
assert tar.getmember(f"{expected_prefix}/a_directory/file").isreg()
assert tar.getmember(f"{expected_prefix}/b_directory").isdir()
assert tar.getmember(f"{expected_prefix}/b_directory/file").isreg()
assert tar.getmember(f"{expected_prefix}/c_directory").isdir()
assert tar.getmember(f"{expected_prefix}/c_directory/file").isreg()

View File

@@ -1990,7 +1990,8 @@ def test_ci_reproduce(
ci_cmd("generate", "--output-file", pipeline_path, "--artifacts-root", artifacts_root)
job_name = ci.get_job_name(job_spec)
target_name = spack.platforms.test.Test.default
job_name = ci.get_job_name(job_spec, "test-debian6-%s" % target_name, None)
repro_file = os.path.join(working_dir.strpath, "repro.json")
repro_details = {

View File

@@ -2121,9 +2121,12 @@ def duplicates_test_repository():
@pytest.mark.usefixtures("mutable_config", "duplicates_test_repository")
@pytest.mark.only_clingo("Not supported by the original concretizer")
class TestConcretizeSeparately:
@pytest.mark.parametrize("strategy", ["minimal", "full"])
@pytest.mark.skipif(
os.environ.get("SPACK_TEST_SOLVER") == "original",
reason="Not supported by the original concretizer",
)
def test_two_gmake(self, strategy):
"""Tests that we can concretize a spec with nodes using the same build
dependency pinned at different versions.
@@ -2148,6 +2151,10 @@ def test_two_gmake(self, strategy):
assert len(pinned_gmake) == 1 and pinned_gmake[0].satisfies("@=3.0")
@pytest.mark.parametrize("strategy", ["minimal", "full"])
@pytest.mark.skipif(
os.environ.get("SPACK_TEST_SOLVER") == "original",
reason="Not supported by the original concretizer",
)
def test_two_setuptools(self, strategy):
"""Tests that we can concretize separate build dependencies, when we are dealing
with extensions.
@@ -2184,6 +2191,10 @@ def test_two_setuptools(self, strategy):
gmake = s["python"].dependencies(name="gmake", deptype="build")
assert len(gmake) == 1 and gmake[0].satisfies("@=3.0")
@pytest.mark.skipif(
os.environ.get("SPACK_TEST_SOLVER") == "original",
reason="Not supported by the original concretizer",
)
def test_solution_without_cycles(self):
"""Tests that when we concretize a spec with cycles, a fallback kicks in to recompute
a solution without cycles.
@@ -2196,21 +2207,6 @@ def test_solution_without_cycles(self):
assert s["cycle-a"].satisfies("~cycle")
assert s["cycle-b"].satisfies("+cycle")
@pytest.mark.parametrize("strategy", ["minimal", "full"])
def test_pure_build_virtual_dependency(self, strategy):
"""Tests that we can concretize a pure build virtual dependency, and ensures that
pure build virtual dependencies are accounted in the list of possible virtual
dependencies.
virtual-build@1.0
| [type=build, virtual=pkgconfig]
pkg-config@1.0
"""
spack.config.CONFIG.set("concretizer:duplicates:strategy", strategy)
s = Spec("virtual-build").concretized()
assert s["pkgconfig"].name == "pkg-config"
@pytest.mark.parametrize(
"v_str,v_opts,checksummed",

View File

@@ -4,4 +4,4 @@ concretizer:
granularity: microarchitectures
host_compatible: false
duplicates:
strategy: minimal
strategy: none

View File

@@ -17,7 +17,6 @@
import spack.package_base
import spack.spec
from spack.version import (
EmptyRangeError,
GitVersion,
StandardVersion,
Version,
@@ -696,9 +695,9 @@ def test_version_range_nonempty():
def test_empty_version_range_raises():
with pytest.raises(EmptyRangeError, match="2:1.0 is an empty range"):
with pytest.raises(ValueError):
assert VersionRange("2", "1.0")
with pytest.raises(EmptyRangeError, match="2:1.0 is an empty range"):
with pytest.raises(ValueError):
assert ver("2:1.0")

View File

@@ -270,6 +270,16 @@ def visit_Assert(self, node):
self.write(", ")
self.dispatch(node.msg)
def visit_Exec(self, node):
self.fill("exec ")
self.dispatch(node.body)
if node.globals:
self.write(" in ")
self.dispatch(node.globals)
if node.locals:
self.write(", ")
self.dispatch(node.locals)
def visit_Global(self, node):
self.fill("global ")
interleave(lambda: self.write(", "), self.write, node.names)
@@ -328,6 +338,31 @@ def visit_Try(self, node):
with self.block():
self.dispatch(node.finalbody)
def visit_TryExcept(self, node):
self.fill("try")
with self.block():
self.dispatch(node.body)
for ex in node.handlers:
self.dispatch(ex)
if node.orelse:
self.fill("else")
with self.block():
self.dispatch(node.orelse)
def visit_TryFinally(self, node):
if len(node.body) == 1 and isinstance(node.body[0], ast.TryExcept):
# try-except-finally
self.dispatch(node.body)
else:
self.fill("try")
with self.block():
self.dispatch(node.body)
self.fill("finally")
with self.block():
self.dispatch(node.finalbody)
def visit_ExceptHandler(self, node):
self.fill("except")
if node.type:
@@ -345,10 +380,6 @@ def visit_ClassDef(self, node):
self.fill("@")
self.dispatch(deco)
self.fill("class " + node.name)
if getattr(node, "type_params", False):
self.write("[")
interleave(lambda: self.write(", "), self.dispatch, node.type_params)
self.write("]")
with self.delimit_if("(", ")", condition=node.bases or node.keywords):
comma = False
for e in node.bases:
@@ -363,6 +394,21 @@ def visit_ClassDef(self, node):
else:
comma = True
self.dispatch(e)
if sys.version_info[:2] < (3, 5):
if node.starargs:
if comma:
self.write(", ")
else:
comma = True
self.write("*")
self.dispatch(node.starargs)
if node.kwargs:
if comma:
self.write(", ")
else:
comma = True
self.write("**")
self.dispatch(node.kwargs)
with self.block():
self.dispatch(node.body)
@@ -379,10 +425,6 @@ def __FunctionDef_helper(self, node, fill_suffix):
self.dispatch(deco)
def_str = fill_suffix + " " + node.name
self.fill(def_str)
if getattr(node, "type_params", False):
self.write("[")
interleave(lambda: self.write(", "), self.dispatch, node.type_params)
self.write("]")
with self.delimit("(", ")"):
self.dispatch(node.args)
if getattr(node, "returns", False):
@@ -598,6 +640,11 @@ def visit_Name(self, node):
def visit_NameConstant(self, node):
self.write(repr(node.value))
def visit_Repr(self, node):
self.write("`")
self.dispatch(node.value)
self.write("`")
def _write_constant(self, value):
if isinstance(value, (float, complex)):
# Substitute overflowing decimal literal for AST infinities.
@@ -938,10 +985,16 @@ def visit_arguments(self, node):
self.write(", ")
self.write("*")
if node.vararg:
self.write(node.vararg.arg)
if node.vararg.annotation:
self.write(": ")
self.dispatch(node.vararg.annotation)
if hasattr(node.vararg, "arg"):
self.write(node.vararg.arg)
if node.vararg.annotation:
self.write(": ")
self.dispatch(node.vararg.annotation)
else:
self.write(node.vararg)
if getattr(node, "varargannotation", None):
self.write(": ")
self.dispatch(node.varargannotation)
# keyword-only arguments
if getattr(node, "kwonlyargs", False):
@@ -961,10 +1014,16 @@ def visit_arguments(self, node):
first = False
else:
self.write(", ")
self.write("**" + node.kwarg.arg)
if node.kwarg.annotation:
self.write(": ")
self.dispatch(node.kwarg.annotation)
if hasattr(node.kwarg, "arg"):
self.write("**" + node.kwarg.arg)
if node.kwarg.annotation:
self.write(": ")
self.dispatch(node.kwarg.annotation)
else:
self.write("**" + node.kwarg)
if getattr(node, "kwargannotation", None):
self.write(": ")
self.dispatch(node.kwargannotation)
def visit_keyword(self, node):
if node.arg is None:
@@ -1079,23 +1138,3 @@ def visit_MatchOr(self, node):
with self.require_parens(_Precedence.BOR, node):
self.set_precedence(pnext(_Precedence.BOR), *node.patterns)
interleave(lambda: self.write(" | "), self.dispatch, node.patterns)
def visit_TypeAlias(self, node):
self.fill("type ")
self.dispatch(node.name)
self.write(" = ")
self.dispatch(node.value)
def visit_TypeVar(self, node):
self.write(node.name)
if node.bound:
self.write(": ")
self.dispatch(node.bound)
def visit_TypeVarTuple(self, node):
self.write("*")
self.write(node.name)
def visit_ParamSpec(self, node):
self.write("**")
self.write(node.name)

View File

@@ -16,7 +16,6 @@
"""
from .common import (
EmptyRangeError,
VersionChecksumError,
VersionError,
VersionLookupError,
@@ -55,6 +54,5 @@
"VersionError",
"VersionChecksumError",
"VersionLookupError",
"EmptyRangeError",
"any_version",
]

View File

@@ -35,7 +35,3 @@ class VersionChecksumError(VersionError):
class VersionLookupError(VersionError):
"""Raised for errors looking up git commits as versions."""
class EmptyRangeError(VersionError):
"""Raised when constructing an empty version range."""

View File

@@ -12,7 +12,6 @@
from .common import (
COMMIT_VERSION,
EmptyRangeError,
VersionLookupError,
infinity_versions,
is_git_version,
@@ -596,17 +595,14 @@ def up_to(self, index) -> StandardVersion:
class ClosedOpenRange:
def __init__(self, lo: StandardVersion, hi: StandardVersion):
if hi < lo:
raise EmptyRangeError(f"{lo}..{hi} is an empty range")
raise ValueError(f"{lo}:{hi} is an empty range")
self.lo: StandardVersion = lo
self.hi: StandardVersion = hi
@classmethod
def from_version_range(cls, lo: StandardVersion, hi: StandardVersion):
"""Construct ClosedOpenRange from lo:hi range."""
try:
return ClosedOpenRange(lo, next_version(hi))
except EmptyRangeError as e:
raise EmptyRangeError(f"{lo}:{hi} is an empty range") from e
return ClosedOpenRange(lo, next_version(hi))
def __str__(self):
# This simplifies 3.1:<3.2 to 3.1:3.1 to 3.1

View File

@@ -165,10 +165,6 @@ default:
extends: [ ".generate-base" ]
tags: ["spack", "public", "medium", "aarch64"]
.generate-neoverse_v1:
extends: [ ".generate-base" ]
tags: ["spack", "public", "medium", "aarch64", "graviton3"]
.generate-deprecated:
extends: [ ".base-job" ]
stage: generate
@@ -291,7 +287,7 @@ protected-publish:
e4s-generate:
extends: [ ".e4s", ".generate-x86_64"]
image: ghcr.io/spack/ubuntu20.04-runner-amd64-gcc-11.4:2023.08.01
image: ghcr.io/spack/ubuntu20.04-runner-x86_64:2023-01-01
e4s-build:
extends: [ ".e4s", ".build" ]
@@ -304,52 +300,6 @@ e4s-build:
- artifacts: True
job: e4s-generate
########################################
# E4S Neoverse V1 pipeline
########################################
.e4s-neoverse_v1:
extends: [ ".linux_neoverse_v1" ]
variables:
SPACK_CI_STACK_NAME: e4s-neoverse_v1
e4s-neoverse_v1-generate:
extends: [ ".e4s-neoverse_v1", ".generate-neoverse_v1" ]
image: ghcr.io/spack/ubuntu20.04-runner-arm64-gcc-11.4:2023.08.01
e4s-neoverse_v1-build:
extends: [ ".e4s-neoverse_v1", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: e4s-neoverse_v1-generate
strategy: depend
needs:
- artifacts: True
job: e4s-neoverse_v1-generate
########################################
# E4S ROCm External pipeline
########################################
.e4s-rocm-external:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: e4s-rocm-external
e4s-rocm-external-generate:
extends: [ ".e4s-rocm-external", ".generate-x86_64"]
image: ghcr.io/spack/ubuntu20.04-runner-amd64-gcc-11.4-rocm5.4.3:2023.08.01
e4s-rocm-external-build:
extends: [ ".e4s-rocm-external", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: e4s-rocm-external-generate
strategy: depend
needs:
- artifacts: True
job: e4s-rocm-external-generate
########################################
# GPU Testing Pipeline
########################################
@@ -383,7 +333,7 @@ gpu-tests-build:
e4s-oneapi-generate:
extends: [ ".e4s-oneapi", ".generate-x86_64"]
image: ghcr.io/spack/ubuntu20.04-runner-amd64-oneapi-2023.2.1:2023.08.01
image: ecpe4s/ubuntu20.04-runner-x86_64-oneapi:2023.07.21
e4s-oneapi-build:
extends: [ ".e4s-oneapi", ".build" ]
@@ -400,7 +350,7 @@ e4s-oneapi-build:
# E4S on Power
########################################
.e4s-power-generate-tags-and-image:
image: { "name": "ghcr.io/spack/ubuntu20.04-runner-ppc64-gcc-11.4:2023.08.01", "entrypoint": [""] }
image: { "name": "ecpe4s/ubuntu20.04-runner-ppc64le:2023-01-01", "entrypoint": [""] }
tags: ["spack", "public", "large", "ppc64le"]
.e4s-power:
@@ -877,16 +827,16 @@ e4s-cray-rhel-build:
variables:
SPACK_CI_STACK_NAME: e4s-cray-sles
# e4s-cray-sles-generate:
# extends: [ ".generate-cray-sles", ".e4s-cray-sles" ]
e4s-cray-sles-generate:
extends: [ ".generate-cray-sles", ".e4s-cray-sles" ]
# e4s-cray-sles-build:
# extends: [ ".build", ".e4s-cray-sles" ]
# trigger:
# include:
# - artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
# job: e4s-cray-sles-generate
# strategy: depend
# needs:
# - artifacts: True
# job: e4s-cray-sles-generate
e4s-cray-sles-build:
extends: [ ".build", ".e4s-cray-sles" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: e4s-cray-sles-generate
strategy: depend
needs:
- artifacts: True
job: e4s-cray-sles-generate

View File

@@ -4,16 +4,22 @@ spack:
cmake:
variants: ~ownlibs
ecp-data-vis-sdk:
require: "+ascent +adios2 +cinema +darshan +faodel +hdf5 +pnetcdf +sensei +sz +unifyfs +veloc +vtkm +zfp"
require:
- one_of:
- +ascent +adios2 +cinema +darshan +faodel +hdf5 +pnetcdf +sensei +sz +unifyfs
+veloc +vtkm +zfp
- one_of:
- +paraview ~visit
- ~paraview +visit
hdf5:
require:
- one_of: ['@1.14', '@1.12']
mesa:
require: "+glx +osmesa +opengl ~opengles +llvm"
require: +glx +osmesa +opengl ~opengles +llvm
libosmesa:
require: "mesa +osmesa"
require: mesa +osmesa
libglx:
require: "mesa +glx"
require: mesa +glx
ospray:
require: '@2.8.0 +denoiser +mpi'
llvm:
@@ -51,11 +57,9 @@ spack:
# Test ParaView and VisIt builds with different GL backends
- matrix:
- [$sdk_base_spec]
- ["+paraview ~visit"]
- [$^paraview_specs]
- matrix:
- [$sdk_base_spec]
- ["~paraview +visit"]
- [$^visit_specs]
mirrors: {mirror: s3://spack-binaries/develop/data-vis-sdk}

View File

@@ -20,156 +20,42 @@ spack:
target: [zen4]
variants: +mpi
tbb:
require: "intel-tbb"
binutils:
variants: +ld +gold +headers +libiberty ~nls
boost:
variants: +python +filesystem +iostreams +system
cuda:
version: [11.7.0]
elfutils:
variants: +bzip2 ~nls +xz
require: "%gcc"
hdf5:
variants: +fortran +hl +shared
libfabric:
variants: fabrics=sockets,tcp,udp,rxm
libunwind:
variants: +pic +xz
mpich:
variants: ~wrapperrpath
ncurses:
variants: +termlib
paraview:
# Don't build GUI support or GLX rendering for HPC/container deployments
require: "@5.11 ~qt+osmesa"
python:
version: [3.8.13]
trilinos:
require:
- one_of: [+amesos +amesos2 +anasazi +aztec +boost +epetra +epetraext +ifpack
+intrepid +intrepid2 +isorropia +kokkos +minitensor +nox +piro +phalanx
+rol +rythmos +sacado +stk +shards +stratimikos +tempus +tpetra
+trilinoscouplings +zoltan]
- one_of: [gotype=long_long, gotype=all]
- one_of: [~ml ~muelu ~zoltan2 ~teko, +ml +muelu +zoltan2 +teko]
require: '@6.3 +termlib'
openblas:
require: '@0.3.20'
variants: threads=openmp
xz:
variants: +pic
mesa:
version: [21.3.8]
elfutils:
variants: +bzip2 ~nls +xz
require: '%gcc'
unzip:
require: "%gcc"
require: '%gcc'
specs:
# CPU
- adios
- aml
- arborx
- argobots
- bolt
- adios2
- amrex
- butterflypack
- boost +python +filesystem +iostreams +system
- cabana
- chai ~benchmarks ~tests
- conduit
- datatransferkit
- flecsi
- fortrilinos
- ginkgo
- globalarrays
- gmp
- gotcha
- h5bench
- hdf5-vol-async
- hdf5-vol-cache
- hdf5-vol-log
- heffte +fftw
- hypre
- kokkos +openmp
- kokkos-kernels +openmp
- lammps
- kokkos
- kokkos-kernels
- legion
- libnrm
- libquo
- libunwind
- mercury
- metall
- mfem
- mgard +serial +openmp +timing +unstructured ~cuda
- mpark-variant
- mpifileutils ~xattr
- nccmp
- nco
- netlib-scalapack
- omega-h
- openmpi
- openpmd-api
- papi
- papyrus
- pdt
- pumi
- qthreads scheduler=distrib
- raja
- slate ~cuda
- stc
- sundials
- superlu
- superlu-dist
- swig
- swig@4.0.2-fortran
- sz3
- tasmanian
- trilinos +belos +ifpack2 +stokhos
- turbine
- umap
- umpire
- veloc
- wannier90
# ERRORS
# - caliper # caliper: ModuleNotFoundError: No module named 'math'; src/mpi/services/mpiwrap/CMakeFiles/caliper-mpiwrap.dir/build.make:77: src/mpi/services/mpiwrap/Wrapper.cpp] Error 1
# - charliecloud # python: Could not find platform dependent libraries <exec_prefix>
# - flit # python: Could not find platform dependent libraries <exec_prefix>
# - flux-core # python: Could not find platform dependent libraries <exec_prefix>
# - hpx max_cpu_count=512 networking=mpi # python: Could not find platform dependent libraries <exec_prefix>
# - libpressio +bitgrooming +bzip2 ~cuda ~cusz +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf +mgard # python: Could not find platform dependent libraries <exec_prefix>
# - petsc # petsc: SyntaxError: (unicode error) \N escapes not supported (can't load unicodedata module)
# - plumed # python: Could not find platform dependent libraries <exec_prefix>
# - precice # petsc: SyntaxError: (unicode error) \N escapes not supported (can't load unicodedata module)
# - py-h5py +mpi # python: Could not find platform dependent libraries <exec_prefix>
# - py-h5py ~mpi # python: Could not find platform dependent libraries <exec_prefix>
# - py-libensemble +mpi +nlopt # python: Could not find platform dependent libraries <exec_prefix>
# - py-petsc4py # python: Could not find platform dependent libraries <exec_prefix>
# - slepc # petsc: SyntaxError: (unicode error) \N escapes not supported (can't load unicodedata module)
# - tau +mpi +python # tau: ERROR: Cannot find python library (libpython*.[so|dylib]
# HOLDING THESE BACK UNTIL CRAY SLES CAPACITY IS EXPANDED AT UO
# - alquimia
# - amrex
# - archer
# - axom
# - bricks
# - dealii
# - dyninst
# - ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 +paraview +pnetcdf +sz +unifyfs +veloc ~visit +vtkm +zfp ^hdf5@1.14 # llvm@14.0.6: ?;
# - exaworks
# - gasnet
# - gptune
# - hpctoolkit
# - nrm
# - nvhpc
# - parsec ~cuda
# - phist
# - plasma
# - py-jupyterhub
# - py-warpx
# - quantum-espresso
# - scr
# - strumpack ~slate
# - upcxx
# - variorum
# - xyce +mpi +shared +pymi +pymi_static_tpls ^trilinos~shylu
# - flux-core # python cray sles issue
mirrors: { "mirror": "s3://spack-binaries/develop/e4s-cray-sles" }

View File

@@ -1,351 +0,0 @@
spack:
view: false
concretizer:
reuse: false
unify: false
packages:
all:
require: '%gcc@11.4.0 target=neoverse_v1'
providers:
blas: [openblas]
mpi: [mpich]
variants: +mpi
binutils:
variants: +ld +gold +headers +libiberty ~nls
elfutils:
variants: +bzip2 ~nls +xz
hdf5:
variants: +fortran +hl +shared
libfabric:
variants: fabrics=sockets,tcp,udp,rxm
libunwind:
variants: +pic +xz
openblas:
variants: threads=openmp
trilinos:
variants: +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext
+ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu
+nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos
+teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long
xz:
variants: +pic
mesa:
version: [21.3.8]
mpi:
require: mpich
mpich:
require: '~wrapperrpath ~hwloc'
ncurses:
require: '@6.3 +termlib'
tbb:
require: intel-tbb
boost:
version: [1.79.0]
variants: +atomic +chrono +container +date_time +exception +filesystem +graph
+iostreams +locale +log +math +mpi +multithreaded +program_options +random
+regex +serialization +shared +signals +stacktrace +system +test +thread +timer
cxxstd=17 visibility=global
libffi:
require: "@3.4.4"
vtk-m:
require: "+examples"
cuda:
version: [11.8.0]
compilers:
- compiler:
spec: gcc@11.4.0
paths:
cc: /usr/bin/gcc
cxx: /usr/bin/g++
f77: /usr/bin/gfortran
fc: /usr/bin/gfortran
flags: {}
operating_system: ubuntu20.04
target: aarch64
modules: []
environment: {}
extra_rpaths: []
specs:
# CPU
- adios
- alquimia
- aml
- amrex
- arborx
- argobots
- ascent # ecp dav
- axom
- bolt
- boost
- butterflypack
- cabana
- caliper
- chai ~benchmarks ~tests
- charliecloud
- conduit
- datatransferkit
- dyninst
- ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 +paraview +pnetcdf +sz +unifyfs +veloc ~visit +vtkm +zfp # +visit: ?
- exaworks
- flecsi
- flit
- flux-core
- fortrilinos
- gasnet
- ginkgo
- globalarrays
- gmp
- gotcha
- gptune ~mpispawn
- h5bench
- hdf5-vol-async
- hdf5-vol-cache
- hdf5-vol-log
- heffte +fftw
- hpctoolkit
- hpx networking=mpi
- hypre
- kokkos +openmp
- kokkos-kernels +openmp
- lammps
- lbann
- legion
- libnrm
- libquo
- libunwind
- loki
- mercury
- metall
- mfem
- mgard +serial +openmp +timing +unstructured ~cuda
- mpark-variant
- mpifileutils ~xattr
- nccmp
- nco
- netlib-scalapack
- nrm
- nvhpc
- omega-h
- openfoam
- openmpi
- openpmd-api
- papi
- papyrus
- parsec ~cuda
- pdt
- petsc
- phist
- plasma
- plumed
- precice
- pruners-ninja
- pumi
- py-h5py
- py-jupyterhub
- py-libensemble
- py-petsc4py
- py-warpx
- qthreads scheduler=distrib
- quantum-espresso
- raja
- rempi
- scr
- slate ~cuda
- slepc
- stc
- strumpack ~slate
- sundials
- superlu
- superlu-dist
- swig@4.0.2-fortran
- sz3
- tasmanian
- tau +mpi +python
- trilinos +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long
- turbine
- umap
- umpire
- upcxx
- wannier90
- xyce +mpi +shared +pymi +pymi_static_tpls
# INCLUDED IN ECP DAV CPU
- adios2
- darshan-runtime
- darshan-util
- faodel
- hdf5
- libcatalyst
- parallel-netcdf
- paraview
- py-cinemasci
- sz
- unifyfs
- veloc
# - visit # silo: https://github.com/spack/spack/issues/39538
- vtk-m
- zfp
# --
# - archer # part of llvm +omp_tsan
# - bricks ~cuda # not respecting target=aarch64?
# - dealii # slepc: make[1]: *** internal error: invalid --jobserver-auth string 'fifo:/tmp/GMfifo1313'.
# - geopm # geopm: https://github.com/spack/spack/issues/38795
# - libpressio +bitgrooming +bzip2 ~cuda ~cusz +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp # py-numcodecs@0.7.3: gcc: error: unrecognized command-line option '-mno-sse2'
# - variorum # variorum: https://github.com/spack/spack/issues/38786
# CUDA NOARCH
- flux-core +cuda
- hpctoolkit +cuda
- papi +cuda
- tau +mpi +cuda
# --
# - bricks +cuda # not respecting target=aarch64?
# - legion +cuda # legion: needs NVIDIA driver
# CUDA 75
- amrex +cuda cuda_arch=75
- arborx +cuda cuda_arch=75 ^kokkos +wrapper
- cabana +cuda cuda_arch=75 ^kokkos +wrapper +cuda_lambda +cuda cuda_arch=75
- caliper +cuda cuda_arch=75
- chai ~benchmarks ~tests +cuda cuda_arch=75 ^umpire ~shared
- flecsi +cuda cuda_arch=75
- ginkgo +cuda cuda_arch=75
- heffte +cuda cuda_arch=75
- hpx +cuda cuda_arch=75
- hypre +cuda cuda_arch=75
- kokkos +wrapper +cuda cuda_arch=75
- kokkos-kernels +cuda cuda_arch=75 ^kokkos +wrapper +cuda cuda_arch=75
- magma +cuda cuda_arch=75
- mfem +cuda cuda_arch=75
- mgard +serial +openmp +timing +unstructured +cuda cuda_arch=75
- omega-h +cuda cuda_arch=75
- parsec +cuda cuda_arch=75
- petsc +cuda cuda_arch=75
- raja +cuda cuda_arch=75
- slate +cuda cuda_arch=75
- strumpack ~slate +cuda cuda_arch=75
- sundials +cuda cuda_arch=75
- superlu-dist +cuda cuda_arch=75
- tasmanian +cuda cuda_arch=75
- trilinos +cuda cuda_arch=75
- umpire ~shared +cuda cuda_arch=75
# INCLUDED IN ECP DAV CUDA
- adios2 +cuda cuda_arch=75
- paraview +cuda cuda_arch=75
- vtk-m +cuda cuda_arch=75
- zfp +cuda cuda_arch=75
# --
# - ascent +cuda cuda_arch=75 # ascent: https://github.com/spack/spack/issues/38045
# - axom +cuda cuda_arch=75 # axom: https://github.com/spack/spack/issues/29520
# - cusz +cuda cuda_arch=75 # cusz: https://github.com/spack/spack/issues/38787
# - dealii +cuda cuda_arch=75 # slepc: make[1]: *** internal error: invalid --jobserver-auth string 'fifo:/tmp/GMfifo1313'.
# - ecp-data-vis-sdk +adios2 +hdf5 +vtkm +zfp +paraview +cuda cuda_arch=75 # embree: https://github.com/spack/spack/issues/39534
# - lammps +cuda cuda_arch=75 # lammps: needs NVIDIA driver
# - lbann +cuda cuda_arch=75 # lbann: https://github.com/spack/spack/issues/38788
# - libpressio +bitgrooming +bzip2 +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf ~cusz +mgard +cuda cuda_arch=75 # libpressio: CMake Error at CMakeLists.txt:498 (find_library): Could not find CUFile_LIBRARY using the following names: cufile ; +cusz: https://github.com/spack/spack/issues/38787
# - py-torch +cuda cuda_arch=75 # skipped, installed by other means
# - slepc +cuda cuda_arch=75 # slepc: make[1]: *** internal error: invalid --jobserver-auth string 'fifo:/tmp/GMfifo1313'.
# - upcxx +cuda cuda_arch=75 # upcxx: needs NVIDIA driver
# CUDA 80
- amrex +cuda cuda_arch=80
- arborx +cuda cuda_arch=80 ^kokkos +wrapper
- cabana +cuda cuda_arch=80 ^kokkos +wrapper +cuda_lambda +cuda cuda_arch=80
- caliper +cuda cuda_arch=80
- chai ~benchmarks ~tests +cuda cuda_arch=80 ^umpire ~shared
- flecsi +cuda cuda_arch=80
- ginkgo +cuda cuda_arch=80
- heffte +cuda cuda_arch=80
- hpx +cuda cuda_arch=80
- hypre +cuda cuda_arch=80
- kokkos +wrapper +cuda cuda_arch=80
- kokkos-kernels +cuda cuda_arch=80 ^kokkos +wrapper +cuda cuda_arch=80
- magma +cuda cuda_arch=80
- mfem +cuda cuda_arch=80
- mgard +serial +openmp +timing +unstructured +cuda cuda_arch=80
- omega-h +cuda cuda_arch=80
- parsec +cuda cuda_arch=80
- petsc +cuda cuda_arch=80
- raja +cuda cuda_arch=80
- slate +cuda cuda_arch=80
- strumpack ~slate +cuda cuda_arch=80
- sundials +cuda cuda_arch=80
- superlu-dist +cuda cuda_arch=80
- tasmanian +cuda cuda_arch=80
- trilinos +cuda cuda_arch=80
- umpire ~shared +cuda cuda_arch=80
# INCLUDED IN ECP DAV CUDA
- adios2 +cuda cuda_arch=80
- paraview +cuda cuda_arch=80
- vtk-m +cuda cuda_arch=80
- zfp +cuda cuda_arch=80
# --
# - ascent +cuda cuda_arch=80 # ascent: https://github.com/spack/spack/issues/38045
# - axom +cuda cuda_arch=80 # axom: https://github.com/spack/spack/issues/29520
# - cusz +cuda cuda_arch=80 # cusz: https://github.com/spack/spack/issues/38787
# - dealii +cuda cuda_arch=80 # slepc: make[1]: *** internal error: invalid --jobserver-auth string 'fifo:/tmp/GMfifo1313'.
# - ecp-data-vis-sdk +adios2 +hdf5 +vtkm +zfp +paraview +cuda cuda_arch=80 # embree: https://github.com/spack/spack/issues/39534
# - lammps +cuda cuda_arch=80 # lammps: needs NVIDIA driver
# - lbann +cuda cuda_arch=80 # lbann: https://github.com/spack/spack/issues/38788
# - libpressio +bitgrooming +bzip2 +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf ~cusz +mgard +cuda cuda_arch=80 # libpressio: CMake Error at CMakeLists.txt:498 (find_library): Could not find CUFile_LIBRARY using the following names: cufile ; +cusz: https://github.com/spack/spack/issues/38787
# - py-torch +cuda cuda_arch=80 # skipped, installed by other means
# - slepc +cuda cuda_arch=80 # slepc: make[1]: *** internal error: invalid --jobserver-auth string 'fifo:/tmp/GMfifo1313'.
# - upcxx +cuda cuda_arch=80 # upcxx: needs NVIDIA driver
# CUDA 90
- amrex +cuda cuda_arch=90
- arborx +cuda cuda_arch=90 ^kokkos +wrapper
- cabana +cuda cuda_arch=90 ^kokkos +wrapper +cuda_lambda +cuda cuda_arch=90
- caliper +cuda cuda_arch=90
- chai ~benchmarks ~tests +cuda cuda_arch=90 ^umpire ~shared
- flecsi +cuda cuda_arch=90
- ginkgo +cuda cuda_arch=90
- heffte +cuda cuda_arch=90
- hpx +cuda cuda_arch=90
- kokkos +wrapper +cuda cuda_arch=90
- kokkos-kernels +cuda cuda_arch=90 ^kokkos +wrapper +cuda cuda_arch=90
- magma +cuda cuda_arch=90
- mfem +cuda cuda_arch=90
- mgard +serial +openmp +timing +unstructured +cuda cuda_arch=90
- parsec +cuda cuda_arch=90
- petsc +cuda cuda_arch=90
- raja +cuda cuda_arch=90
- slate +cuda cuda_arch=90
- strumpack ~slate +cuda cuda_arch=90
- sundials +cuda cuda_arch=90
- superlu-dist +cuda cuda_arch=90
- trilinos +cuda cuda_arch=90
- umpire ~shared +cuda cuda_arch=90
# INCLUDED IN ECP DAV CUDA
- adios2 +cuda cuda_arch=90
# - paraview +cuda cuda_arch=90 # paraview: InstallError: Incompatible cuda_arch=90
- vtk-m +cuda cuda_arch=90
- zfp +cuda cuda_arch=90
# --
# - ascent +cuda cuda_arch=90 # ascent: https://github.com/spack/spack/issues/38045
# - axom +cuda cuda_arch=90 # axom: https://github.com/spack/spack/issues/29520
# - cusz +cuda cuda_arch=90 # cusz: https://github.com/spack/spack/issues/38787
# - dealii +cuda cuda_arch=90 # dealii: https://github.com/spack/spack/issues/39532
# - ecp-data-vis-sdk +adios2 +hdf5 +vtkm +zfp +paraview +cuda cuda_arch=90 # embree: https://github.com/spack/spack/issues/39534
# - hypre +cuda cuda_arch=90 # concretizer: hypre +cuda requires cuda@:11, but cuda_arch=90 requires cuda@12:
# - lammps +cuda cuda_arch=90 # lammps: needs NVIDIA driver
# - lbann +cuda cuda_arch=90 # concretizer: Cannot select a single "version" for package "lbann"
# - libpressio +bitgrooming +bzip2 +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf ~cusz +mgard +cuda cuda_arch=90 # libpressio: CMake Error at CMakeLists.txt:498 (find_library): Could not find CUFile_LIBRARY using the following names: cufile ; +cusz: https://github.com/spack/spack/issues/38787
# - omega-h +cuda cuda_arch=90 # omega-h: https://github.com/spack/spack/issues/39535
# - py-torch +cuda cuda_arch=90 # skipped, installed by other means
# - slepc +cuda cuda_arch=90 # slepc: make[1]: *** internal error: invalid --jobserver-auth string 'fifo:/tmp/GMfifo1313'.
# - tasmanian +cuda cuda_arch=90 # tasmanian: conflicts with cuda@12
# - upcxx +cuda cuda_arch=90 # upcxx: needs NVIDIA driver
mirrors: { "mirror": "s3://spack-binaries/develop/e4s-arm-neoverse_v1" }
ci:
pipeline-gen:
- build-job:
image: "ghcr.io/spack/ubuntu20.04-runner-arm64-gcc-11.4:2023.08.01"
cdash:
build-group: E4S ARM Neoverse V1

View File

@@ -1,51 +1,22 @@
spack:
view: false
concretizer:
reuse: false
unify: false
compilers:
- compiler:
spec: oneapi@2023.2.1
paths:
cc: /opt/intel/oneapi/compiler/2023.2.1/linux/bin/icx
cxx: /opt/intel/oneapi/compiler/2023.2.1/linux/bin/icpx
f77: /opt/intel/oneapi/compiler/2023.2.1/linux/bin/ifx
fc: /opt/intel/oneapi/compiler/2023.2.1/linux/bin/ifx
flags: {}
operating_system: ubuntu20.04
target: x86_64
modules: []
environment: {}
extra_rpaths: []
- compiler:
spec: gcc@=11.4.0
paths:
cc: /usr/bin/gcc
cxx: /usr/bin/g++
f77: /usr/bin/gfortran
fc: /usr/bin/gfortran
flags: {}
operating_system: ubuntu20.04
target: x86_64
modules: []
environment: {}
extra_rpaths: []
packages:
all:
require: '%oneapi target=x86_64_v3'
require: '%oneapi'
providers:
blas: [openblas]
mpi: [mpich]
tbb: [intel-tbb]
target: [x86_64]
variants: +mpi
elfutils:
variants: +bzip2 ~nls +xz
hdf5:
require: "%gcc"
variants: +fortran +hl +shared
libfabric:
variants: fabrics=sockets,tcp,udp,rxm
libunwind:
@@ -63,12 +34,15 @@ spack:
variants: +pic
mesa:
version: [21.3.8]
hdf5:
require: "%gcc"
variants: +fortran +hl +shared
mpi:
require: 'mpich@4:'
require: "mpich"
mpich:
require: '~wrapperrpath ~hwloc'
require: '@4.1.1 ~wrapperrpath ~hwloc'
py-cryptography:
require: '@38.0.1'
require: '@38.0'
unzip:
require: '%gcc'
binutils:
@@ -86,12 +60,40 @@ spack:
require: '%gcc'
openssh:
require: '%gcc'
bison:
require: '%gcc'
libffi:
require: "@3.4.4"
dyninst:
require: "%gcc"
bison:
require: '%gcc'
compilers:
- compiler:
spec: oneapi@2023.2.0
paths:
cc: /opt/intel/oneapi/compiler/2023.2.0/linux/bin/icx
cxx: /opt/intel/oneapi/compiler/2023.2.0/linux/bin/icpx
f77: /opt/intel/oneapi/compiler/2023.2.0/linux/bin/ifx
fc: /opt/intel/oneapi/compiler/2023.2.0/linux/bin/ifx
flags: {}
operating_system: ubuntu20.04
target: x86_64
modules: []
environment: {}
extra_rpaths: []
- compiler:
spec: gcc@11.4.0
paths:
cc: /usr/bin/gcc
cxx: /usr/bin/g++
f77: /usr/bin/gfortran
fc: /usr/bin/gfortran
flags: {}
operating_system: ubuntu20.04
target: x86_64
modules: []
environment: {}
extra_rpaths: []
specs:
# CPU
@@ -99,6 +101,7 @@ spack:
- aml
- amrex
- arborx
- archer
- argobots
- axom
- bolt
@@ -111,21 +114,17 @@ spack:
- charliecloud
- conduit
- datatransferkit
- drishti
- exaworks
- flecsi
- flit
- flux-core
- fortrilinos
- gasnet
- ginkgo
- globalarrays
- gmp
- gotcha
- gptune ~mpispawn
- h5bench
- hdf5-vol-async
- hdf5-vol-cache
- hdf5-vol-log
- heffte +fftw
- hpx networking=mpi
@@ -135,22 +134,22 @@ spack:
- lammps
- lbann
- legion
- libnrm
- libpressio +bitgrooming +bzip2 ~cuda ~cusz +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp
- libnrm
- libquo
- libunwind
- loki
- mercury
- metall
- mfem
- mgard +serial +openmp +timing +unstructured ~cuda
- mpark-variant
- mpifileutils ~xattr
- nccmp
- nco
- netlib-scalapack
- nrm
- omega-h
- openmpi
- openpmd-api
- papi
- papyrus
- parsec ~cuda
@@ -160,18 +159,14 @@ spack:
- plasma
- plumed
- precice
- pruners-ninja
- pumi
- py-h5py
- py-jupyterhub
- py-libensemble
- py-petsc4py
- py-warpx
- qthreads scheduler=distrib
- quantum-espresso
- raja
- rempi
- scr
- slate ~cuda
- slepc
- stc
@@ -179,46 +174,53 @@ spack:
- sundials
- superlu
- superlu-dist
- swig@4.0.2-fortran
- sz3
- tasmanian
- tau +mpi +python
- trilinos +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long
- trilinos@13.0.1 +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long
- turbine
- umap
- umpire
- variorum
- wannier90
- xyce +mpi +shared +pymi +pymi_static_tpls
# INCLUDED IN ECP DAV CPU
- adios2 # mgard: mgard.tpp:63:48: error: non-constant-expression cannot be narrowed from type 'int' to 'unsigned long' in initializer list [-Wc++11-narrowing]
- ascent
- darshan-runtime
- darshan-util
- faodel
- hdf5
- libcatalyst
- parallel-netcdf
# - paraview # paraview: VTK/ThirdParty/cgns/vtkcgns/src/adfh/ADFH.c:2002:23: error: incompatible function pointer types passing 'herr_t (hid_t, const char *, const H5L_info1_t *, void *)' (aka 'int (long, const char *, const H5L_info1_t *, void *)') to parameter of type 'H5L_iterate2_t' (aka 'int (*)(long, const char *,const H5L_info2_t *, void *)') [-Wincompatible-function-pointer-types]
- py-cinemasci
- sz
- unifyfs
- veloc
# - visit # silo: https://github.com/spack/spack/issues/39538
- vtk-m ~openmp # https://github.com/spack/spack/issues/31830
- zfp
# - adios2
# - ascent
# - darshan-runtime
# - darshan-util
# - faodel
# - hdf5
# - libcatalyst
# - parallel-netcdf
# - paraview
# - py-cinemasci
# - sz
# - unifyfs
# - veloc
# - visit
# - vtk-m ~openmp # https://github.com/spack/spack/issues/31830
# - zfp
# --
# - alquimia # pflotran: https://github.com/spack/spack/issues/39474
# - archer # subsumed under llvm +libomp_tsan
# - dealii # dealii: https://github.com/spack/spack/issues/39482
# - dxt-explorer # r: https://github.com/spack/spack/issues/40257
# - ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 +paraview +pnetcdf +sz +unifyfs +veloc +visit +vtkm +zfp # embree: CMake Error at CMakeLists.txt:215 (MESSAGE): Unsupported compiler: IntelLLVM; qt: qtbase/src/corelib/global/qendian.h:333:54: error: incomplete type 'std::numeric_limits' used in nested name specifier
# - geopm # geopm issue: https://github.com/spack/spack/issues/38795
# - hpctoolkit # dyninst@12.3.0%gcc: /usr/bin/ld: libiberty/./d-demangle.c:142: undefined reference to `_intel_fast_memcpy'; can't mix intel-tbb@%oneapi with dyninst%gcc
# - mgard +serial +openmp +timing +unstructured ~cuda # mgard: mgard.tpp:63:48: error: non-constant-expression cannot be narrowed from type 'int' to 'unsigned long' in initializer list [-Wc++11-narrowing]
# - openfoam # cgal: https://github.com/spack/spack/issues/39481
# - openpmd-api # mgard: mgard.tpp:63:48: error: non-constant-expression cannot be narrowed from type 'int' to 'unsigned long' in initializer list [-Wc++11-narrowing]
# - swig@4.0.2-fortran # ?
# - upcxx # upcxx: /opt/intel/oneapi/mpi/2021.10.0//libfabric/bin/fi_info: error while loading shared libraries: libfabric.so.1: cannot open shared object file: No such file or directory
# - alquimia # pflotran: pflotran/hdf5_aux.F90(5): error #7013: This module file was not generated by any release of this compiler. [HDF5]
# - dealii # intel-tbb: icpx: error: unknown argument: '-flifetime-dse=1'
# - ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 +paraview +pnetcdf +sz +unifyfs +veloc +visit +vtkm +zfp # sz: hdf5-filter/H5Z-SZ/src/H5Z_SZ.c:24:9: error: call to undeclared function 'gettimeofday'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
# - geopm # geopm: In file included from src/ProfileTable.cpp:34: ./src/ProfileTable.hpp:79:45: error: no type named 'string' in namespace 'std'
# - ginkgo # ginkgo: icpx: error: clang frontend command failed with exit code 139 (use -v to see invocation)
# - gptune ~mpispawn # py-scipy: for_main.c:(.text+0x19): undefined reference to `MAIN__'
# - hdf5-vol-cache # /H5VLcache_ext.c:580:9: error: incompatible function pointer types initializing 'herr_t (*)(const void *, uint64_t *)' (aka 'int (*)(const void *, unsigned long *)') with an expression of type 'herr_t (const void *, unsigned int *)' (aka 'int (const void *, unsigned int *)') [-Wincompatible-function-pointer-types]
# - hpctoolkit # intel-tbb: icpx: error: unknown argument: '-flifetime-dse=1'
# - libpressio +bitgrooming +bzip2 ~cuda ~cusz +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp # py-numcodecs: c-blosc/internal-complibs/zlib-1.2.8/gzread.c:30:15: error: call to undeclared function 'read'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
# - nrm # py-scipy: for_main.c:(.text+0x19): undefined reference to `MAIN__'
# - openfoam # adios2: patch failed
# - pruners-ninja # pruners-ninja: ninja_test_pingpong.c:79:5: error: call to undeclared library function 'memset' with type 'void *(void *, int, unsigned long)'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
# - py-jupyterhub # py-ruamel-yaml-clib: setuptools/dist.py:287: SetuptoolsDeprecationWarning: The namespace_packages parameter is deprecated, consider using implicit namespaces instead (PEP 420). See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages
# - py-warpx ^warpx dims=2 # py-scipy: for_main.c:(.text+0x19): undefined reference to `MAIN__'
# - py-warpx ^warpx dims=3 # py-scipy: for_main.c:(.text+0x19): undefined reference to `MAIN__'
# - py-warpx ^warpx dims=rz # py-scipy: for_main.c:(.text+0x19): undefined reference to `MAIN__'
# - scr # libyogrt: configure: error: slurm is not in specified location!
# - tau +mpi +python # tau: x86_64/lib/Makefile.tau-icpx-papi-mpi-pthread-python-pdt: No such file or directory
# - upcxx # upcxx: /opt/intel/oneapi/mpi/2021.9.0//libfabric/bin/fi_info: error while loading shared libraries: libfabric.so.1: cannot open shared object file: No such file or directory
# - xyce +mpi +shared +pymi +pymi_static_tpls ^trilinos~shylu # cmake/tps.cmake:220 (message): Unable to compile against Trilinos. It is possible Trilinos was not properly configured, or the environment has changed since Trilinos was installed. See the CMake log files for more information.
# GPU
- aml +ze
@@ -227,21 +229,23 @@ spack:
- cabana +sycl ^kokkos +sycl +openmp cxxstd=17 +tests +examples
- kokkos +sycl +openmp cxxstd=17 +tests +examples
- kokkos-kernels build_type=Release %oneapi ^kokkos +sycl +openmp cxxstd=17 +tests +examples
- tau +mpi +opencl +level_zero ~pdt # tau: requires libdrm.so to be installed
- slate +sycl
# --
# - ginkgo +oneapi # InstallError: Ginkgo's oneAPI backend requires theDPC++ compiler as main CXX compiler.
# - hpctoolkit +level_zero # dyninst@12.3.0%gcc: /usr/bin/ld: libiberty/./d-demangle.c:142: undefined reference to `_intel_fast_memcpy'; can't mix intel-tbb@%oneapi with dyninst%gcc
# - hpctoolkit +level_zero # intel-tbb: icpx: error: unknown argument: '-flifetime-dse=1'
# - sundials +sycl cxxstd=17 # sundials: include/sunmemory/sunmemory_sycl.h:20:10: fatal error: 'CL/sycl.hpp' file not found
# - tau +mpi +opencl +level_zero ~pdt # builds ok in container, but needs libdrm, will update container
# SKIPPED
# - nvhpc
# - dyninst # only %gcc
- py-scipy
mirrors: { "mirror": "s3://spack-binaries/develop/e4s-oneapi" }
ci:
pipeline-gen:
- build-job:
image: ghcr.io/spack/ubuntu20.04-runner-amd64-oneapi-2023.2.1:2023.08.01
image: ecpe4s/ubuntu20.04-runner-x86_64-oneapi:2023.07.21
cdash:
build-group: E4S OneAPI

View File

@@ -1,35 +1,19 @@
spack:
view: false
concretizer:
reuse: false
unify: false
compilers:
- compiler:
spec: gcc@9.4.0
paths:
cc: /usr/bin/gcc
cxx: /usr/bin/g++
f77: /usr/bin/gfortran
fc: /usr/bin/gfortran
flags: {}
operating_system: ubuntu20.04
target: ppc64le
modules: []
environment: {}
extra_rpaths: []
packages:
all:
require: "%gcc@9.4.0 target=ppc64le"
compiler: [gcc@9.4.0]
compiler: [gcc@11.1.0]
providers:
blas: [openblas]
mpi: [mpich]
target: [ppc64le]
variants: +mpi cuda_arch=70
tbb:
require: intel-tbb
binutils:
variants: +ld +gold +headers +libiberty ~nls
cuda:
version: [11.7.0]
elfutils:
variants: +bzip2 ~nls +xz
hdf5:
@@ -38,34 +22,30 @@ spack:
variants: fabrics=sockets,tcp,udp,rxm
libunwind:
variants: +pic +xz
mpich:
variants: ~wrapperrpath
ncurses:
variants: +termlib
openblas:
variants: threads=openmp
paraview:
require: '@5.11 ~qt+osmesa'
trilinos:
variants: +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext
+ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu
+nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos
+teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long
require:
- one_of: [+amesos +amesos2 +anasazi +aztec +boost +epetra +epetraext +ifpack
+intrepid +intrepid2 +isorropia +kokkos +minitensor +nox +piro +phalanx
+rol +rythmos +sacado +stk +shards +stratimikos +tempus +tpetra
+trilinoscouplings +zoltan]
- one_of: [gotype=long_long, gotype=all]
- one_of: [~ml ~muelu ~zoltan2 ~teko, +ml +muelu +zoltan2 +teko]
- one_of: [+superlu-dist, ~superlu-dist]
- one_of: [+shylu, ~shylu]
xz:
variants: +pic
mesa:
version: [21.3.8]
mpi:
require: mpich
mpich:
require: '~wrapperrpath ~hwloc'
ncurses:
require: '@6.3 +termlib'
faodel:
require: "~tcmalloc"
tbb:
require: intel-tbb
libffi:
require: "@3.4.4"
vtk-m:
require: "+examples"
cuda:
require: "@11.4.4"
require: ~tcmalloc # needed for ppc64le
specs:
# CPU
@@ -77,8 +57,6 @@ spack:
- argobots
- axom
- bolt
- boost
- bricks
- butterflypack
- cabana
- caliper
@@ -86,10 +64,8 @@ spack:
- charliecloud
- conduit
- datatransferkit
- drishti
- dxt-explorer
- dyninst
# - ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 ~paraview +pnetcdf +sz +unifyfs +veloc ~visit +vtkm +zfp # +visit: libext, libxkbfile, libxrender, libxt, silo (https://github.com/spack/spack/issues/39538), cairo
- ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 ~paraview +pnetcdf +sz +unifyfs +veloc ~visit +vtkm +zfp # +paraview fails: FAILED: VTK/Filters/Statistics/CMakeFiles/FiltersStatistics-objects.dir/vtkPCAStatistics.cxx.o: /tmp/ccgvkIk5.s: Assembler messages: /tmp/ccgvkIk5.s:260012: Error: invalid machine `power10'
- exaworks
- flecsi
- flit
@@ -107,17 +83,15 @@ spack:
- hdf5-vol-log
- heffte +fftw
- hpctoolkit
- hpx networking=mpi
- hpx max_cpu_count=512 networking=mpi
- hypre
- kokkos +openmp
- kokkos-kernels +openmp
- lammps
- lbann
- legion
- libnrm
- libquo
- libunwind
- loki
- mercury
- metall
- mfem
@@ -130,23 +104,20 @@ spack:
- nrm
- nvhpc
- omega-h
- openfoam
- openmpi
- openpmd-api
- papi
- papyrus
- paraview ~cuda ~rocm
- parsec ~cuda
- pdt
- petsc
- phist
- plasma
- plumed
- precice
- pruners-ninja
- pumi
- py-h5py
- py-jupyterhub
- py-libensemble
- py-libensemble +mpi +nlopt
- py-petsc4py
- py-warpx
- qthreads scheduler=distrib
@@ -161,102 +132,84 @@ spack:
- sundials
- superlu
- superlu-dist
- swig
- swig@4.0.2-fortran
- sz3
- tasmanian
- tau +mpi +python # tau: has issue with `spack env depfile` build
- trilinos +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long
- tau +mpi +python
- trilinos +belos +ifpack2 +stokhos
- turbine
- umap
- umpire
- upcxx
- wannier90
- xyce +mpi +shared +pymi +pymi_static_tpls
# INCLUDED IN ECP DAV CPU
- adios2
- ascent
- darshan-runtime
- darshan-util
- faodel
- hdf5
- libcatalyst
- parallel-netcdf
- paraview
- py-cinemasci
- sz
- unifyfs
- veloc
# - visit # libext, libxkbfile, libxrender, libxt, silo (https://github.com/spack/spack/issues/39538), cairo
- vtk-m
- zfp
# --
# - archer # part of llvm +omp_tsan
# - dealii # fltk: https://github.com/spack/spack/issues/38791
# - geopm # geopm: https://github.com/spack/spack/issues/38798
# - libpressio +bitgrooming +bzip2 ~cuda ~cusz +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp # py-numcodecs: gcc: error: unrecognized command line option '-mno-sse2'; did you mean '-mno-isel'? gcc: error: unrecognized command line option '-mno-avx2'
# - phist +mpi # ghost@develop: gcc-9: error: unrecognized command line option '-march=native'; did you mean '-mcpu=native'?
# - variorum # variorum: https://github.com/spack/spack/issues/38786
- xyce +mpi +shared +pymi +pymi_static_tpls ^trilinos~shylu
# CUDA NOARCH
- bricks +cuda
- cabana +cuda ^kokkos +wrapper +cuda_lambda +cuda cuda_arch=70
# CUDA
- amrex +cuda
- arborx +cuda ^kokkos +wrapper
- cabana +cuda ^kokkos +wrapper +cuda_lambda +cuda
- caliper +cuda
- chai ~benchmarks ~tests +cuda ^umpire ~shared
- ecp-data-vis-sdk +cuda cuda_arch=70 +adios2 +hdf5 ~paraview +vtkm +zfp # +paraview fails: FAILED: VTK/Filters/Statistics/CMakeFiles/FiltersStatistics-objects.dir/vtkPCAStatistics.cxx.o; /tmp/ccjmJhb6.s: Assembler messages: /tmp/ccjmJhb6.s:260012: Error: invalid machine `power10'
- flecsi +cuda
- flux-core +cuda
- ginkgo +cuda
- heffte +cuda
- hpctoolkit +cuda
- hpx max_cpu_count=512 +cuda
- hypre +cuda
- kokkos +wrapper +cuda
- kokkos-kernels +cuda ^kokkos +wrapper +cuda +cuda_lambda
- magma +cuda
- mfem +cuda
- mgard +serial +openmp +timing +unstructured +cuda
- omega-h +cuda
- papi +cuda
- tau +mpi +cuda # tau: has issue with `spack env depfile` build
# --
# - legion +cuda # legion: needs NVIDIA driver
- petsc +cuda
- py-torch +cuda
- raja +cuda
- slate +cuda
- slepc +cuda
- strumpack ~slate +cuda
- sundials +cuda
- superlu-dist +cuda
- tasmanian +cuda
- tau +mpi +cuda
- "trilinos@13.4.0: +belos +ifpack2 +stokhos +cuda"
- umpire ~shared +cuda
- parsec +cuda
# CUDA 70
- amrex +cuda cuda_arch=70
- arborx +cuda cuda_arch=70 ^kokkos +wrapper
- caliper +cuda cuda_arch=70
- chai ~benchmarks ~tests +cuda cuda_arch=70 ^umpire ~shared
- ecp-data-vis-sdk ~rocm +adios2 ~ascent +hdf5 +vtkm +zfp ~paraview +cuda cuda_arch=70
- flecsi +cuda cuda_arch=70
- ginkgo +cuda cuda_arch=70
- heffte +cuda cuda_arch=70
- hpx +cuda cuda_arch=70
- hypre +cuda cuda_arch=70
- kokkos +wrapper +cuda cuda_arch=70
- kokkos-kernels +cuda cuda_arch=70 ^kokkos +wrapper +cuda cuda_arch=70
- magma +cuda cuda_arch=70
- mfem +cuda cuda_arch=70
- mgard +serial +openmp +timing +unstructured +cuda cuda_arch=70
- omega-h +cuda cuda_arch=70
- parsec +cuda cuda_arch=70
- petsc +cuda cuda_arch=70
- raja +cuda cuda_arch=70
- slate +cuda cuda_arch=70
- slepc +cuda cuda_arch=70
- strumpack ~slate +cuda cuda_arch=70
- sundials +cuda cuda_arch=70
- superlu-dist +cuda cuda_arch=70
- tasmanian +cuda cuda_arch=70
- umpire ~shared +cuda cuda_arch=70
# INCLUDED IN ECP DAV CUDA
- adios2 +cuda cuda_arch=70
# - ascent +cuda cuda_arch=70 # ascent: https://github.com/spack/spack/issues/38045
- paraview +cuda cuda_arch=70
- vtk-m +cuda cuda_arch=70
- zfp +cuda cuda_arch=70
# CPU FAILURES
# - archer # llvm@8
# - bricks # bricks
# - geopm # geopm
# - hdf5-vol-daos # hdf5-vol-daos: vhost/vhost_user.c:65:32: error: array size missing in 'vhost_message_handlers'
# - loki # loki
# - precice # precice
# - pruners-ninja # pruners-ninja
# - variorum # Intel/variorum_cpuid.c:11:5: error: impossible constraint in 'asm'
# --
# - axom +cuda cuda_arch=70 # axom: https://github.com/spack/spack/issues/29520
# - cusz +cuda cuda_arch=70 # cusz: https://github.com/spack/spack/issues/38787
# - dealii +cuda cuda_arch=70 # fltk: https://github.com/spack/spack/issues/38791
# - lammps +cuda cuda_arch=70 # lammps: needs NVIDIA driver
# - lbann +cuda cuda_arch=70 # lbann: https://github.com/spack/spack/issues/38788
# - libpressio +bitgrooming +bzip2 +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf +cusz +mgard +cuda cuda_arch=70 ^cusz +cuda cuda_arch=70 # depends_on("cuda@11.7.1:", when="+cuda")
# - py-torch +cuda cuda_arch=70 # skipped
# - trilinos +cuda cuda_arch=70 # trilinos: https://github.com/trilinos/Trilinos/issues/11630
# - upcxx +cuda cuda_arch=70 # upcxx: needs NVIDIA driver
# bricks: VSBrick-7pt.py-Scalar-8x8x8-1:30:3: error: 'vfloat512' was not declared in this scope
# fltk: /usr/bin/ld: ../lib/libfltk_png.a(pngrutil.o): in function `png_read_filter_row': pngrutil.c:(.text.png_read_filter_row+0x90): undefined reference to `png_init_filter_functions_vsx'
# geopm: libtool.m4: error: problem compiling CXX test program
# llvm@8: clang/lib/Lex/Lexer.cpp:2547:34: error: ISO C++ forbids declaration of 'type name' with no type [-fpermissive]
# loki: include/loki/SmallObj.h:462:57: error: ISO C++17 does not allow dynamic exception specifications
# precice: /tmp/ccYNMwgE.s: Assembler messages: /tmp/ccYNMwgE.s:278115: Error: invalid machine `power10'
# pruners-ninja: test/ninja_test_util.c:34: multiple definition of `a';
# CUDA FAILURES
# - bricks +cuda # bricks
# - dealii +cuda # fltk
# --
# bricks: VSBrick-7pt.py-Scalar-8x8x8-1:30:3: error: 'vfloat512' was not declared in this scope
mirrors: { "mirror": "s3://spack-binaries/develop/e4s-power" }
ci:
pipeline-gen:
- build-job:
image: ghcr.io/spack/ubuntu20.04-runner-ppc64-gcc-11.4:2023.08.01
image: ecpe4s/ubuntu20.04-runner-ppc64le:2023-01-01
cdash:
build-group: E4S Power

View File

@@ -1,346 +0,0 @@
spack:
view: false
concretizer:
reuse: false
unify: false
compilers:
- compiler:
spec: gcc@=11.4.0
paths:
cc: /usr/bin/gcc
cxx: /usr/bin/g++
f77: /usr/bin/gfortran
fc: /usr/bin/gfortran
flags: {}
operating_system: ubuntu20.04
target: x86_64
modules: []
environment: {}
extra_rpaths: []
packages:
all:
require: '%gcc target=x86_64_v3'
providers:
blas: [openblas]
mpi: [mpich]
variants: +mpi
binutils:
variants: +ld +gold +headers +libiberty ~nls
elfutils:
variants: +bzip2 ~nls +xz
hdf5:
variants: +fortran +hl +shared
libfabric:
variants: fabrics=sockets,tcp,udp,rxm
libunwind:
variants: +pic +xz
openblas:
variants: threads=openmp
trilinos:
variants: +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext
+ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu
+nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos
+teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long
xz:
variants: +pic
mesa:
version: [21.3.8]
mpi:
require: mpich
mpich:
require: '~wrapperrpath ~hwloc'
ncurses:
require: '@6.3 +termlib'
tbb:
require: intel-tbb
boost:
version: [1.79.0]
variants: +atomic +chrono +container +date_time +exception +filesystem +graph
+iostreams +locale +log +math +mpi +multithreaded +program_options +random
+regex +serialization +shared +signals +stacktrace +system +test +thread +timer
cxxstd=17 visibility=global
libffi:
require: "@3.4.4"
vtk-m:
require: "+examples"
cuda:
version: [11.8.0]
paraview:
# Don't build GUI support or GLX rendering for HPC/container deployments
require: "@5.11 ~qt+osmesa"
# ROCm 5.4.3
comgr:
buildable: false
externals:
- spec: comgr@5.4.3
prefix: /opt/rocm-5.4.3/
hip-rocclr:
buildable: false
externals:
- spec: hip-rocclr@5.4.3
prefix: /opt/rocm-5.4.3/hip
hipblas:
buildable: false
externals:
- spec: hipblas@5.4.3
prefix: /opt/rocm-5.4.3/
hipcub:
buildable: false
externals:
- spec: hipcub@5.4.3
prefix: /opt/rocm-5.4.3/
hipfft:
buildable: false
externals:
- spec: hipfft@5.4.3
prefix: /opt/rocm-5.4.3/
hipsparse:
buildable: false
externals:
- spec: hipsparse@5.4.3
prefix: /opt/rocm-5.4.3/
miopen-hip:
buildable: false
externals:
- spec: hip-rocclr@5.4.3
prefix: /opt/rocm-5.4.3/
miopengemm:
buildable: false
externals:
- spec: miopengemm@5.4.3
prefix: /opt/rocm-5.4.3/
rccl:
buildable: false
externals:
- spec: rccl@5.4.3
prefix: /opt/rocm-5.4.3/
rocblas:
buildable: false
externals:
- spec: rocblas@5.4.3
prefix: /opt/rocm-5.4.3/
rocfft:
buildable: false
externals:
- spec: rocfft@5.4.3
prefix: /opt/rocm-5.4.3/
rocm-clang-ocl:
buildable: false
externals:
- spec: rocm-clang-ocl@5.4.3
prefix: /opt/rocm-5.4.3/
rocm-cmake:
buildable: false
externals:
- spec: rocm-cmake@5.4.3
prefix: /opt/rocm-5.4.3/
rocm-dbgapi:
buildable: false
externals:
- spec: rocm-dbgapi@5.4.3
prefix: /opt/rocm-5.4.3/
rocm-debug-agent:
buildable: false
externals:
- spec: rocm-debug-agent@5.4.3
prefix: /opt/rocm-5.4.3/
rocm-device-libs:
buildable: false
externals:
- spec: rocm-device-libs@5.4.3
prefix: /opt/rocm-5.4.3/
rocm-gdb:
buildable: false
externals:
- spec: rocm-gdb@5.4.3
prefix: /opt/rocm-5.4.3/
rocm-opencl:
buildable: false
externals:
- spec: rocm-opencl@5.4.3
prefix: /opt/rocm-5.4.3/opencl
rocm-smi-lib:
buildable: false
externals:
- spec: rocm-smi-lib@5.4.3
prefix: /opt/rocm-5.4.3/
hip:
buildable: false
externals:
- spec: hip@5.4.3
prefix: /opt/rocm-5.4.3
extra_attributes:
compilers:
c: /opt/rocm-5.4.3/llvm/bin/clang++
c++: /opt/rocm-5.4.3/llvm/bin/clang++
hip: /opt/rocm-5.4.3/hip/bin/hipcc
hipify-clang:
buildable: false
externals:
- spec: hipify-clang@5.4.3
prefix: /opt/rocm-5.4.3
llvm-amdgpu:
buildable: false
externals:
- spec: llvm-amdgpu@5.4.3
prefix: /opt/rocm-5.4.3/llvm
extra_attributes:
compilers:
c: /opt/rocm-5.4.3/llvm/bin/clang++
cxx: /opt/rocm-5.4.3/llvm/bin/clang++
hsakmt-roct:
buildable: false
externals:
- spec: hsakmt-roct@5.4.3
prefix: /opt/rocm-5.4.3/
hsa-rocr-dev:
buildable: false
externals:
- spec: hsa-rocr-dev@5.4.3
prefix: /opt/rocm-5.4.3/
extra_atributes:
compilers:
c: /opt/rocm-5.4.3/llvm/bin/clang++
cxx: /opt/rocm-5.4.3/llvm/bin/clang++
roctracer-dev-api:
buildable: false
externals:
- spec: roctracer-dev-api@5.4.3
prefix: /opt/rocm-5.4.3
roctracer-dev:
buildable: false
externals:
- spec: roctracer-dev@4.5.3
prefix: /opt/rocm-5.4.3
rocprim:
buildable: false
externals:
- spec: rocprim@5.4.3
prefix: /opt/rocm-5.4.3
rocrand:
buildable: false
externals:
- spec: rocrand@5.4.3
prefix: /opt/rocm-5.4.3
hipsolver:
buildable: false
externals:
- spec: hipsolver@5.4.3
prefix: /opt/rocm-5.4.3
rocsolver:
buildable: false
externals:
- spec: rocsolver@5.4.3
prefix: /opt/rocm-5.4.3
rocsparse:
buildable: false
externals:
- spec: rocsparse@5.4.3
prefix: /opt/rocm-5.4.3
rocthrust:
buildable: false
externals:
- spec: rocthrust@5.4.3
prefix: /opt/rocm-5.4.3
rocprofiler-dev:
buildable: false
externals:
- spec: rocprofiler-dev@5.4.3
prefix: /opt/rocm-5.4.3
specs:
# ROCM NOARCH
- hpctoolkit +rocm
- tau +mpi +rocm # tau: has issue with `spack env depfile` build
# ROCM 908
- amrex +rocm amdgpu_target=gfx908
- arborx +rocm amdgpu_target=gfx908
- cabana +rocm amdgpu_target=gfx908
- caliper +rocm amdgpu_target=gfx908
- chai ~benchmarks +rocm amdgpu_target=gfx908
- ecp-data-vis-sdk +paraview +vtkm +rocm amdgpu_target=gfx908
- gasnet +rocm amdgpu_target=gfx908
- ginkgo +rocm amdgpu_target=gfx908
- heffte +rocm amdgpu_target=gfx908
- hpx +rocm amdgpu_target=gfx908
- hypre +rocm amdgpu_target=gfx908
- kokkos +rocm amdgpu_target=gfx908
- legion +rocm amdgpu_target=gfx908
- magma ~cuda +rocm amdgpu_target=gfx908
- mfem +rocm amdgpu_target=gfx908
- petsc +rocm amdgpu_target=gfx908
- raja ~openmp +rocm amdgpu_target=gfx908
- slate +rocm amdgpu_target=gfx908
- slepc +rocm amdgpu_target=gfx908 ^petsc +rocm amdgpu_target=gfx908
- strumpack ~slate +rocm amdgpu_target=gfx908
- sundials +rocm amdgpu_target=gfx908
- superlu-dist +rocm amdgpu_target=gfx908
- tasmanian ~openmp +rocm amdgpu_target=gfx908
- trilinos +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext +ifpack ~ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu ~stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long +rocm amdgpu_target=gfx908
- umpire +rocm amdgpu_target=gfx908
- upcxx +rocm amdgpu_target=gfx908
# INCLUDED IN ECP DAV ROCM
# - hdf5
# - hdf5-vol-async
# - hdf5-vol-cache
# - hdf5-vol-log
# - libcatalyst
- paraview +rocm amdgpu_target=gfx908
# - vtk-m ~openmp +rocm amdgpu_target=gfx908 # vtk-m: https://github.com/spack/spack/issues/40268
# --
# - lbann ~cuda +rocm amdgpu_target=gfx908 # aluminum: https://github.com/spack/spack/issues/38807
# - papi +rocm amdgpu_target=gfx908 # papi: https://github.com/spack/spack/issues/27898
# ROCM 90a
- amrex +rocm amdgpu_target=gfx90a
- arborx +rocm amdgpu_target=gfx90a
- cabana +rocm amdgpu_target=gfx90a
- caliper +rocm amdgpu_target=gfx90a
- chai ~benchmarks +rocm amdgpu_target=gfx90a
- ecp-data-vis-sdk +paraview +vtkm +rocm amdgpu_target=gfx90a
- gasnet +rocm amdgpu_target=gfx90a
- ginkgo +rocm amdgpu_target=gfx90a
- heffte +rocm amdgpu_target=gfx90a
- hpx +rocm amdgpu_target=gfx90a
- hypre +rocm amdgpu_target=gfx90a
- kokkos +rocm amdgpu_target=gfx90a
- legion +rocm amdgpu_target=gfx90a
- magma ~cuda +rocm amdgpu_target=gfx90a
- mfem +rocm amdgpu_target=gfx90a
- petsc +rocm amdgpu_target=gfx90a
- raja ~openmp +rocm amdgpu_target=gfx90a
- slate +rocm amdgpu_target=gfx90a
- slepc +rocm amdgpu_target=gfx90a ^petsc +rocm amdgpu_target=gfx90a
- strumpack ~slate +rocm amdgpu_target=gfx90a
- sundials +rocm amdgpu_target=gfx90a
- superlu-dist +rocm amdgpu_target=gfx90a
- tasmanian ~openmp +rocm amdgpu_target=gfx90a
- trilinos +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext +ifpack ~ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu ~stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long +rocm amdgpu_target=gfx90a
- umpire +rocm amdgpu_target=gfx90a
- upcxx +rocm amdgpu_target=gfx90a
# INCLUDED IN ECP DAV ROCM
# - hdf5
# - hdf5-vol-async
# - hdf5-vol-cache
# - hdf5-vol-log
# - libcatalyst
- paraview +rocm amdgpu_target=gfx90a
# - vtk-m ~openmp +rocm amdgpu_target=gfx90a # vtk-m: https://github.com/spack/spack/issues/40268
# --
# - lbann ~cuda +rocm amdgpu_target=gfx90a # aluminum: https://github.com/spack/spack/issues/38807
# - papi +rocm amdgpu_target=gfx90a # papi: https://github.com/spack/spack/issues/27898
mirrors: { "mirror": "s3://spack-binaries/develop/e4s-rocm-external" }
ci:
pipeline-gen:
- build-job:
image: "ghcr.io/spack/ubuntu20.04-runner-amd64-gcc-11.4-rocm5.4.3:2023.08.01"
cdash:
build-group: E4S ROCm External

View File

@@ -1,34 +1,21 @@
spack:
view: false
concretizer:
reuse: false
unify: false
compilers:
- compiler:
spec: gcc@=11.4.0
paths:
cc: /usr/bin/gcc
cxx: /usr/bin/g++
f77: /usr/bin/gfortran
fc: /usr/bin/gfortran
flags: {}
operating_system: ubuntu20.04
target: x86_64
modules: []
environment: {}
extra_rpaths: []
packages:
all:
require: '%gcc target=x86_64_v3'
compiler: [gcc@11.1.0]
providers:
blas: [openblas]
mpi: [mpich]
variants: +mpi
require: target=x86_64_v3
variants: +mpi amdgpu_target=gfx90a cuda_arch=80
tbb:
require: "intel-tbb"
binutils:
variants: +ld +gold +headers +libiberty ~nls
boost:
variants: +python +filesystem +iostreams +system
cuda:
version: [11.7.0]
elfutils:
variants: +bzip2 ~nls +xz
hdf5:
@@ -37,40 +24,29 @@ spack:
variants: fabrics=sockets,tcp,udp,rxm
libunwind:
variants: +pic +xz
mpich:
variants: ~wrapperrpath
ncurses:
variants: +termlib
openblas:
variants: threads=openmp
paraview:
# Don't build GUI support or GLX rendering for HPC/container deployments
require: "@5.11 ~qt+osmesa"
trilinos:
variants: +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext
+ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu
+nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos
+teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long
require:
- one_of: [+amesos +amesos2 +anasazi +aztec +boost +epetra +epetraext +ifpack
+intrepid +intrepid2 +isorropia +kokkos +minitensor +nox +piro +phalanx
+rol +rythmos +sacado +stk +shards +stratimikos +tempus +tpetra
+trilinoscouplings +zoltan]
- one_of: [gotype=long_long, gotype=all]
- one_of: [~ml ~muelu ~zoltan2 ~teko, +ml +muelu +zoltan2 +teko]
- one_of: [+superlu-dist, ~superlu-dist]
- one_of: [+shylu, ~shylu]
xz:
variants: +pic
mesa:
version: [21.3.8]
mpi:
require: mpich
mpich:
require: '~wrapperrpath ~hwloc'
ncurses:
require: '@6.3 +termlib'
tbb:
require: intel-tbb
boost:
version: [1.79.0]
variants: +atomic +chrono +container +date_time +exception +filesystem +graph
+iostreams +locale +log +math +mpi +multithreaded +program_options +random
+regex +serialization +shared +signals +stacktrace +system +test +thread +timer
cxxstd=17 visibility=global
libffi:
require: "@3.4.4"
vtk-m:
require: "+examples"
cuda:
version: [11.8.0]
paraview:
# Don't build GUI support or GLX rendering for HPC/container deployments
require: "@5.11 ~qt+osmesa"
specs:
# CPU
@@ -79,12 +55,13 @@ spack:
- aml
- amrex
- arborx
- archer
- argobots
- axom
- bolt
- boost
- bricks ~cuda
- bricks
- butterflypack
- boost +python +filesystem +iostreams +system
- cabana
- caliper
- chai ~benchmarks ~tests
@@ -92,10 +69,8 @@ spack:
- conduit
- datatransferkit
- dealii
- drishti
- dxt-explorer
- dyninst
- ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 +paraview +pnetcdf +sz +unifyfs +veloc +visit +vtkm +zfp # adios2~cuda, ascent~cuda, darshan-runtime, darshan-util, faodel, hdf5, libcatalyst, parallel-netcdf, paraview~cuda, py-cinemasci, sz, unifyfs, veloc, visit, vtk-m, zfp
- ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 +paraview +pnetcdf +sz +unifyfs +veloc ~visit +vtkm +zfp ^hdf5@1.14
- exaworks
- flecsi
- flit
@@ -106,25 +81,24 @@ spack:
- globalarrays
- gmp
- gotcha
- gptune ~mpispawn
- gptune
- h5bench
- hdf5-vol-async
- hdf5-vol-cache
- hdf5-vol-log
- heffte +fftw
- hpctoolkit
- hpx networking=mpi
- hpx max_cpu_count=512 networking=mpi
- hypre
- kokkos +openmp
- kokkos-kernels +openmp
- lammps
- lbann
- legion
- libnrm
- libpressio +bitgrooming +bzip2 ~cuda ~cusz +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp
- libpressio +bitgrooming +bzip2 ~cuda ~cusz +fpzip +hdf5 +libdistributed
+lua +openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf +mgard
- libquo
- libunwind
- loki
- mercury
- metall
- mfem
@@ -137,7 +111,6 @@ spack:
- nrm
- nvhpc
- omega-h
- openfoam
- openmpi
- openpmd-api
- papi
@@ -149,17 +122,16 @@ spack:
- plasma
- plumed
- precice
- pruners-ninja
- pumi
- py-h5py
- py-h5py +mpi
- py-h5py ~mpi
- py-jupyterhub
- py-libensemble
- py-libensemble +mpi +nlopt
- py-petsc4py
- py-warpx
- qthreads scheduler=distrib
- quantum-espresso
- raja
- rempi
- scr
- slate ~cuda
- slepc
@@ -168,226 +140,107 @@ spack:
- sundials
- superlu
- superlu-dist
- swig
- swig@4.0.2-fortran
- sz3
- tasmanian
- tau +mpi +python
- trilinos +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long
- trilinos@13.0.1 +belos +ifpack2 +stokhos
- turbine
- umap
- umpire
- upcxx
- variorum
- wannier90
- xyce +mpi +shared +pymi +pymi_static_tpls
# INCLUDED IN ECP DAV CPU
- adios2
- ascent
- darshan-runtime
- darshan-util
- faodel
- hdf5
- libcatalyst
- parallel-netcdf
- paraview
- py-cinemasci
- sz
- unifyfs
- veloc
# - visit # silo: https://github.com/spack/spack/issues/39538
- vtk-m
- zfp
# --
# - archer # submerged into llvm +libomp_tsan
# - geopm # geopm: https://github.com/spack/spack/issues/38795
- wannier90
- xyce +mpi +shared +pymi +pymi_static_tpls ^trilinos +shylu
# CUDA NOARCH
# CUDA
- amrex +cuda
- arborx +cuda ^kokkos +wrapper
- bricks +cuda
- cabana +cuda ^kokkos +wrapper +cuda_lambda +cuda
- caliper +cuda
- chai ~benchmarks ~tests +cuda ^umpire ~shared
- cusz +cuda
- dealii +cuda
- ecp-data-vis-sdk +cuda ~ascent +adios2 +hdf5 +paraview +sz +vtkm +zfp ^hdf5@1.14 # Removing ascent because RAJA build failure
- flecsi +cuda
- flux-core +cuda
- ginkgo +cuda
- heffte +cuda
- hpctoolkit +cuda
- hpx max_cpu_count=512 +cuda
- hypre +cuda
- kokkos +wrapper +cuda
- kokkos-kernels +cuda ^kokkos +wrapper +cuda +cuda_lambda
- libpressio +bitgrooming +bzip2 +fpzip +hdf5 +libdistributed +lua
+openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf +cusz
+mgard +cuda ^cusz +cuda
- magma +cuda
- mfem +cuda
- mgard +serial +openmp +timing +unstructured +cuda
- omega-h +cuda
- papi +cuda
- petsc +cuda
- py-torch +cuda
- raja +cuda
- slate +cuda
- slepc +cuda
- strumpack ~slate +cuda
- sundials +cuda
- superlu-dist +cuda
- tasmanian +cuda
- tau +mpi +cuda
# --
# - legion +cuda # legion: needs NVIDIA driver
- "trilinos@13.4.0: +belos +ifpack2 +stokhos +cuda"
- umpire ~shared +cuda
# CUDA 80
- amrex +cuda cuda_arch=80
- arborx +cuda cuda_arch=80 ^kokkos +wrapper
- cabana +cuda cuda_arch=80 ^kokkos +wrapper +cuda_lambda +cuda cuda_arch=80
- caliper +cuda cuda_arch=80
- chai ~benchmarks ~tests +cuda cuda_arch=80 ^umpire ~shared
- cusz +cuda cuda_arch=80
- dealii +cuda cuda_arch=80
- ecp-data-vis-sdk ~rocm +adios2 ~ascent +hdf5 +vtkm +zfp +paraview +cuda cuda_arch=80 # +ascent fails because fides fetch error
- flecsi +cuda cuda_arch=80
- ginkgo +cuda cuda_arch=80
- heffte +cuda cuda_arch=80
- hpx +cuda cuda_arch=80
- hypre +cuda cuda_arch=80
- kokkos +wrapper +cuda cuda_arch=80
- kokkos-kernels +cuda cuda_arch=80 ^kokkos +wrapper +cuda cuda_arch=80
- libpressio +bitgrooming +bzip2 +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf +cusz +mgard +cuda cuda_arch=80 ^cusz +cuda cuda_arch=80
- magma +cuda cuda_arch=80
- mfem +cuda cuda_arch=80
- mgard +serial +openmp +timing +unstructured +cuda cuda_arch=80
- omega-h +cuda cuda_arch=80
- parsec +cuda cuda_arch=80
- petsc +cuda cuda_arch=80
- py-torch +cuda cuda_arch=80
- raja +cuda cuda_arch=80
- slate +cuda cuda_arch=80
- slepc +cuda cuda_arch=80
- strumpack ~slate +cuda cuda_arch=80
- sundials +cuda cuda_arch=80
- superlu-dist +cuda cuda_arch=80
- tasmanian +cuda cuda_arch=80
- trilinos +cuda cuda_arch=80
- umpire ~shared +cuda cuda_arch=80
# INCLUDED IN ECP DAV CUDA
# - adios2 +cuda cuda_arch=80
# - ascent +cuda cuda_arch=80 # ascent: https://github.com/spack/spack/issues/38045
# - paraview +cuda cuda_arch=80
# - vtk-m +cuda cuda_arch=80
# - zfp +cuda cuda_arch=80
# --
# - lammps +cuda cuda_arch=80 # lammps: needs NVIDIA driver
# - upcxx +cuda cuda_arch=80 # upcxx: needs NVIDIA driver
# - axom +cuda cuda_arch=80 # axom: https://github.com/spack/spack/issues/29520
# - lbann +cuda cuda_arch=80 # lbann: https://github.com/spack/spack/issues/38788
# CUDA 90
- amrex +cuda cuda_arch=90
- arborx +cuda cuda_arch=90 ^kokkos +wrapper
- cabana +cuda cuda_arch=90 ^kokkos +wrapper +cuda_lambda +cuda cuda_arch=90
- caliper +cuda cuda_arch=90
- chai ~benchmarks ~tests +cuda cuda_arch=90 ^umpire ~shared
- cusz +cuda cuda_arch=90
- flecsi +cuda cuda_arch=90
- ginkgo +cuda cuda_arch=90
- heffte +cuda cuda_arch=90
- hpx +cuda cuda_arch=90
- kokkos +wrapper +cuda cuda_arch=90
- kokkos-kernels +cuda cuda_arch=90 ^kokkos +wrapper +cuda cuda_arch=90
- libpressio +bitgrooming +bzip2 +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf +cusz +mgard +cuda cuda_arch=90 ^cusz +cuda cuda_arch=90
- magma +cuda cuda_arch=90
- mfem +cuda cuda_arch=90
- mgard +serial +openmp +timing +unstructured +cuda cuda_arch=90
- parsec +cuda cuda_arch=90
- petsc +cuda cuda_arch=90
- py-torch +cuda cuda_arch=90
- raja +cuda cuda_arch=90
- slate +cuda cuda_arch=90
- slepc +cuda cuda_arch=90
- strumpack ~slate +cuda cuda_arch=90
- sundials +cuda cuda_arch=90
- superlu-dist +cuda cuda_arch=90
- trilinos +cuda cuda_arch=90
- umpire ~shared +cuda cuda_arch=90
# INCLUDED IN ECP DAV CUDA
- adios2 +cuda cuda_arch=90
# - ascent +cuda cuda_arch=90 # ascent: https://github.com/spack/spack/issues/38045
# - paraview +cuda cuda_arch=90 # paraview: InstallError: Incompatible cuda_arch=90
- vtk-m +cuda cuda_arch=90
- zfp +cuda cuda_arch=90
# --
# - axom +cuda cuda_arch=90 # axom: https://github.com/spack/spack/issues/29520
# - dealii +cuda cuda_arch=90 # dealii: https://github.com/spack/spack/issues/39532
# - ecp-data-vis-sdk ~rocm +adios2 +ascent +hdf5 +vtkm +zfp +paraview +cuda cuda_arch=90 # paraview: incompatible cuda_arch; vtk-m: CMake Error at CMake/VTKmWrappers.cmake:413 (message): vtkm_cont needs to be built STATIC as CUDA doesn't support virtual methods across dynamic library boundaries. You need to set the CMake opt ion BUILD_SHARED_LIBS to `OFF` or (better) turn VTKm_NO_DEPRECATED_VIRTUAL to `ON`.
# - hypre +cuda cuda_arch=90 # concretizer: hypre +cuda requires cuda@:11, but cuda_arch=90 requires cuda@12:
# - lammps +cuda cuda_arch=90 # lammps: needs NVIDIA driver
# - lbann +cuda cuda_arch=90 # concretizer: Cannot select a single "version" for package "lbann"
# - omega-h +cuda cuda_arch=90 # omega-h: https://github.com/spack/spack/issues/39535
# - tasmanian +cuda cuda_arch=90 # tasmanian: conflicts with cuda@12
# - upcxx +cuda cuda_arch=90 # upcxx: needs NVIDIA driver
# ROCM NOARCH
# ROCm
- amrex +rocm
- arborx +rocm
- cabana +rocm
- caliper +rocm
- chai ~benchmarks +rocm
- ecp-data-vis-sdk +adios2 +hdf5 +paraview +pnetcdf +sz +vtkm +zfp +rocm ^hdf5@1.14 # Excludes ascent for now due to C++ standard issues
- gasnet +rocm
- ginkgo +rocm
- heffte +rocm
- hpctoolkit +rocm
- tau +mpi +rocm # tau: has issue with `spack env depfile` build
- hpx max_cpu_count=512 +rocm
- hypre +rocm
- kokkos +rocm
- magma ~cuda +rocm
- mfem +rocm
- papi +rocm
- petsc +rocm
- raja ~openmp +rocm
- slate +rocm
- slepc +rocm ^petsc +rocm
- strumpack ~slate +rocm
- sundials +rocm
- superlu-dist +rocm
- tasmanian ~openmp +rocm
- tau +mpi +rocm
- "trilinos@13.4.0: +belos ~ifpack2 ~stokhos +rocm"
- umpire +rocm
- upcxx +rocm
# ROCM 908
- amrex +rocm amdgpu_target=gfx908
- arborx +rocm amdgpu_target=gfx908
- cabana +rocm amdgpu_target=gfx908
- caliper +rocm amdgpu_target=gfx908
- chai ~benchmarks +rocm amdgpu_target=gfx908
- ecp-data-vis-sdk +paraview +vtkm +rocm amdgpu_target=gfx908
- gasnet +rocm amdgpu_target=gfx908
- ginkgo +rocm amdgpu_target=gfx908
- heffte +rocm amdgpu_target=gfx908
- hpx +rocm amdgpu_target=gfx908
- hypre +rocm amdgpu_target=gfx908
- kokkos +rocm amdgpu_target=gfx908
- legion +rocm amdgpu_target=gfx908
- magma ~cuda +rocm amdgpu_target=gfx908
- mfem +rocm amdgpu_target=gfx908
- petsc +rocm amdgpu_target=gfx908
- raja ~openmp +rocm amdgpu_target=gfx908
- slate +rocm amdgpu_target=gfx908
- slepc +rocm amdgpu_target=gfx908 ^petsc +rocm amdgpu_target=gfx908
- strumpack ~slate +rocm amdgpu_target=gfx908
- sundials +rocm amdgpu_target=gfx908
- superlu-dist +rocm amdgpu_target=gfx908
- tasmanian ~openmp +rocm amdgpu_target=gfx908
- trilinos +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext +ifpack ~ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu ~stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long +rocm amdgpu_target=gfx908
- umpire +rocm amdgpu_target=gfx908
- upcxx +rocm amdgpu_target=gfx908
# INCLUDED IN ECP DAV ROCM
# - hdf5
# - hdf5-vol-async
# - hdf5-vol-cache
# - hdf5-vol-log
# - libcatalyst
- paraview +rocm amdgpu_target=gfx908
# - vtk-m ~openmp +rocm amdgpu_target=gfx908 # vtk-m: https://github.com/spack/spack/issues/40268
# --
# - lbann ~cuda +rocm amdgpu_target=gfx908 # aluminum: https://github.com/spack/spack/issues/38807
# - papi +rocm amdgpu_target=gfx908 # papi: https://github.com/spack/spack/issues/27898
# CPU failures
# - geopm # /usr/include/x86_64-linux-gnu/bits/string_fortified.h:95:10: error:'__builtin_strncpy' specified bound 512 equals destination size [-Werror=stringop-truncation]
# - hdf5-vol-daos # hdf5-vol-daos: vhost/vhost_user.c:65:32: error: array size missing in 'vhost_message_handlers'
# - loki # ../include/loki/Singleton.h:158:14: warning: 'template<class> class std::auto_ptr' is deprecated: use 'std::unique_ptr' instead [-Wdeprecated-declarations]
# - pruners-ninja # test/ninja_test_util.c:34: multiple definition of `a';
# - rempi # rempi_message_manager.h:53:3: error: 'string' does not name a type
# ROCM 90a
- amrex +rocm amdgpu_target=gfx90a
- arborx +rocm amdgpu_target=gfx90a
- cabana +rocm amdgpu_target=gfx90a
- caliper +rocm amdgpu_target=gfx90a
- chai ~benchmarks +rocm amdgpu_target=gfx90a
- ecp-data-vis-sdk +paraview +vtkm +rocm amdgpu_target=gfx90a
- gasnet +rocm amdgpu_target=gfx90a
- ginkgo +rocm amdgpu_target=gfx90a
- heffte +rocm amdgpu_target=gfx90a
- hpx +rocm amdgpu_target=gfx90a
- hypre +rocm amdgpu_target=gfx90a
- kokkos +rocm amdgpu_target=gfx90a
- legion +rocm amdgpu_target=gfx90a
- magma ~cuda +rocm amdgpu_target=gfx90a
- mfem +rocm amdgpu_target=gfx90a
- petsc +rocm amdgpu_target=gfx90a
- raja ~openmp +rocm amdgpu_target=gfx90a
- slate +rocm amdgpu_target=gfx90a
- slepc +rocm amdgpu_target=gfx90a ^petsc +rocm amdgpu_target=gfx90a
- strumpack ~slate +rocm amdgpu_target=gfx90a
- sundials +rocm amdgpu_target=gfx90a
- superlu-dist +rocm amdgpu_target=gfx90a
- tasmanian ~openmp +rocm amdgpu_target=gfx90a
- trilinos +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext +ifpack ~ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu ~stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long +rocm amdgpu_target=gfx90a
- umpire +rocm amdgpu_target=gfx90a
- upcxx +rocm amdgpu_target=gfx90a
# INCLUDED IN ECP DAV ROCM
# - hdf5
# - hdf5-vol-async
# - hdf5-vol-cache
# - hdf5-vol-log
# - libcatalyst
- paraview +rocm amdgpu_target=gfx90a
# - vtk-m ~openmp +rocm amdgpu_target=gfx90a # vtk-m: https://github.com/spack/spack/issues/40268
# --
# - lbann ~cuda +rocm amdgpu_target=gfx90a # aluminum: https://github.com/spack/spack/issues/38807
# - papi +rocm amdgpu_target=gfx90a # papi: https://github.com/spack/spack/issues/27898
# CUDA failures
# - parsec +cuda # parsec/mca/device/cuda/transfer.c:168: multiple definition of `parsec_CUDA_d2h_max_flows';
mirrors: { "mirror": "s3://spack-binaries/develop/e4s" }
ci:
pipeline-gen:
- build-job:
image: "ghcr.io/spack/ubuntu20.04-runner-amd64-gcc-11.4:2023.08.01"
image: "ghcr.io/spack/ubuntu20.04-runner-x86_64:2023-01-01"
cdash:
build-group: E4S

View File

@@ -41,7 +41,7 @@
# prevent infinite recursion when spack shells out (e.g., on cray for modules)
if [ -n "${_sp_initializing:-}" ]; then
return 0
exit 0
fi
export _sp_initializing=true

View File

@@ -320,12 +320,8 @@ class Acts(CMakePackage, CudaPackage):
for _cxxstd in _cxxstd_values:
if isinstance(_cxxstd, _ConditionalVariantValues):
for _v in _cxxstd:
depends_on(
f"geant4 cxxstd={_v.value}", when=f"cxxstd={_v.value} {_v.when} ^geant4"
)
depends_on(f"root cxxstd={_v.value}", when=f"cxxstd={_v.value} {_v.when} ^root")
else:
depends_on(f"geant4 cxxstd={_v.value}", when=f"cxxstd={_v.value} {_v.when} ^geant4")
depends_on(f"root cxxstd={_cxxstd}", when=f"cxxstd={_cxxstd} ^root")
# ACTS has been using C++17 for a while, which precludes use of old GCC

View File

@@ -1,4 +0,0 @@
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
applications/Allwmake $targetType $*

View File

@@ -1,5 +0,0 @@
#!/bin/sh
cd ${0%/*} || exit 1 # Run from this directory
wmake libso solvers/additiveFoam/movingHeatSource
wmake solvers/additiveFoam

View File

@@ -1,59 +0,0 @@
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
from spack.pkg.builtin.openfoam import add_extra_files
class Additivefoam(Package):
"""AdditiveFOAM is a heat and mass transfer software for Additive Manufacturing (AM)"""
homepage = "https://github.com/ORNL/AdditiveFOAM"
git = "https://github.com/ORNL/AdditiveFOAM.git"
url = "https://github.com/ORNL/AdditiveFOAM/archive/1.0.0.tar.gz"
maintainers("streeve", "colemanjs", "gknapp1")
tags = ["ecp"]
version("main", branch="main")
version("1.0.0", sha256="abbdf1b0230cd2f26f526be76e973f508978611f404fe8ec4ecdd7d5df88724c")
depends_on("openfoam-org@10")
common = ["spack-derived-Allwmake"]
assets = ["applications/Allwmake", "Allwmake"]
build_script = "./spack-derived-Allwmake"
phases = ["configure", "build", "install"]
def patch(self):
add_extra_files(self, self.common, self.assets)
def configure(self, spec, prefix):
pass
def build(self, spec, prefix):
"""Build with Allwmake script, wrapped to source environment first."""
args = []
if self.parallel: # Parallel build? - pass via environment
os.environ["WM_NCOMPPROCS"] = str(make_jobs)
builder = Executable(self.build_script)
builder(*args)
def install(self, spec, prefix):
"""Install under the prefix directory"""
for f in ["README.md", "LICENSE"]:
if os.path.isfile(f):
install(f, join_path(self.prefix, f))
dirs = ["tutorials", "applications"]
for d in dirs:
if os.path.isdir(d):
install_tree(d, join_path(self.prefix, d), symlinks=True)

View File

@@ -130,7 +130,6 @@ class Adios2(CMakePackage, CudaPackage):
depends_on("libzmq", when="+dataman")
depends_on("dataspaces@1.8.0:", when="+dataspaces")
depends_on("hdf5@:1.12", when="@:2.8 +hdf5")
depends_on("hdf5~mpi", when="+hdf5~mpi")
depends_on("hdf5+mpi", when="+hdf5+mpi")

View File

@@ -24,7 +24,6 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage):
maintainers("WeiqunZhang", "asalmgren", "etpalmer63")
version("develop", branch="development")
version("23.10", sha256="3c85aa0ad5f96303e797960a6e0aa37c427f6483f39cdd61dbc2f7ca16357714")
version("23.09", sha256="1a539c2628041b17ad910afd9270332060251c8e346b1482764fdb87a4f25053")
version("23.08", sha256="a83b7249d65ad8b6ac1881377e5f814b6db8ed8410ea5562b8ae9d4ed1f37c29")
version("23.07", sha256="4edb991da51bcaad040f852e42c82834d8605301aa7eeb01cd1512d389a58d90")

View File

@@ -17,7 +17,6 @@ class Assimp(CMakePackage):
maintainers("wdconinc")
version("master", branch="master")
version("5.3.1", sha256="a07666be71afe1ad4bc008c2336b7c688aca391271188eb9108d0c6db1be53f1")
version("5.2.5", sha256="b5219e63ae31d895d60d98001ee5bb809fb2c7b2de1e7f78ceeb600063641e1a")
version("5.2.4", sha256="6a4ff75dc727821f75ef529cea1c4fc0a7b5fc2e0a0b2ff2f6b7993fe6cb54ba")
version("5.2.3", sha256="b20fc41af171f6d8f1f45d4621f18e6934ab7264e71c37cd72fd9832509af2a8")

View File

@@ -1,31 +0,0 @@
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class AwscliV2(PythonPackage):
"""This package provides a unified command line interface to Amazon Web Services."""
homepage = "https://docs.aws.amazon.com/cli"
url = "https://github.com/aws/aws-cli/archive/refs/tags/2.13.22.tar.gz"
maintainers("climbfuji")
version("2.13.22", sha256="dd731a2ba5973f3219f24c8b332a223a29d959493c8a8e93746d65877d02afc1")
depends_on("python@3.8:", type=("build", "run"))
depends_on("py-flit-core@3.7.1:3.8.0", type=("build"))
depends_on("py-colorama@0.2.5:0.4.6", type=("build", "run"))
depends_on("py-docutils@0.10:0.19", type=("build", "run"))
depends_on("py-cryptography@3.3.2:40.0.1", type=("build", "run"))
depends_on("py-ruamel-yaml@0.15:0.17.21", type=("build", "run"))
depends_on("py-ruamel-yaml-clib@0.2:0.2.7", type=("build", "run"))
depends_on("py-prompt-toolkit@3.0.24:3.0.38", type=("build", "run"))
depends_on("py-distro@1.5:1.8", type=("build", "run"))
depends_on("py-awscrt@0.16.4:0.16.16", type=("build", "run"))
depends_on("py-python-dateutil@2.1:2", type=("build", "run"))
depends_on("py-jmespath@0.7.1:1.0", type=("build", "run"))
depends_on("py-urllib3@1.25.4:1.26", type=("build", "run"))

View File

@@ -96,7 +96,13 @@ class Binutils(AutotoolsPackage, GNUMirrorPackage):
when="@2.37:",
)
variant("ld", default=False, description="Enable ld.")
variant("gas", default=False, description="Enable as assembler.")
# When you build binutils with ~ld and +gas and load it in your PATH, you
# may end up with incompatibilities between a potentially older system ld
# and a recent assembler. For instance the linker on ubuntu 16.04 from
# binutils 2.26 and the assembler from binutils 2.36.1 will result in:
# "unable to initialize decompress status for section .debug_info"
# when compiling with debug symbols on gcc.
variant("gas", default=False, when="+ld", description="Enable as assembler.")
variant("interwork", default=False, description="Enable interwork.")
variant("gprofng", default=False, description="Enable gprofng.", when="@2.39:")
variant(
@@ -156,14 +162,6 @@ class Binutils(AutotoolsPackage, GNUMirrorPackage):
"~lto", when="+pgo", msg="Profile-guided optimization enables link-time optimization"
)
# When you build binutils with ~ld and +gas and load it in your PATH, you
# may end up with incompatibilities between a potentially older system ld
# and a recent assembler. For instance the linker on ubuntu 16.04 from
# binutils 2.26 and the assembler from binutils 2.36.1 will result in:
# "unable to initialize decompress status for section .debug_info"
# when compiling with debug symbols on gcc.
conflicts("+gas", "~ld", msg="Assembler not always compatible with system ld")
@classmethod
def determine_version(cls, exe):
output = Executable(exe)("--version", output=str, error=str)

View File

@@ -46,14 +46,11 @@ class Blaspp(CMakePackage, CudaPackage, ROCmPackage):
variant("openmp", default=True, description="Use OpenMP internally.")
variant("shared", default=True, description="Build shared libraries")
variant("sycl", default=False, description="Build support for the SYCL backend")
depends_on("cmake@3.15.0:", type="build")
depends_on("blas")
depends_on("llvm-openmp", when="%apple-clang +openmp")
depends_on("rocblas", when="+rocm")
depends_on("intel-oneapi-mkl", when="+sycl")
depends_on("intel-oneapi-mkl threads=openmp", when="+sycl")
# only supported with clingo solver: virtual dependency preferences
# depends_on('openblas threads=openmp', when='+openmp ^openblas')
@@ -66,21 +63,7 @@ class Blaspp(CMakePackage, CudaPackage, ROCmPackage):
conflicts(
"+rocm", when="@:2020.10.02", msg="ROCm support requires BLAS++ 2021.04.00 or greater"
)
backend_msg = "BLAS++ supports only one GPU backend at a time"
conflicts("+rocm", when="+cuda", msg=backend_msg)
conflicts("+rocm", when="+sycl", msg=backend_msg)
conflicts("+cuda", when="+sycl", msg=backend_msg)
conflicts("+sycl", when="@:2023.06.00", msg="SYCL support requires BLAS++ version 2023.08.25")
# TODO: +sycl requires use of the intel-oneapi compiler, but we cannot express that directly.
# For now, add conflicts for other compilers instead.
for __compiler in spack.compilers.supported_compilers():
if __compiler != "oneapi":
conflicts(
"%{0}".format(__compiler),
when="+sycl",
msg="blaspp+sycl must be compiled with %oneapi",
)
conflicts("+rocm", when="+cuda", msg="BLAS++ can only support one GPU backend at a time")
def cmake_args(self):
spec = self.spec
@@ -91,8 +74,6 @@ def cmake_args(self):
backend = "cuda"
if "+rocm" in spec:
backend = "hip"
if "+sycl" in spec:
backend = "sycl"
backend_config = "-Dgpu_backend=%s" % backend
args = [

View File

@@ -14,7 +14,6 @@ class Botan(MakefilePackage):
maintainers("aumuell")
version("3.2.0", sha256="049c847835fcf6ef3a9e206b33de05dd38999c325e247482772a5598d9e5ece3")
version("3.1.1", sha256="30c84fe919936a98fef5331f246c62aa2c0e4d2085b2d4511207f6a20afa3a6b")
version("3.1.0", sha256="4e18e755a8bbc6bf96fac916fbf072ecd06740c72a72017c27162e4c0b4725fe")
version("3.0.0", sha256="5da552e00fa1c047a90c22eb5f0247ec27e7432b68b78e10a7ce0955269ccad7")

View File

@@ -1,11 +0,0 @@
--- a/test/CMakeLists.txt 2022-07-28 11:25:13.000000000 -0400
+++ b/test/CMakeLists.txt 2022-07-28 11:26:40.000000000 -0400
@@ -205,7 +205,7 @@
set(test_exe ${test}.x)
add_executable(${test_exe} ${test_src})
add_dependencies(${test_exe} bufr_${kind})
- target_link_libraries(${test_exe} PRIVATE bufr::bufr_${kind})
+ target_link_libraries(${test_exe} PRIVATE bufr::bufr_${kind} m)
add_test(NAME ${test} COMMAND ${CMAKE_BINARY_DIR}/test/${test_exe})
endforeach()
endforeach()

View File

@@ -1,15 +0,0 @@
--- a/CMakeLists.txt 2022-02-08 10:03:55.000000000 -0700
+++ b/CMakeLists.txt 2022-02-08 10:03:51.000000000 -0700
@@ -39,9 +39,9 @@
find_package(Python3 REQUIRED COMPONENTS Interpreter)
endif()
-if(APPLE)
- # The linker on macOS does not include `common symbols` by default
- # Passing the -c flag includes them and fixes an error with undefined symbols
+if(APPLE AND NOT "${CMAKE_RANLIB}" MATCHES "^.*(llvm-ranlib)$")
+ # The linker on macOS does not include `common symbols` by default, Intel requires
+ # passing the -c flag to include them and fix an error with undefined symbols
set(CMAKE_Fortran_ARCHIVE_FINISH "<CMAKE_RANLIB> -c <TARGET>")
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -c <TARGET>")
endif()

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
@@ -13,109 +11,37 @@ class Bufr(CMakePackage):
utilities that can be used to read (decode) and write (encode)
data in BUFR, which is a WMO standard format for the exchange of
meteorological data. This is part of the NCEPLIBS project.
The library also includes a Python interface.
"""
homepage = "https://noaa-emc.github.io/NCEPLIBS-bufr"
url = "https://github.com/NOAA-EMC/NCEPLIBS-bufr/archive/refs/tags/bufr_v11.5.0.tar.gz"
git = "https://github.com/NOAA-EMC/NCEPLIBS-bufr"
maintainers("AlexanderRichert-NOAA", "edwardhartnett", "Hang-Lei-NOAA", "jbathegit")
maintainers("t-brown", "AlexanderRichert-NOAA", "edwardhartnett", "Hang-Lei-NOAA", "jbathegit")
version("develop", branch="develop")
version("12.0.1", sha256="525f26238dba6511a453fc71cecc05f59e4800a603de2abbbbfb8cbb5adf5708")
version("12.0.0", sha256="d01c02ea8e100e51fd150ff1c4a1192ca54538474acb1b7f7a36e8aeab76ee75")
version("11.7.1", sha256="6533ce6eaa6b02c0cb5424cfbc086ab120ccebac3894980a4daafd4dfadd71f8")
version("11.7.0", sha256="6a76ae8e7682bbc790321bf80c2f9417775c5b01a5c4f10763df92e01b20b9ca")
version("11.6.0", sha256="af4c04e0b394aa9b5f411ec5c8055888619c724768b3094727e8bb7d3ea34a54")
version("11.5.0", sha256="d154839e29ef1fe82e58cf20232e9f8a4f0610f0e8b6a394b7ca052e58f97f43")
version("11.4.0", sha256="946482405e675b99e8e0c221d137768f246076f5e9ba92eed6cae47fb68b7a26")
# Patch to not add "-c" to ranlib flags when using llvm-ranlib on Apple systems
patch("cmakelists-apple-llvm-ranlib.patch", when="@11.5.0:11.6.0")
# C test does not explicity link to -lm causing DSO error when building shared libs
patch("c-tests-libm.patch", when="@11.5.0:11.7.0")
# Patch to identify Python version correctly
patch("python-version.patch", when="@11.5:12.0.0 +python")
variant("python", default=False, description="Enable Python interface?")
variant("shared", default=True, description="Build shared libraries", when="@11.5:")
extends("python", when="+python")
depends_on("python@3:", type=("build", "run"), when="+python")
depends_on("py-setuptools", type="build", when="+python")
depends_on("py-numpy", type=("build", "run"), when="+python")
depends_on("py-pip", type="build", when="+python")
depends_on("py-wheel", type="build", when="+python")
def url_for_version(self, version):
pre = "bufr_" if version < Version("12.0.1") else ""
return (
f"https://github.com/NOAA-EMC/NCEPLIBS-bufr/archive/refs/tags/{pre}v{version}.tar.gz"
)
# Need to make the lines shorter at least on some systems
def patch(self):
with when("@:11.7.1"):
filter_file("_lenslmax 120", "_lenslmax 60", "CMakeLists.txt")
def cmake_args(self):
args = [
self.define_from_variant("ENABLE_PYTHON", "python"),
self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
self.define("BUILD_TESTS", self.run_tests),
]
return args
def flag_handler(self, name, flags):
"""
On macOS if a library built with the ar utility contains objects
with Fortran module data but no executable functions,
the symbols corresponding to the module data may not be resolved
when an object referencing them is linked against the library.
You can work around this by compiling with option -fno-common.
"""
fc = self.compiler.fc
if self.spec.satisfies("platform=darwin"):
if name == "fflags":
if "ifort" in fc or "gfortran" in fc:
flags.append("-fno-common")
# Bufr inserts a path into source code which may be longer than 132
if name == "fflags" and "gfortran" in fc:
flags.append("-ffree-line-length-none")
# Inject flags into CMake build
return (None, None, flags)
def _setup_bufr_environment(self, env, suffix):
libname = "libbufr_{0}".format(suffix)
shared = True if "+shared" in self.spec else False
# Bufr has _DA (dynamic allocation) libs in versions <= 11.5.0
append = "" if self.spec.satisfies("@11.5.0:") else "_DA"
lib = find_libraries(libname + append, root=self.prefix, shared=shared, recursive=True)
lib_envname = "BUFR_LIB{0}".format(suffix) + append
inc_envname = "BUFR_INC{0}".format(suffix) + append
include_dir = "{0}_{1}".format(self.prefix.include.bufr, suffix)
lib = find_libraries(libname, root=self.prefix, shared=False, recursive=True)
lib_envname = "BUFR_LIB{0}".format(suffix)
inc_envname = "BUFR_INC{0}".format(suffix)
include_dir = "include_{0}".format(suffix)
env.set(lib_envname, lib[0])
env.set(inc_envname, include_dir)
if self.spec.satisfies("+python"):
pyver = self.spec["python"].version.up_to(2)
pydir = join_path(os.path.dirname(lib[0]), f"python{pyver}", "site-packages")
env.prepend_path("PYTHONPATH", pydir)
# Bufr has _DA (dynamic allocation) libs in versions <= 11.5.0
if self.spec.satisfies("@:11.5.0"):
da_lib = find_libraries(
libname + "_DA", root=self.prefix, shared=False, recursive=True
)
env.set(lib_envname + "_DA", da_lib[0])
env.set(inc_envname + "_DA", include_dir)
def setup_run_environment(self, env):
suffixes = ["4"]
if not self.spec.satisfies("@12:"):
suffixes += ["8", "d"]
for suffix in suffixes:
for suffix in ("4", "8", "d"):
self._setup_bufr_environment(env, suffix)
def check(self):
if self.spec.satisfies("~python"):
with working_dir(self.builder.build_directory):
make("test")

View File

@@ -1,12 +0,0 @@
--- a/python/CMakeLists.txt 2023-06-08 12:39:26.000000000 -0600
+++ b/python/CMakeLists.txt 2023-07-19 13:45:11.000000000 -0600
@@ -8,8 +8,7 @@
file( COPY ncepbufr utils DESTINATION . )
# Library installation directory
-execute_process(COMMAND ${Python3_EXECUTABLE} -c "from __future__ import print_function; import sys; print(sys.version[:3], end='')"
- OUTPUT_VARIABLE _PYVER)
+set(_PYVER "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}")
set(_install_dir "${CMAKE_INSTALL_FULL_LIBDIR}/python${_PYVER}/site-packages")
# Build the extension module for use in install tree

View File

@@ -19,7 +19,6 @@ class Cabana(CMakePackage, CudaPackage, ROCmPackage):
tags = ["e4s", "ecp"]
version("master", branch="master")
version("0.6.0", sha256="a88a3f80215998169cdbd37661c0c0af57e344af74306dcd2b61983d7c69e6e5")
version("0.5.0", sha256="b7579d44e106d764d82b0539285385d28f7bbb911a572efd05c711b28b85d8b1")
version("0.4.0", sha256="c347d23dc4a5204f9cc5906ccf3454f0b0b1612351bbe0d1c58b14cddde81e85")
version("0.3.0", sha256="fb67ab9aaf254b103ae0eb5cc913ddae3bf3cd0cf6010e9686e577a2981ca84f")
@@ -38,9 +37,7 @@ class Cabana(CMakePackage, CudaPackage, ROCmPackage):
variant("heffte", default=False, description="Build with heFFTe support")
variant("hypre", default=False, description="Build with HYPRE support")
variant("silo", default=False, description="Build with SILO support")
variant("hdf5", default=False, description="Build with HDF5 support")
variant("cajita", default=False, description="Build Cajita subpackage (Grid in 0.6:)")
variant("grid", default=False, description="Build Grid subpackage")
variant("cajita", default=False, description="Build Cajita subpackage")
variant("testing", default=False, description="Build unit tests")
variant("examples", default=False, description="Build tutorial examples")
variant("performance_testing", default=False, description="Build performance tests")
@@ -48,7 +45,7 @@ class Cabana(CMakePackage, CudaPackage, ROCmPackage):
depends_on("cmake@3.9:", type="build", when="@:0.4.0")
depends_on("cmake@3.16:", type="build", when="@0.5.0:")
depends_on("googletest", type="test", when="+testing")
_versions = {":0.2": "-legacy", "0.3:": "@3.1:", "0.4:": "@3.2:", "0.6:": "@3.7:"}
_versions = {":0.2": "-legacy", "0.3:": "@3.1:", "0.4:": "@3.2:", "master": "@3.4:"}
for _version in _versions:
_kk_version = _versions[_version]
for _backend in _kokkos_backends:
@@ -77,17 +74,14 @@ class Cabana(CMakePackage, CudaPackage, ROCmPackage):
depends_on("arborx", when="@0.3.0:+arborx")
depends_on("hypre-cmake@2.22.0:", when="@0.4.0:+hypre")
depends_on("hypre-cmake@2.22.1:", when="@0.5.0:+hypre")
# Previous heFFTe pinned at 2.x.0 because its cmakefiles can't roll forward
# Heffte pinned at 2.x.0 because its cmakefiles can't roll forward
# compatibilty to later minor versions.
depends_on("heffte@2.0.0", when="@0.4.0+heffte")
depends_on("heffte@2.1.0", when="@0.5.0:+heffte")
depends_on("heffte@2.3.0:", when="@0.6.0:+heffte")
depends_on("silo", when="@0.5.0:+silo")
depends_on("hdf5", when="@0.6.0:+hdf5")
depends_on("mpi", when="+mpi")
conflicts("+cajita ~mpi")
conflicts("+grid ~mpi")
conflicts("+rocm", when="@:0.2.0")
conflicts("+sycl", when="@:0.3.0")
@@ -96,7 +90,7 @@ def cmake_args(self):
options = [self.define_from_variant("BUILD_SHARED_LIBS", "shared")]
enable = ["CAJITA", "TESTING", "EXAMPLES", "PERFORMANCE_TESTING"]
require = ["ARBORX", "HEFFTE", "HYPRE", "SILO", "HDF5"]
require = ["ARBORX", "HEFFTE", "HYPRE", "SILO"]
# These variables were removed in 0.3.0 (where backends are
# automatically used from Kokkos)
@@ -108,24 +102,9 @@ def cmake_args(self):
else:
require += ["MPI"]
# Cajita was renamed Grid in 0.6
if self.spec.satisfies("@0.6.0:"):
enable += ["GRID"]
for category, cname in zip([enable, require], ["ENABLE", "REQUIRE"]):
for var in category:
cbn_option = "Cabana_{0}_{1}".format(cname, var)
options.append(self.define_from_variant(cbn_option, var.lower()))
# Only enable user-requested options.
for var in require:
enabled_var = "+{0}".format(var.lower())
if enabled_var not in self.spec:
cbn_disable = "CMAKE_DISABLE_FIND_PACKAGE_{0}".format(var)
options.append(self.define(cbn_disable, "ON"))
# Use hipcc for HIP.
if "+rocm" in self.spec:
options.append(self.define("CMAKE_CXX_COMPILER", self.spec["hip"].hipcc))
return options

View File

@@ -27,7 +27,6 @@ class Caliper(CMakePackage, CudaPackage, ROCmPackage):
version("master", branch="master")
version("2.10.0", sha256="14c4fb5edd5e67808d581523b4f8f05ace8549698c0e90d84b53171a77f58565")
version("2.9.1", sha256="4771d630de505eff9227e0ec498d0da33ae6f9c34df23cb201b56181b8759e9e")
version("2.9.0", sha256="507ea74be64a2dfd111b292c24c4f55f459257528ba51a5242313fa50978371f")
version("2.8.0", sha256="17807b364b5ac4b05997ead41bd173e773f9a26ff573ff2fe61e0e70eab496e4")
version(
@@ -118,10 +117,7 @@ class Caliper(CMakePackage, CudaPackage, ROCmPackage):
conflicts("+rocm+cuda")
patch("for_aarch64.patch", when="target=aarch64:")
patch(
"sampler-service-missing-libunwind-include-dir.patch",
when="@2.9.0:2.9.1 +libunwind +sampler",
)
patch("sampler-service-missing-libunwind-include-dir.patch", when="@2.9.0 +libunwind +sampler")
def cmake_args(self):
spec = self.spec

View File

@@ -53,7 +53,7 @@ class Camp(CMakePackage, CudaPackage, ROCmPackage):
depends_on("cub", when="+cuda")
depends_on("blt", type="build")
depends_on("blt")
conflicts("^blt@:0.3.6", when="+rocm")

View File

@@ -87,7 +87,6 @@ def cmake_args(self):
self.define_from_variant("CGNS_ENABLE_LEGACY", "legacy"),
self.define_from_variant("CGNS_ENABLE_MEM_DEBUG", "mem_debug"),
self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"),
self.define_from_variant("CGNS_ENABLE_64BIT", "int64"),
]
)
@@ -96,10 +95,11 @@ def cmake_args(self):
[
"-DCMAKE_C_COMPILER=%s" % spec["mpi"].mpicc,
"-DCMAKE_CXX_COMPILER=%s" % spec["mpi"].mpicxx,
"-DCMAKE_Fortran_COMPILER=%s" % spec["mpi"].mpifc,
]
)
if "+fortran" in spec:
options.append(self.define("CMAKE_Fortran_COMPILER", spec["mpi"].mpifc))
options.append(self.define_from_variant("CGNS_ENABLE_64BIT", "int64"))
if "+hdf5" in spec:
options.extend(

View File

@@ -239,7 +239,7 @@ class Cmake(Package):
depends_on("libuv@1.10.0:1.10", when="@3.11.0:3.11")
depends_on("libuv@1.10.0:", when="@3.12.0:")
depends_on("rhash", when="@3.8.0:")
depends_on("jsoncpp build_system=meson", when="@3.2:")
depends_on("jsoncpp", when="@3.2:")
depends_on("ncurses", when="+ncurses")

View File

@@ -21,8 +21,6 @@ class Comgr(CMakePackage):
libraries = ["libamd_comgr"]
version("master", branch="amd-stg-open")
version("5.6.1", sha256="0a85d84619f98be26ca7a32c71f94ed3c4e9866133789eabb451be64ce739300")
version("5.6.0", sha256="9396a7238b547ee68146c669b10b9d5de8f1d76527c649133c75d8076a185a72")
version("5.5.1", sha256="0fbb15fe5a95c2e141ccd360bc413e1feda283334781540a6e5095ab27fd8019")
version("5.5.0", sha256="97dfff03226ce0902b9d5d1c8c7bebb7a15978a81b6e9c750bf2d2473890bd42")
version("5.4.3", sha256="8af18035550977fe0aa9cca8dfacbe65fe292e971de5a0e160710bafda05a81f")
@@ -144,8 +142,6 @@ class Comgr(CMakePackage):
"5.4.3",
"5.5.0",
"5.5.1",
"5.6.0",
"5.6.1",
"master",
]:
# llvm libs are linked statically, so this *could* be a build dep
@@ -157,7 +153,7 @@ class Comgr(CMakePackage):
"rocm-device-libs@" + ver, when="@{0} ^llvm-amdgpu ~rocm-device-libs".format(ver)
)
for ver in ["5.5.0", "5.5.1", "5.6.0", "5.6.1"]:
for ver in ["5.5.0", "5.5.1"]:
depends_on("rocm-core@" + ver, when="@" + ver)
root_cmakelists_dir = join_path("lib", "comgr")

View File

@@ -17,8 +17,6 @@ class ComposableKernel(CMakePackage):
maintainers("srekolam", "afzpatel")
version("master", branch="develop")
version("5.6.1", commit="f5ec04f091fa5c48c67d7bacec36a414d0be06a5")
version("5.6.0", commit="f0fd02634c2f8f8c70f5a0ab2a8c84db5e36eeca")
version("5.5.1", commit="ac9e01e2cc3721be24619807adc444e1f59a9d25")
version("5.5.0", commit="8b76b832420a3d69708401de6607a033163edcce")
version("5.4.3", commit="bb3d9546f186e39cefedc3e7f01d88924ba20168")
@@ -42,7 +40,7 @@ class ComposableKernel(CMakePackage):
depends_on("pkgconfig", type="build")
depends_on("cmake@3.16:", type="build")
for ver in ["master", "5.6.1", "5.6.0", "5.5.1", "5.5.0", "5.4.3", "5.4.0"]:
for ver in ["master", "5.5.1", "5.5.0", "5.4.3", "5.4.0"]:
depends_on("hip@" + ver, when="@" + ver)
depends_on("llvm-amdgpu@" + ver, when="@" + ver)
depends_on("rocm-cmake@" + ver, when="@" + ver, type="build")

View File

@@ -16,8 +16,6 @@ class Damaris(CMakePackage):
maintainers("jcbowden")
version("master", branch="master")
version("1.9.2", tag="v1.9.2")
version("1.9.1", tag="v1.9.1")
version("1.9.0", tag="v1.9.0")
version("1.8.2", tag="v1.8.2")
version("1.8.1", tag="v1.8.1")
@@ -46,14 +44,13 @@ class Damaris(CMakePackage):
default=False,
description="Enables building of Python enabled Damaris library using Boost::python",
)
extends("python", when="+python")
depends_on("xsd")
depends_on("xerces-c")
depends_on("mpi")
depends_on("cmake@3.18.0:", type=("build"))
depends_on("boost@1.67:+thread+log+filesystem+date_time+system")
depends_on("boost+python", when="+python")
depends_on("boost+thread+log+filesystem+date_time" "@1.67:")
depends_on("boost+thread+log+filesystem+date_time+python+numpy" "@1.67:", when="+python")
depends_on("py-mpi4py", when="+python", type=("build", "run"))
depends_on("hdf5@1.8.20:", when="+hdf5")
depends_on("paraview+python+mpi+development_files", when="+catalyst")
@@ -90,8 +87,6 @@ def cmake_args(self):
if self.spec.variants["python"].value:
args.extend(["-DENABLE_PYTHON:BOOL=ON"])
args.extend(["-DENABLE_PYTHONMOD:BOOL=ON"])
args.append(self.define("PYTHON_MODULE_INSTALL_PATH", python_platlib))
if self.spec.variants["visit"].value:
args.extend(["-DENABLE_VISIT:BOOL=ON"])

View File

@@ -32,7 +32,6 @@ class Discotec(CMakePackage):
depends_on("glpk")
depends_on("highfive+mpi+boost+ipo", when="+hdf5")
depends_on("mpi")
depends_on("selalib", when="+selalib")
depends_on("vtk", when="+vtk")
def cmake_args(self):
@@ -47,7 +46,5 @@ def cmake_args(self):
self.define_from_variant("DISCOTEC_USE_VTK", "vtk"),
self.define_from_variant("DISCOTEC_WITH_SELALIB", "selalib"),
]
if "+selalib" in self.spec:
args.append(self.define("SELALIB_DIR", self.spec["selalib"].prefix.cmake))
return args

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
from spack.pkg.builtin.boost import Boost
@@ -21,7 +19,7 @@ class Ecflow(CMakePackage):
homepage = "https://confluence.ecmwf.int/display/ECFLOW/"
url = "https://confluence.ecmwf.int/download/attachments/8650755/ecFlow-4.11.1-Source.tar.gz"
maintainers("climbfuji", "AlexanderRichert-NOAA")
maintainers("climbfuji")
# https://confluence.ecmwf.int/download/attachments/8650755/ecFlow-5.8.3-Source.tar.gz?api=v2
version("5.8.3", sha256="1d890008414017da578dbd5a95cb1b4d599f01d5a3bb3e0297fe94a87fbd81a6")
@@ -34,7 +32,6 @@ class Ecflow(CMakePackage):
"static_boost", default=False, description="Use also static boost libraries when compiling"
)
variant("ui", default=False, description="Enable ecflow_ui")
variant("pic", default=False, description="Enable position-independent code (PIC)")
extends("python")
@@ -62,7 +59,6 @@ class Ecflow(CMakePackage):
)
depends_on("openssl@1:", when="@5:")
depends_on("pkgconfig", type="build", when="+ssl ^openssl ~shared")
depends_on("qt@5:", when="+ui")
# Requirement to use the Python3_EXECUTABLE variable
depends_on("cmake@3.16:", type="build")
@@ -76,47 +72,15 @@ def patch(self):
"Pyext/CMakeLists.txt",
)
@when("+ssl ^openssl~shared")
def setup_build_environment(self, env):
env.set("LIBS", self.spec["zlib"].libs.search_flags)
def cmake_args(self):
spec = self.spec
boost_lib = spec["boost"].prefix.lib
args = [
boost_lib = self.spec["boost"].prefix.lib
return [
self.define("Boost_PYTHON_LIBRARY_RELEASE", boost_lib),
self.define_from_variant("ENABLE_UI", "ui"),
self.define_from_variant("ENABLE_GUI", "ui"),
self.define_from_variant("ENABLE_SSL", "ssl"),
# https://jira.ecmwf.int/browse/SUP-2641#comment-208943
self.define_from_variant("ENABLE_STATIC_BOOST_LIBS", "static_boost"),
self.define("Python3_EXECUTABLE", spec["python"].package.command),
self.define("BOOST_ROOT", spec["boost"].prefix),
self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"),
self.define("Python3_EXECUTABLE", self.spec["python"].package.command),
self.define("BOOST_ROOT", self.spec["boost"].prefix),
]
if spec.satisfies("+ssl ^openssl ~shared"):
ssllibs = ";".join(spec["openssl"].libs + spec["zlib"].libs)
args.append(self.define("OPENSSL_CRYPTO_LIBRARY", ssllibs))
return args
# A recursive link in the ecflow source code causes the binary cache
# creation to fail. This file is only in the install tree if the
# --source option is set when installing the package, but force_remove
# acts like "rm -f" and won't abort if the file doesn't exist.
@run_after("install")
def remove_recursive_symlink_in_source_code(self):
force_remove(join_path(self.prefix, "share/ecflow/src/cereal/cereal"))
@when("+ssl ^openssl~shared")
def patch(self):
pkgconf = which("pkg-config")
liblist_l = pkgconf("--libs-only-l", "--static", "openssl", output=str).split()
liblist = " ".join([ll.replace("-l", "") for ll in liblist_l])
for sdir in ["Client", "Server"]:
filter_file(
"(target_link_libraries.*pthread)",
f"\\1 {liblist}",
os.path.join(sdir, "CMakeLists.txt"),
)

View File

@@ -85,10 +85,10 @@ class Elfutils(AutotoolsPackage, SourcewarePackage):
provides("elf@1")
# libarchive with iconv doesn't configure (still broken as of libarchive@3.7.1)
# libarchive with iconv doesn't configure.
# see https://github.com/spack/spack/issues/36710
# and https://github.com/libarchive/libarchive/issues/1819
conflicts("^libarchive +iconv", when="+debuginfod")
conflicts("^libarchive@3.6.2 +iconv", when="+debuginfod")
# https://sourceware.org/bugzilla/show_bug.cgi?id=24964
conflicts("%apple-clang")

View File

@@ -13,7 +13,6 @@ class Embree(CMakePackage):
url = "https://github.com/embree/embree/archive/v3.7.0.tar.gz"
maintainers("aumuell")
version("4.3.0", sha256="baf0a57a45837fc055ba828a139467bce0bc0c6a9a5f2dccb05163d012c12308")
version("4.2.0", sha256="b0479ce688045d17aa63ce6223c84b1cdb5edbf00d7eda71c06b7e64e21f53a0")
version("4.1.0", sha256="117efd87d6dddbf7b164edd94b0bc057da69d6422a25366283cded57ed94738b")
version("4.0.1", sha256="1fa3982fa3531f1b6e81f19e6028ae8a62b466597f150b853440fe35ef7c6c06")
@@ -38,17 +37,6 @@ class Embree(CMakePackage):
depends_on("tbb")
# official aarch64 support on macOS starting with 3.13.0, on Linux since 4.0.0
# upstream patch for Linux/aarch64 applies cleanly to 3.13.5, and 3.13.3 works by chance
conflicts("@:3.12", when="target=aarch64:")
conflicts("@:3.13.2", when="target=aarch64: platform=linux")
conflicts("@3.13.4", when="target=aarch64: platform=linux")
patch(
"https://github.com/embree/embree/commit/82ca6b5ccb7abe0403a658a0e079926478f04cb1.patch?full_index=1",
sha256="3af5a65e8875549b4c930d4b0f2840660beba4a7f295d8c89068250a1df376f2",
when="@3.13.5",
)
def cmake_args(self):
spec = self.spec

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
@@ -15,7 +13,7 @@ class Exago(CMakePackage, CudaPackage, ROCmPackage):
homepage = "https://github.com/pnnl/ExaGO"
git = "https://github.com/pnnl/ExaGO.git"
maintainers("ryandanehy", "cameronrutherford", "pelesh")
maintainers("ryandanehy", "CameronRutherford", "pelesh")
version("1.5.1", commit="7abe482c8da0e247f9de4896f5982c4cacbecd78", submodules=True)
version("1.5.0", commit="227f49573a28bdd234be5500b3733be78a958f15", submodules=True)
@@ -47,7 +45,6 @@ class Exago(CMakePackage, CudaPackage, ROCmPackage):
conflicts(
"+python", when="+ipopt+rocm", msg="Python bindings require -fPIC with Ipopt for rocm."
)
variant("logging", default=False, description="Enable/Disable spdlog based logging")
# Solver options
variant("hiop", default=False, description="Enable/Disable HiOp")
@@ -178,18 +175,17 @@ def cmake_args(self):
args.extend(
[
self.define("EXAGO_ENABLE_GPU", "+cuda" in spec or "+rocm" in spec),
self.define("PETSC_DIR", spec["petsc"].prefix),
self.define("EXAGO_RUN_TESTS", self.run_tests),
self.define("LAPACK_LIBRARIES", spec["lapack"].libs + spec["blas"].libs),
self.define_from_variant("EXAGO_ENABLE_CUDA", "cuda"),
self.define_from_variant("EXAGO_ENABLE_HIP", "rocm"),
self.define_from_variant("EXAGO_ENABLE_LOGGING", "logging"),
self.define("PETSC_DIR", spec["petsc"].prefix),
self.define("EXAGO_RUN_TESTS", True),
self.define_from_variant("EXAGO_ENABLE_MPI", "mpi"),
self.define_from_variant("EXAGO_ENABLE_RAJA", "raja"),
self.define_from_variant("EXAGO_ENABLE_HIOP", "hiop"),
self.define_from_variant("EXAGO_ENABLE_IPOPT", "ipopt"),
self.define_from_variant("EXAGO_ENABLE_PYTHON", "python"),
self.define_from_variant("EXAGO_ENABLE_LOGGING", "logging"),
self.define("LAPACK_LIBRARIES", spec["lapack"].libs + spec["blas"].libs),
]
)

View File

@@ -1,26 +0,0 @@
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Falco(AutotoolsPackage):
"""A C++ drop-in replacement of FastQC to assess the quality of sequence read data"""
homepage = "https://github.com/smithlabcode/falco"
url = "https://github.com/smithlabcode/falco/releases/download/v1.2.1/falco-1.2.1.tar.gz"
version("1.2.1", sha256="33de8aafac45c7aea055ed7ab837d0a39d12dcf782816cea8a6c648acb911057")
variant("htslib", default=False, description="Add support for BAM files")
depends_on("gmake", type="build")
depends_on("zlib-ng")
depends_on("htslib", when="+htslib")
def configure_args(self):
if self.spec.satisfies("+htslib"):
return ["--enable-htslib"]
return []

View File

@@ -16,11 +16,8 @@ class FeqParse(CMakePackage):
maintainers("fluidnumerics-joe")
version("2.0.3", sha256="a1c42507801adc55a63a9a904807058079d54e002e10f2b29a916b06fc815f80")
version("2.0.1", sha256="08dd08bd100a0a2eb672a5b2792ad56a337df575c634aac0d7a300d7e484b21c")
version("1.1.0", sha256="d33a4fd6904939bb70780e8f25f37c1291c4f24fd207feb4ffc0f8d89637d1e3")
version("1.0.2", sha256="1cd1db7562908ea16fc65dc5268b654405d0b3d9dcfe11f409949c431b48a3e8")
depends_on("cmake@3.0.2:", type="build")
parallel = False

View File

@@ -14,14 +14,13 @@ class Fftx(CMakePackage, CudaPackage, ROCmPackage):
operations composed of linear operations combined with DFT transforms."""
homepage = "https://spiralgen.com"
url = "https://github.com/spiral-software/fftx/archive/refs/tags/1.1.3.tar.gz"
url = "https://github.com/spiral-software/fftx/archive/refs/tags/1.1.2.tar.gz"
git = "https://github.com/spiral-software/fftx.git"
maintainers("spiralgen")
version("develop", branch="develop")
version("main", branch="main")
version("1.1.3", sha256="17ed0baf9c2dcf30c789fdae530e006ae3ff2d2c9006989b1e6348e4ae50cef9")
version("1.1.2", sha256="b2c4a7791305481af9e1bd358c1215efa4506c91c943cddca3780a1ccbc27810")
version("1.1.1", sha256="5cbca66ef09eca02ee8f336f58eb45cfac69cfb29cd6eb945852ad74085d8a60")
version("1.1.0", sha256="a6f95605abc11460bbf51839727a456a31488e27e12a970fc29a1b8c42f4e3b5")

View File

@@ -141,8 +141,6 @@ class FluxCore(AutotoolsPackage):
# `link` dependency on python due to Flux's `pymod` module
depends_on("python@3.6:", when="@0.17:", type=("build", "link", "run"))
depends_on("python@2.7:", type=("build", "link", "run"))
# Use of distutils in configure script dropped in v0.55
depends_on("python@:3.11", when="@:0.54", type=("build", "link", "run"))
depends_on("py-cffi@1.1:", type=("build", "run"))
depends_on("py-six@1.9:", when="@:0.24", type=("build", "run"))
depends_on("py-pyyaml@3.10:", type=("build", "run"))

View File

@@ -18,11 +18,10 @@ class FluxPmix(AutotoolsPackage):
maintainers("grondo")
version("main", branch="main")
version("0.4.0", sha256="f7f58891fc9d9a97a0399b3ab186f2cae30a75806ba0b4d4c1307f07b3f6d1bc")
version("0.3.0", sha256="88edb2afaeb6058b56ff915105a36972acc0d83204cff7f4a4d2f65a5dee9d34")
version("0.2.0", sha256="d09f1fe6ffe54f83be4677e1e727640521d8110090515d94013eba0f58216934")
depends_on("flux-core@0.49:", when="@0.3:")
depends_on("flux-core@0.49.0:", when="@0.3.0:")
depends_on("flux-core@0.30.0:")
depends_on("pmix@v4.1.0:")
depends_on("openmpi")

View File

@@ -20,7 +20,6 @@ class G2(CMakePackage):
maintainers("AlexanderRichert-NOAA", "Hang-Lei-NOAA", "edwardhartnett")
version("develop", branch="develop")
version("3.4.8", sha256="071a6f799c4c4fdfd5d0478152a0cbb9d668d12d71c78d5bda71845fc5580a7f")
version("3.4.7", sha256="d6530611e3a515122f11ed4aeede7641f6f8932ef9ee0d4828786572767304dc")
version("3.4.6", sha256="c4b03946365ce0bacf1e10e8412a5debd72d8671d1696aa4fb3f3adb119175fe")
version("3.4.5", sha256="c18e991c56964953d778632e2d74da13c4e78da35e8d04cb742a2ca4f52737b6")
@@ -37,8 +36,7 @@ class G2(CMakePackage):
)
variant("w3emc", default=True, description="Enable GRIB1 through w3emc", when="@3.4.6:")
depends_on("jasper@:2.0.32", when="@:3.4.7")
depends_on("jasper")
depends_on("jasper@:2.0.32")
depends_on("libpng")
depends_on("bacio", when="@3.4.6:")
with when("+w3emc"):
@@ -64,7 +62,3 @@ def setup_run_environment(self, env):
lib = find_libraries("libg2_" + suffix, root=self.prefix, shared=False, recursive=True)
env.set("G2_LIB" + suffix, lib[0])
env.set("G2_INC" + suffix, join_path(self.prefix, "include_" + suffix))
def check(self):
with working_dir(self.builder.build_directory):
make("test")

View File

@@ -783,11 +783,6 @@ def configure_args(self):
"--with-as=" + binutils.join("as"),
]
)
elif spec.satisfies("%apple-clang@15:"):
# https://github.com/iains/gcc-darwin-arm64/issues/117
# https://github.com/iains/gcc-12-branch/issues/22
# https://github.com/iains/gcc-13-branch/issues/8
options.append("--with-ld=/Library/Developer/CommandLineTools/usr/bin/ld-classic")
# enable_bootstrap
if spec.satisfies("+bootstrap"):

View File

@@ -4,7 +4,6 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
from spack.variant import _ConditionalVariantValues
class Geant4(CMakePackage):
@@ -44,18 +43,16 @@ class Geant4(CMakePackage):
version("10.4.0", sha256="e919b9b0a88476e00c0b18ab65d40e6a714b55ee4778f66bac32a5396c22aa74")
version("10.3.3", sha256="bcd36a453da44de9368d1d61b0144031a58e4b43a6d2d875e19085f2700a89d8")
_cxxstd_values = (
conditional("11", "14", when="@:10"),
conditional("17", when="@10.4.1:"),
conditional("20", when="@10.7.0:"),
)
_cxxstd_values = ("11", "14", "17")
variant(
"cxxstd",
default="11",
default=_cxxstd_values[0],
values=_cxxstd_values,
multi=False,
description="Use the specified C++ standard when building.",
)
conflicts("cxxstd=11", when="@11:", msg="geant4@11: only supports cxxstd=17")
conflicts("cxxstd=14", when="@11:", msg="geant4@11: only supports cxxstd=17")
variant("threads", default=True, description="Build with multithreading")
variant("vecgeom", default=False, description="Enable vecgeom support")
@@ -100,39 +97,30 @@ class Geant4(CMakePackage):
depends_on("python@3:", when="+python")
extends("python", when="+python")
# CLHEP version requirements to be reviewed
depends_on("clhep@2.4.6.0:", when="@11.1:")
depends_on("clhep@2.4.5.1:", when="@11.0.0:")
depends_on("clhep@2.4.4.0:", when="@10.7.0:")
depends_on("clhep@2.3.3.0:", when="@10.3.3:10.6")
for std in _cxxstd_values:
# CLHEP version requirements to be reviewed
depends_on("clhep@2.4.6.0: cxxstd=" + std, when="@11.1: cxxstd=" + std)
# Vecgeom specific versions for each Geant4 version
with when("+vecgeom"):
depends_on("vecgeom@1.2.0:", when="@11.1:")
depends_on("vecgeom@1.1.18:1.1", when="@11.0.0:11.0")
depends_on("vecgeom@1.1.8:1.1", when="@10.7.0:10.7")
depends_on("vecgeom@1.1.5", when="@10.6.0:10.6")
depends_on("vecgeom@1.1.0", when="@10.5.0:10.5")
depends_on("vecgeom@0.5.2", when="@10.4.0:10.4")
depends_on("vecgeom@0.3rc", when="@10.3.0:10.3")
depends_on("clhep@2.4.5.1: cxxstd=" + std, when="@11.0.0: cxxstd=" + std)
def std_when(values):
for v in values:
if isinstance(v, _ConditionalVariantValues):
for c in v:
yield (c.value, c.when)
else:
yield (v, "")
depends_on("clhep@2.4.4.0: cxxstd=" + std, when="@10.7.0: cxxstd=" + std)
for _std, _when in std_when(_cxxstd_values):
depends_on(f"clhep cxxstd={_std}", when=f"{_when} cxxstd={_std}")
depends_on(f"vecgeom cxxstd={_std}", when=f"{_when} +vecgeom cxxstd={_std}")
depends_on("clhep@2.3.3.0: cxxstd=" + std, when="@10.3.3:10.6 cxxstd=" + std)
# Spack only supports Xerces-c 3 and above, so no version req
depends_on(f"xerces-c netaccessor=curl cxxstd={_std}", when=f"{_when} cxxstd={_std}")
depends_on("xerces-c netaccessor=curl cxxstd=" + std, when="cxxstd=" + std)
# Vecgeom specific versions for each Geant4 version
depends_on("vecgeom@1.2.0: cxxstd=" + std, when="@11.1: +vecgeom cxxstd=" + std)
depends_on("vecgeom@1.1.18:1.1 cxxstd=" + std, when="@11.0.0:11.0 +vecgeom cxxstd=" + std)
depends_on("vecgeom@1.1.8:1.1 cxxstd=" + std, when="@10.7.0:10.7 +vecgeom cxxstd=" + std)
depends_on("vecgeom@1.1.5 cxxstd=" + std, when="@10.6.0:10.6 +vecgeom cxxstd=" + std)
depends_on("vecgeom@1.1.0 cxxstd=" + std, when="@10.5.0:10.5 +vecgeom cxxstd=" + std)
depends_on("vecgeom@0.5.2 cxxstd=" + std, when="@10.4.0:10.4 +vecgeom cxxstd=" + std)
depends_on("vecgeom@0.3rc cxxstd=" + std, when="@10.3.0:10.3 +vecgeom cxxstd=" + std)
# Boost.python, conflict handled earlier
depends_on(f"boost@1.70: +python cxxstd={_std}", when=f"{_when} +python cxxstd={_std}")
depends_on("boost@1.70: +python cxxstd=" + std, when="+python cxxstd=" + std)
# Visualization driver dependencies
depends_on("gl", when="+opengl")

View File

@@ -33,8 +33,6 @@ class Gettext(AutotoolsPackage, GNUMirrorPackage):
variant("tar", default=True, description="Enable tar support")
variant("bzip2", default=True, description="Enable bzip2 support")
variant("xz", default=True, description="Enable xz support")
variant("shared", default=True, description="Build shared libraries")
variant("pic", default=True, description="Enable position-independent code (PIC)")
# Optional variants
variant("libunistring", default=False, description="Use libunistring")
@@ -56,8 +54,6 @@ class Gettext(AutotoolsPackage, GNUMirrorPackage):
depends_on("libunistring", when="+libunistring")
# depends_on('cvs')
conflicts("+shared~pic")
patch("test-verify-parallel-make-check.patch", when="@:0.19.8.1")
patch("nvhpc-builtin.patch", when="@:0.21.0 %nvhpc")
patch("nvhpc-export-symbols.patch", when="%nvhpc")
@@ -91,8 +87,6 @@ def configure_args(self):
"--without-cvs",
]
config_args.extend(self.enable_or_disable("shared"))
if self.spec["iconv"].name == "libc":
config_args.append("--without-libiconv-prefix")
elif not is_system_path(self.spec["iconv"].prefix):
@@ -121,16 +115,12 @@ def configure_args(self):
else:
config_args.append("--with-included-libunistring")
config_args.extend(self.with_or_without("pic"))
return config_args
@property
def libs(self):
libs = find_libraries(
return find_libraries(
["libasprintf", "libgettextlib", "libgettextpo", "libgettextsrc", "libintl"],
root=self.prefix,
recursive=True,
shared=self.spec.variants["shared"].value,
)
return libs

View File

@@ -253,6 +253,8 @@ def setup_build_environment(self, env):
extlib_bits.append(spec["gettext"].libs.search_flags)
extlib_bits.append("-lintl")
env.append_flags("EXTLIBS", " ".join(extlib_bits))
if not is_system_path(spec["gettext"].prefix):
env.append_flags("CFLAGS", spec["gettext"].headers.include_flags)
if not self.spec["curl"].satisfies("libs=shared"):
curlconfig = which(os.path.join(self.spec["curl"].prefix.bin, "curl-config"))

View File

@@ -139,8 +139,7 @@ class Glib(MesonPackage, AutotoolsPackage):
depends_on("zlib-api")
depends_on("gettext")
depends_on("perl", type=("build", "run"))
# Uses distutils in gio/gdbus-2.0/codegen/utils.py
depends_on("python@:3.11", type=("build", "run"), when="@2.53.4:")
depends_on("python", type=("build", "run"), when="@2.53.4:")
depends_on("pcre2", when="@2.73.2:")
depends_on("pcre2@10.34:", when="@2.74:")
depends_on("pcre+utf", when="@2.48:2.73.1")

View File

@@ -19,7 +19,7 @@ class Hiop(CMakePackage, CudaPackage, ROCmPackage):
homepage = "https://github.com/LLNL/hiop"
git = "https://github.com/LLNL/hiop.git"
maintainers("ryandanehy", "cameronrutherford", "pelesh")
maintainers("ryandanehy", "CameronRutherford", "pelesh")
# Most recent tagged snapshot is the preferred version when profiling.
version("1.0.0", commit="10b7d3ee0a15cb4949ccee8c905d447b9528794f", submodules=True)

View File

@@ -27,8 +27,6 @@ def url_for_version(self, version):
return url.format(version)
version("master", branch="main")
version("5.6.1", sha256="cc9a99c7e4de3d9360c0a471b27d626e84a39c9e60e0aff1e8e1500d82391819")
version("5.6.0", sha256="864f87323e793e60b16905284fba381a7182b960dd4a37fb67420c174442c03c")
version("5.5.1", sha256="1375fc7723cfaa0ae22a78682186d4804188b0a54990bfd9c0b8eb421b85e37e")
version("5.5.0", sha256="efbae9a1ef2ab3de5ca44091e9bb78522e76759c43524c1349114f9596cc61d1")
version("5.4.3", sha256="71d9668619ab57ec8a4564d11860438c5aad5bd161a3e58fbc49555fbd59182d")
@@ -142,8 +140,6 @@ def url_for_version(self, version):
"5.4.3",
"5.5.0",
"5.5.1",
"5.6.0",
"5.6.1",
"master",
]:
depends_on("hsakmt-roct@" + ver, when="@" + ver)
@@ -166,8 +162,6 @@ def url_for_version(self, version):
# Add opencl sources thru the below
for d_version, d_shasum in [
("5.6.1", "ec26049f7d93c95050c27ba65472736665ec7a40f25920a868616b2970f6b845"),
("5.6.0", "52ab260d00d279c2a86c353901ffd88ee61b934ad89e9eb480f210656705f04e"),
("5.5.1", "a8a62a7c6fc5398406d2203b8cb75621a24944688e545d917033d87de2724498"),
("5.5.0", "0df9fa0b8aa0c8e6711d34eec0fdf1ed356adcd9625bc8f1ce9b3e72090f3e4f"),
("5.4.3", "b0f8339c844a2e62773bd85cd1e7c5ecddfe71d7c8e8d604e1a1d60900c30873"),

View File

@@ -1,75 +0,0 @@
From cd4283eab943a3018237035afea61f1b5e0042cd Mon Sep 17 00:00:00 2001
From: Renjith Ravindran <Renjith.RavindranKannath@amd.com>
Date: Wed, 27 Sep 2023 06:38:18 +0000
Subject: [PATCH] Remove-compiler-rt-linkage-for-host
---
clr/hipamd/CMakeLists.txt | 6 ++++--
clr/hipamd/hip-config.cmake.in | 1 -
hipcc/bin/hipcc.pl | 11 ++++++++---
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/clr/hipamd/CMakeLists.txt b/clr/hipamd/CMakeLists.txt
index c14a9ad..ca49f7f 100755
--- a/clr/hipamd/CMakeLists.txt
+++ b/clr/hipamd/CMakeLists.txt
@@ -400,8 +400,10 @@ if (NOT ${HIPCC_BIN_DIR} STREQUAL "")
install(PROGRAMS ${HIPCC_BIN_DIR}/hipcc.pl DESTINATION bin)
install(PROGRAMS ${HIPCC_BIN_DIR}/hipconfig.pl DESTINATION bin)
install(PROGRAMS ${HIPCC_BIN_DIR}/hipvars.pm DESTINATION bin)
- install(PROGRAMS ${HIPCC_BIN_DIR}/hipcc.bat DESTINATION bin)
- install(PROGRAMS ${HIPCC_BIN_DIR}/hipconfig.bat DESTINATION bin)
+ if(WIN32)
+ install(PROGRAMS ${HIPCC_BIN_DIR}/hipcc.bat DESTINATION bin)
+ install(PROGRAMS ${HIPCC_BIN_DIR}/hipconfig.bat DESTINATION bin)
+ endif()
endif()
#############################
diff --git a/clr/hipamd/hip-config.cmake.in b/clr/hipamd/hip-config.cmake.in
index 537a599..7d10273 100755
--- a/clr/hipamd/hip-config.cmake.in
+++ b/clr/hipamd/hip-config.cmake.in
@@ -245,7 +245,6 @@ if(HIP_COMPILER STREQUAL "clang")
# Add support for __fp16 and _Float16, explicitly link with compiler-rt
if( "${CLANGRT_BUILTINS_FETCH_EXIT_CODE}" STREQUAL "0" )
# CLANG_RT Builtins found Successfully Set interface link libraries property
- set_property(TARGET hip::host APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${CLANGRT_BUILTINS}")
set_property(TARGET hip::device APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${CLANGRT_BUILTINS}")
else()
message(STATUS "clangrt builtins lib not found: ${CLANGRT_BUILTINS_FETCH_EXIT_CODE}")
diff --git a/hipcc/bin/hipcc.pl b/hipcc/bin/hipcc.pl
index 56dcda2..c7ae60b 100755
--- a/hipcc/bin/hipcc.pl
+++ b/hipcc/bin/hipcc.pl
@@ -155,11 +155,15 @@ if ($HIP_PLATFORM eq "amd") {
if($isWindows) {
$execExtension = ".exe";
}
- $HIPCC="$HIP_CLANG_PATH/clang++" . $execExtension;
+ # llvm_path is set inside the hip recipe
+ $LLVM_PATH= $ENV{'LLVM_PATH'};
+ $HIPCC="${LLVM_PATH}/bin/clang++" . $execExtension;
+
# If $HIPCC clang++ is not compiled, use clang instead
if ( ! -e $HIPCC ) {
- $HIPCC="$HIP_CLANG_PATH/clang" . $execExtension;
+ $LLVM_PATH= $ENV{'LLVM_PATH'};
+ $HIPCC="${LLVM_PATH}/bin/clang" . $execExtension;
$HIPLDFLAGS = "--driver-mode=g++";
}
# to avoid using dk linker or MSVC linker
@@ -483,7 +487,8 @@ if($HIP_PLATFORM eq "amd"){
$targetsStr = $ENV{HCC_AMDGPU_TARGET};
} elsif (not $isWindows) {
# Else try using rocm_agent_enumerator
- $ROCM_AGENT_ENUM = "${ROCM_PATH}/bin/rocm_agent_enumerator";
+ $ROCMINFO_PATH = $ENV{'ROCMINFO_PATH'} // $ROCMINFO_PATH;
+ $ROCM_AGENT_ENUM = "${ROCMINFO_PATH}/bin/rocm_agent_enumerator";
$targetsStr = `${ROCM_AGENT_ENUM} -t GPU`;
$targetsStr =~ s/\n/,/g;
}
--
2.31.1

View File

@@ -1,107 +0,0 @@
From 1d7f7eb9a52af2b83d3cb06bb4fe0f31eb47ce7f Mon Sep 17 00:00:00 2001
From: Renjith Ravindran <Renjith.RavindranKannath@amd.com>
Date: Wed, 27 Sep 2023 07:07:01 +0000
Subject: [PATCH] Reverting operator mixup fix for slate
---
.../include/hip/amd_detail/amd_hip_complex.h | 17 ++++------
.../hip/amd_detail/amd_hip_vector_types.h | 31 +++++++++++--------
2 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/clr/hipamd/include/hip/amd_detail/amd_hip_complex.h b/clr/hipamd/include/hip/amd_detail/amd_hip_complex.h
index 9d9dfd5..eba6eb5 100644
--- a/clr/hipamd/include/hip/amd_detail/amd_hip_complex.h
+++ b/clr/hipamd/include/hip/amd_detail/amd_hip_complex.h
@@ -106,20 +106,15 @@ THE SOFTWARE.
return lhs; \
}
-#define COMPLEX_MUL_PREOP_OVERLOAD(type) \
- __HOST_DEVICE__ static inline type& operator*=(type& lhs, const type& rhs) { \
- type temp{lhs}; \
- lhs.x = rhs.x * temp.x - rhs.y * temp.y; \
- lhs.y = rhs.y * temp.x + rhs.x * temp.y; \
- return lhs; \
+#define COMPLEX_MUL_PREOP_OVERLOAD(type) \
+ __HOST_DEVICE__ static inline type& operator*=(type& lhs, const type& rhs) { \
+ lhs = lhs * rhs; \
+ return lhs; \
}
#define COMPLEX_DIV_PREOP_OVERLOAD(type) \
- __HOST_DEVICE__ static inline type& operator/=(type& lhs, const type& rhs) { \
- type temp; \
- temp.x = (lhs.x*rhs.x + lhs.y * rhs.y) / (rhs.x*rhs.x + rhs.y*rhs.y); \
- temp.y = (lhs.y * rhs.x - lhs.x * rhs.y) / (rhs.x*rhs.x + rhs.y*rhs.y); \
- lhs = temp; \
+ __HOST_DEVICE__ static inline type& operator/=(type& lhs, const type& rhs) { \
+ lhs = lhs / rhs; \
return lhs; \
}
diff --git a/clr/hipamd/include/hip/amd_detail/amd_hip_vector_types.h b/clr/hipamd/include/hip/amd_detail/amd_hip_vector_types.h
index 8215fb0..dfd3b39 100644
--- a/clr/hipamd/include/hip/amd_detail/amd_hip_vector_types.h
+++ b/clr/hipamd/include/hip/amd_detail/amd_hip_vector_types.h
@@ -544,13 +544,6 @@ template <typename __T> struct is_scalar : public integral_constant<bool, __is_s
data *= x.data;
return *this;
}
-
- friend __HOST_DEVICE__ inline constexpr HIP_vector_type operator*(
- HIP_vector_type x, const HIP_vector_type& y) noexcept
- {
- return HIP_vector_type{ x } *= y;
- }
-
template<
typename U,
typename std::enable_if<
@@ -561,12 +554,6 @@ template <typename __T> struct is_scalar : public integral_constant<bool, __is_s
return *this *= HIP_vector_type{x};
}
- friend __HOST_DEVICE__ inline constexpr HIP_vector_type operator/(
- HIP_vector_type x, const HIP_vector_type& y) noexcept
- {
- return HIP_vector_type{ x } /= y;
- }
-
__HOST_DEVICE__
HIP_vector_type& operator/=(const HIP_vector_type& x) noexcept
{
@@ -722,6 +709,15 @@ template <typename __T> struct is_scalar : public integral_constant<bool, __is_s
return HIP_vector_type<T, n>{x} -= y;
}
+ template<typename T, unsigned int n>
+ __HOST_DEVICE__
+ inline
+ constexpr
+ HIP_vector_type<T, n> operator*(
+ const HIP_vector_type<T, n>& x, const HIP_vector_type<T, n>& y) noexcept
+ {
+ return HIP_vector_type<T, n>{x} *= y;
+ }
template<typename T, unsigned int n, typename U>
__HOST_DEVICE__
inline
@@ -741,6 +737,15 @@ template <typename __T> struct is_scalar : public integral_constant<bool, __is_s
return HIP_vector_type<T, n>{x} *= y;
}
+ template<typename T, unsigned int n>
+ __HOST_DEVICE__
+ inline
+ constexpr
+ HIP_vector_type<T, n> operator/(
+ const HIP_vector_type<T, n>& x, const HIP_vector_type<T, n>& y) noexcept
+ {
+ return HIP_vector_type<T, n>{x} /= y;
+ }
template<typename T, unsigned int n, typename U>
__HOST_DEVICE__
inline
--
2.31.1

View File

@@ -25,8 +25,6 @@ class Hip(CMakePackage):
libraries = ["libamdhip64"]
version("master", branch="master")
version("5.6.1", sha256="4b3c4dfcf8595da0e1b8c3e8067b1ccebeaac337762ff098db14375fa8dd4487")
version("5.6.0", sha256="a8237768c1ae70029d972376f8d279f4de18a1e6106fff6215d1e16847bc375e")
version("5.5.1", sha256="1f5f6bb72d8d64335ccc8242ef2e2ea8efeb380cce2997f475b1ee77528d9fb4")
version("5.5.0", sha256="5b0d0253e62f85cc21d043513f7c11c64e4a4ec416159668f0b160d732d09a3c")
version("5.4.3", sha256="23e51d3af517cd63019f8d199e46b84d5a18251d148e727f3985e8d99ccb0e58")
@@ -164,8 +162,6 @@ class Hip(CMakePackage):
"5.4.3",
"5.5.0",
"5.5.1",
"5.6.0",
"5.6.1",
]:
depends_on("hsakmt-roct@" + ver, when="@" + ver)
depends_on("hsa-rocr-dev@" + ver, when="@" + ver)
@@ -174,10 +170,10 @@ class Hip(CMakePackage):
depends_on("rocminfo@" + ver, when="@" + ver)
depends_on("roctracer-dev-api@" + ver, when="@" + ver)
for ver in ["5.4.0", "5.4.3", "5.5.0", "5.5.1", "5.6.0", "5.6.1"]:
for ver in ["5.4.0", "5.4.3", "5.5.0", "5.5.1"]:
depends_on("hipify-clang", when="@" + ver)
for ver in ["5.5.0", "5.5.1", "5.6.0", "5.6.1"]:
for ver in ["5.5.0", "5.5.1"]:
depends_on("rocm-core@" + ver, when="@" + ver)
# hipcc likes to add `-lnuma` by default :(
# ref https://github.com/ROCm-Developer-Tools/HIP/pull/2202
@@ -273,55 +269,6 @@ class Hip(CMakePackage):
placement="rocclr",
when="@{0}".format(d_version),
)
# Add hip-clr sources thru the below
for d_version, d_shasum in [
("5.6.1", "0b88af1e99643899d11b1c8cf8a3c46601051b328a5e0ffbd44ee88b7eb0db33"),
("5.6.0", "8dcd99110737a294f67a805639cf372890c8ca16c7603caaa793e71e84478fe4"),
]:
resource(
name="clr",
url="https://github.com/ROCm-Developer-Tools/clr/archive/refs/tags/rocm-{0}.tar.gz".format(
d_version
),
sha256=d_shasum,
expand=True,
destination="",
placement="clr",
when="@{0}".format(d_version),
)
# Add hipcc sources thru the below
for d_version, d_shasum in [
("5.6.1", "5800fac92b841ef6f52acda78d9bf86f83970bec0fb848a6265d239bdb7eb51a"),
("5.6.0", "fdb7fdc9e4648376120330f034ee8353038d34c8a015f9eb0c208c56eeddd097"),
]:
resource(
name="hipcc",
url="https://github.com/ROCm-Developer-Tools/HIPCC/archive/refs/tags/rocm-{0}.tar.gz".format(
d_version
),
sha256=d_shasum,
expand=True,
destination="",
placement="hipcc",
when="@{0}".format(d_version),
)
# Add hiptests sources thru the below
for d_version, d_shasum in [
("5.6.1", "5b3002ddfafda162329e4d9e6ac1200eeb48ff08e666b342aa8aeca30750f48b"),
("5.6.0", "8cf4509bf9c0747dab8ed8fec1365a9156792034b517207a0b2d63270429fd2e"),
]:
resource(
name="hip-tests",
url="https://github.com/ROCm-Developer-Tools/hip-tests/archive/refs/tags/rocm-{0}.tar.gz".format(
d_version
),
sha256=d_shasum,
expand=True,
destination="",
placement="hip-tests",
when="@{0}".format(d_version),
)
# Note: the ROCm ecosystem expects `lib/` and `bin/` folders with symlinks
# in the parent directory of the package, which is incompatible with spack.
# In hipcc the ROCM_PATH variable is used to point to the parent directory
@@ -384,11 +331,10 @@ class Hip(CMakePackage):
patch("0005-Disable-tests-4.1.0.patch", when="@4.1.0:4.3.2")
patch("Add_missing_open_cl_header_file_for_4.3.0.patch", when="@4.3.0:4.3.2")
patch("0014-hip-test-file-reorg-5.4.0.patch", when="@5.4.0:5.5")
patch("0016-hip-sample-fix-hipMalloc-call.patch", when="@5.4.3:5.5")
patch("0014-hip-test-file-reorg-5.4.0.patch", when="@5.4.0:")
patch("0016-hip-sample-fix-hipMalloc-call.patch", when="@5.4.3:")
patch("0014-remove-compiler-rt-linkage-for-host.5.5.0.patch", when="@5.5")
patch("0014-remove-compiler-rt-linkage-for-host.5.6.0.patch", when="@5.6:")
patch("0015-reverting-operator-mixup-fix-for-slate.patch", when="@5.6:")
# See https://github.com/ROCm-Developer-Tools/HIP/pull/3206
patch(
"https://github.com/ROCm-Developer-Tools/HIP/commit/50ee82f6bc4aad10908ce09198c9f7ebfb2a3561.patch?full_index=1",
@@ -400,10 +346,8 @@ class Hip(CMakePackage):
def root_cmakelists_dir(self):
if self.spec.satisfies("@:4.3.2"):
return self.stage.source_path
elif self.spec.satisfies("@4.5:5.5"):
return "hipamd"
else:
return "clr"
return "hipamd"
def get_paths(self):
if self.spec.external:
@@ -449,7 +393,6 @@ def get_paths(self):
"llvm-amdgpu": rocm_prefix.llvm,
"hsa-rocr-dev": rocm_prefix.hsa,
"rocminfo": rocm_prefix,
"comgr": rocm_prefix,
"rocm-device-libs": rocm_prefix,
}
@@ -462,7 +405,6 @@ def get_paths(self):
"llvm-amdgpu": self.spec["llvm-amdgpu"].prefix,
"hsa-rocr-dev": self.spec["hsa-rocr-dev"].prefix,
"rocminfo": self.spec["rocminfo"].prefix,
"comgr": self.spec["comgr"].prefix,
"rocm-device-libs": self.spec["llvm-amdgpu"].prefix,
}
@@ -534,7 +476,6 @@ def set_variables(self, env):
# hiprtcCreateProgram:
# https://github.com/RadeonOpenCompute/ROCm-CompilerSupport/blob/rocm-4.0.0/lib/comgr/src/comgr-env.cpp
env.set("LLVM_PATH", paths["llvm-amdgpu"])
env.set("COMGR_PATH", paths["comgr"])
# Finally we have to set --rocm-path=<prefix> ourselves, which is not
# the same as --hip-device-lib-path (set by hipcc). It's used to set
@@ -584,20 +525,13 @@ def patch(self):
"hip-config.cmake.in",
string=True,
)
if self.spec.satisfies("@5.2:5.4 +rocm"):
if self.spec.satisfies("@5.2: +rocm"):
filter_file(
'"${ROCM_PATH}/llvm"',
self.spec["llvm-amdgpu"].prefix,
"hipamd/hip-config.cmake.in",
string=True,
)
if self.spec.satisfies("@5.6: +rocm"):
filter_file(
'"${ROCM_PATH}/llvm"',
self.spec["llvm-amdgpu"].prefix,
"clr/hipamd/hip-config.cmake.in",
string=True,
)
perl = self.spec["perl"].command
kwargs = {"ignore_absent": False, "backup": False, "string": False}
@@ -618,13 +552,13 @@ def patch(self):
"roc-obj-ls",
"hipvars.pm",
]
elif self.spec.satisfies("@4.5.0:5.5"):
elif self.spec.satisfies("@4.5.0:"):
files = []
filter_file(match, substitute, *files, **kwargs)
# This guy is used during the cmake phase, so we have to fix the
# shebang already here in case it is too long.
filter_shebang("hipconfig")
if self.spec.satisfies("@4.5.0:5.5"):
filter_file(match, substitute, *files, **kwargs)
# This guy is used during the cmake phase, so we have to fix the
# shebang already here in case it is too long.
filter_shebang("hipconfig")
if self.spec.satisfies("@4.5.0:"):
perl = self.spec["perl"].command
kwargs = {"ignore_absent": False, "backup": False, "string": False}
with working_dir("hipamd/bin"):
@@ -632,18 +566,6 @@ def patch(self):
substitute = "#!{perl}".format(perl=perl)
files = ["roc-obj-extract", "roc-obj-ls"]
filter_file(match, substitute, *files, **kwargs)
if self.spec.satisfies("@5.6.0:"):
perl = self.spec["perl"].command
kwargs = {"ignore_absent": False, "backup": False, "string": False}
match = "^#!/usr/bin/perl"
substitute = "#!{perl}".format(perl=perl)
with working_dir("clr/hipamd/bin"):
files = ["roc-obj-extract", "roc-obj-ls"]
filter_file(match, substitute, *files, **kwargs)
with working_dir("hipcc/bin"):
files = []
filter_file(match, substitute, *files, **kwargs)
filter_shebang("hipconfig")
if "@3.7.0: +rocm" in self.spec:
numactl = self.spec["numactl"].prefix.lib
kwargs = {"ignore_absent": False, "backup": False, "string": False}
@@ -651,16 +573,7 @@ def patch(self):
with working_dir("bin"):
match = " -lnuma"
substitute = " -L{numactl} -lnuma".format(numactl=numactl)
if self.spec.satisfies("@4.5.0:5.5"):
filter_file(match, substitute, "hipcc", **kwargs)
if "@5.6.0: +rocm" in self.spec:
numactl = self.spec["numactl"].prefix.lib
kwargs = {"ignore_absent": False, "backup": False, "string": False}
with working_dir("hipcc/src"):
match = " -lnuma"
substitute = " -L{numactl} -lnuma".format(numactl=numactl)
filter_file(match, substitute, "hipBin_amd.h", **kwargs)
filter_file(match, substitute, "hipcc", **kwargs)
def flag_handler(self, name, flags):
if name == "cxxflags" and self.spec.satisfies("@3.7.0:4.3.2"):
@@ -696,30 +609,21 @@ def cmake_args(self):
if "@4.5.0:" in self.spec:
args.append(self.define("HIP_COMMON_DIR", self.stage.source_path))
args.append(self.define("HIP_CATCH_TEST", "OFF"))
if "@4.5.0:5.5" in self.spec:
args.append(self.define("ROCCLR_PATH", self.stage.source_path + "rocclr"))
args.append(self.define("AMD_OPENCL_PATH", self.stage.source_path + "opencl"))
args.append(self.define("ROCCLR_PATH", self.stage.source_path + "/rocclr"))
args.append(self.define("AMD_OPENCL_PATH", self.stage.source_path + "/opencl"))
if "@5.3.0:" in self.spec:
args.append("-DCMAKE_INSTALL_LIBDIR=lib")
if "@5.6.0:" in self.spec:
args.append(self.define("ROCCLR_PATH", self.stage.source_path + "/clr/rocclr"))
args.append(self.define("AMD_OPENCL_PATH", self.stage.source_path + "/clr/opencl"))
args.append(self.define("HIPCC_BIN_DIR", self.stage.source_path + "/hipcc/bin")),
args.append(self.define("CLR_BUILD_HIP", True)),
args.append(self.define("CLR_BUILD_OCL", False)),
return args
test_src_dir = "samples"
@run_after("install")
def cache_test_sources(self):
"""Copy the tests source files after the package is installed to an
install test subdirectory for use during `spack test run`."""
if self.spec.satisfies("@:5.1.0"):
return
else:
if "@:5.5" in self.spec:
self.test_src_dir = "samples"
else:
self.test_src_dir = "hip-tests/samples"
self.cache_extra_test_sources([self.test_src_dir])
def test_samples(self):

View File

@@ -22,8 +22,6 @@ class Hipblas(CMakePackage, CudaPackage, ROCmPackage):
version("develop", branch="develop")
version("master", branch="master")
version("5.6.1", sha256="f9da82fbefc68b84081ea0ed0139b91d2a540357fcf505c7f1d57eab01eb327c")
version("5.6.0", sha256="9453a31324e10ba528f8f4755d2c270d0ed9baa33e980d8f8383204d8e28a563")
version("5.5.1", sha256="5920c9a9c83cf7e2b42d1f99f5d5091cac7f6c0a040a737e869e57b92d7045a9")
version("5.5.0", sha256="b080c25cb61531228d26badcdca856c46c640035c058bfc1c9f63de65f418cd5")
version("5.4.3", sha256="5acac147aafc15c249c2f24c19459135ed68b506403aa92e602b67cfc10c38b7")
@@ -169,8 +167,6 @@ def check(self):
"5.4.3",
"5.5.0",
"5.5.1",
"5.6.0",
"5.6.1",
"master",
"develop",
]:

View File

@@ -15,8 +15,7 @@ class Hipcub(CMakePackage, CudaPackage, ROCmPackage):
tags = ["rocm"]
maintainers("srekolam", "renjithravindrankannath")
version("5.6.1", sha256="4b9479daa40424c9ddbc14ce967aa170680f8ca1ed01a514e6e30ccfa22552ce")
version("5.6.0", sha256="5e74ddbf833f39836bf9ec6c6750348c7386a85ca67aaf9bb54d16c9e1959031")
version("5.5.1", sha256="ad83f3f1ed85ead9e3012906957c125a896168be913f6fb6af298228fc571480")
version("5.5.0", sha256="3eec838119326a67eb4cc006c706e328f3a51a01e98bbfb518df8fe4a4707e13")
version("5.4.3", sha256="cf528d9acb4f9b9c3aad439ae76bfc3d02be6e7a74d96099544e5d54e1a23675")
@@ -149,8 +148,6 @@ class Hipcub(CMakePackage, CudaPackage, ROCmPackage):
"5.4.3",
"5.5.0",
"5.5.1",
"5.6.0",
"5.6.1",
]:
depends_on("rocprim@" + ver, when="+rocm @" + ver)
depends_on("rocm-cmake@%s:" % ver, type="build", when="@" + ver)

Some files were not shown because too many files have changed in this diff Show More