remove platform=cray (#43796)
Remove support for `cray` as a separate platform. Any platform previously detected as `cray` is now detected as `linux`. Users who still need platform=cray have to stick to Spack 0.22
This commit is contained in:

committed by
GitHub

parent
67b5f6b838
commit
f242e0fd0c
@@ -1,16 +0,0 @@
|
||||
# -------------------------------------------------------------------------
|
||||
# This is the default configuration for Spack's module file generation.
|
||||
#
|
||||
# Settings here are versioned with Spack and are intended to provide
|
||||
# sensible defaults out of the box. Spack maintainers should edit this
|
||||
# file to keep it current.
|
||||
#
|
||||
# Users can override these settings by editing the following files.
|
||||
#
|
||||
# Per-spack-instance settings (overrides defaults):
|
||||
# $SPACK_ROOT/etc/spack/modules.yaml
|
||||
#
|
||||
# Per-user settings (overrides default and site settings):
|
||||
# ~/.spack/modules.yaml
|
||||
# -------------------------------------------------------------------------
|
||||
modules: {}
|
@@ -1433,22 +1433,12 @@ the reserved keywords ``platform``, ``os`` and ``target``:
|
||||
$ spack install libelf os=ubuntu18.04
|
||||
$ spack install libelf target=broadwell
|
||||
|
||||
or together by using the reserved keyword ``arch``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install libelf arch=cray-CNL10-haswell
|
||||
|
||||
Normally users don't have to bother specifying the architecture if they
|
||||
are installing software for their current host, as in that case the
|
||||
values will be detected automatically. If you need fine-grained control
|
||||
over which packages use which targets (or over *all* packages' default
|
||||
target), see :ref:`package-preferences`.
|
||||
|
||||
.. admonition:: Cray machines
|
||||
|
||||
The situation is a little bit different for Cray machines and a detailed
|
||||
explanation on how the architecture can be set on them can be found at :ref:`cray-support`
|
||||
|
||||
.. _support-for-microarchitectures:
|
||||
|
||||
|
@@ -1364,187 +1364,6 @@ This will write the private key to the file `dinosaur.priv`.
|
||||
or for help on an issue or the Spack slack.
|
||||
|
||||
|
||||
.. _cray-support:
|
||||
|
||||
-------------
|
||||
Spack on Cray
|
||||
-------------
|
||||
|
||||
Spack differs slightly when used on a Cray system. The architecture spec
|
||||
can differentiate between the front-end and back-end processor and operating system.
|
||||
For example, on Edison at NERSC, the back-end target processor
|
||||
is "Ivy Bridge", so you can specify to use the back-end this way:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install zlib target=ivybridge
|
||||
|
||||
You can also use the operating system to build against the back-end:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install zlib os=CNL10
|
||||
|
||||
Notice that the name includes both the operating system name and the major
|
||||
version number concatenated together.
|
||||
|
||||
Alternatively, if you want to build something for the front-end,
|
||||
you can specify the front-end target processor. The processor for a login node
|
||||
on Edison is "Sandy bridge" so we specify on the command line like so:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install zlib target=sandybridge
|
||||
|
||||
And the front-end operating system is:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ spack install zlib os=SuSE11
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Cray compiler detection
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Spack can detect compilers using two methods. For the front-end, we treat
|
||||
everything the same. The difference lies in back-end compiler detection.
|
||||
Back-end compiler detection is made via the Tcl module avail command.
|
||||
Once it detects the compiler it writes the appropriate PrgEnv and compiler
|
||||
module name to compilers.yaml and sets the paths to each compiler with Cray\'s
|
||||
compiler wrapper names (i.e. cc, CC, ftn). During build time, Spack will load
|
||||
the correct PrgEnv and compiler module and will call appropriate wrapper.
|
||||
|
||||
The compilers.yaml config file will also differ. There is a
|
||||
modules section that is filled with the compiler's Programming Environment
|
||||
and module name. On other systems, this field is empty []:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
- compiler:
|
||||
modules:
|
||||
- PrgEnv-intel
|
||||
- intel/15.0.109
|
||||
|
||||
As mentioned earlier, the compiler paths will look different on a Cray system.
|
||||
Since most compilers are invoked using cc, CC and ftn, the paths for each
|
||||
compiler are replaced with their respective Cray compiler wrapper names:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
paths:
|
||||
cc: cc
|
||||
cxx: CC
|
||||
f77: ftn
|
||||
fc: ftn
|
||||
|
||||
As opposed to an explicit path to the compiler executable. This allows Spack
|
||||
to call the Cray compiler wrappers during build time.
|
||||
|
||||
For more on compiler configuration, check out :ref:`compiler-config`.
|
||||
|
||||
Spack sets the default Cray link type to dynamic, to better match other
|
||||
other platforms. Individual packages can enable static linking (which is the
|
||||
default outside of Spack on cray systems) using the ``-static`` flag.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Setting defaults and using Cray modules
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
If you want to use default compilers for each PrgEnv and also be able
|
||||
to load cray external modules, you will need to set up a ``packages.yaml``.
|
||||
|
||||
Here's an example of an external configuration for cray modules:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
packages:
|
||||
mpich:
|
||||
externals:
|
||||
- spec: "mpich@7.3.1%gcc@5.2.0 arch=cray_xc-haswell-CNL10"
|
||||
modules:
|
||||
- cray-mpich
|
||||
- spec: "mpich@7.3.1%intel@16.0.0.109 arch=cray_xc-haswell-CNL10"
|
||||
modules:
|
||||
- cray-mpich
|
||||
all:
|
||||
providers:
|
||||
mpi: [mpich]
|
||||
|
||||
This tells Spack that for whatever package that depends on mpi, load the
|
||||
cray-mpich module into the environment. You can then be able to use whatever
|
||||
environment variables, libraries, etc, that are brought into the environment
|
||||
via module load.
|
||||
|
||||
.. note::
|
||||
|
||||
For Cray-provided packages, it is best to use ``modules:`` instead of ``prefix:``
|
||||
in ``packages.yaml``, because the Cray Programming Environment heavily relies on
|
||||
modules (e.g., loading the ``cray-mpich`` module adds MPI libraries to the
|
||||
compiler wrapper link line).
|
||||
|
||||
You can set the default compiler that Spack can use for each compiler type.
|
||||
If you want to use the Cray defaults, then set them under ``all:`` in packages.yaml.
|
||||
In the compiler field, set the compiler specs in your order of preference.
|
||||
Whenever you build with that compiler type, Spack will concretize to that version.
|
||||
|
||||
Here is an example of a full packages.yaml used at NERSC
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
packages:
|
||||
mpich:
|
||||
externals:
|
||||
- spec: "mpich@7.3.1%gcc@5.2.0 arch=cray_xc-CNL10-ivybridge"
|
||||
modules:
|
||||
- cray-mpich
|
||||
- spec: "mpich@7.3.1%intel@16.0.0.109 arch=cray_xc-SuSE11-ivybridge"
|
||||
modules:
|
||||
- cray-mpich
|
||||
buildable: False
|
||||
netcdf:
|
||||
externals:
|
||||
- spec: "netcdf@4.3.3.1%gcc@5.2.0 arch=cray_xc-CNL10-ivybridge"
|
||||
modules:
|
||||
- cray-netcdf
|
||||
- spec: "netcdf@4.3.3.1%intel@16.0.0.109 arch=cray_xc-CNL10-ivybridge"
|
||||
modules:
|
||||
- cray-netcdf
|
||||
buildable: False
|
||||
hdf5:
|
||||
externals:
|
||||
- spec: "hdf5@1.8.14%gcc@5.2.0 arch=cray_xc-CNL10-ivybridge"
|
||||
modules:
|
||||
- cray-hdf5
|
||||
- spec: "hdf5@1.8.14%intel@16.0.0.109 arch=cray_xc-CNL10-ivybridge"
|
||||
modules:
|
||||
- cray-hdf5
|
||||
buildable: False
|
||||
all:
|
||||
compiler: [gcc@5.2.0, intel@16.0.0.109]
|
||||
providers:
|
||||
mpi: [mpich]
|
||||
|
||||
Here we tell spack that whenever we want to build with gcc use version 5.2.0 or
|
||||
if we want to build with intel compilers, use version 16.0.0.109. We add a spec
|
||||
for each compiler type for each cray modules. This ensures that for each
|
||||
compiler on our system we can use that external module.
|
||||
|
||||
For more on external packages check out the section :ref:`sec-external-packages`.
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Using Linux containers on Cray machines
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Spack uses environment variables particular to the Cray programming
|
||||
environment to determine which systems are Cray platforms. These
|
||||
environment variables may be propagated into containers that are not
|
||||
using the Cray programming environment.
|
||||
|
||||
To ensure that Spack does not autodetect the Cray programming
|
||||
environment, unset the environment variable ``MODULEPATH``. This
|
||||
will cause Spack to treat a linux container on a Cray system as a base
|
||||
linux distro.
|
||||
|
||||
.. _windows_support:
|
||||
|
||||
----------------
|
||||
|
@@ -91,7 +91,7 @@
|
||||
)
|
||||
from spack.util.executable import Executable
|
||||
from spack.util.log_parse import make_log_context, parse_log_events
|
||||
from spack.util.module_cmd import load_module, module, path_from_modules
|
||||
from spack.util.module_cmd import load_module, path_from_modules
|
||||
|
||||
#
|
||||
# This can be set by the user to globally disable parallel builds.
|
||||
@@ -190,14 +190,6 @@ def __call__(self, *args, **kwargs):
|
||||
return super().__call__(*args, **kwargs)
|
||||
|
||||
|
||||
def _on_cray():
|
||||
host_platform = spack.platforms.host()
|
||||
host_os = host_platform.operating_system("default_os")
|
||||
on_cray = str(host_platform) == "cray"
|
||||
using_cnl = re.match(r"cnl\d+", str(host_os))
|
||||
return on_cray, using_cnl
|
||||
|
||||
|
||||
def clean_environment():
|
||||
# Stuff in here sanitizes the build environment to eliminate
|
||||
# anything the user has set that may interfere. We apply it immediately
|
||||
@@ -241,17 +233,6 @@ def clean_environment():
|
||||
if varname.endswith("_ROOT") and varname != "SPACK_ROOT":
|
||||
env.unset(varname)
|
||||
|
||||
# On Cray "cluster" systems, unset CRAY_LD_LIBRARY_PATH to avoid
|
||||
# interference with Spack dependencies.
|
||||
# CNL requires these variables to be set (or at least some of them,
|
||||
# depending on the CNL version).
|
||||
on_cray, using_cnl = _on_cray()
|
||||
if on_cray and not using_cnl:
|
||||
env.unset("CRAY_LD_LIBRARY_PATH")
|
||||
for varname in os.environ.keys():
|
||||
if "PKGCONF" in varname:
|
||||
env.unset(varname)
|
||||
|
||||
# Unset the following variables because they can affect installation of
|
||||
# Autotools and CMake packages.
|
||||
build_system_vars = [
|
||||
@@ -381,11 +362,7 @@ def set_compiler_environment_variables(pkg, env):
|
||||
_add_werror_handling(keep_werror, env)
|
||||
|
||||
# Set the target parameters that the compiler will add
|
||||
# Don't set on cray platform because the targeting module handles this
|
||||
if spec.satisfies("platform=cray"):
|
||||
isa_arg = ""
|
||||
else:
|
||||
isa_arg = spec.architecture.target.optimization_flags(compiler)
|
||||
isa_arg = spec.architecture.target.optimization_flags(compiler)
|
||||
env.set("SPACK_TARGET_ARGS", isa_arg)
|
||||
|
||||
# Trap spack-tracked compiler flags as appropriate.
|
||||
@@ -833,14 +810,6 @@ def setup_package(pkg, dirty, context: Context = Context.BUILD):
|
||||
for mod in pkg.compiler.modules:
|
||||
load_module(mod)
|
||||
|
||||
# kludge to handle cray mpich and libsci being automatically loaded by
|
||||
# PrgEnv modules on cray platform. Module unload does no damage when
|
||||
# unnecessary
|
||||
on_cray, _ = _on_cray()
|
||||
if on_cray and not dirty:
|
||||
for mod in ["cray-mpich", "cray-libsci"]:
|
||||
module("unload", mod)
|
||||
|
||||
if target and target.module_name:
|
||||
load_module(target.module_name)
|
||||
|
||||
|
@@ -110,9 +110,8 @@ def cuda_flags(arch_list):
|
||||
# From the NVIDIA install guide we know of conflicts for particular
|
||||
# platforms (linux, darwin), architectures (x86, powerpc) and compilers
|
||||
# (gcc, clang). We don't restrict %gcc and %clang conflicts to
|
||||
# platform=linux, since they should also apply to platform=cray, and may
|
||||
# apply to platform=darwin. We currently do not provide conflicts for
|
||||
# platform=darwin with %apple-clang.
|
||||
# platform=linux, since they may apply to platform=darwin. We currently
|
||||
# do not provide conflicts for platform=darwin with %apple-clang.
|
||||
|
||||
# Linux x86_64 compiler conflicts from here:
|
||||
# https://gist.github.com/ax3l/9489132
|
||||
|
@@ -937,32 +937,15 @@ def mpi_setup_dependent_build_environment(self, env, dependent_spec, compilers_o
|
||||
"I_MPI_ROOT": self.normalize_path("mpi"),
|
||||
}
|
||||
|
||||
# CAUTION - SIMILAR code in:
|
||||
# var/spack/repos/builtin/packages/mpich/package.py
|
||||
# var/spack/repos/builtin/packages/openmpi/package.py
|
||||
# var/spack/repos/builtin/packages/mvapich2/package.py
|
||||
#
|
||||
# On Cray, the regular compiler wrappers *are* the MPI wrappers.
|
||||
if "platform=cray" in self.spec:
|
||||
# TODO: Confirm
|
||||
wrapper_vars.update(
|
||||
{
|
||||
"MPICC": compilers_of_client["CC"],
|
||||
"MPICXX": compilers_of_client["CXX"],
|
||||
"MPIF77": compilers_of_client["F77"],
|
||||
"MPIF90": compilers_of_client["F90"],
|
||||
}
|
||||
)
|
||||
else:
|
||||
compiler_wrapper_commands = self.mpi_compiler_wrappers
|
||||
wrapper_vars.update(
|
||||
{
|
||||
"MPICC": compiler_wrapper_commands["MPICC"],
|
||||
"MPICXX": compiler_wrapper_commands["MPICXX"],
|
||||
"MPIF77": compiler_wrapper_commands["MPIF77"],
|
||||
"MPIF90": compiler_wrapper_commands["MPIF90"],
|
||||
}
|
||||
)
|
||||
compiler_wrapper_commands = self.mpi_compiler_wrappers
|
||||
wrapper_vars.update(
|
||||
{
|
||||
"MPICC": compiler_wrapper_commands["MPICC"],
|
||||
"MPICXX": compiler_wrapper_commands["MPICXX"],
|
||||
"MPIF77": compiler_wrapper_commands["MPIF77"],
|
||||
"MPIF90": compiler_wrapper_commands["MPIF90"],
|
||||
}
|
||||
)
|
||||
|
||||
# Ensure that the directory containing the compiler wrappers is in the
|
||||
# PATH. Spack packages add `prefix.bin` to their dependents' paths,
|
||||
|
@@ -24,7 +24,6 @@ class MSBuildPackage(spack.package_base.PackageBase):
|
||||
build_system("msbuild")
|
||||
conflicts("platform=linux", when="build_system=msbuild")
|
||||
conflicts("platform=darwin", when="build_system=msbuild")
|
||||
conflicts("platform=cray", when="build_system=msbuild")
|
||||
|
||||
|
||||
@spack.builder.builder("msbuild")
|
||||
|
@@ -24,7 +24,6 @@ class NMakePackage(spack.package_base.PackageBase):
|
||||
build_system("nmake")
|
||||
conflicts("platform=linux", when="build_system=nmake")
|
||||
conflicts("platform=darwin", when="build_system=nmake")
|
||||
conflicts("platform=cray", when="build_system=nmake")
|
||||
|
||||
|
||||
@spack.builder.builder("nmake")
|
||||
|
@@ -36,9 +36,8 @@ class IntelOneApiPackage(Package):
|
||||
"target=ppc64:",
|
||||
"target=ppc64le:",
|
||||
"target=aarch64:",
|
||||
"platform=darwin:",
|
||||
"platform=cray:",
|
||||
"platform=windows:",
|
||||
"platform=darwin",
|
||||
"platform=windows",
|
||||
]:
|
||||
conflicts(c, msg="This package in only available for x86_64 and Linux")
|
||||
|
||||
|
@@ -50,7 +50,7 @@
|
||||
@B{++}, @r{--}, @r{~~}, @B{==} propagate variants to package dependencies
|
||||
|
||||
architecture variants:
|
||||
@m{platform=platform} linux, darwin, cray, etc.
|
||||
@m{platform=platform} linux, darwin, freebsd, windows
|
||||
@m{os=operating_system} specific <operating_system>
|
||||
@m{target=target} specific <target> processor
|
||||
@m{arch=platform-os-target} shortcut for all three above
|
||||
|
@@ -695,10 +695,6 @@ def compiler_environment(self):
|
||||
try:
|
||||
# load modules and set env variables
|
||||
for module in self.modules:
|
||||
# On cray, mic-knl module cannot be loaded without cce module
|
||||
# See: https://github.com/spack/spack/issues/3153
|
||||
if os.environ.get("CRAY_CPU_TARGET") == "mic-knl":
|
||||
spack.util.module_cmd.load_module("cce")
|
||||
spack.util.module_cmd.load_module(module)
|
||||
|
||||
# apply other compiler environment changes
|
||||
|
@@ -140,7 +140,7 @@ def post_install(spec, explicit=None):
|
||||
return
|
||||
|
||||
# Only enable on platforms using ELF.
|
||||
if not spec.satisfies("platform=linux") and not spec.satisfies("platform=cray"):
|
||||
if not spec.satisfies("platform=linux"):
|
||||
return
|
||||
|
||||
# Disable this hook when bootstrapping, to avoid recursion.
|
||||
|
@@ -117,7 +117,7 @@ def post_install(spec, explicit=None):
|
||||
return
|
||||
|
||||
# Only enable on platforms using ELF.
|
||||
if not spec.satisfies("platform=linux") and not spec.satisfies("platform=cray"):
|
||||
if not spec.satisfies("platform=linux"):
|
||||
return
|
||||
|
||||
visit_directory_tree(spec.prefix, ElfFilesWithRPathVisitor())
|
||||
|
@@ -3,22 +3,12 @@
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
from ._operating_system import OperatingSystem
|
||||
from .cray_backend import CrayBackend
|
||||
from .cray_frontend import CrayFrontend
|
||||
from .freebsd import FreeBSDOs
|
||||
from .linux_distro import LinuxDistro
|
||||
from .mac_os import MacOs
|
||||
from .windows_os import WindowsOs
|
||||
|
||||
__all__ = [
|
||||
"OperatingSystem",
|
||||
"LinuxDistro",
|
||||
"MacOs",
|
||||
"CrayFrontend",
|
||||
"CrayBackend",
|
||||
"WindowsOs",
|
||||
"FreeBSDOs",
|
||||
]
|
||||
__all__ = ["OperatingSystem", "LinuxDistro", "MacOs", "WindowsOs", "FreeBSDOs"]
|
||||
|
||||
#: List of all the Operating Systems known to Spack
|
||||
operating_systems = [LinuxDistro, MacOs, CrayFrontend, CrayBackend, WindowsOs, FreeBSDOs]
|
||||
operating_systems = [LinuxDistro, MacOs, WindowsOs, FreeBSDOs]
|
||||
|
@@ -1,172 +0,0 @@
|
||||
# Copyright 2013-2024 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
|
||||
import re
|
||||
|
||||
import llnl.util.tty as tty
|
||||
|
||||
import spack.error
|
||||
import spack.version
|
||||
from spack.util.module_cmd import module
|
||||
|
||||
from .linux_distro import LinuxDistro
|
||||
|
||||
#: Possible locations of the Cray CLE release file,
|
||||
#: which we look at to get the CNL OS version.
|
||||
_cle_release_file = "/etc/opt/cray/release/cle-release"
|
||||
_clerelease_file = "/etc/opt/cray/release/clerelease"
|
||||
|
||||
|
||||
def read_cle_release_file():
|
||||
"""Read the CLE release file and return a dict with its attributes.
|
||||
|
||||
This file is present on newer versions of Cray.
|
||||
|
||||
The release file looks something like this::
|
||||
|
||||
RELEASE=6.0.UP07
|
||||
BUILD=6.0.7424
|
||||
...
|
||||
|
||||
The dictionary we produce looks like this::
|
||||
|
||||
{
|
||||
"RELEASE": "6.0.UP07",
|
||||
"BUILD": "6.0.7424",
|
||||
...
|
||||
}
|
||||
|
||||
Returns:
|
||||
dict: dictionary of release attributes
|
||||
"""
|
||||
with open(_cle_release_file) as release_file:
|
||||
result = {}
|
||||
for line in release_file:
|
||||
# use partition instead of split() to ensure we only split on
|
||||
# the first '=' in the line.
|
||||
key, _, value = line.partition("=")
|
||||
result[key] = value.strip()
|
||||
return result
|
||||
|
||||
|
||||
def read_clerelease_file():
|
||||
"""Read the CLE release file and return the Cray OS version.
|
||||
|
||||
This file is present on older versions of Cray.
|
||||
|
||||
The release file looks something like this::
|
||||
|
||||
5.2.UP04
|
||||
|
||||
Returns:
|
||||
str: the Cray OS version
|
||||
"""
|
||||
with open(_clerelease_file) as release_file:
|
||||
for line in release_file:
|
||||
return line.strip()
|
||||
|
||||
|
||||
class CrayBackend(LinuxDistro):
|
||||
"""Compute Node Linux (CNL) is the operating system used for the Cray XC
|
||||
series super computers. It is a very stripped down version of GNU/Linux.
|
||||
Any compilers found through this operating system will be used with
|
||||
modules. If updated, user must make sure that version and name are
|
||||
updated to indicate that OS has been upgraded (or downgraded)
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
name = "cnl"
|
||||
version = self._detect_crayos_version()
|
||||
if version:
|
||||
# If we found a CrayOS version, we do not want the information
|
||||
# from LinuxDistro. In order to skip the logic from
|
||||
# distro.linux_distribution, while still calling __init__
|
||||
# methods further up the MRO, we skip LinuxDistro in the MRO and
|
||||
# call the OperatingSystem superclass __init__ method
|
||||
super(LinuxDistro, self).__init__(name, version)
|
||||
else:
|
||||
super().__init__()
|
||||
self.modulecmd = module
|
||||
|
||||
def __str__(self):
|
||||
return self.name + str(self.version)
|
||||
|
||||
@classmethod
|
||||
def _detect_crayos_version(cls):
|
||||
if os.path.isfile(_cle_release_file):
|
||||
release_attrs = read_cle_release_file()
|
||||
if "RELEASE" not in release_attrs:
|
||||
# This Cray system uses a base OS not CLE/CNL
|
||||
return None
|
||||
v = spack.version.Version(release_attrs["RELEASE"])
|
||||
return v[0]
|
||||
elif os.path.isfile(_clerelease_file):
|
||||
v = read_clerelease_file()
|
||||
return spack.version.Version(v)[0]
|
||||
else:
|
||||
# Not all Cray systems run CNL on the backend.
|
||||
# Systems running in what Cray calls "cluster" mode run other
|
||||
# linux OSs under the Cray PE.
|
||||
# So if we don't detect any Cray OS version on the system,
|
||||
# we return None. We can't ever be sure we will get a Cray OS
|
||||
# version.
|
||||
# Returning None allows the calling code to test for the value
|
||||
# being "True-ish" rather than requiring a try/except block.
|
||||
return None
|
||||
|
||||
def arguments_to_detect_version_fn(self, paths):
|
||||
import spack.compilers
|
||||
|
||||
command_arguments = []
|
||||
for compiler_name in spack.compilers.supported_compilers():
|
||||
cmp_cls = spack.compilers.class_for_compiler_name(compiler_name)
|
||||
|
||||
# If the compiler doesn't have a corresponding
|
||||
# Programming Environment, skip to the next
|
||||
if cmp_cls.PrgEnv is None:
|
||||
continue
|
||||
|
||||
if cmp_cls.PrgEnv_compiler is None:
|
||||
tty.die("Must supply PrgEnv_compiler with PrgEnv")
|
||||
|
||||
compiler_id = spack.compilers.CompilerID(self, compiler_name, None)
|
||||
detect_version_args = spack.compilers.DetectVersionArgs(
|
||||
id=compiler_id, variation=(None, None), language="cc", path="cc"
|
||||
)
|
||||
command_arguments.append(detect_version_args)
|
||||
return command_arguments
|
||||
|
||||
def detect_version(self, detect_version_args):
|
||||
import spack.compilers
|
||||
|
||||
modulecmd = self.modulecmd
|
||||
compiler_name = detect_version_args.id.compiler_name
|
||||
compiler_cls = spack.compilers.class_for_compiler_name(compiler_name)
|
||||
output = modulecmd("avail", compiler_cls.PrgEnv_compiler)
|
||||
version_regex = r"({0})/([\d\.]+[\d]-?[\w]*)".format(compiler_cls.PrgEnv_compiler)
|
||||
matches = re.findall(version_regex, output)
|
||||
version = tuple(version for _, version in matches if "classic" not in version)
|
||||
compiler_id = detect_version_args.id
|
||||
value = detect_version_args._replace(id=compiler_id._replace(version=version))
|
||||
return value, None
|
||||
|
||||
def make_compilers(self, compiler_id, paths):
|
||||
import spack.spec
|
||||
|
||||
name = compiler_id.compiler_name
|
||||
cmp_cls = spack.compilers.class_for_compiler_name(name)
|
||||
compilers = []
|
||||
for v in compiler_id.version:
|
||||
comp = cmp_cls(
|
||||
spack.spec.CompilerSpec(name + "@=" + v),
|
||||
self,
|
||||
"any",
|
||||
["cc", "CC", "ftn"],
|
||||
[cmp_cls.PrgEnv, name + "/" + v],
|
||||
)
|
||||
|
||||
compilers.append(comp)
|
||||
return compilers
|
@@ -1,105 +0,0 @@
|
||||
# Copyright 2013-2024 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 contextlib
|
||||
import os
|
||||
import re
|
||||
|
||||
import llnl.util.filesystem as fs
|
||||
import llnl.util.lang
|
||||
import llnl.util.tty as tty
|
||||
|
||||
from spack.util.environment import get_path
|
||||
from spack.util.module_cmd import module
|
||||
|
||||
from .linux_distro import LinuxDistro
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def unload_programming_environment():
|
||||
"""Context manager that unloads Cray Programming Environments."""
|
||||
env_bu = None
|
||||
|
||||
# We rely on the fact that the PrgEnv-* modules set the PE_ENV
|
||||
# environment variable.
|
||||
if "PE_ENV" in os.environ:
|
||||
# Copy environment variables to restore them after the compiler
|
||||
# detection. We expect that the only thing PrgEnv-* modules do is
|
||||
# the environment variables modifications.
|
||||
env_bu = os.environ.copy()
|
||||
|
||||
# Get the name of the module from the environment variable.
|
||||
prg_env = "PrgEnv-" + os.environ["PE_ENV"].lower()
|
||||
|
||||
# Unload the PrgEnv-* module. By doing this we intentionally
|
||||
# provoke errors when the Cray's compiler wrappers are executed
|
||||
# (Error: A PrgEnv-* modulefile must be loaded.) so they will not
|
||||
# be detected as valid compilers by the overridden method. We also
|
||||
# expect that the modules that add the actual compilers' binaries
|
||||
# into the PATH environment variable (i.e. the following modules:
|
||||
# 'intel', 'cce', 'gcc', etc.) will also be unloaded since they are
|
||||
# specified as prerequisites in the PrgEnv-* modulefiles.
|
||||
module("unload", prg_env)
|
||||
|
||||
yield
|
||||
|
||||
# Restore the environment.
|
||||
if env_bu is not None:
|
||||
os.environ.clear()
|
||||
os.environ.update(env_bu)
|
||||
|
||||
|
||||
class CrayFrontend(LinuxDistro):
|
||||
"""Represents OS that runs on login and service nodes of the Cray platform.
|
||||
It acts as a regular Linux without Cray-specific modules and compiler
|
||||
wrappers."""
|
||||
|
||||
@property
|
||||
def compiler_search_paths(self):
|
||||
"""Calls the default function but unloads Cray's programming
|
||||
environments first.
|
||||
|
||||
This prevents from detecting Cray compiler wrappers and avoids
|
||||
possible false detections.
|
||||
"""
|
||||
import spack.compilers
|
||||
|
||||
with unload_programming_environment():
|
||||
search_paths = get_path("PATH")
|
||||
|
||||
extract_path_re = re.compile(r"prepend-path[\s]*PATH[\s]*([/\w\.:-]*)")
|
||||
|
||||
for compiler_cls in spack.compilers.all_compiler_types():
|
||||
# Check if the compiler class is supported on Cray
|
||||
prg_env = getattr(compiler_cls, "PrgEnv", None)
|
||||
compiler_module = getattr(compiler_cls, "PrgEnv_compiler", None)
|
||||
if not (prg_env and compiler_module):
|
||||
continue
|
||||
|
||||
# It is supported, check which versions are available
|
||||
output = module("avail", compiler_cls.PrgEnv_compiler)
|
||||
version_regex = r"({0})/([\d\.]+[\d]-?[\w]*)".format(compiler_cls.PrgEnv_compiler)
|
||||
matches = re.findall(version_regex, output)
|
||||
versions = tuple(version for _, version in matches if "classic" not in version)
|
||||
|
||||
# Now inspect the modules and add to paths
|
||||
msg = "[CRAY FE] Detected FE compiler [name={0}, versions={1}]"
|
||||
tty.debug(msg.format(compiler_module, versions))
|
||||
for v in versions:
|
||||
try:
|
||||
current_module = compiler_module + "/" + v
|
||||
out = module("show", current_module)
|
||||
match = extract_path_re.search(out)
|
||||
search_paths += match.group(1).split(":")
|
||||
except Exception as e:
|
||||
msg = (
|
||||
"[CRAY FE] An unexpected error occurred while "
|
||||
"detecting FE compiler [compiler={0}, "
|
||||
" version={1}, error={2}]"
|
||||
)
|
||||
tty.debug(msg.format(compiler_cls.name, v, str(e)))
|
||||
|
||||
search_paths = list(llnl.util.lang.dedupe(search_paths))
|
||||
return fs.search_paths_for_executables(*search_paths)
|
@@ -6,7 +6,6 @@
|
||||
|
||||
from ._functions import _host, by_name, platforms, prevent_cray_detection, reset
|
||||
from ._platform import Platform
|
||||
from .cray import Cray
|
||||
from .darwin import Darwin
|
||||
from .freebsd import FreeBSD
|
||||
from .linux import Linux
|
||||
@@ -15,7 +14,6 @@
|
||||
|
||||
__all__ = [
|
||||
"Platform",
|
||||
"Cray",
|
||||
"Darwin",
|
||||
"Linux",
|
||||
"FreeBSD",
|
||||
|
@@ -8,7 +8,6 @@
|
||||
|
||||
import spack.util.environment
|
||||
|
||||
from .cray import Cray
|
||||
from .darwin import Darwin
|
||||
from .freebsd import FreeBSD
|
||||
from .linux import Linux
|
||||
@@ -16,7 +15,7 @@
|
||||
from .windows import Windows
|
||||
|
||||
#: List of all the platform classes known to Spack
|
||||
platforms = [Cray, Darwin, Linux, Windows, FreeBSD, Test]
|
||||
platforms = [Darwin, Linux, Windows, FreeBSD, Test]
|
||||
|
||||
|
||||
@llnl.util.lang.memoized
|
||||
|
@@ -2,254 +2,10 @@
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
import os
|
||||
import os.path
|
||||
import platform
|
||||
import re
|
||||
|
||||
import archspec.cpu
|
||||
|
||||
import llnl.util.tty as tty
|
||||
from llnl.util.symlink import readlink
|
||||
|
||||
import spack.target
|
||||
import spack.version
|
||||
from spack.operating_systems.cray_backend import CrayBackend
|
||||
from spack.operating_systems.cray_frontend import CrayFrontend
|
||||
from spack.paths import build_env_path
|
||||
from spack.util.executable import Executable
|
||||
from spack.util.module_cmd import module
|
||||
|
||||
from ._platform import NoPlatformError, Platform
|
||||
|
||||
_craype_name_to_target_name = {
|
||||
"x86-cascadelake": "cascadelake",
|
||||
"x86-naples": "zen",
|
||||
"x86-rome": "zen2",
|
||||
"x86-milan": "zen3",
|
||||
"x86-skylake": "skylake_avx512",
|
||||
"mic-knl": "mic_knl",
|
||||
"interlagos": "bulldozer",
|
||||
"abudhabi": "piledriver",
|
||||
}
|
||||
|
||||
_ex_craype_dir = "/opt/cray/pe/cpe"
|
||||
_xc_craype_dir = "/opt/cray/pe/cdt"
|
||||
|
||||
|
||||
def slingshot_network():
|
||||
return os.path.exists("/opt/cray/pe") and (
|
||||
os.path.exists("/lib64/libcxi.so") or os.path.exists("/usr/lib64/libcxi.so")
|
||||
)
|
||||
|
||||
|
||||
def _target_name_from_craype_target_name(name):
|
||||
return _craype_name_to_target_name.get(name, name)
|
||||
|
||||
|
||||
class Cray(Platform):
|
||||
priority = 10
|
||||
|
||||
def __init__(self):
|
||||
"""Create a Cray system platform.
|
||||
|
||||
Target names should use craype target names but not include the
|
||||
'craype-' prefix. Uses first viable target from:
|
||||
self
|
||||
envars [SPACK_FRONT_END, SPACK_BACK_END]
|
||||
configuration file "targets.yaml" with keys 'front_end', 'back_end'
|
||||
scanning /etc/bash/bashrc.local for back_end only
|
||||
"""
|
||||
super().__init__("cray")
|
||||
|
||||
# Make all craype targets available.
|
||||
for target in self._avail_targets():
|
||||
name = _target_name_from_craype_target_name(target)
|
||||
self.add_target(name, spack.target.Target(name, "craype-%s" % target))
|
||||
|
||||
self.back_end = os.environ.get("SPACK_BACK_END", self._default_target_from_env())
|
||||
self.default = self.back_end
|
||||
if self.back_end not in self.targets:
|
||||
# We didn't find a target module for the backend
|
||||
raise NoPlatformError()
|
||||
|
||||
# Setup frontend targets
|
||||
for name in archspec.cpu.TARGETS:
|
||||
if name not in self.targets:
|
||||
self.add_target(name, spack.target.Target(name))
|
||||
self.front_end = os.environ.get("SPACK_FRONT_END", archspec.cpu.host().name)
|
||||
if self.front_end not in self.targets:
|
||||
self.add_target(self.front_end, spack.target.Target(self.front_end))
|
||||
|
||||
front_distro = CrayFrontend()
|
||||
back_distro = CrayBackend()
|
||||
|
||||
self.default_os = str(back_distro)
|
||||
self.back_os = self.default_os
|
||||
self.front_os = str(front_distro)
|
||||
|
||||
self.add_operating_system(self.back_os, back_distro)
|
||||
if self.front_os != self.back_os:
|
||||
self.add_operating_system(self.front_os, front_distro)
|
||||
|
||||
def setup_platform_environment(self, pkg, env):
|
||||
"""Change the linker to default dynamic to be more
|
||||
similar to linux/standard linker behavior
|
||||
"""
|
||||
# Unload these modules to prevent any silent linking or unnecessary
|
||||
# I/O profiling in the case of darshan.
|
||||
modules_to_unload = ["cray-mpich", "darshan", "cray-libsci", "altd"]
|
||||
for mod in modules_to_unload:
|
||||
module("unload", mod)
|
||||
|
||||
env.set("CRAYPE_LINK_TYPE", "dynamic")
|
||||
cray_wrapper_names = os.path.join(build_env_path, "cray")
|
||||
|
||||
if os.path.isdir(cray_wrapper_names):
|
||||
env.prepend_path("PATH", cray_wrapper_names)
|
||||
env.prepend_path("SPACK_ENV_PATH", cray_wrapper_names)
|
||||
|
||||
# Makes spack installed pkg-config work on Crays
|
||||
env.append_path("PKG_CONFIG_PATH", "/usr/lib64/pkgconfig")
|
||||
env.append_path("PKG_CONFIG_PATH", "/usr/local/lib64/pkgconfig")
|
||||
|
||||
# CRAY_LD_LIBRARY_PATH is used at build time by the cray compiler
|
||||
# wrappers to augment LD_LIBRARY_PATH. This is to avoid long load
|
||||
# times at runtime. This behavior is not always respected on cray
|
||||
# "cluster" systems, so we reproduce it here.
|
||||
if os.environ.get("CRAY_LD_LIBRARY_PATH"):
|
||||
env.prepend_path("LD_LIBRARY_PATH", os.environ["CRAY_LD_LIBRARY_PATH"])
|
||||
|
||||
@classmethod
|
||||
def craype_type_and_version(cls):
|
||||
if os.path.isdir(_ex_craype_dir):
|
||||
craype_dir = _ex_craype_dir
|
||||
craype_type = "EX"
|
||||
elif os.path.isdir(_xc_craype_dir):
|
||||
craype_dir = _xc_craype_dir
|
||||
craype_type = "XC"
|
||||
else:
|
||||
return (None, None)
|
||||
|
||||
# Take the default version from known symlink path
|
||||
default_path = os.path.join(craype_dir, "default")
|
||||
if os.path.islink(default_path):
|
||||
version = spack.version.Version(readlink(default_path))
|
||||
return (craype_type, version)
|
||||
|
||||
# If no default version, sort available versions and return latest
|
||||
versions_available = [spack.version.Version(v) for v in os.listdir(craype_dir)]
|
||||
versions_available.sort(reverse=True)
|
||||
if not versions_available:
|
||||
return (craype_type, None)
|
||||
return (craype_type, versions_available[0])
|
||||
|
||||
@classmethod
|
||||
def detect(cls):
|
||||
"""
|
||||
Detect whether this system requires CrayPE module support.
|
||||
|
||||
Systems with newer CrayPE (21.10 for EX systems, future work for CS and
|
||||
XC systems) have compilers and MPI wrappers that can be used directly
|
||||
by path. These systems are considered ``linux`` platforms.
|
||||
|
||||
For systems running an older CrayPE, we detect the Cray platform based
|
||||
on the availability through `module` of the Cray programming
|
||||
environment. If this environment is available, we can use it to find
|
||||
compilers, target modules, etc. If the Cray programming environment is
|
||||
not available via modules, then we will treat it as a standard linux
|
||||
system, as the Cray compiler wrappers and other components of the Cray
|
||||
programming environment are irrelevant without module support.
|
||||
"""
|
||||
if "opt/cray" not in os.environ.get("MODULEPATH", ""):
|
||||
return False
|
||||
|
||||
craype_type, craype_version = cls.craype_type_and_version()
|
||||
if craype_type == "XC":
|
||||
return True
|
||||
if craype_type == "EX" and craype_version < spack.version.Version("21.10"):
|
||||
return True
|
||||
return False
|
||||
|
||||
def _default_target_from_env(self):
|
||||
"""Set and return the default CrayPE target loaded in a clean login
|
||||
session.
|
||||
|
||||
A bash subshell is launched with a wiped environment and the list of
|
||||
loaded modules is parsed for the first acceptable CrayPE target.
|
||||
"""
|
||||
# env -i /bin/bash -lc echo $CRAY_CPU_TARGET 2> /dev/null
|
||||
if getattr(self, "default", None) is None:
|
||||
bash = Executable("/bin/bash")
|
||||
output = bash(
|
||||
"--norc",
|
||||
"--noprofile",
|
||||
"-lc",
|
||||
"echo $CRAY_CPU_TARGET",
|
||||
env={"TERM": os.environ.get("TERM", "")},
|
||||
output=str,
|
||||
error=os.devnull,
|
||||
)
|
||||
|
||||
default_from_module = "".join(output.split()) # rm all whitespace
|
||||
if default_from_module:
|
||||
tty.debug("Found default module:%s" % default_from_module)
|
||||
return default_from_module
|
||||
else:
|
||||
front_end = archspec.cpu.host()
|
||||
# Look for the frontend architecture or closest ancestor
|
||||
# available in cray target modules
|
||||
avail = [_target_name_from_craype_target_name(x) for x in self._avail_targets()]
|
||||
for front_end_possibility in [front_end] + front_end.ancestors:
|
||||
if front_end_possibility.name in avail:
|
||||
tty.debug("using front-end architecture or available ancestor")
|
||||
return front_end_possibility.name
|
||||
else:
|
||||
tty.debug("using platform.machine as default")
|
||||
return platform.machine()
|
||||
|
||||
def _avail_targets(self):
|
||||
"""Return a list of available CrayPE CPU targets."""
|
||||
|
||||
def modules_in_output(output):
|
||||
"""Returns a list of valid modules parsed from modulecmd output"""
|
||||
return [i for i in re.split(r"\s\s+|\n", output)]
|
||||
|
||||
def target_names_from_modules(modules):
|
||||
# Craype- module prefixes that are not valid CPU targets.
|
||||
targets = []
|
||||
for mod in modules:
|
||||
if "craype-" in mod:
|
||||
name = mod[7:]
|
||||
name = name.split()[0]
|
||||
_n = name.replace("-", "_") # test for mic-knl/mic_knl
|
||||
is_target_name = name in archspec.cpu.TARGETS or _n in archspec.cpu.TARGETS
|
||||
is_cray_target_name = name in _craype_name_to_target_name
|
||||
if is_target_name or is_cray_target_name:
|
||||
targets.append(name)
|
||||
|
||||
return targets
|
||||
|
||||
def modules_from_listdir():
|
||||
craype_default_path = "/opt/cray/pe/craype/default/modulefiles"
|
||||
if os.path.isdir(craype_default_path):
|
||||
return os.listdir(craype_default_path)
|
||||
return []
|
||||
|
||||
if getattr(self, "_craype_targets", None) is None:
|
||||
strategies = [
|
||||
lambda: modules_in_output(module("avail", "-t", "craype-")),
|
||||
modules_from_listdir,
|
||||
]
|
||||
for available_craype_modules in strategies:
|
||||
craype_modules = available_craype_modules()
|
||||
craype_targets = target_names_from_modules(craype_modules)
|
||||
if craype_targets:
|
||||
self._craype_targets = craype_targets
|
||||
break
|
||||
else:
|
||||
# If nothing is found add platform.machine()
|
||||
# to avoid Spack erroring out
|
||||
self._craype_targets = [platform.machine()]
|
||||
|
||||
return self._craype_targets
|
||||
|
@@ -3799,12 +3799,6 @@ class Solver:
|
||||
def __init__(self):
|
||||
self.driver = PyclingoDriver()
|
||||
self.selector = ReusableSpecsSelector(configuration=spack.config.CONFIG)
|
||||
if spack.platforms.host().name == "cray":
|
||||
msg = (
|
||||
"The Cray platform, i.e. 'platform=cray', will be removed in Spack v0.23. "
|
||||
"All Cray machines will be then detected as 'platform=linux'."
|
||||
)
|
||||
warnings.warn(msg)
|
||||
|
||||
@staticmethod
|
||||
def _check_input_and_extract_concrete_specs(specs):
|
||||
|
@@ -2816,9 +2816,7 @@ def _old_concretize(self, tests=False, deprecation_warning=True):
|
||||
|
||||
# Check if we can produce an optimized binary (will throw if
|
||||
# there are declared inconsistencies)
|
||||
# No need on platform=cray because of the targeting modules
|
||||
if not self.satisfies("platform=cray"):
|
||||
self.architecture.target.optimization_flags(self.compiler)
|
||||
self.architecture.target.optimization_flags(self.compiler)
|
||||
|
||||
def _patches_assigned(self):
|
||||
"""Whether patches have been assigned to this spec by the concretizer."""
|
||||
|
@@ -2,16 +2,12 @@
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
|
||||
import pytest
|
||||
|
||||
import archspec.cpu
|
||||
|
||||
import llnl.util.filesystem as fs
|
||||
|
||||
import spack.compilers
|
||||
import spack.concretize
|
||||
import spack.operating_systems
|
||||
@@ -25,9 +21,8 @@ def current_host_platform():
|
||||
"""Return the platform of the current host as detected by the
|
||||
'platform' stdlib package.
|
||||
"""
|
||||
if os.path.exists("/opt/cray/pe"):
|
||||
current_platform = spack.platforms.Cray()
|
||||
elif "Linux" in platform.system():
|
||||
current_platform = None
|
||||
if "Linux" in platform.system():
|
||||
current_platform = spack.platforms.Linux()
|
||||
elif "Darwin" in platform.system():
|
||||
current_platform = spack.platforms.Darwin()
|
||||
@@ -222,28 +217,3 @@ def test_concretize_target_ranges(root_target_range, dep_target_range, result, m
|
||||
with spack.concretize.disable_compiler_existence_check():
|
||||
spec.concretize()
|
||||
assert spec.target == spec["b"].target == result
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"versions,default,expected",
|
||||
[
|
||||
(["21.11", "21.9"], "21.11", False),
|
||||
(["21.11", "21.9"], "21.9", True),
|
||||
(["21.11", "21.9"], None, False),
|
||||
],
|
||||
)
|
||||
@pytest.mark.skipif(sys.platform == "win32", reason="Cray does not use windows")
|
||||
def test_cray_platform_detection(versions, default, expected, tmpdir, monkeypatch, working_env):
|
||||
ex_path = str(tmpdir.join("fake_craype_dir"))
|
||||
fs.mkdirp(ex_path)
|
||||
|
||||
with fs.working_dir(ex_path):
|
||||
for version in versions:
|
||||
fs.touch(version)
|
||||
if default:
|
||||
os.symlink(default, "default")
|
||||
|
||||
monkeypatch.setattr(spack.platforms.cray, "_ex_craype_dir", ex_path)
|
||||
os.environ["MODULEPATH"] = "/opt/cray/pe"
|
||||
|
||||
assert spack.platforms.cray.Cray.detect() == expected
|
||||
|
@@ -556,24 +556,6 @@ def test_build_jobs_defaults():
|
||||
)
|
||||
|
||||
|
||||
def test_dirty_disable_module_unload(config, mock_packages, working_env, mock_module_cmd):
|
||||
"""Test that on CRAY platform 'module unload' is not called if the 'dirty'
|
||||
option is on.
|
||||
"""
|
||||
s = spack.spec.Spec("a").concretized()
|
||||
|
||||
# If called with "dirty" we don't unload modules, so no calls to the
|
||||
# `module` function on Cray
|
||||
spack.build_environment.setup_package(s.package, dirty=True)
|
||||
assert not mock_module_cmd.calls
|
||||
|
||||
# If called without "dirty" we unload modules on Cray
|
||||
spack.build_environment.setup_package(s.package, dirty=False)
|
||||
assert mock_module_cmd.calls
|
||||
assert any(("unload", "cray-libsci") == item[0] for item in mock_module_cmd.calls)
|
||||
assert any(("unload", "cray-mpich") == item[0] for item in mock_module_cmd.calls)
|
||||
|
||||
|
||||
class TestModuleMonkeyPatcher:
|
||||
def test_getting_attributes(self, default_mock_concretization):
|
||||
s = default_mock_concretization("libelf")
|
||||
|
@@ -125,18 +125,8 @@ def print_spack_cc(*args):
|
||||
print(os.environ.get("CC", ""))
|
||||
|
||||
|
||||
# `module unload cray-libsci` in test environment causes failure
|
||||
# It does not fail for actual installs
|
||||
# build_environment.py imports module directly, so we monkeypatch it there
|
||||
# rather than in module_cmd
|
||||
def mock_module_noop(*args):
|
||||
pass
|
||||
|
||||
|
||||
def test_dev_build_drop_in(tmpdir, mock_packages, monkeypatch, install_mockery, working_env):
|
||||
monkeypatch.setattr(os, "execvp", print_spack_cc)
|
||||
monkeypatch.setattr(spack.build_environment, "module", mock_module_noop)
|
||||
|
||||
with tmpdir.as_cwd():
|
||||
output = dev_build("-b", "edit", "--drop-in", "sh", "dev-build-test-install@0.0.0")
|
||||
assert "lib/spack/env" in output
|
||||
|
@@ -3,12 +3,8 @@
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
"""Test detection of compiler version"""
|
||||
import os
|
||||
|
||||
import pytest
|
||||
|
||||
import llnl.util.filesystem as fs
|
||||
|
||||
import spack.compilers.aocc
|
||||
import spack.compilers.arm
|
||||
import spack.compilers.cce
|
||||
@@ -23,7 +19,6 @@
|
||||
import spack.compilers.xl
|
||||
import spack.compilers.xl_r
|
||||
import spack.util.module_cmd
|
||||
from spack.operating_systems.cray_frontend import CrayFrontend
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
@@ -413,48 +408,6 @@ def test_xl_version_detection(version_str, expected_version):
|
||||
assert version == expected_version
|
||||
|
||||
|
||||
@pytest.mark.not_on_windows("Not supported on Windows (yet)")
|
||||
@pytest.mark.parametrize(
|
||||
"compiler,version",
|
||||
[
|
||||
("gcc", "8.1.0"),
|
||||
("gcc", "1.0.0-foo"),
|
||||
("pgi", "19.1"),
|
||||
("pgi", "19.1a"),
|
||||
("intel", "9.0.0"),
|
||||
("intel", "0.0.0-foobar"),
|
||||
# ('oneapi', '2021.1'),
|
||||
# ('oneapi', '2021.1-foobar')
|
||||
],
|
||||
)
|
||||
def test_cray_frontend_compiler_detection(compiler, version, tmpdir, monkeypatch, working_env):
|
||||
"""Test that the Cray frontend properly finds compilers form modules"""
|
||||
# setup the fake compiler directory
|
||||
compiler_dir = tmpdir.join(compiler)
|
||||
compiler_exe = compiler_dir.join("cc").ensure()
|
||||
fs.set_executable(str(compiler_exe))
|
||||
|
||||
# mock modules
|
||||
def _module(cmd, *args):
|
||||
module_name = "%s/%s" % (compiler, version)
|
||||
module_contents = "prepend-path PATH %s" % compiler_dir
|
||||
if cmd == "avail":
|
||||
return module_name if compiler in args[0] else ""
|
||||
if cmd == "show":
|
||||
return module_contents if module_name in args else ""
|
||||
|
||||
monkeypatch.setattr(spack.operating_systems.cray_frontend, "module", _module)
|
||||
|
||||
# remove PATH variable
|
||||
os.environ.pop("PATH", None)
|
||||
|
||||
# get a CrayFrontend object
|
||||
cray_fe_os = CrayFrontend()
|
||||
|
||||
paths = cray_fe_os.compiler_search_paths
|
||||
assert paths == [str(compiler_dir)]
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"version_str,expected_version",
|
||||
[
|
||||
|
@@ -1,77 +0,0 @@
|
||||
# Copyright 2013-2024 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 spack.operating_systems.cray_backend as cray_backend
|
||||
|
||||
|
||||
def test_read_cle_release_file(tmpdir, monkeypatch):
|
||||
"""test reading the Cray cle-release file"""
|
||||
cle_release_path = tmpdir.join("cle-release")
|
||||
with cle_release_path.open("w") as f:
|
||||
f.write(
|
||||
"""\
|
||||
RELEASE=6.0.UP07
|
||||
BUILD=6.0.7424
|
||||
DATE=20190611
|
||||
ARCH=noarch
|
||||
NETWORK=ari
|
||||
PATCHSET=35-201906112304
|
||||
DUMMY=foo=bar
|
||||
"""
|
||||
)
|
||||
|
||||
monkeypatch.setattr(cray_backend, "_cle_release_file", str(cle_release_path))
|
||||
attrs = cray_backend.read_cle_release_file()
|
||||
|
||||
assert attrs["RELEASE"] == "6.0.UP07"
|
||||
assert attrs["BUILD"] == "6.0.7424"
|
||||
assert attrs["DATE"] == "20190611"
|
||||
assert attrs["ARCH"] == "noarch"
|
||||
assert attrs["NETWORK"] == "ari"
|
||||
assert attrs["PATCHSET"] == "35-201906112304"
|
||||
assert attrs["DUMMY"] == "foo=bar"
|
||||
|
||||
assert cray_backend.CrayBackend._detect_crayos_version() == 6
|
||||
|
||||
|
||||
def test_read_clerelease_file(tmpdir, monkeypatch):
|
||||
"""test reading the Cray clerelease file"""
|
||||
clerelease_path = tmpdir.join("clerelease")
|
||||
with clerelease_path.open("w") as f:
|
||||
f.write("5.2.UP04\n")
|
||||
|
||||
monkeypatch.setattr(cray_backend, "_clerelease_file", str(clerelease_path))
|
||||
v = cray_backend.read_clerelease_file()
|
||||
|
||||
assert v == "5.2.UP04"
|
||||
|
||||
assert cray_backend.CrayBackend._detect_crayos_version() == 5
|
||||
|
||||
|
||||
def test_cle_release_precedence(tmpdir, monkeypatch):
|
||||
"""test that cle-release file takes precedence over clerelease file."""
|
||||
cle_release_path = tmpdir.join("cle-release")
|
||||
clerelease_path = tmpdir.join("clerelease")
|
||||
|
||||
with cle_release_path.open("w") as f:
|
||||
f.write(
|
||||
"""\
|
||||
RELEASE=6.0.UP07
|
||||
BUILD=6.0.7424
|
||||
DATE=20190611
|
||||
ARCH=noarch
|
||||
NETWORK=ari
|
||||
PATCHSET=35-201906112304
|
||||
DUMMY=foo=bar
|
||||
"""
|
||||
)
|
||||
|
||||
with clerelease_path.open("w") as f:
|
||||
f.write("5.2.UP04\n")
|
||||
|
||||
monkeypatch.setattr(cray_backend, "_clerelease_file", str(clerelease_path))
|
||||
monkeypatch.setattr(cray_backend, "_cle_release_file", str(cle_release_path))
|
||||
|
||||
assert cray_backend.CrayBackend._detect_crayos_version() == 6
|
@@ -37,7 +37,6 @@ class _7zip(SourceforgePackage, Package):
|
||||
|
||||
conflicts("platform=linux")
|
||||
conflicts("platform=darwin")
|
||||
conflicts("platform=cray")
|
||||
|
||||
# TODO: Patch on WinSDK version 10.0.20348.0 when SDK is introduced to Spack
|
||||
# This patch solves a known bug in that SDK version on the 7zip side
|
||||
|
@@ -149,7 +149,7 @@ class Adios2(CMakePackage, CudaPackage, ROCmPackage):
|
||||
conflicts("+rocm", when="~kokkos", msg="ADIOS2 does not support HIP without Kokkos")
|
||||
conflicts("+sycl", when="~kokkos", msg="ADIOS2 does not support SYCL without Kokkos")
|
||||
|
||||
for _platform in ["linux", "darwin", "cray"]:
|
||||
for _platform in ["linux", "darwin"]:
|
||||
depends_on("pkgconfig", type="build", when=f"platform={_platform}")
|
||||
variant(
|
||||
"pic",
|
||||
|
@@ -143,7 +143,6 @@ class Amber(Package, CudaPackage):
|
||||
depends_on("cuda@7.5.18", when="@:16+cuda")
|
||||
|
||||
# conflicts
|
||||
conflicts("+x11", when="platform=cray", msg="x11 amber applications not available for cray")
|
||||
conflicts("+openmp", when="%clang", msg="OpenMP not available for the clang compiler")
|
||||
conflicts(
|
||||
"+openmp", when="%apple-clang", msg="OpenMP not available for the Apple clang compiler"
|
||||
|
@@ -19,7 +19,6 @@ class AppleLibunwind(Package):
|
||||
# Darwin must be expressed by listing a conflict with every
|
||||
# platform that isn't Darwin/macOS
|
||||
conflicts("platform=linux")
|
||||
conflicts("platform=cray")
|
||||
|
||||
# Override the fetcher method to throw a useful error message;
|
||||
# avoids GitHub issue (#7061) in which the opengl placeholder
|
||||
|
@@ -17,7 +17,6 @@ class AppleLibuuid(BundlePackage):
|
||||
|
||||
# Only supported on 'platform=darwin'
|
||||
conflicts("platform=linux")
|
||||
conflicts("platform=cray")
|
||||
conflicts("platform=windows")
|
||||
|
||||
@property
|
||||
|
@@ -100,9 +100,6 @@ def cmake_args(self):
|
||||
args.append(self.define_from_variant("ENABLE_IBM_BBAPI", "bbapi"))
|
||||
args.append(self.define_from_variant("ENABLE_CRAY_DW", "dw"))
|
||||
args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
|
||||
else:
|
||||
if spec.satisfies("platform=cray"):
|
||||
args.append(self.define("AXL_LINK_STATIC", True))
|
||||
|
||||
if spec.satisfies("@0.6.0:"):
|
||||
args.append(self.define_from_variant("ENABLE_PTHREADS", "pthreads"))
|
||||
|
@@ -238,7 +238,7 @@ def test_binaries(self):
|
||||
class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder):
|
||||
def configure_args(self):
|
||||
known_targets = {"x86_64": "x86_64", "aarch64": "aarch64", "ppc64le": "powerpc"}
|
||||
known_platforms = {"linux": "linux-gnu", "cray": "linux-gnu", "darwin": "apple-darwin"}
|
||||
known_platforms = {"linux": "linux-gnu", "darwin": "apple-darwin"}
|
||||
|
||||
family = str(self.spec.target.family)
|
||||
platform = self.spec.platform
|
||||
|
@@ -1,33 +0,0 @@
|
||||
Remove the spack wrapper directories from PATH for the bootstrap step.
|
||||
This was breaking the build for Cray (and other cross-compile) because
|
||||
bjam was built for the BE and died on SIGILL on the FE. See issue
|
||||
#9613.
|
||||
|
||||
This only affects building bjam. The boost libraries are still built
|
||||
the normal spack way with the spack wrappers.
|
||||
|
||||
|
||||
diff -Naurb boost_1_66_0.orig/bootstrap.sh boost_1_66_0/bootstrap.sh
|
||||
--- boost_1_66_0.orig/bootstrap.sh 2017-12-13 17:56:35.000000000 -0600
|
||||
+++ boost_1_66_0/bootstrap.sh 2019-01-09 13:51:56.407553214 -0600
|
||||
@@ -7,6 +7,20 @@
|
||||
|
||||
# boostinspect:notab - Tabs are required for the Makefile.
|
||||
|
||||
+NEWPATH=
|
||||
+OLDIFS="$IFS"
|
||||
+IFS=:
|
||||
+
|
||||
+for dir in $PATH ; do
|
||||
+ case "x$dir" in
|
||||
+ *lib*spack*env* ) ;;
|
||||
+ * ) NEWPATH="${NEWPATH}:${dir}" ;;
|
||||
+ esac
|
||||
+done
|
||||
+
|
||||
+IFS="$OLDIFS"
|
||||
+PATH="$NEWPATH"
|
||||
+
|
||||
BJAM=""
|
||||
TOOLSET=""
|
||||
BJAM_CONFIG=""
|
@@ -342,9 +342,6 @@ def libs(self):
|
||||
# Patch: https://github.com/boostorg/process/commit/6a4d2ff72114ef47c7afaf92e1042aca3dfa41b0.patch
|
||||
patch("1.72_boost_process.patch", level=2, when="@1.72.0")
|
||||
|
||||
# Fix the bootstrap/bjam build for Cray
|
||||
patch("bootstrap-path.patch", when="@1.39.0: platform=cray")
|
||||
|
||||
# Patch fix for warnings from commits 2d37749, af1dc84, c705bab, and
|
||||
# 0134441 on https://github.com/boostorg/system.
|
||||
patch("system-non-virtual-dtor-include.patch", when="@1.69.0", level=2)
|
||||
@@ -528,10 +525,6 @@ def determine_bootstrap_options(self, spec, with_libs, options):
|
||||
# wrappers. Since Boost doesn't use the MPI C++ bindings,
|
||||
# that can be used as a compiler option instead.
|
||||
mpi_line = "using mpi : %s" % spec["mpi"].mpicxx
|
||||
|
||||
if "platform=cray" in spec:
|
||||
mpi_line += " : <define>MPICH_SKIP_MPICXX"
|
||||
|
||||
f.write(mpi_line + " ;\n")
|
||||
|
||||
if "+python" in spec:
|
||||
|
@@ -47,7 +47,6 @@ class Bzip2(Package, SourcewarePackage):
|
||||
depends_on("diffutils", type="build")
|
||||
|
||||
depends_on("gmake", type="build", when="platform=linux")
|
||||
depends_on("gmake", type="build", when="platform=cray")
|
||||
depends_on("gmake", type="build", when="platform=darwin")
|
||||
|
||||
@classmethod
|
||||
|
@@ -58,12 +58,6 @@ class ClingoBootstrap(Clingo):
|
||||
when="platform=linux",
|
||||
msg="GCC or clang are required to bootstrap clingo on Linux",
|
||||
)
|
||||
requires(
|
||||
"%gcc",
|
||||
"%clang",
|
||||
when="platform=cray",
|
||||
msg="GCC or clang are required to bootstrap clingo on Cray",
|
||||
)
|
||||
conflicts("%gcc@:5", msg="C++14 support is required to bootstrap clingo")
|
||||
|
||||
# On Darwin we bootstrap with Apple Clang
|
||||
|
@@ -53,7 +53,6 @@ class Clingo(CMakePackage):
|
||||
depends_on("bison@2.5:", type="build", when="platform=linux")
|
||||
depends_on("bison@2.5:", type="build", when="platform=darwin")
|
||||
depends_on("bison@2.5:", type="build", when="platform=freebsd")
|
||||
depends_on("bison@2.5:", type="build", when="platform=cray")
|
||||
|
||||
with when("platform=windows"):
|
||||
depends_on("re2c@0.13:", type="build")
|
||||
@@ -67,7 +66,6 @@ class Clingo(CMakePackage):
|
||||
depends_on("py-cffi", type=("build", "run"), when="@5.5.0: platform=linux")
|
||||
depends_on("py-cffi", type=("build", "run"), when="@5.5.0: platform=darwin")
|
||||
depends_on("py-cffi", type=("build", "run"), when="@5.5.0: platform=freebsd")
|
||||
depends_on("py-cffi", type=("build", "run"), when="@5.5.0: platform=cray")
|
||||
|
||||
patch("python38.patch", when="@5.3:5.4.0")
|
||||
patch("size-t.patch", when="%msvc")
|
||||
|
@@ -422,7 +422,6 @@ class Cmake(Package):
|
||||
depends_on("ninja", when="platform=windows")
|
||||
depends_on("gmake", when="platform=linux")
|
||||
depends_on("gmake", when="platform=darwin")
|
||||
depends_on("gmake", when="platform=cray")
|
||||
depends_on("gmake", when="platform=freebsd")
|
||||
|
||||
# We default ownlibs to true because it greatly speeds up the CMake
|
||||
@@ -469,7 +468,7 @@ class Cmake(Package):
|
||||
with when("~ownlibs"):
|
||||
depends_on("expat")
|
||||
# expat/zlib are used in CMake/CTest, so why not require them in libarchive.
|
||||
for plat in ["darwin", "cray", "linux"]:
|
||||
for plat in ["darwin", "linux"]:
|
||||
with when("platform=%s" % plat):
|
||||
depends_on("libarchive@3.1.0: xar=expat compression=zlib")
|
||||
depends_on("libarchive@3.3.3:", when="@3.15.0:")
|
||||
|
@@ -281,7 +281,7 @@ class Curl(NMakePackage, AutotoolsPackage):
|
||||
variant("librtmp", default=False, description="enable Rtmp support")
|
||||
variant("ldap", default=False, description="enable ldap support")
|
||||
variant("libidn2", default=False, description="enable libidn2 support")
|
||||
for plat in ["darwin", "cray", "linux"]:
|
||||
for plat in ["darwin", "linux"]:
|
||||
with when("platform=%s" % plat):
|
||||
# curl queries pkgconfig for openssl compilation flags
|
||||
depends_on("pkgconfig", type="build")
|
||||
@@ -293,7 +293,6 @@ class Curl(NMakePackage, AutotoolsPackage):
|
||||
description="Build shared libs, static libs or both",
|
||||
)
|
||||
|
||||
conflicts("platform=cray", when="tls=secure_transport", msg="Only supported on macOS")
|
||||
conflicts("platform=linux", when="tls=secure_transport", msg="Only supported on macOS")
|
||||
|
||||
depends_on("gnutls", when="tls=gnutls")
|
||||
|
@@ -257,13 +257,6 @@ def initconfig_compiler_entries(self):
|
||||
entries.append(cmake_cache_string("CMAKE_CXX_STANDARD", "17"))
|
||||
entries.append(cmake_cache_option("BUILD_SHARED_LIBS", "+shared" in spec))
|
||||
entries.append(cmake_cache_option("CMAKE_EXPORT_COMPILE_COMMANDS", True))
|
||||
|
||||
# It's possible this should have a `if "platform=cray" in
|
||||
# spec:` in front of it, but it's not clear to me when this is
|
||||
# set. In particular, I don't actually see this blurb showing
|
||||
# up on Tioga builds. Which is causing the obvious problem
|
||||
# (namely, the one this was added to supposedly solve in the
|
||||
# first place.
|
||||
entries.append(cmake_cache_option("MPI_ASSUME_NO_BUILTIN_MPI", True))
|
||||
|
||||
if spec.satisfies("%clang +distconv platform=darwin"):
|
||||
|
@@ -65,8 +65,5 @@ def cmake_args(self):
|
||||
|
||||
if spec.satisfies("@0.1.0:"):
|
||||
args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
|
||||
else:
|
||||
if spec.satisfies("platform=cray"):
|
||||
args.append(self.define("ER_LINK_STATIC", True))
|
||||
|
||||
return args
|
||||
|
@@ -26,8 +26,6 @@ class Filo(CMakePackage):
|
||||
def cmake_args(self):
|
||||
args = []
|
||||
args.append("-DMPI_C_COMPILER=%s" % self.spec["mpi"].mpicc)
|
||||
if self.spec.satisfies("platform=cray"):
|
||||
args.append("-DFILO_LINK_STATIC=ON")
|
||||
args.append("-DWITH_AXL_PREFIX=%s" % self.spec["axl"].prefix)
|
||||
args.append("-DWITH_KVTREE_PREFIX=%s" % self.spec["kvtree"].prefix)
|
||||
args.append("-DWITH_SPATH_PREFIX=%s" % self.spec["spath"].prefix)
|
||||
|
@@ -221,7 +221,6 @@ class FontUtil(AutotoolsPackage, XorgPackage):
|
||||
when="fonts=" + f,
|
||||
)
|
||||
|
||||
conflicts("fonts=font-bh-ttf", when="platform=cray")
|
||||
conflicts("fonts=font-bh-ttf", when="arch=linux-rhel7-broadwell")
|
||||
|
||||
if f != "font-bh-ttf":
|
||||
|
@@ -27,16 +27,12 @@ class Freeglut(CMakePackage, SourceforgePackage):
|
||||
# FreeGLUT does not support OSMesa
|
||||
conflicts("^osmesa")
|
||||
|
||||
# FreeGLUT only works with GLX on linux (cray is also linux)
|
||||
# FreeGLUT only works with GLX on linux
|
||||
with when("platform=linux"):
|
||||
depends_on("glx")
|
||||
depends_on("libx11")
|
||||
depends_on("libxi")
|
||||
depends_on("libxxf86vm")
|
||||
with when("platform=cray"):
|
||||
depends_on("glx")
|
||||
depends_on("libx11")
|
||||
depends_on("libxi")
|
||||
|
||||
# freeglut 3.2.1 fails to build with -fno-common (default with newer compilers)
|
||||
# see https://bugs.gentoo.org/705840 and https://github.com/dcnieho/FreeGLUT/pull/76
|
||||
|
@@ -44,7 +44,7 @@ class Freetype(AutotoolsPackage, CMakePackage):
|
||||
|
||||
depends_on("bzip2")
|
||||
depends_on("libpng")
|
||||
for plat in ["linux", "darwin", "cray"]:
|
||||
for plat in ["linux", "darwin"]:
|
||||
depends_on("pkgconfig", type="build", when="platform=%s" % plat)
|
||||
|
||||
conflicts(
|
||||
|
@@ -54,10 +54,9 @@ class GccRuntime(Package):
|
||||
provides("libgfortran@5", when="%gcc@8:")
|
||||
|
||||
depends_on("libc", type="link", when="platform=linux")
|
||||
depends_on("libc", type="link", when="platform=cray")
|
||||
|
||||
def install(self, spec, prefix):
|
||||
if spec.platform in ["linux", "cray", "freebsd"]:
|
||||
if spec.platform in ["linux", "freebsd"]:
|
||||
libraries = get_elf_libraries(compiler=self.compiler, libraries=self.LIBRARIES)
|
||||
elif spec.platform == "darwin":
|
||||
libraries = self._get_libraries_macho()
|
||||
|
@@ -558,10 +558,8 @@ def filter_detected_exes(cls, prefix, exes_in_prefix):
|
||||
]
|
||||
if any(x in basename for x in substring_to_be_filtered):
|
||||
continue
|
||||
# Filter out links in favor of real executables on
|
||||
# all systems but Cray
|
||||
host_platform = str(spack.platforms.host())
|
||||
if os.path.islink(exe) and host_platform != "cray":
|
||||
# Filter out links in favor of real executables
|
||||
if os.path.islink(exe):
|
||||
continue
|
||||
|
||||
result.append(exe)
|
||||
|
@@ -56,7 +56,6 @@ class GdkPixbuf(Package):
|
||||
depends_on("meson@0.45.0:", type="build", when="@2.37.0:")
|
||||
depends_on("ninja", type="build", when="@2.37.0:")
|
||||
depends_on("shared-mime-info", when="@2.36.8: platform=linux")
|
||||
depends_on("shared-mime-info", when="@2.36.8: platform=cray")
|
||||
depends_on("pkgconfig", type="build")
|
||||
# Building the man pages requires libxslt and the Docbook stylesheets
|
||||
depends_on("libxslt", type="build", when="+man")
|
||||
|
@@ -6,6 +6,7 @@
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
import llnl.util.lang
|
||||
import llnl.util.tty as tty
|
||||
@@ -122,7 +123,7 @@ class Hdf5(CMakePackage):
|
||||
|
||||
# The compiler wrappers (h5cc, h5fc, etc.) run 'pkg-config'.
|
||||
# Skip this on Windows since pkgconfig is autotools
|
||||
for plat in ["cray", "darwin", "linux"]:
|
||||
for plat in ["darwin", "linux"]:
|
||||
depends_on("pkgconfig", when=f"platform={plat}", type="run")
|
||||
|
||||
conflicts("+mpi", "^mpich@4.0:4.0.3")
|
||||
@@ -274,9 +275,13 @@ def patch(self):
|
||||
|
||||
# The parallel compiler wrappers (i.e. h5pcc, h5pfc, etc.) reference MPI
|
||||
# compiler wrappers and do not need to be changed.
|
||||
filter_compiler_wrappers(
|
||||
"h5cc", "h5hlcc", "h5fc", "h5hlfc", "h5c++", "h5hlc++", relative_root="bin"
|
||||
)
|
||||
# These do not exist on Windows.
|
||||
# Enable only for supported target platforms.
|
||||
|
||||
if sys.platform != "win32":
|
||||
filter_compiler_wrappers(
|
||||
"h5cc", "h5hlcc", "h5fc", "h5hlfc", "h5c++", "h5hlc++", relative_root="bin"
|
||||
)
|
||||
|
||||
def url_for_version(self, version):
|
||||
url = (
|
||||
|
@@ -188,11 +188,6 @@ def install(self, spec, prefix):
|
||||
file.write("open " + app_dir + "\n")
|
||||
os.chmod(viewer_file, 0o755)
|
||||
|
||||
# Install for Cray front-end is the same as Linux.
|
||||
@when("platform=cray")
|
||||
def install(self, spec, prefix):
|
||||
self.linux_install(spec, prefix)
|
||||
|
||||
@when("platform=linux")
|
||||
def install(self, spec, prefix):
|
||||
self.linux_install(spec, prefix)
|
||||
|
@@ -92,8 +92,8 @@ class IntelGtpin(Package):
|
||||
|
||||
depends_on("patchelf", type="build")
|
||||
|
||||
# Gtpin only runs on linux/cray x86_64.
|
||||
conflicts("platform=darwin", msg="intel-gtpin only runs on linux/cray")
|
||||
# Gtpin only runs on linux x86_64.
|
||||
conflicts("platform=darwin", msg="intel-gtpin only runs on linux")
|
||||
conflicts("target=ppc64:", msg="intel-gtpin only runs on x86_64")
|
||||
conflicts("target=ppc64le:", msg="intel-gtpin only runs on x86_64")
|
||||
conflicts("target=aarch64:", msg="intel-gtpin only runs on x86_64")
|
||||
|
@@ -46,7 +46,6 @@ class IntelOneapiRuntime(Package):
|
||||
conflicts("platform=darwin", msg="IntelOneAPI can only be installed on Linux, and FreeBSD")
|
||||
|
||||
depends_on("libc", type="link", when="platform=linux")
|
||||
depends_on("libc", type="link", when="platform=cray")
|
||||
|
||||
def install(self, spec, prefix):
|
||||
libraries = get_elf_libraries(compiler=self.compiler, libraries=self.LIBRARIES)
|
||||
|
@@ -274,7 +274,7 @@ def patch(self):
|
||||
def setup_build_environment(self, env):
|
||||
# this is a bit ridiculous, but we are setting runtime linker paths to
|
||||
# dependencies so that libwhich can locate them.
|
||||
if self.spec.satisfies("platform=linux") or self.spec.satisfies("platform=cray"):
|
||||
if self.spec.satisfies("platform=linux"):
|
||||
linker_var = "LD_LIBRARY_PATH"
|
||||
elif self.spec.satisfies("platform=darwin"):
|
||||
linker_var = "DYLD_FALLBACK_LIBRARY_PATH"
|
||||
|
@@ -60,8 +60,5 @@ def cmake_args(self):
|
||||
|
||||
if spec.satisfies("@1.2.0:"):
|
||||
args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
|
||||
else:
|
||||
if spec.satisfies("platform=cray"):
|
||||
args.append(self.define("KVTREE_LINK_STATIC", True))
|
||||
|
||||
return args
|
||||
|
@@ -357,10 +357,6 @@ def initconfig_hardware_entries(self):
|
||||
cmake_cache_string("CMAKE_CUDA_FLAGS", "-allow-unsupported-compiler")
|
||||
)
|
||||
|
||||
if "+rocm" in spec:
|
||||
if "platform=cray" in spec:
|
||||
entries.append(cmake_cache_option("MPI_ASSUME_NO_BUILTIN_MPI", True))
|
||||
|
||||
return entries
|
||||
|
||||
def initconfig_package_entries(self):
|
||||
|
@@ -40,7 +40,6 @@ class Ldak(Package):
|
||||
policy="one_of",
|
||||
msg="Only mkl or openblas are supported for blas/lapack with ldak",
|
||||
)
|
||||
conflicts("platform=cray", when="~glpk", msg="bundled qsopt only for linux or mac")
|
||||
|
||||
phases = ["build", "install"]
|
||||
|
||||
|
@@ -90,7 +90,6 @@ class Libgit2(CMakePackage):
|
||||
# Runtime Dependencies
|
||||
depends_on("libssh2", when="+ssh")
|
||||
depends_on("openssl", when="https=system platform=linux")
|
||||
depends_on("openssl", when="https=system platform=cray")
|
||||
depends_on("openssl", when="https=openssl")
|
||||
depends_on("curl", when="+curl")
|
||||
depends_on("pcre", when="@0.99:")
|
||||
@@ -105,7 +104,7 @@ def flag_handler(self, name, flags):
|
||||
def cmake_args(self):
|
||||
args = []
|
||||
if "https=system" in self.spec:
|
||||
if "platform=linux" in self.spec or "platform=cray" in self.spec:
|
||||
if "platform=linux" in self.spec:
|
||||
args.append("-DUSE_HTTPS=OpenSSL")
|
||||
elif "platform=darwin" in self.spec:
|
||||
args.append("-DUSE_HTTPS=SecureTransport")
|
||||
|
@@ -24,7 +24,6 @@ class Libice(AutotoolsPackage, XorgPackage):
|
||||
# technically libbsd is only required when glibc < 2.36 which provides arc4random_buf,
|
||||
# but spack doesn't currently have a good way to model this so we depend on it unconditionally
|
||||
depends_on("libbsd", when="platform=linux")
|
||||
depends_on("libbsd", when="platform=cray")
|
||||
|
||||
depends_on("xproto")
|
||||
depends_on("xtrans")
|
||||
|
@@ -22,5 +22,5 @@ class Liburing(AutotoolsPackage):
|
||||
version("master", branch="master")
|
||||
version("2.3", sha256="60b367dbdc6f2b0418a6e0cd203ee0049d9d629a36706fcf91dfb9428bae23c8")
|
||||
|
||||
conflicts("platform=darwin", msg="Only supported on 'linux' and 'cray'")
|
||||
conflicts("platform=windows", msg="Only supported on 'linux' and 'cray'")
|
||||
conflicts("platform=darwin", msg="Only supported on linux")
|
||||
conflicts("platform=windows", msg="Only supported on linux")
|
||||
|
@@ -24,4 +24,3 @@ class Libxdmcp(AutotoolsPackage, XorgPackage):
|
||||
depends_on("pkgconfig", type="build")
|
||||
depends_on("util-macros", type="build")
|
||||
depends_on("libbsd", when="platform=linux")
|
||||
depends_on("libbsd", when="platform=cray")
|
||||
|
@@ -183,7 +183,6 @@ class LlvmDoe(CMakePackage, CudaPackage):
|
||||
|
||||
# code signing is only necessary on macOS",
|
||||
conflicts("+code_signing", when="platform=linux")
|
||||
conflicts("+code_signing", when="platform=cray")
|
||||
|
||||
conflicts(
|
||||
"+code_signing",
|
||||
@@ -547,7 +546,7 @@ def cmake_args(self):
|
||||
if self.compiler.name == "gcc":
|
||||
cmake_args.append(define("GCC_INSTALL_PREFIX", self.compiler.prefix))
|
||||
|
||||
# if spec.satisfies("platform=cray") or spec.satisfies("platform=linux"):
|
||||
# if spec.satisfies("platform=linux"):
|
||||
# cmake_args.append("-DCMAKE_BUILD_WITH_INSTALL_RPATH=1")
|
||||
|
||||
if self.spec.satisfies("~code_signing platform=darwin"):
|
||||
|
@@ -17,7 +17,6 @@ class Macfuse(Package):
|
||||
|
||||
provides("fuse")
|
||||
conflicts("platform=linux", msg="macfuse does not support linux, use libfuse instead")
|
||||
conflicts("platform=cray", msg="macfuse does not support cray, use libfuse instead")
|
||||
|
||||
def install(self, spec, prefix):
|
||||
msg = """
|
||||
|
@@ -54,11 +54,6 @@ def edit(self, spec, prefix):
|
||||
makefile.filter(r"CPP := clang", r"CPP := armclang")
|
||||
makefile.filter(r"-cxx=clang.*", "")
|
||||
|
||||
# Cray systems require use of 'cc' and 'CC' to call correct mpi wrappers
|
||||
if self.spec.platform == "cray":
|
||||
makefile.filter("mpicc", "cc")
|
||||
makefile.filter("mpicxx", "CC")
|
||||
|
||||
if self.spec.compiler.name == "nvhpc":
|
||||
makefile.filter("pgc", "nvc")
|
||||
|
||||
|
@@ -448,22 +448,10 @@ def setup_build_environment(self, env):
|
||||
def setup_run_environment(self, env):
|
||||
# Because MPI implementations provide compilers, they have to add to
|
||||
# their run environments the code to make the compilers available.
|
||||
# For Cray MPIs, the regular compiler wrappers *are* the MPI wrappers.
|
||||
# Cray MPIs always have cray in the module name, e.g. "cray-mpich"
|
||||
if self.spec.satisfies("platform=cray") and spack_cc is not None:
|
||||
# This is intended to support external MPICH instances registered
|
||||
# by Spack on Cray machines prior to a879c87; users defining an
|
||||
# external MPICH entry for Cray should generally refer to the
|
||||
# "cray-mpich" package
|
||||
env.set("MPICC", spack_cc)
|
||||
env.set("MPICXX", spack_cxx)
|
||||
env.set("MPIF77", spack_fc)
|
||||
env.set("MPIF90", spack_fc)
|
||||
else:
|
||||
env.set("MPICC", join_path(self.prefix.bin, "mpicc"))
|
||||
env.set("MPICXX", join_path(self.prefix.bin, "mpic++"))
|
||||
env.set("MPIF77", join_path(self.prefix.bin, "mpif77"))
|
||||
env.set("MPIF90", join_path(self.prefix.bin, "mpif90"))
|
||||
env.set("MPICC", join_path(self.prefix.bin, "mpicc"))
|
||||
env.set("MPICXX", join_path(self.prefix.bin, "mpic++"))
|
||||
env.set("MPIF77", join_path(self.prefix.bin, "mpif77"))
|
||||
env.set("MPIF90", join_path(self.prefix.bin, "mpif90"))
|
||||
|
||||
def setup_dependent_build_environment(self, env, dependent_spec):
|
||||
dependent_module = dependent_spec.package.module
|
||||
@@ -476,20 +464,12 @@ def setup_dependent_build_environment(self, env, dependent_spec):
|
||||
def setup_dependent_package(self, module, dependent_spec):
|
||||
spec = self.spec
|
||||
|
||||
# For Cray MPIs, the regular compiler wrappers *are* the MPI wrappers.
|
||||
# Cray MPIs always have cray in the module name, e.g. "cray-mpich"
|
||||
if self.spec.satisfies("platform=cray") and spack_cc is not None:
|
||||
spec.mpicc = spack_cc
|
||||
spec.mpicxx = spack_cxx
|
||||
spec.mpifc = spack_fc
|
||||
spec.mpif77 = spack_f77
|
||||
else:
|
||||
spec.mpicc = join_path(self.prefix.bin, "mpicc")
|
||||
spec.mpicxx = join_path(self.prefix.bin, "mpic++")
|
||||
spec.mpicc = join_path(self.prefix.bin, "mpicc")
|
||||
spec.mpicxx = join_path(self.prefix.bin, "mpic++")
|
||||
|
||||
if "+fortran" in spec:
|
||||
spec.mpifc = join_path(self.prefix.bin, "mpif90")
|
||||
spec.mpif77 = join_path(self.prefix.bin, "mpif77")
|
||||
if "+fortran" in spec:
|
||||
spec.mpifc = join_path(self.prefix.bin, "mpif90")
|
||||
spec.mpif77 = join_path(self.prefix.bin, "mpif77")
|
||||
|
||||
spec.mpicxx_shared_libs = [
|
||||
join_path(self.prefix.lib, "libmpicxx.{0}".format(dso_suffix)),
|
||||
|
@@ -50,14 +50,7 @@ def setup_run_environment(self, env):
|
||||
env.set("MPIF90", self.prefix.bin.mpif90)
|
||||
|
||||
def setup_dependent_package(self, module, dependent_spec):
|
||||
if "platform=cray" in self.spec:
|
||||
dependent_module = dependent_spec.package.module
|
||||
self.spec.mpicc = dependent_module.spack_cc
|
||||
self.spec.mpicxx = dependent_module.spack_cxx
|
||||
self.spec.mpifc = dependent_module.spack_fc
|
||||
self.spec.mpif77 = dependent_module.spack_f77
|
||||
else:
|
||||
self.spec.mpicc = self.prefix.bin.mpicc
|
||||
self.spec.mpicxx = self.prefix.bin.mpicxx
|
||||
self.spec.mpifc = self.prefix.bin.mpif90
|
||||
self.spec.mpif77 = self.prefix.bin.mpif77
|
||||
self.spec.mpicc = self.prefix.bin.mpicc
|
||||
self.spec.mpicxx = self.prefix.bin.mpicxx
|
||||
self.spec.mpifc = self.prefix.bin.mpif90
|
||||
self.spec.mpif77 = self.prefix.bin.mpif77
|
||||
|
@@ -223,33 +223,16 @@ def setup_dependent_build_environment(self, env, dependent_spec):
|
||||
env.set("MPICH_FC", dependent_module.spack_fc)
|
||||
|
||||
def setup_compiler_environment(self, env):
|
||||
# For Cray MPIs, the regular compiler wrappers *are* the MPI wrappers.
|
||||
# Cray MPIs always have cray in the module name, e.g. "cray-mvapich"
|
||||
if self.spec.satisfies("platform=cray") and spack_cc is not None:
|
||||
env.set("MPICC", spack_cc)
|
||||
env.set("MPICXX", spack_cxx)
|
||||
env.set("MPIF77", spack_fc)
|
||||
env.set("MPIF90", spack_fc)
|
||||
else:
|
||||
env.set("MPICC", join_path(self.prefix.bin, "mpicc"))
|
||||
env.set("MPICXX", join_path(self.prefix.bin, "mpicxx"))
|
||||
env.set("MPIF77", join_path(self.prefix.bin, "mpif77"))
|
||||
env.set("MPIF90", join_path(self.prefix.bin, "mpif90"))
|
||||
env.set("MPICC", join_path(self.prefix.bin, "mpicc"))
|
||||
env.set("MPICXX", join_path(self.prefix.bin, "mpicxx"))
|
||||
env.set("MPIF77", join_path(self.prefix.bin, "mpif77"))
|
||||
env.set("MPIF90", join_path(self.prefix.bin, "mpif90"))
|
||||
|
||||
def setup_dependent_package(self, module, dependent_spec):
|
||||
# For Cray MPIs, the regular compiler wrappers *are* the MPI wrappers.
|
||||
# Cray MPIs always have cray in the module name, e.g. "cray-mvapich"
|
||||
if self.spec.satisfies("platform=cray"):
|
||||
self.spec.mpicc = spack_cc
|
||||
self.spec.mpicxx = spack_cxx
|
||||
self.spec.mpifc = spack_fc
|
||||
self.spec.mpif77 = spack_f77
|
||||
else:
|
||||
self.spec.mpicc = join_path(self.prefix.bin, "mpicc")
|
||||
self.spec.mpicxx = join_path(self.prefix.bin, "mpicxx")
|
||||
self.spec.mpifc = join_path(self.prefix.bin, "mpif90")
|
||||
self.spec.mpif77 = join_path(self.prefix.bin, "mpif77")
|
||||
|
||||
self.spec.mpicc = join_path(self.prefix.bin, "mpicc")
|
||||
self.spec.mpicxx = join_path(self.prefix.bin, "mpicxx")
|
||||
self.spec.mpifc = join_path(self.prefix.bin, "mpif90")
|
||||
self.spec.mpif77 = join_path(self.prefix.bin, "mpif77")
|
||||
self.spec.mpicxx_shared_libs = [
|
||||
os.path.join(self.prefix.lib, "libmpicxx.{0}".format(dso_suffix)),
|
||||
os.path.join(self.prefix.lib, "libmpi.{0}".format(dso_suffix)),
|
||||
|
@@ -384,33 +384,16 @@ def setup_dependent_build_environment(self, env, dependent_spec):
|
||||
env.set("MPICH_FC", dependent_module.spack_fc)
|
||||
|
||||
def setup_compiler_environment(self, env):
|
||||
# For Cray MPIs, the regular compiler wrappers *are* the MPI wrappers.
|
||||
# Cray MPIs always have cray in the module name, e.g. "cray-mvapich"
|
||||
if self.spec.satisfies("platform=cray") and spack_cc is not None:
|
||||
env.set("MPICC", spack_cc)
|
||||
env.set("MPICXX", spack_cxx)
|
||||
env.set("MPIF77", spack_fc)
|
||||
env.set("MPIF90", spack_fc)
|
||||
else:
|
||||
env.set("MPICC", join_path(self.prefix.bin, "mpicc"))
|
||||
env.set("MPICXX", join_path(self.prefix.bin, "mpicxx"))
|
||||
env.set("MPIF77", join_path(self.prefix.bin, "mpif77"))
|
||||
env.set("MPIF90", join_path(self.prefix.bin, "mpif90"))
|
||||
env.set("MPICC", join_path(self.prefix.bin, "mpicc"))
|
||||
env.set("MPICXX", join_path(self.prefix.bin, "mpicxx"))
|
||||
env.set("MPIF77", join_path(self.prefix.bin, "mpif77"))
|
||||
env.set("MPIF90", join_path(self.prefix.bin, "mpif90"))
|
||||
|
||||
def setup_dependent_package(self, module, dependent_spec):
|
||||
# For Cray MPIs, the regular compiler wrappers *are* the MPI wrappers.
|
||||
# Cray MPIs always have cray in the module name, e.g. "cray-mvapich"
|
||||
if self.spec.satisfies("platform=cray") and spack_cc is not None:
|
||||
self.spec.mpicc = spack_cc
|
||||
self.spec.mpicxx = spack_cxx
|
||||
self.spec.mpifc = spack_fc
|
||||
self.spec.mpif77 = spack_f77
|
||||
else:
|
||||
self.spec.mpicc = join_path(self.prefix.bin, "mpicc")
|
||||
self.spec.mpicxx = join_path(self.prefix.bin, "mpicxx")
|
||||
self.spec.mpifc = join_path(self.prefix.bin, "mpif90")
|
||||
self.spec.mpif77 = join_path(self.prefix.bin, "mpif77")
|
||||
|
||||
self.spec.mpicc = join_path(self.prefix.bin, "mpicc")
|
||||
self.spec.mpicxx = join_path(self.prefix.bin, "mpicxx")
|
||||
self.spec.mpifc = join_path(self.prefix.bin, "mpif90")
|
||||
self.spec.mpif77 = join_path(self.prefix.bin, "mpif77")
|
||||
self.spec.mpicxx_shared_libs = [
|
||||
os.path.join(self.prefix.lib, "libmpicxx.{0}".format(dso_suffix)),
|
||||
os.path.join(self.prefix.lib, "libmpi.{0}".format(dso_suffix)),
|
||||
|
@@ -164,7 +164,7 @@ class NetcdfC(CMakePackage, AutotoolsPackage):
|
||||
|
||||
# The man files are included in the release tarballs starting version 4.5.0 but they are not
|
||||
# needed for the Windows platform:
|
||||
for __p in ["darwin", "cray", "linux"]:
|
||||
for __p in ["darwin", "linux"]:
|
||||
with when("platform={0}".format(__p)):
|
||||
# It is possible to install the package with CMake and without M4 on a non-Windows
|
||||
# platform but some of the man files will not be installed in that case (even if they
|
||||
@@ -250,7 +250,7 @@ class NetcdfC(CMakePackage, AutotoolsPackage):
|
||||
depends_on("zlib@1.2.5:", when="^[virtuals=zlib-api] zlib")
|
||||
|
||||
# Use the vendored bzip2 on Windows:
|
||||
for __p in ["darwin", "cray", "linux"]:
|
||||
for __p in ["darwin", "linux"]:
|
||||
depends_on("bzip2", when="@4.9.0:+shared platform={0}".format(__p))
|
||||
del __p
|
||||
|
||||
|
@@ -157,10 +157,7 @@ def filter_compilers(self):
|
||||
|
||||
spec = self.spec
|
||||
|
||||
if "cray" in spec.architecture:
|
||||
cc_compiler = "cc"
|
||||
cxx_compiler = "CC"
|
||||
elif spec.satisfies("+mpi"):
|
||||
if spec.satisfies("+mpi"):
|
||||
cc_compiler = spec["mpi"].mpicc
|
||||
cxx_compiler = spec["mpi"].mpicxx
|
||||
else:
|
||||
|
@@ -781,41 +781,31 @@ class Opencv(CMakePackage, CudaPackage):
|
||||
# using `OCV_OPTION(WITH_* ...)`
|
||||
conflicts("+android_mediandk", when="platform=darwin", msg="Android only")
|
||||
conflicts("+android_mediandk", when="platform=linux", msg="Android only")
|
||||
conflicts("+android_mediandk", when="platform=cray", msg="Android only")
|
||||
conflicts("+android_native_camera", when="platform=darwin", msg="Android only")
|
||||
conflicts("+android_native_camera", when="platform=linux", msg="Android only")
|
||||
conflicts("+android_native_camera", when="platform=cray", msg="Android only")
|
||||
conflicts("+avfoundation", when="platform=linux", msg="iOS/macOS only")
|
||||
conflicts("+avfoundation", when="platform=cray", msg="iOS/macOS only")
|
||||
conflicts("+cap_ios", when="platform=darwin", msg="iOS only")
|
||||
conflicts("+cap_ios", when="platform=linux", msg="iOS only")
|
||||
conflicts("+cap_ios", when="platform=cray", msg="iOS only")
|
||||
conflicts("+carotene", when="target=x86:", msg="ARM/AARCH64 only")
|
||||
conflicts("+carotene", when="target=x86_64:", msg="ARM/AARCH64 only")
|
||||
conflicts("+cpufeatures", when="platform=darwin", msg="Android only")
|
||||
conflicts("+cpufeatures", when="platform=linux", msg="Android only")
|
||||
conflicts("+cpufeatures", when="platform=cray", msg="Android only")
|
||||
conflicts("+cublas", when="~cuda")
|
||||
conflicts("+cudnn", when="~cuda")
|
||||
conflicts("+cufft", when="~cuda")
|
||||
conflicts("+directx", when="platform=darwin", msg="Windows only")
|
||||
conflicts("+directx", when="platform=linux", msg="Windows only")
|
||||
conflicts("+directx", when="platform=cray", msg="Windows only")
|
||||
conflicts("+dshow", when="platform=darwin", msg="Windows only")
|
||||
conflicts("+dshow", when="platform=linux", msg="Windows only")
|
||||
conflicts("+dshow", when="platform=cray", msg="Windows only")
|
||||
conflicts("+gtk", when="platform=darwin", msg="Linux only")
|
||||
conflicts("+ipp", when="target=aarch64:", msg="x86 or x86_64 only")
|
||||
conflicts("+jasper", when="+openjpeg")
|
||||
conflicts("+msmf", when="platform=darwin", msg="Windows only")
|
||||
conflicts("+msmf", when="platform=linux", msg="Windows only")
|
||||
conflicts("+msmf", when="platform=cray", msg="Windows only")
|
||||
conflicts("+msmf_dxva", when="platform=darwin", msg="Windows only")
|
||||
conflicts("+msmf_dxva", when="platform=linux", msg="Windows only")
|
||||
conflicts("+msmf_dxva", when="platform=cray", msg="Windows only")
|
||||
conflicts("+opencl_d3d11_nv", when="platform=darwin", msg="Windows only")
|
||||
conflicts("+opencl_d3d11_nv", when="platform=linux", msg="Windows only")
|
||||
conflicts("+opencl_d3d11_nv", when="platform=cray", msg="Windows only")
|
||||
conflicts("+opengl", when="~qt")
|
||||
conflicts("+tengine", when="platform=darwin", msg="Linux only")
|
||||
conflicts("+tengine", when="target=x86:", msg="ARM/AARCH64 only")
|
||||
@@ -823,7 +813,6 @@ class Opencv(CMakePackage, CudaPackage):
|
||||
conflicts("+v4l", when="platform=darwin", msg="Linux only")
|
||||
conflicts("+win32ui", when="platform=darwin", msg="Windows only")
|
||||
conflicts("+win32ui", when="platform=linux", msg="Windows only")
|
||||
conflicts("+win32ui", when="platform=cray", msg="Windows only")
|
||||
|
||||
# https://github.com/opencv/opencv/wiki/ChangeLog#version460
|
||||
conflicts("%gcc@12:", when="@:4.5")
|
||||
|
@@ -106,6 +106,6 @@ def gl_libs(self):
|
||||
lib_name = "opengl32"
|
||||
elif "platform=darwin" in spec:
|
||||
lib_name = "libOpenGL"
|
||||
else: # linux and cray
|
||||
else:
|
||||
lib_name = "libGL"
|
||||
return find_libraries(lib_name, root=self.prefix, recursive=True)
|
||||
|
@@ -1024,7 +1024,7 @@ def configure_args(self):
|
||||
config_args.extend(self.with_or_without("fabrics"))
|
||||
|
||||
if spec.satisfies("@2.0.0:"):
|
||||
if "fabrics=xpmem platform=cray" in spec:
|
||||
if "fabrics=xpmem" in spec:
|
||||
config_args.append("--with-cray-xpmem")
|
||||
else:
|
||||
config_args.append("--without-cray-xpmem")
|
||||
|
@@ -396,7 +396,6 @@ class Openssl(Package): # Uses Fake Autotools, should subclass Package
|
||||
depends_on("nasm", when="platform=windows")
|
||||
|
||||
depends_on("gmake", type="build", when="platform=linux")
|
||||
depends_on("gmake", type="build", when="platform=cray")
|
||||
depends_on("gmake", type="build", when="platform=darwin")
|
||||
|
||||
patch(
|
||||
|
@@ -187,9 +187,7 @@ class Paraview(CMakePackage, CudaPackage, ROCmPackage):
|
||||
depends_on("gl@3.2:", when="+opengl2")
|
||||
depends_on("gl@1.2:", when="~opengl2")
|
||||
depends_on("glew")
|
||||
|
||||
for p in ["linux", "cray"]:
|
||||
depends_on("libxt", when=f"platform={p} ^[virtuals=gl] glx")
|
||||
depends_on("libxt", when="platform=linux ^[virtuals=gl] glx")
|
||||
|
||||
requires("^[virtuals=gl] glx", when="+qt", msg="Qt support requires GLX")
|
||||
|
||||
|
@@ -60,8 +60,4 @@ def cmake_args(self):
|
||||
self.define("PDC_ENABLE_MPI", "ON"),
|
||||
self.define("CMAKE_C_COMPILER", self.spec["mpi"].mpicc),
|
||||
]
|
||||
|
||||
if self.spec.satisfies("platform=cray"):
|
||||
args.append("-DRANKSTR_LINK_STATIC=ON")
|
||||
|
||||
return args
|
||||
|
@@ -52,10 +52,8 @@ class PyIpython(PythonPackage):
|
||||
depends_on("py-matplotlib-inline", when="@7.23:", type=("build", "run"))
|
||||
depends_on("py-pexpect@4.4:", when="@7.18: platform=linux", type=("build", "run"))
|
||||
depends_on("py-pexpect@4.4:", when="@7.18: platform=darwin", type=("build", "run"))
|
||||
depends_on("py-pexpect@4.4:", when="@7.18: platform=cray", type=("build", "run"))
|
||||
depends_on("py-pexpect", when="platform=linux", type=("build", "run"))
|
||||
depends_on("py-pexpect", when="platform=darwin", type=("build", "run"))
|
||||
depends_on("py-pexpect", when="platform=cray", type=("build", "run"))
|
||||
depends_on("py-pickleshare", type=("build", "run"))
|
||||
depends_on("py-prompt-toolkit@3.0.30:3.0.36,3.0.38:3.0", when="@8.11:", type=("build", "run"))
|
||||
depends_on("py-prompt-toolkit@3.0.2:3.0", when="@8.5:", type=("build", "run"))
|
||||
|
@@ -250,7 +250,6 @@ class PyMatplotlib(PythonPackage):
|
||||
|
||||
msg = "MacOSX backend requires macOS 10.12+"
|
||||
conflicts("platform=linux", when="backend=macosx", msg=msg)
|
||||
conflicts("platform=cray", when="backend=macosx", msg=msg)
|
||||
conflicts("platform=windows", when="backend=macosx", msg=msg)
|
||||
|
||||
conflicts("^tk@8.6.0:8.6.1")
|
||||
|
@@ -43,14 +43,14 @@ class PyMlflow(PythonPackage):
|
||||
depends_on("py-pandas@:1", type=("build", "run"))
|
||||
depends_on("py-querystring-parser@:1", type=("build", "run"))
|
||||
depends_on("py-sqlalchemy@1.4.0:1", type=("build", "run"))
|
||||
for platform in ["linux", "darwin", "cray"]:
|
||||
for platform in ["linux", "darwin"]:
|
||||
depends_on("py-gunicorn@:20", type=("build", "run"), when=f"platform={platform}")
|
||||
depends_on("py-waitress@:2", type=("build", "run"), when="platform=windows")
|
||||
depends_on("py-scikit-learn@:1", type=("build", "run"))
|
||||
depends_on("py-pyarrow@4.0.0:10", type=("build", "run"))
|
||||
depends_on("py-shap@0.40:0", type=("build", "run"))
|
||||
depends_on("py-markdown@3.3:3", type=("build", "run"))
|
||||
for platform in ["linux", "darwin", "cray"]:
|
||||
for platform in ["linux", "darwin"]:
|
||||
depends_on("py-jinja2@2.11:3", type=("build", "run"), when=f"platform={platform}")
|
||||
depends_on("py-jinja2@3.0:3", type=("build", "run"), when="platform=windows")
|
||||
depends_on("py-matplotlib@:3", type=("build", "run"))
|
||||
|
@@ -69,7 +69,6 @@ class PyMne(PythonPackage):
|
||||
depends_on("py-matplotlib@3.0.3:", type=("build", "run")) # *
|
||||
depends_on("py-pyqt5@5.10:,:5.15.1,5.15.4:", when="platform=linux", type=("build", "run"))
|
||||
depends_on("py-pyqt5@5.10:,:5.13", when="platform=darwin", type=("build", "run"))
|
||||
depends_on("py-pyqt5@5.10:,:5.15.2,5.15.4:", when="platform=cray", type=("build", "run"))
|
||||
depends_on("py-pyqt5@5.10:,:5.15.2,5.15.4:", when="platform=win32", type=("build", "run"))
|
||||
depends_on("py-pyqt5-sip", type=("build", "run"))
|
||||
depends_on("py-sip", type=("build", "run"))
|
||||
|
@@ -331,11 +331,6 @@ class PyTensorflow(Package, CudaPackage, ROCmPackage, PythonExtension):
|
||||
when="platform=darwin",
|
||||
msg="Currently jemalloc is only support on Linux platform",
|
||||
)
|
||||
conflicts(
|
||||
"+jemalloc",
|
||||
when="platform=cray",
|
||||
msg="Currently jemalloc is only support on Linux platform",
|
||||
)
|
||||
conflicts("+opencl", when="platform=windows")
|
||||
conflicts("+computecpp", when="~opencl")
|
||||
conflicts(
|
||||
@@ -358,21 +353,12 @@ class PyTensorflow(Package, CudaPackage, ROCmPackage, PythonExtension):
|
||||
when="platform=darwin",
|
||||
msg="Currently TensorRT is only supported on Linux platform",
|
||||
)
|
||||
conflicts(
|
||||
"+tensorrt",
|
||||
when="platform=cray",
|
||||
msg="Currently TensorRT is only supported on Linux platform",
|
||||
)
|
||||
conflicts("+nccl", when="~cuda~rocm")
|
||||
conflicts(
|
||||
"+nccl", when="platform=darwin", msg="Currently NCCL is only supported on Linux platform"
|
||||
)
|
||||
conflicts(
|
||||
"+nccl", when="platform=cray", msg="Currently NCCL is only supported on Linux platform"
|
||||
)
|
||||
conflicts("+mpi", when="platform=windows")
|
||||
conflicts("+ios", when="platform=linux", msg="iOS support only available on macOS")
|
||||
conflicts("+ios", when="platform=cray", msg="iOS support only available on macOS")
|
||||
# https://github.com/tensorflow/tensorflow/pull/45404
|
||||
conflicts("platform=darwin target=aarch64:", when="@:2.4")
|
||||
# https://github.com/tensorflow/tensorflow/pull/39225
|
||||
|
@@ -76,18 +76,14 @@ class PyTorch(PythonPackage, CudaPackage, ROCmPackage):
|
||||
when="@1.12: platform=darwin",
|
||||
)
|
||||
variant("nccl", default=True, description="Use NCCL", when="+cuda platform=linux")
|
||||
variant("nccl", default=True, description="Use NCCL", when="+cuda platform=cray")
|
||||
variant("nccl", default=True, description="Use NCCL", when="+rocm platform=linux")
|
||||
variant("nccl", default=True, description="Use NCCL", when="+rocm platform=cray")
|
||||
# Requires AVX2: https://discuss.pytorch.org/t/107518
|
||||
variant("nnpack", default=True, description="Use NNPACK", when="target=x86_64_v3:")
|
||||
variant("numa", default=True, description="Use NUMA", when="platform=linux")
|
||||
variant("numa", default=True, description="Use NUMA", when="platform=cray")
|
||||
variant("numpy", default=True, description="Use NumPy")
|
||||
variant("openmp", default=True, description="Use OpenMP for parallel code")
|
||||
variant("qnnpack", default=True, description="Use QNNPACK (quantized 8-bit operators)")
|
||||
variant("valgrind", default=True, description="Use Valgrind", when="@1.8: platform=linux")
|
||||
variant("valgrind", default=True, description="Use Valgrind", when="@1.8: platform=cray")
|
||||
variant("xnnpack", default=True, description="Use XNNPACK", when="@1.5:")
|
||||
variant("mkldnn", default=True, description="Use MKLDNN")
|
||||
variant("distributed", default=not is_darwin, description="Use distributed")
|
||||
|
@@ -31,6 +31,5 @@ class PyUvicorn(PythonPackage):
|
||||
depends_on("py-pyyaml@5.1:", type=("build", "run"))
|
||||
depends_on("py-uvloop@0.14,0.15.2:", when="platform=linux", type=("build", "run"))
|
||||
depends_on("py-uvloop@0.14,0.15.2:", when="platform=darwin", type=("build", "run"))
|
||||
depends_on("py-uvloop@0.14,0.15.2:", when="platform=cray", type=("build", "run"))
|
||||
depends_on("py-watchfiles@0.13:", type=("build", "run"))
|
||||
depends_on("py-websockets@10.4:", type=("build", "run"))
|
||||
|
@@ -243,7 +243,6 @@ class Python(Package):
|
||||
variant("tix", default=False, description="Build Tix module", when="+tkinter")
|
||||
variant("crypt", default=True, description="Build crypt module", when="@:3.12 platform=linux")
|
||||
variant("crypt", default=True, description="Build crypt module", when="@:3.12 platform=darwin")
|
||||
variant("crypt", default=True, description="Build crypt module", when="@:3.12 platform=cray")
|
||||
|
||||
if sys.platform != "win32":
|
||||
depends_on("gmake", type="build")
|
||||
|
@@ -287,7 +287,7 @@ class Qt(Package):
|
||||
"fj": ("clang",),
|
||||
"gcc": ("g++",),
|
||||
}
|
||||
platform_mapping = {"darwin": ("macx"), "cray": ("linux")}
|
||||
platform_mapping = {"darwin": ("macx")}
|
||||
|
||||
def url_for_version(self, version):
|
||||
# URL keeps getting more complicated with every release
|
||||
|
@@ -36,8 +36,5 @@ def cmake_args(self):
|
||||
|
||||
if spec.satisfies("@0.1.0:"):
|
||||
args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
|
||||
else:
|
||||
if spec.satisfies("platform=cray"):
|
||||
args.append(self.define("RANKSTR_LINK_STATIC", True))
|
||||
|
||||
return args
|
||||
|
@@ -31,7 +31,6 @@ class Re2c(Package):
|
||||
|
||||
depends_on("cmake", when="platform=windows")
|
||||
depends_on("gmake", when="platform=linux")
|
||||
depends_on("gmake", when="platform=cray")
|
||||
depends_on("gmake", when="platform=darwin")
|
||||
depends_on("gmake", when="platform=freebsd")
|
||||
|
||||
|
@@ -51,8 +51,5 @@ def cmake_args(self):
|
||||
|
||||
if spec.satisfies("@0.1.0:"):
|
||||
args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
|
||||
else:
|
||||
if spec.satisfies("platform=cray"):
|
||||
args.append(self.define("REDSET_LINK_STATIC", True))
|
||||
|
||||
return args
|
||||
|
@@ -37,7 +37,7 @@ class Ruby(AutotoolsPackage, NMakePackage):
|
||||
|
||||
build_system("autotools", "nmake", default="autotools")
|
||||
|
||||
for _platform_condition in ("platform=linux", "platform=darwin", "platform=cray"):
|
||||
for _platform_condition in ("platform=linux", "platform=darwin"):
|
||||
with when(_platform_condition):
|
||||
variant("openssl", default=True, description="Enable OpenSSL support")
|
||||
variant("readline", default=False, description="Enable Readline support")
|
||||
|
@@ -163,8 +163,7 @@ def configure_args(self):
|
||||
]
|
||||
|
||||
cname = spec.compiler.name
|
||||
if not spec.satisfies("platform=cray"):
|
||||
config_args.append("--with-nocross-compiler-suite={0}".format(cname))
|
||||
config_args.append("--with-nocross-compiler-suite={0}".format(cname))
|
||||
|
||||
if self.version >= Version("4.0"):
|
||||
config_args.append("--with-cubew=%s" % spec["cubew"].prefix.bin)
|
||||
@@ -189,8 +188,7 @@ def configure_args(self):
|
||||
config_args.append("--with-rocm=%s" % spec["hip"].prefix)
|
||||
|
||||
config_args += self.with_or_without("shmem")
|
||||
if not spec.satisfies("platform=cray"):
|
||||
config_args += self.with_or_without("mpi")
|
||||
config_args += self.with_or_without("mpi")
|
||||
|
||||
if spec.satisfies("^intel-mpi"):
|
||||
config_args.append("--with-mpi=intel3")
|
||||
|
@@ -302,9 +302,6 @@ def cmake_args(self):
|
||||
# PDSH required before this point
|
||||
args.append(self.define("WITH_PDSH_PREFIX", spec["pdsh"].prefix))
|
||||
|
||||
if "platform=cray" in spec:
|
||||
args.append(self.define("SCR_LINK_STATIC", False))
|
||||
|
||||
return args
|
||||
|
||||
@run_after("install")
|
||||
|
@@ -44,8 +44,5 @@ def cmake_args(self):
|
||||
|
||||
if spec.satisfies("@0.1.0:"):
|
||||
args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
|
||||
else:
|
||||
if spec.satisfies("platform=cray"):
|
||||
args.append(self.define("SHUFFILE_LINK_STATIC", True))
|
||||
|
||||
return args
|
||||
|
@@ -115,7 +115,6 @@ class Spack(Package):
|
||||
depends_on("binutils", type="run", when="@:0.20")
|
||||
depends_on("gnupg", type="run")
|
||||
depends_on("patchelf", type="run", when="platform=linux")
|
||||
depends_on("patchelf", type="run", when="platform=cray")
|
||||
|
||||
# See https://github.com/spack/spack/pull/24686
|
||||
# and #25595, #25726, #25853, #25923, #25924 upstream in python/cpython
|
||||
|
@@ -41,8 +41,5 @@ def cmake_args(self):
|
||||
|
||||
if spec.satisfies("@0.1.0:"):
|
||||
args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
|
||||
else:
|
||||
if spec.satisfies("platform=cray"):
|
||||
args.append(self.define("SPATH_LINK_STATIC", True))
|
||||
|
||||
return args
|
||||
|
@@ -54,7 +54,7 @@ class Sqlite(AutotoolsPackage, NMakePackage):
|
||||
# is enabled, see https://blade.tencent.com/magellan/index_en.html
|
||||
|
||||
# no hard readline dep on Windows + no variant support, makefile has minimal to no options
|
||||
for plat in ["linux", "darwin", "cray", "freebsd"]:
|
||||
for plat in ["linux", "darwin", "freebsd"]:
|
||||
variant(
|
||||
"column_metadata",
|
||||
default=True,
|
||||
|
@@ -250,9 +250,6 @@ def install(self, spec, prefix):
|
||||
if "+x86_64" in spec:
|
||||
options.append("-arch=x86_64")
|
||||
|
||||
if ("platform=cray" in self.spec) and ("+x86_64" not in spec):
|
||||
options.append("-arch=craycnl")
|
||||
|
||||
if "+pdt" in spec:
|
||||
options.append("-pdt=%s" % spec["pdt"].prefix)
|
||||
if spec["pdt"].satisfies("%intel"):
|
||||
|
@@ -56,7 +56,8 @@ class Tcl(AutotoolsPackage, NMakePackage, SourceforgePackage, TclHelper):
|
||||
|
||||
depends_on("zlib-api")
|
||||
|
||||
filter_compiler_wrappers("tclConfig.sh", relative_root="lib")
|
||||
if sys.platform != "win32":
|
||||
filter_compiler_wrappers("tclConfig.sh", relative_root="lib")
|
||||
|
||||
build_system("autotools", "nmake")
|
||||
patch("tcl-quote-cc-path.patch", when="platform=windows")
|
||||
|
@@ -44,13 +44,6 @@ class Totalview(Package):
|
||||
# resource once the target architecture is known.
|
||||
|
||||
# Version 2022.3.6
|
||||
resource(
|
||||
name="crayx86",
|
||||
url="file://totalview_2022.3.6_linux_x86-64.tar",
|
||||
destination=".",
|
||||
sha256="a2639c52bfd4c7484b728d6a0158239074ff0e0c52208a5452b12b878016a519",
|
||||
when="@2022.3.6 platform=cray target=x86_64:",
|
||||
)
|
||||
resource(
|
||||
name="x86-64",
|
||||
url="file://totalview.2022.3.6-linux-x86-64.tar",
|
||||
@@ -81,13 +74,6 @@ class Totalview(Package):
|
||||
)
|
||||
|
||||
# Version 2022.2.13
|
||||
resource(
|
||||
name="crayx86",
|
||||
url="file://totalview_2022.2.13_linux_x86-64.tar",
|
||||
destination=".",
|
||||
sha256="aebd11b837ce18b8200859ea762caa56e2cea346daa114f2841aa0f05a422309",
|
||||
when="@2022.2.13 platform=cray target=x86_64:",
|
||||
)
|
||||
resource(
|
||||
name="x86-64",
|
||||
url="file://totalview.2022.2.13-linux-x86-64.tar",
|
||||
@@ -118,13 +104,6 @@ class Totalview(Package):
|
||||
)
|
||||
|
||||
# Version 2022.1.11
|
||||
resource(
|
||||
name="crayx86",
|
||||
url="file://totalview_2022.1.11_linux_x86-64.tar",
|
||||
destination=".",
|
||||
sha256="3ec9a7d702572dbbafa41726a036c94b549f9a5911ed6fd6aa55f7b377554bac",
|
||||
when="@2022.1.11 platform=cray target=x86_64:",
|
||||
)
|
||||
resource(
|
||||
name="x86-64",
|
||||
url="file://totalview.2022.1.11-linux-x86-64.tar",
|
||||
@@ -155,13 +134,6 @@ class Totalview(Package):
|
||||
)
|
||||
|
||||
# Version 2021.4.10
|
||||
resource(
|
||||
name="crayx86",
|
||||
url="file://totalview_2021.4.10_linux_x86-64.tar",
|
||||
destination=".",
|
||||
sha256="7e5509b2cfb219100b0032304bdad7d422657c0736c386ba64bdb1bf11d10a1d",
|
||||
when="@2021.4.10 platform=cray target=x86_64:",
|
||||
)
|
||||
resource(
|
||||
name="x86-64",
|
||||
url="file://totalview.2021.4.10-linux-x86-64.tar",
|
||||
@@ -230,8 +202,6 @@ def install(self, spec, prefix):
|
||||
arg_list.extend(["-platform", "linux-x86-64"])
|
||||
elif spec.target.family == "x86_64" and spec.platform == "darwin":
|
||||
arg_list.extend(["-platform", "darwin-x86"])
|
||||
elif spec.target.family == "x86_64" and spec.platform == "cray":
|
||||
arg_list.extend(["-platform", "linux-x86-64"])
|
||||
elif spec.target.family == "x86":
|
||||
arg_list.extend(["-platform", "linux-x86"])
|
||||
elif spec.target.family == "aarch64":
|
||||
|
@@ -426,7 +426,7 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
|
||||
depends_on("cgns", when="+exodus")
|
||||
depends_on("cmake@3.23:", type="build", when="@14.0.0:")
|
||||
depends_on("hdf5+hl", when="+hdf5")
|
||||
for plat in ["cray", "darwin", "linux"]:
|
||||
for plat in ["darwin", "linux"]:
|
||||
depends_on("hypre~internal-superlu~int64", when="+hypre platform=%s" % plat)
|
||||
depends_on("hypre-cmake~int64", when="+hypre platform=windows")
|
||||
depends_on("kokkos-nvcc-wrapper", when="+wrapper")
|
||||
|
@@ -20,11 +20,6 @@ class Unzip(MakefilePackage):
|
||||
# There is no problem with it on gcc, so make it a catch all
|
||||
patch("configure-cflags.patch")
|
||||
|
||||
# The Cray cc wrapper doesn't handle the '-s' flag (strip) cleanly.
|
||||
@when("platform=cray")
|
||||
def patch(self):
|
||||
filter_file(r"^LFLAGS2=.*", "LFLAGS2=", join_path("unix", "configure"))
|
||||
|
||||
def get_make_args(self):
|
||||
make_args = ["-f", join_path("unix", "Makefile")]
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user