Merge branch 'develop' into bugfix/compiler-flag-propagation
This commit is contained in:
commit
69bbccef6e
105
lib/spack/llnl/path.py
Normal file
105
lib/spack/llnl/path.py
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
"""Path primitives that just require Python standard library."""
|
||||||
|
import functools
|
||||||
|
import sys
|
||||||
|
from typing import List, Optional
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
|
||||||
|
class Path:
|
||||||
|
"""Enum to identify the path-style."""
|
||||||
|
|
||||||
|
unix: int = 0
|
||||||
|
windows: int = 1
|
||||||
|
platform_path: int = windows if sys.platform == "win32" else unix
|
||||||
|
|
||||||
|
|
||||||
|
def format_os_path(path: str, mode: int = Path.unix) -> str:
|
||||||
|
"""Formats the input path to use consistent, platform specific separators.
|
||||||
|
|
||||||
|
Absolute paths are converted between drive letters and a prepended '/' as per platform
|
||||||
|
requirement.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
path: the path to be normalized, must be a string or expose the replace method.
|
||||||
|
mode: the path file separator style to normalize the passed path to.
|
||||||
|
Default is unix style, i.e. '/'
|
||||||
|
"""
|
||||||
|
if not path:
|
||||||
|
return path
|
||||||
|
if mode == Path.windows:
|
||||||
|
path = path.replace("/", "\\")
|
||||||
|
else:
|
||||||
|
path = path.replace("\\", "/")
|
||||||
|
return path
|
||||||
|
|
||||||
|
|
||||||
|
def convert_to_posix_path(path: str) -> str:
|
||||||
|
"""Converts the input path to POSIX style."""
|
||||||
|
return format_os_path(path, mode=Path.unix)
|
||||||
|
|
||||||
|
|
||||||
|
def convert_to_windows_path(path: str) -> str:
|
||||||
|
"""Converts the input path to Windows style."""
|
||||||
|
return format_os_path(path, mode=Path.windows)
|
||||||
|
|
||||||
|
|
||||||
|
def convert_to_platform_path(path: str) -> str:
|
||||||
|
"""Converts the input path to the current platform's native style."""
|
||||||
|
return format_os_path(path, mode=Path.platform_path)
|
||||||
|
|
||||||
|
|
||||||
|
def path_to_os_path(*parameters: str) -> List[str]:
|
||||||
|
"""Takes an arbitrary number of positional parameters, converts each argument of type
|
||||||
|
string to use a normalized filepath separator, and returns a list of all values.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def _is_url(path_or_url: str) -> bool:
|
||||||
|
if "\\" in path_or_url:
|
||||||
|
return False
|
||||||
|
url_tuple = urlparse(path_or_url)
|
||||||
|
return bool(url_tuple.scheme) and len(url_tuple.scheme) > 1
|
||||||
|
|
||||||
|
result = []
|
||||||
|
for item in parameters:
|
||||||
|
if isinstance(item, str) and not _is_url(item):
|
||||||
|
item = convert_to_platform_path(item)
|
||||||
|
result.append(item)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def system_path_filter(_func=None, arg_slice: Optional[slice] = None):
|
||||||
|
"""Filters function arguments to account for platform path separators.
|
||||||
|
Optional slicing range can be specified to select specific arguments
|
||||||
|
|
||||||
|
This decorator takes all (or a slice) of a method's positional arguments
|
||||||
|
and normalizes usage of filepath separators on a per platform basis.
|
||||||
|
|
||||||
|
Note: `**kwargs`, urls, and any type that is not a string are ignored
|
||||||
|
so in such cases where path normalization is required, that should be
|
||||||
|
handled by calling path_to_os_path directly as needed.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
arg_slice: a slice object specifying the slice of arguments
|
||||||
|
in the decorated method over which filepath separators are
|
||||||
|
normalized
|
||||||
|
"""
|
||||||
|
|
||||||
|
def holder_func(func):
|
||||||
|
@functools.wraps(func)
|
||||||
|
def path_filter_caller(*args, **kwargs):
|
||||||
|
args = list(args)
|
||||||
|
if arg_slice:
|
||||||
|
args[arg_slice] = path_to_os_path(*args[arg_slice])
|
||||||
|
else:
|
||||||
|
args = path_to_os_path(*args)
|
||||||
|
return func(*args, **kwargs)
|
||||||
|
|
||||||
|
return path_filter_caller
|
||||||
|
|
||||||
|
if _func:
|
||||||
|
return holder_func(_func)
|
||||||
|
return holder_func
|
67
lib/spack/llnl/string.py
Normal file
67
lib/spack/llnl/string.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
"""String manipulation functions that do not have other dependencies than Python
|
||||||
|
standard library
|
||||||
|
"""
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
|
||||||
|
def comma_list(sequence: List[str], article: str = "") -> str:
|
||||||
|
if type(sequence) is not list:
|
||||||
|
sequence = list(sequence)
|
||||||
|
|
||||||
|
if not sequence:
|
||||||
|
return ""
|
||||||
|
if len(sequence) == 1:
|
||||||
|
return sequence[0]
|
||||||
|
|
||||||
|
out = ", ".join(str(s) for s in sequence[:-1])
|
||||||
|
if len(sequence) != 2:
|
||||||
|
out += "," # oxford comma
|
||||||
|
out += " "
|
||||||
|
if article:
|
||||||
|
out += article + " "
|
||||||
|
out += str(sequence[-1])
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
def comma_or(sequence: List[str]) -> str:
|
||||||
|
"""Return a string with all the elements of the input joined by comma, but the last
|
||||||
|
one (which is joined by 'or').
|
||||||
|
"""
|
||||||
|
return comma_list(sequence, "or")
|
||||||
|
|
||||||
|
|
||||||
|
def comma_and(sequence: List[str]) -> str:
|
||||||
|
"""Return a string with all the elements of the input joined by comma, but the last
|
||||||
|
one (which is joined by 'and').
|
||||||
|
"""
|
||||||
|
return comma_list(sequence, "and")
|
||||||
|
|
||||||
|
|
||||||
|
def quote(sequence: List[str], q: str = "'") -> List[str]:
|
||||||
|
"""Quotes each item in the input list with the quote character passed as second argument."""
|
||||||
|
return [f"{q}{e}{q}" for e in sequence]
|
||||||
|
|
||||||
|
|
||||||
|
def plural(n: int, singular: str, plural: Optional[str] = None, show_n: bool = True) -> str:
|
||||||
|
"""Pluralize <singular> word by adding an s if n != 1.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
n: number of things there are
|
||||||
|
singular: singular form of word
|
||||||
|
plural: optional plural form, for when it's not just singular + 's'
|
||||||
|
show_n: whether to include n in the result string (default True)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
"1 thing" if n == 1 or "n things" if n != 1
|
||||||
|
"""
|
||||||
|
number = f"{n} " if show_n else ""
|
||||||
|
if n == 1:
|
||||||
|
return f"{number}{singular}"
|
||||||
|
elif plural is not None:
|
||||||
|
return f"{number}{plural}"
|
||||||
|
else:
|
||||||
|
return f"{number}{singular}s"
|
@ -28,7 +28,8 @@
|
|||||||
from llnl.util.symlink import islink, readlink, resolve_link_target_relative_to_the_link, symlink
|
from llnl.util.symlink import islink, readlink, resolve_link_target_relative_to_the_link, symlink
|
||||||
|
|
||||||
from spack.util.executable import Executable, which
|
from spack.util.executable import Executable, which
|
||||||
from spack.util.path import path_to_os_path, system_path_filter
|
|
||||||
|
from ..path import path_to_os_path, system_path_filter
|
||||||
|
|
||||||
if sys.platform != "win32":
|
if sys.platform != "win32":
|
||||||
import grp
|
import grp
|
||||||
@ -336,8 +337,7 @@ def groupid_to_group(x):
|
|||||||
|
|
||||||
if string:
|
if string:
|
||||||
regex = re.escape(regex)
|
regex = re.escape(regex)
|
||||||
filenames = path_to_os_path(*filenames)
|
for filename in path_to_os_path(*filenames):
|
||||||
for filename in filenames:
|
|
||||||
msg = 'FILTER FILE: {0} [replacing "{1}"]'
|
msg = 'FILTER FILE: {0} [replacing "{1}"]'
|
||||||
tty.debug(msg.format(filename, regex))
|
tty.debug(msg.format(filename, regex))
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
from llnl.util import lang, tty
|
from llnl.util import lang, tty
|
||||||
|
|
||||||
import spack.util.string
|
from ..string import plural
|
||||||
|
|
||||||
if sys.platform != "win32":
|
if sys.platform != "win32":
|
||||||
import fcntl
|
import fcntl
|
||||||
@ -169,7 +169,7 @@ def _attempts_str(wait_time, nattempts):
|
|||||||
if nattempts <= 1:
|
if nattempts <= 1:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
attempts = spack.util.string.plural(nattempts, "attempt")
|
attempts = plural(nattempts, "attempt")
|
||||||
return " after {} and {}".format(lang.pretty_seconds(wait_time), attempts)
|
return " after {} and {}".format(lang.pretty_seconds(wait_time), attempts)
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,8 +11,7 @@
|
|||||||
|
|
||||||
from llnl.util import lang, tty
|
from llnl.util import lang, tty
|
||||||
|
|
||||||
from spack.error import SpackError
|
from ..path import system_path_filter
|
||||||
from spack.util.path import system_path_filter
|
|
||||||
|
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
from win32file import CreateHardLink
|
from win32file import CreateHardLink
|
||||||
@ -338,7 +337,7 @@ def resolve_link_target_relative_to_the_link(link):
|
|||||||
return os.path.join(link_dir, target)
|
return os.path.join(link_dir, target)
|
||||||
|
|
||||||
|
|
||||||
class SymlinkError(SpackError):
|
class SymlinkError(RuntimeError):
|
||||||
"""Exception class for errors raised while creating symlinks,
|
"""Exception class for errors raised while creating symlinks,
|
||||||
junctions and hard links
|
junctions and hard links
|
||||||
"""
|
"""
|
||||||
|
@ -647,8 +647,7 @@ class BuildManifestVisitor(BaseDirectoryVisitor):
|
|||||||
directories."""
|
directories."""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# Save unique identifiers of files to avoid
|
# Save unique identifiers of hardlinks to avoid relocating them multiple times
|
||||||
# relocating hardlink files for each path.
|
|
||||||
self.visited = set()
|
self.visited = set()
|
||||||
|
|
||||||
# Lists of files we will check
|
# Lists of files we will check
|
||||||
@ -657,6 +656,8 @@ def __init__(self):
|
|||||||
|
|
||||||
def seen_before(self, root, rel_path):
|
def seen_before(self, root, rel_path):
|
||||||
stat_result = os.lstat(os.path.join(root, rel_path))
|
stat_result = os.lstat(os.path.join(root, rel_path))
|
||||||
|
if stat_result.st_nlink == 1:
|
||||||
|
return False
|
||||||
identifier = (stat_result.st_dev, stat_result.st_ino)
|
identifier = (stat_result.st_dev, stat_result.st_ino)
|
||||||
if identifier in self.visited:
|
if identifier in self.visited:
|
||||||
return True
|
return True
|
||||||
@ -1581,9 +1582,10 @@ def dedupe_hardlinks_if_necessary(root, buildinfo):
|
|||||||
for rel_path in buildinfo[key]:
|
for rel_path in buildinfo[key]:
|
||||||
stat_result = os.lstat(os.path.join(root, rel_path))
|
stat_result = os.lstat(os.path.join(root, rel_path))
|
||||||
identifier = (stat_result.st_dev, stat_result.st_ino)
|
identifier = (stat_result.st_dev, stat_result.st_ino)
|
||||||
if identifier in visited:
|
if stat_result.st_nlink > 1:
|
||||||
continue
|
if identifier in visited:
|
||||||
visited.add(identifier)
|
continue
|
||||||
|
visited.add(identifier)
|
||||||
new_list.append(rel_path)
|
new_list.append(rel_path)
|
||||||
buildinfo[key] = new_list
|
buildinfo[key] = new_list
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
from typing import List, Tuple
|
from typing import List, Tuple
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
|
from llnl.string import plural
|
||||||
from llnl.util.filesystem import join_path
|
from llnl.util.filesystem import join_path
|
||||||
from llnl.util.lang import dedupe
|
from llnl.util.lang import dedupe
|
||||||
from llnl.util.symlink import symlink
|
from llnl.util.symlink import symlink
|
||||||
@ -82,7 +83,6 @@
|
|||||||
from spack.util.executable import Executable
|
from spack.util.executable import Executable
|
||||||
from spack.util.log_parse import make_log_context, parse_log_events
|
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, module, path_from_modules
|
||||||
from spack.util.string import plural
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# This can be set by the user to globally disable parallel builds.
|
# This can be set by the user to globally disable parallel builds.
|
||||||
|
@ -61,6 +61,11 @@ def component_prefix(self):
|
|||||||
"""Path to component <prefix>/<component>/<version>."""
|
"""Path to component <prefix>/<component>/<version>."""
|
||||||
return self.prefix.join(join_path(self.component_dir, self.spec.version))
|
return self.prefix.join(join_path(self.component_dir, self.spec.version))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def env_script_args(self):
|
||||||
|
"""Additional arguments to pass to vars.sh script."""
|
||||||
|
return ()
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
self.install_component(basename(self.url_for_version(spec.version)))
|
self.install_component(basename(self.url_for_version(spec.version)))
|
||||||
|
|
||||||
@ -124,7 +129,7 @@ def setup_run_environment(self, env):
|
|||||||
if "~envmods" not in self.spec:
|
if "~envmods" not in self.spec:
|
||||||
env.extend(
|
env.extend(
|
||||||
EnvironmentModifications.from_sourcing_file(
|
EnvironmentModifications.from_sourcing_file(
|
||||||
join_path(self.component_prefix, "env", "vars.sh")
|
join_path(self.component_prefix, "env", "vars.sh"), *self.env_script_args
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
from typing import List, Match, Tuple
|
from typing import List, Match, Tuple
|
||||||
|
|
||||||
|
import llnl.string
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.filesystem import join_path
|
from llnl.util.filesystem import join_path
|
||||||
from llnl.util.lang import attr_setdefault, index_by
|
from llnl.util.lang import attr_setdefault, index_by
|
||||||
@ -29,7 +30,6 @@
|
|||||||
import spack.user_environment as uenv
|
import spack.user_environment as uenv
|
||||||
import spack.util.spack_json as sjson
|
import spack.util.spack_json as sjson
|
||||||
import spack.util.spack_yaml as syaml
|
import spack.util.spack_yaml as syaml
|
||||||
import spack.util.string
|
|
||||||
|
|
||||||
# cmd has a submodule called "list" so preserve the python list module
|
# cmd has a submodule called "list" so preserve the python list module
|
||||||
python_list = list
|
python_list = list
|
||||||
@ -516,7 +516,7 @@ def print_how_many_pkgs(specs, pkg_type=""):
|
|||||||
category, e.g. if pkg_type is "installed" then the message
|
category, e.g. if pkg_type is "installed" then the message
|
||||||
would be "3 installed packages"
|
would be "3 installed packages"
|
||||||
"""
|
"""
|
||||||
tty.msg("%s" % spack.util.string.plural(len(specs), pkg_type + " package"))
|
tty.msg("%s" % llnl.string.plural(len(specs), pkg_type + " package"))
|
||||||
|
|
||||||
|
|
||||||
def spack_is_git_repo():
|
def spack_is_git_repo():
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
import llnl.util.tty.color as clr
|
import llnl.util.tty.color as clr
|
||||||
|
from llnl.string import plural
|
||||||
from llnl.util.lang import elide_list
|
from llnl.util.lang import elide_list
|
||||||
|
|
||||||
import spack.binary_distribution as bindist
|
import spack.binary_distribution as bindist
|
||||||
@ -32,7 +33,6 @@
|
|||||||
from spack.cmd import display_specs
|
from spack.cmd import display_specs
|
||||||
from spack.spec import Spec, save_dependency_specfiles
|
from spack.spec import Spec, save_dependency_specfiles
|
||||||
from spack.stage import Stage
|
from spack.stage import Stage
|
||||||
from spack.util.string import plural
|
|
||||||
|
|
||||||
description = "create, download and install binary packages"
|
description = "create, download and install binary packages"
|
||||||
section = "packaging"
|
section = "packaging"
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
|
import llnl.string as string
|
||||||
import llnl.util.filesystem as fs
|
import llnl.util.filesystem as fs
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.tty.colify import colify
|
from llnl.util.tty.colify import colify
|
||||||
@ -28,7 +29,6 @@
|
|||||||
import spack.schema.env
|
import spack.schema.env
|
||||||
import spack.spec
|
import spack.spec
|
||||||
import spack.tengine
|
import spack.tengine
|
||||||
import spack.util.string as string
|
|
||||||
from spack.util.environment import EnvironmentModifications
|
from spack.util.environment import EnvironmentModifications
|
||||||
|
|
||||||
description = "manage virtual environments"
|
description = "manage virtual environments"
|
||||||
|
@ -6,10 +6,11 @@
|
|||||||
import posixpath
|
import posixpath
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from llnl.path import convert_to_posix_path
|
||||||
|
|
||||||
import spack.paths
|
import spack.paths
|
||||||
import spack.util.executable
|
import spack.util.executable
|
||||||
from spack.spec import Spec
|
from spack.spec import Spec
|
||||||
from spack.util.path import convert_to_posix_path
|
|
||||||
|
|
||||||
description = "generate Windows installer"
|
description = "generate Windows installer"
|
||||||
section = "admin"
|
section = "admin"
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
import io
|
import io
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
import llnl.string
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
import llnl.util.tty.colify as colify
|
import llnl.util.tty.colify as colify
|
||||||
|
|
||||||
@ -24,7 +25,7 @@ def report_tags(category, tags):
|
|||||||
if isatty:
|
if isatty:
|
||||||
num = len(tags)
|
num = len(tags)
|
||||||
fmt = "{0} package tag".format(category)
|
fmt = "{0} package tag".format(category)
|
||||||
buffer.write("{0}:\n".format(spack.util.string.plural(num, fmt)))
|
buffer.write("{0}:\n".format(llnl.string.plural(num, fmt)))
|
||||||
|
|
||||||
if tags:
|
if tags:
|
||||||
colify.colify(tags, output=buffer, tty=isatty, indent=4)
|
colify.colify(tags, output=buffer, tty=isatty, indent=4)
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
import tempfile
|
import tempfile
|
||||||
from typing import List, Optional, Sequence
|
from typing import List, Optional, Sequence
|
||||||
|
|
||||||
|
import llnl.path
|
||||||
import llnl.util.lang
|
import llnl.util.lang
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.filesystem import path_contains_subdirectory, paths_containing_libs
|
from llnl.util.filesystem import path_contains_subdirectory, paths_containing_libs
|
||||||
@ -24,7 +25,6 @@
|
|||||||
import spack.util.module_cmd
|
import spack.util.module_cmd
|
||||||
import spack.version
|
import spack.version
|
||||||
from spack.util.environment import filter_system_paths
|
from spack.util.environment import filter_system_paths
|
||||||
from spack.util.path import system_path_filter
|
|
||||||
|
|
||||||
__all__ = ["Compiler"]
|
__all__ = ["Compiler"]
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ def _parse_link_paths(string):
|
|||||||
return implicit_link_dirs
|
return implicit_link_dirs
|
||||||
|
|
||||||
|
|
||||||
@system_path_filter
|
@llnl.path.system_path_filter
|
||||||
def _parse_non_system_link_dirs(string: str) -> List[str]:
|
def _parse_non_system_link_dirs(string: str) -> List[str]:
|
||||||
"""Parses link paths out of compiler debug output.
|
"""Parses link paths out of compiler debug output.
|
||||||
|
|
||||||
|
@ -120,10 +120,8 @@ def write_host_environment(self, spec):
|
|||||||
versioning. We use it in the case that an analysis later needs to
|
versioning. We use it in the case that an analysis later needs to
|
||||||
easily access this information.
|
easily access this information.
|
||||||
"""
|
"""
|
||||||
from spack.util.environment import get_host_environment_metadata
|
|
||||||
|
|
||||||
env_file = self.env_metadata_path(spec)
|
env_file = self.env_metadata_path(spec)
|
||||||
environ = get_host_environment_metadata()
|
environ = spack.spec.get_host_environment_metadata()
|
||||||
with open(env_file, "w") as fd:
|
with open(env_file, "w") as fd:
|
||||||
sjson.dump(environ, fd)
|
sjson.dump(environ, fd)
|
||||||
|
|
||||||
|
@ -404,7 +404,7 @@ def _write_yaml(data, str_or_file):
|
|||||||
|
|
||||||
def _eval_conditional(string):
|
def _eval_conditional(string):
|
||||||
"""Evaluate conditional definitions using restricted variable scope."""
|
"""Evaluate conditional definitions using restricted variable scope."""
|
||||||
valid_variables = spack.util.environment.get_host_environment()
|
valid_variables = spack.spec.get_host_environment()
|
||||||
valid_variables.update({"re": re, "env": os.environ})
|
valid_variables.update({"re": re, "env": os.environ})
|
||||||
return eval(string, valid_variables)
|
return eval(string, valid_variables)
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
import llnl.util
|
import llnl.util
|
||||||
import llnl.util.filesystem as fs
|
import llnl.util.filesystem as fs
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
|
from llnl.string import comma_and, quote
|
||||||
from llnl.util.filesystem import get_single_file, mkdirp, temp_cwd, temp_rename, working_dir
|
from llnl.util.filesystem import get_single_file, mkdirp, temp_cwd, temp_rename, working_dir
|
||||||
from llnl.util.symlink import symlink
|
from llnl.util.symlink import symlink
|
||||||
|
|
||||||
@ -49,7 +50,6 @@
|
|||||||
import spack.version.git_ref_lookup
|
import spack.version.git_ref_lookup
|
||||||
from spack.util.compression import decompressor_for
|
from spack.util.compression import decompressor_for
|
||||||
from spack.util.executable import CommandNotFoundError, which
|
from spack.util.executable import CommandNotFoundError, which
|
||||||
from spack.util.string import comma_and, quote
|
|
||||||
|
|
||||||
#: List of all fetch strategies, created by FetchStrategy metaclass.
|
#: List of all fetch strategies, created by FetchStrategy metaclass.
|
||||||
all_strategies = []
|
all_strategies = []
|
||||||
|
@ -79,8 +79,7 @@ class ElfFilesWithRPathVisitor(BaseDirectoryVisitor):
|
|||||||
"""Visitor that collects all elf files that have an rpath"""
|
"""Visitor that collects all elf files that have an rpath"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# Map from (ino, dev) -> path. We need 1 path per file, if there are hardlinks,
|
# Keep track of what hardlinked files we've already visited.
|
||||||
# we don't need to store the path multiple times.
|
|
||||||
self.visited = set()
|
self.visited = set()
|
||||||
|
|
||||||
def visit_file(self, root, rel_path, depth):
|
def visit_file(self, root, rel_path, depth):
|
||||||
@ -89,10 +88,10 @@ def visit_file(self, root, rel_path, depth):
|
|||||||
identifier = (s.st_ino, s.st_dev)
|
identifier = (s.st_ino, s.st_dev)
|
||||||
|
|
||||||
# We're hitting a hardlink or symlink of an excluded lib, no need to parse.
|
# We're hitting a hardlink or symlink of an excluded lib, no need to parse.
|
||||||
if identifier in self.visited:
|
if s.st_nlink > 1:
|
||||||
return
|
if identifier in self.visited:
|
||||||
|
return
|
||||||
self.visited.add(identifier)
|
self.visited.add(identifier)
|
||||||
|
|
||||||
result = drop_redundant_rpaths(filepath)
|
result = drop_redundant_rpaths(filepath)
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
import llnl.util.filesystem as fs
|
import llnl.util.filesystem as fs
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
|
from llnl.string import plural
|
||||||
from llnl.util.lang import nullcontext
|
from llnl.util.lang import nullcontext
|
||||||
from llnl.util.tty.color import colorize
|
from llnl.util.tty.color import colorize
|
||||||
|
|
||||||
@ -26,7 +27,6 @@
|
|||||||
from spack.installer import InstallError
|
from spack.installer import InstallError
|
||||||
from spack.spec import Spec
|
from spack.spec import Spec
|
||||||
from spack.util.prefix import Prefix
|
from spack.util.prefix import Prefix
|
||||||
from spack.util.string import plural
|
|
||||||
|
|
||||||
#: Stand-alone test failure info type
|
#: Stand-alone test failure info type
|
||||||
TestFailureType = Tuple[BaseException, str]
|
TestFailureType = Tuple[BaseException, str]
|
||||||
|
@ -774,7 +774,7 @@ def _profile_wrapper(command, parser, args, unknown_args):
|
|||||||
pr.disable()
|
pr.disable()
|
||||||
|
|
||||||
# print out profile stats.
|
# print out profile stats.
|
||||||
stats = pstats.Stats(pr)
|
stats = pstats.Stats(pr, stream=sys.stderr)
|
||||||
stats.sort_stats(*sortby)
|
stats.sort_stats(*sortby)
|
||||||
stats.print_stats(nlines)
|
stats.print_stats(nlines)
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
import uuid
|
import uuid
|
||||||
from typing import Any, Dict, List, Union
|
from typing import Any, Dict, List, Union
|
||||||
|
|
||||||
|
import llnl.path
|
||||||
import llnl.util.filesystem as fs
|
import llnl.util.filesystem as fs
|
||||||
import llnl.util.lang
|
import llnl.util.lang
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
@ -563,7 +564,7 @@ def __init__(
|
|||||||
self.checker = package_checker
|
self.checker = package_checker
|
||||||
self.packages_path = self.checker.packages_path
|
self.packages_path = self.checker.packages_path
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
self.packages_path = spack.util.path.convert_to_posix_path(self.packages_path)
|
self.packages_path = llnl.path.convert_to_posix_path(self.packages_path)
|
||||||
self.namespace = namespace
|
self.namespace = namespace
|
||||||
|
|
||||||
self.indexers: Dict[str, Indexer] = {}
|
self.indexers: Dict[str, Indexer] = {}
|
||||||
|
@ -54,10 +54,14 @@
|
|||||||
import io
|
import io
|
||||||
import itertools
|
import itertools
|
||||||
import os
|
import os
|
||||||
|
import platform
|
||||||
import re
|
import re
|
||||||
|
import socket
|
||||||
import warnings
|
import warnings
|
||||||
from typing import Callable, List, Optional, Tuple, Union
|
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
||||||
|
|
||||||
|
import llnl.path
|
||||||
|
import llnl.string
|
||||||
import llnl.util.filesystem as fs
|
import llnl.util.filesystem as fs
|
||||||
import llnl.util.lang as lang
|
import llnl.util.lang as lang
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
@ -82,11 +86,9 @@
|
|||||||
import spack.util.executable
|
import spack.util.executable
|
||||||
import spack.util.hash
|
import spack.util.hash
|
||||||
import spack.util.module_cmd as md
|
import spack.util.module_cmd as md
|
||||||
import spack.util.path as pth
|
|
||||||
import spack.util.prefix
|
import spack.util.prefix
|
||||||
import spack.util.spack_json as sjson
|
import spack.util.spack_json as sjson
|
||||||
import spack.util.spack_yaml as syaml
|
import spack.util.spack_yaml as syaml
|
||||||
import spack.util.string
|
|
||||||
import spack.variant as vt
|
import spack.variant as vt
|
||||||
import spack.version as vn
|
import spack.version as vn
|
||||||
import spack.version.git_ref_lookup
|
import spack.version.git_ref_lookup
|
||||||
@ -1390,7 +1392,7 @@ def _format_module_list(modules):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def external_path(self):
|
def external_path(self):
|
||||||
return pth.path_to_os_path(self._external_path)[0]
|
return llnl.path.path_to_os_path(self._external_path)[0]
|
||||||
|
|
||||||
@external_path.setter
|
@external_path.setter
|
||||||
def external_path(self, ext_path):
|
def external_path(self, ext_path):
|
||||||
@ -1799,7 +1801,7 @@ def prefix(self):
|
|||||||
|
|
||||||
@prefix.setter
|
@prefix.setter
|
||||||
def prefix(self, value):
|
def prefix(self, value):
|
||||||
self._prefix = spack.util.prefix.Prefix(pth.convert_to_platform_path(value))
|
self._prefix = spack.util.prefix.Prefix(llnl.path.convert_to_platform_path(value))
|
||||||
|
|
||||||
def spec_hash(self, hash):
|
def spec_hash(self, hash):
|
||||||
"""Utility method for computing different types of Spec hashes.
|
"""Utility method for computing different types of Spec hashes.
|
||||||
@ -5148,6 +5150,43 @@ def save_dependency_specfiles(root: Spec, output_directory: str, dependencies: L
|
|||||||
fd.write(spec.to_json(hash=ht.dag_hash))
|
fd.write(spec.to_json(hash=ht.dag_hash))
|
||||||
|
|
||||||
|
|
||||||
|
def get_host_environment_metadata() -> Dict[str, str]:
|
||||||
|
"""Get the host environment, reduce to a subset that we can store in
|
||||||
|
the install directory, and add the spack version.
|
||||||
|
"""
|
||||||
|
import spack.main
|
||||||
|
|
||||||
|
environ = get_host_environment()
|
||||||
|
return {
|
||||||
|
"host_os": environ["os"],
|
||||||
|
"platform": environ["platform"],
|
||||||
|
"host_target": environ["target"],
|
||||||
|
"hostname": environ["hostname"],
|
||||||
|
"spack_version": spack.main.get_version(),
|
||||||
|
"kernel_version": platform.version(),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def get_host_environment() -> Dict[str, Any]:
|
||||||
|
"""Return a dictionary (lookup) with host information (not including the
|
||||||
|
os.environ).
|
||||||
|
"""
|
||||||
|
host_platform = spack.platforms.host()
|
||||||
|
host_target = host_platform.target("default_target")
|
||||||
|
host_os = host_platform.operating_system("default_os")
|
||||||
|
arch_fmt = "platform={0} os={1} target={2}"
|
||||||
|
arch_spec = Spec(arch_fmt.format(host_platform, host_os, host_target))
|
||||||
|
return {
|
||||||
|
"target": str(host_target),
|
||||||
|
"os": str(host_os),
|
||||||
|
"platform": str(host_platform),
|
||||||
|
"arch": arch_spec,
|
||||||
|
"architecture": arch_spec,
|
||||||
|
"arch_str": str(arch_spec),
|
||||||
|
"hostname": socket.gethostname(),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class SpecParseError(spack.error.SpecError):
|
class SpecParseError(spack.error.SpecError):
|
||||||
"""Wrapper for ParseError for when we're parsing specs."""
|
"""Wrapper for ParseError for when we're parsing specs."""
|
||||||
|
|
||||||
@ -5208,7 +5247,7 @@ class InvalidDependencyError(spack.error.SpecError):
|
|||||||
def __init__(self, pkg, deps):
|
def __init__(self, pkg, deps):
|
||||||
self.invalid_deps = deps
|
self.invalid_deps = deps
|
||||||
super().__init__(
|
super().__init__(
|
||||||
"Package {0} does not depend on {1}".format(pkg, spack.util.string.comma_or(deps))
|
"Package {0} does not depend on {1}".format(pkg, llnl.string.comma_or(deps))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
import tempfile
|
import tempfile
|
||||||
from typing import Callable, Dict, Iterable, Optional
|
from typing import Callable, Dict, Iterable, Optional
|
||||||
|
|
||||||
|
import llnl.string
|
||||||
import llnl.util.lang
|
import llnl.util.lang
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.filesystem import (
|
from llnl.util.filesystem import (
|
||||||
@ -37,7 +38,6 @@
|
|||||||
import spack.util.lock
|
import spack.util.lock
|
||||||
import spack.util.path as sup
|
import spack.util.path as sup
|
||||||
import spack.util.pattern as pattern
|
import spack.util.pattern as pattern
|
||||||
import spack.util.string
|
|
||||||
import spack.util.url as url_util
|
import spack.util.url as url_util
|
||||||
from spack.util.crypto import bit_length, prefix_bits
|
from spack.util.crypto import bit_length, prefix_bits
|
||||||
|
|
||||||
@ -897,7 +897,7 @@ def get_checksums_for_versions(
|
|||||||
num_ver = len(sorted_versions)
|
num_ver = len(sorted_versions)
|
||||||
|
|
||||||
tty.msg(
|
tty.msg(
|
||||||
f"Found {spack.util.string.plural(num_ver, 'version')} of {package_name}:",
|
f"Found {llnl.string.plural(num_ver, 'version')} of {package_name}:",
|
||||||
"",
|
"",
|
||||||
*llnl.util.lang.elide_list(
|
*llnl.util.lang.elide_list(
|
||||||
["{0:{1}} {2}".format(str(v), max_len, url_by_version[v]) for v in sorted_versions]
|
["{0:{1}} {2}".format(str(v), max_len, url_by_version[v]) for v in sorted_versions]
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from llnl.path import Path, convert_to_platform_path
|
||||||
from llnl.util.filesystem import HeaderList, LibraryList
|
from llnl.util.filesystem import HeaderList, LibraryList
|
||||||
|
|
||||||
import spack.build_environment
|
import spack.build_environment
|
||||||
@ -21,7 +22,6 @@
|
|||||||
from spack.util.cpus import determine_number_of_jobs
|
from spack.util.cpus import determine_number_of_jobs
|
||||||
from spack.util.environment import EnvironmentModifications
|
from spack.util.environment import EnvironmentModifications
|
||||||
from spack.util.executable import Executable
|
from spack.util.executable import Executable
|
||||||
from spack.util.path import Path, convert_to_platform_path
|
|
||||||
|
|
||||||
|
|
||||||
def os_pathsep_join(path, *pths):
|
def os_pathsep_join(path, *pths):
|
||||||
|
@ -7,13 +7,14 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from llnl.path import convert_to_posix_path
|
||||||
|
|
||||||
import spack.bootstrap
|
import spack.bootstrap
|
||||||
import spack.bootstrap.core
|
import spack.bootstrap.core
|
||||||
import spack.config
|
import spack.config
|
||||||
import spack.environment as ev
|
import spack.environment as ev
|
||||||
import spack.main
|
import spack.main
|
||||||
import spack.mirror
|
import spack.mirror
|
||||||
from spack.util.path import convert_to_posix_path
|
|
||||||
|
|
||||||
_bootstrap = spack.main.SpackCommand("bootstrap")
|
_bootstrap = spack.main.SpackCommand("bootstrap")
|
||||||
|
|
||||||
|
@ -12,11 +12,12 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from llnl.path import path_to_os_path
|
||||||
|
|
||||||
import spack.paths
|
import spack.paths
|
||||||
import spack.repo
|
import spack.repo
|
||||||
from spack.directory_layout import DirectoryLayout, InvalidDirectoryLayoutParametersError
|
from spack.directory_layout import DirectoryLayout, InvalidDirectoryLayoutParametersError
|
||||||
from spack.spec import Spec
|
from spack.spec import Spec
|
||||||
from spack.util.path import path_to_os_path
|
|
||||||
|
|
||||||
# number of packages to test (to reduce test time)
|
# number of packages to test (to reduce test time)
|
||||||
max_packages = 10
|
max_packages = 10
|
||||||
|
43
lib/spack/spack/test/llnl/llnl_string.py
Normal file
43
lib/spack/spack/test/llnl/llnl_string.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
import llnl.string
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"arguments,expected",
|
||||||
|
[
|
||||||
|
((0, "thing"), "0 things"),
|
||||||
|
((1, "thing"), "1 thing"),
|
||||||
|
((2, "thing"), "2 things"),
|
||||||
|
((1, "thing", "wombats"), "1 thing"),
|
||||||
|
((2, "thing", "wombats"), "2 wombats"),
|
||||||
|
((2, "thing", "wombats", False), "wombats"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_plural(arguments, expected):
|
||||||
|
assert llnl.string.plural(*arguments) == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"arguments,expected",
|
||||||
|
[((["one", "two"],), ["'one'", "'two'"]), ((["one", "two"], "^"), ["^one^", "^two^"])],
|
||||||
|
)
|
||||||
|
def test_quote(arguments, expected):
|
||||||
|
assert llnl.string.quote(*arguments) == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"input,expected_and,expected_or",
|
||||||
|
[
|
||||||
|
(["foo"], "foo", "foo"),
|
||||||
|
(["foo", "bar"], "foo and bar", "foo or bar"),
|
||||||
|
(["foo", "bar", "baz"], "foo, bar, and baz", "foo, bar, or baz"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_comma_and_or(input, expected_and, expected_or):
|
||||||
|
assert llnl.string.comma_and(input) == expected_and
|
||||||
|
assert llnl.string.comma_or(input) == expected_or
|
@ -1,14 +0,0 @@
|
|||||||
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
||||||
|
|
||||||
from spack.util.string import plural
|
|
||||||
|
|
||||||
|
|
||||||
def test_plural():
|
|
||||||
assert plural(0, "thing") == "0 things"
|
|
||||||
assert plural(1, "thing") == "1 thing"
|
|
||||||
assert plural(2, "thing") == "2 things"
|
|
||||||
assert plural(1, "thing", "wombats") == "1 thing"
|
|
||||||
assert plural(2, "thing", "wombats") == "2 wombats"
|
|
@ -31,12 +31,12 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
import llnl.url
|
import llnl.url
|
||||||
|
from llnl.path import convert_to_posix_path
|
||||||
from llnl.util.tty.color import cescape, colorize
|
from llnl.util.tty.color import cescape, colorize
|
||||||
|
|
||||||
import spack.error
|
import spack.error
|
||||||
import spack.util.web
|
import spack.util.web
|
||||||
import spack.version
|
import spack.version
|
||||||
from spack.util.path import convert_to_posix_path
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Note: We call the input to most of these functions a "path" but the functions
|
# Note: We call the input to most of these functions a "path" but the functions
|
||||||
|
@ -10,21 +10,16 @@
|
|||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import pickle
|
import pickle
|
||||||
import platform
|
|
||||||
import re
|
import re
|
||||||
import socket
|
|
||||||
import sys
|
import sys
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from typing import Any, Callable, Dict, List, MutableMapping, Optional, Tuple, Union
|
from typing import Any, Callable, Dict, List, MutableMapping, Optional, Tuple, Union
|
||||||
|
|
||||||
|
from llnl.path import path_to_os_path, system_path_filter
|
||||||
from llnl.util import tty
|
from llnl.util import tty
|
||||||
from llnl.util.lang import dedupe
|
from llnl.util.lang import dedupe
|
||||||
|
|
||||||
import spack.platforms
|
|
||||||
import spack.spec
|
|
||||||
|
|
||||||
from .executable import Executable, which
|
from .executable import Executable, which
|
||||||
from .path import path_to_os_path, system_path_filter
|
|
||||||
|
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
SYSTEM_PATHS = [
|
SYSTEM_PATHS = [
|
||||||
@ -224,43 +219,6 @@ def pickle_environment(path: Path, environment: Optional[Dict[str, str]] = None)
|
|||||||
pickle.dump(dict(environment if environment else os.environ), pickle_file, protocol=2)
|
pickle.dump(dict(environment if environment else os.environ), pickle_file, protocol=2)
|
||||||
|
|
||||||
|
|
||||||
def get_host_environment_metadata() -> Dict[str, str]:
|
|
||||||
"""Get the host environment, reduce to a subset that we can store in
|
|
||||||
the install directory, and add the spack version.
|
|
||||||
"""
|
|
||||||
import spack.main
|
|
||||||
|
|
||||||
environ = get_host_environment()
|
|
||||||
return {
|
|
||||||
"host_os": environ["os"],
|
|
||||||
"platform": environ["platform"],
|
|
||||||
"host_target": environ["target"],
|
|
||||||
"hostname": environ["hostname"],
|
|
||||||
"spack_version": spack.main.get_version(),
|
|
||||||
"kernel_version": platform.version(),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def get_host_environment() -> Dict[str, Any]:
|
|
||||||
"""Return a dictionary (lookup) with host information (not including the
|
|
||||||
os.environ).
|
|
||||||
"""
|
|
||||||
host_platform = spack.platforms.host()
|
|
||||||
host_target = host_platform.target("default_target")
|
|
||||||
host_os = host_platform.operating_system("default_os")
|
|
||||||
arch_fmt = "platform={0} os={1} target={2}"
|
|
||||||
arch_spec = spack.spec.Spec(arch_fmt.format(host_platform, host_os, host_target))
|
|
||||||
return {
|
|
||||||
"target": str(host_target),
|
|
||||||
"os": str(host_os),
|
|
||||||
"platform": str(host_platform),
|
|
||||||
"arch": arch_spec,
|
|
||||||
"architecture": arch_spec,
|
|
||||||
"arch_str": str(arch_spec),
|
|
||||||
"hostname": socket.gethostname(),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def set_env(**kwargs):
|
def set_env(**kwargs):
|
||||||
"""Temporarily sets and restores environment variables.
|
"""Temporarily sets and restores environment variables.
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
from datetime import date
|
from datetime import date
|
||||||
from urllib.parse import urlparse
|
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.lang import memoized
|
from llnl.util.lang import memoized
|
||||||
@ -98,31 +97,10 @@ def replacements():
|
|||||||
SPACK_PATH_PADDING_CHARS = "__spack_path_placeholder__"
|
SPACK_PATH_PADDING_CHARS = "__spack_path_placeholder__"
|
||||||
|
|
||||||
|
|
||||||
def is_path_url(path):
|
|
||||||
if "\\" in path:
|
|
||||||
return False
|
|
||||||
url_tuple = urlparse(path)
|
|
||||||
return bool(url_tuple.scheme) and len(url_tuple.scheme) > 1
|
|
||||||
|
|
||||||
|
|
||||||
def win_exe_ext():
|
def win_exe_ext():
|
||||||
return ".exe"
|
return ".exe"
|
||||||
|
|
||||||
|
|
||||||
def path_to_os_path(*pths):
|
|
||||||
"""
|
|
||||||
Takes an arbitrary number of positional parameters
|
|
||||||
converts each arguemnt of type string to use a normalized
|
|
||||||
filepath separator, and returns a list of all values
|
|
||||||
"""
|
|
||||||
ret_pths = []
|
|
||||||
for pth in pths:
|
|
||||||
if isinstance(pth, str) and not is_path_url(pth):
|
|
||||||
pth = convert_to_platform_path(pth)
|
|
||||||
ret_pths.append(pth)
|
|
||||||
return ret_pths
|
|
||||||
|
|
||||||
|
|
||||||
def sanitize_filename(filename: str) -> str:
|
def sanitize_filename(filename: str) -> str:
|
||||||
"""
|
"""
|
||||||
Replaces unsupported characters (for the host) in a filename with underscores.
|
Replaces unsupported characters (for the host) in a filename with underscores.
|
||||||
@ -145,42 +123,6 @@ def sanitize_filename(filename: str) -> str:
|
|||||||
return re.sub(r'[\x00-\x1F\x7F"*/:<>?\\|]', "_", filename)
|
return re.sub(r'[\x00-\x1F\x7F"*/:<>?\\|]', "_", filename)
|
||||||
|
|
||||||
|
|
||||||
def system_path_filter(_func=None, arg_slice=None):
|
|
||||||
"""
|
|
||||||
Filters function arguments to account for platform path separators.
|
|
||||||
Optional slicing range can be specified to select specific arguments
|
|
||||||
|
|
||||||
This decorator takes all (or a slice) of a method's positional arguments
|
|
||||||
and normalizes usage of filepath separators on a per platform basis.
|
|
||||||
|
|
||||||
Note: **kwargs, urls, and any type that is not a string are ignored
|
|
||||||
so in such cases where path normalization is required, that should be
|
|
||||||
handled by calling path_to_os_path directly as needed.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
arg_slice (slice): a slice object specifying the slice of arguments
|
|
||||||
in the decorated method over which filepath separators are
|
|
||||||
normalized
|
|
||||||
"""
|
|
||||||
from functools import wraps
|
|
||||||
|
|
||||||
def holder_func(func):
|
|
||||||
@wraps(func)
|
|
||||||
def path_filter_caller(*args, **kwargs):
|
|
||||||
args = list(args)
|
|
||||||
if arg_slice:
|
|
||||||
args[arg_slice] = path_to_os_path(*args[arg_slice])
|
|
||||||
else:
|
|
||||||
args = path_to_os_path(*args)
|
|
||||||
return func(*args, **kwargs)
|
|
||||||
|
|
||||||
return path_filter_caller
|
|
||||||
|
|
||||||
if _func:
|
|
||||||
return holder_func(_func)
|
|
||||||
return holder_func
|
|
||||||
|
|
||||||
|
|
||||||
@memoized
|
@memoized
|
||||||
def get_system_path_max():
|
def get_system_path_max():
|
||||||
# Choose a conservative default
|
# Choose a conservative default
|
||||||
@ -202,54 +144,6 @@ def get_system_path_max():
|
|||||||
return sys_max_path_length
|
return sys_max_path_length
|
||||||
|
|
||||||
|
|
||||||
class Path:
|
|
||||||
"""
|
|
||||||
Describes the filepath separator types
|
|
||||||
in an enum style
|
|
||||||
with a helper attribute
|
|
||||||
exposing the path type of
|
|
||||||
the current platform.
|
|
||||||
"""
|
|
||||||
|
|
||||||
unix = 0
|
|
||||||
windows = 1
|
|
||||||
platform_path = windows if sys.platform == "win32" else unix
|
|
||||||
|
|
||||||
|
|
||||||
def format_os_path(path, mode=Path.unix):
|
|
||||||
"""
|
|
||||||
Format path to use consistent, platform specific
|
|
||||||
separators. Absolute paths are converted between
|
|
||||||
drive letters and a prepended '/' as per platform
|
|
||||||
requirement.
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
path (str): the path to be normalized, must be a string
|
|
||||||
or expose the replace method.
|
|
||||||
mode (Path): the path filesperator style to normalize the
|
|
||||||
passed path to. Default is unix style, i.e. '/'
|
|
||||||
"""
|
|
||||||
if not path:
|
|
||||||
return path
|
|
||||||
if mode == Path.windows:
|
|
||||||
path = path.replace("/", "\\")
|
|
||||||
else:
|
|
||||||
path = path.replace("\\", "/")
|
|
||||||
return path
|
|
||||||
|
|
||||||
|
|
||||||
def convert_to_posix_path(path):
|
|
||||||
return format_os_path(path, mode=Path.unix)
|
|
||||||
|
|
||||||
|
|
||||||
def convert_to_windows_path(path):
|
|
||||||
return format_os_path(path, mode=Path.windows)
|
|
||||||
|
|
||||||
|
|
||||||
def convert_to_platform_path(path):
|
|
||||||
return format_os_path(path, mode=Path.platform_path)
|
|
||||||
|
|
||||||
|
|
||||||
def substitute_config_variables(path):
|
def substitute_config_variables(path):
|
||||||
"""Substitute placeholders into paths.
|
"""Substitute placeholders into paths.
|
||||||
|
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
||||||
|
|
||||||
|
|
||||||
def comma_list(sequence, article=""):
|
|
||||||
if type(sequence) is not list:
|
|
||||||
sequence = list(sequence)
|
|
||||||
|
|
||||||
if not sequence:
|
|
||||||
return
|
|
||||||
elif len(sequence) == 1:
|
|
||||||
return sequence[0]
|
|
||||||
else:
|
|
||||||
out = ", ".join(str(s) for s in sequence[:-1])
|
|
||||||
if len(sequence) != 2:
|
|
||||||
out += "," # oxford comma
|
|
||||||
out += " "
|
|
||||||
if article:
|
|
||||||
out += article + " "
|
|
||||||
out += str(sequence[-1])
|
|
||||||
return out
|
|
||||||
|
|
||||||
|
|
||||||
def comma_or(sequence):
|
|
||||||
return comma_list(sequence, "or")
|
|
||||||
|
|
||||||
|
|
||||||
def comma_and(sequence):
|
|
||||||
return comma_list(sequence, "and")
|
|
||||||
|
|
||||||
|
|
||||||
def quote(sequence, q="'"):
|
|
||||||
return ["%s%s%s" % (q, e, q) for e in sequence]
|
|
||||||
|
|
||||||
|
|
||||||
def plural(n, singular, plural=None, show_n=True):
|
|
||||||
"""Pluralize <singular> word by adding an s if n != 1.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
n (int): number of things there are
|
|
||||||
singular (str): singular form of word
|
|
||||||
plural (str or None): optional plural form, for when it's not just
|
|
||||||
singular + 's'
|
|
||||||
show_n (bool): whether to include n in the result string (default True)
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
(str): "1 thing" if n == 1 or "n things" if n != 1
|
|
||||||
"""
|
|
||||||
number = "%s " % n if show_n else ""
|
|
||||||
if n == 1:
|
|
||||||
return "%s%s" % (number, singular)
|
|
||||||
elif plural is not None:
|
|
||||||
return "%s%s" % (number, plural)
|
|
||||||
else:
|
|
||||||
return "%s%ss" % (number, singular)
|
|
@ -14,7 +14,9 @@
|
|||||||
import urllib.parse
|
import urllib.parse
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
|
||||||
from spack.util.path import convert_to_posix_path, sanitize_filename
|
from llnl.path import convert_to_posix_path
|
||||||
|
|
||||||
|
from spack.util.path import sanitize_filename
|
||||||
|
|
||||||
|
|
||||||
def validate_scheme(scheme):
|
def validate_scheme(scheme):
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
|
|
||||||
import llnl.util.lang as lang
|
import llnl.util.lang as lang
|
||||||
import llnl.util.tty.color
|
import llnl.util.tty.color
|
||||||
|
from llnl.string import comma_or
|
||||||
|
|
||||||
import spack.directives
|
import spack.directives
|
||||||
import spack.error as error
|
import spack.error as error
|
||||||
from spack.util.string import comma_or
|
|
||||||
|
|
||||||
special_variant_values = [None, "none", "*"]
|
special_variant_values = [None, "none", "*"]
|
||||||
|
|
||||||
|
@ -827,16 +827,16 @@ e4s-cray-rhel-build:
|
|||||||
variables:
|
variables:
|
||||||
SPACK_CI_STACK_NAME: e4s-cray-sles
|
SPACK_CI_STACK_NAME: e4s-cray-sles
|
||||||
|
|
||||||
e4s-cray-sles-generate:
|
# e4s-cray-sles-generate:
|
||||||
extends: [ ".generate-cray-sles", ".e4s-cray-sles" ]
|
# extends: [ ".generate-cray-sles", ".e4s-cray-sles" ]
|
||||||
|
|
||||||
e4s-cray-sles-build:
|
# e4s-cray-sles-build:
|
||||||
extends: [ ".build", ".e4s-cray-sles" ]
|
# extends: [ ".build", ".e4s-cray-sles" ]
|
||||||
trigger:
|
# trigger:
|
||||||
include:
|
# include:
|
||||||
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
|
# - artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
|
||||||
job: e4s-cray-sles-generate
|
# job: e4s-cray-sles-generate
|
||||||
strategy: depend
|
# strategy: depend
|
||||||
needs:
|
# needs:
|
||||||
- artifacts: True
|
# - artifacts: True
|
||||||
job: e4s-cray-sles-generate
|
# job: e4s-cray-sles-generate
|
||||||
|
@ -18,6 +18,7 @@ class Apex(CMakePackage):
|
|||||||
|
|
||||||
version("develop", branch="develop")
|
version("develop", branch="develop")
|
||||||
version("master", branch="master")
|
version("master", branch="master")
|
||||||
|
version("2.6.3", sha256="7fef12937d3bd1271a01abe44cb931b1d63823fb5c74287a332f3012ed7297d5")
|
||||||
version("2.6.2", sha256="0c3ec26631db7925f50cf4e8920a778b57d11913f239a0eb964081f925129725")
|
version("2.6.2", sha256="0c3ec26631db7925f50cf4e8920a778b57d11913f239a0eb964081f925129725")
|
||||||
version("2.6.1", sha256="511dbab0af541489052a3d6379c48f9577e51654491d3b2c8545020e9d29fb29")
|
version("2.6.1", sha256="511dbab0af541489052a3d6379c48f9577e51654491d3b2c8545020e9d29fb29")
|
||||||
version("2.6.0", sha256="25b4f6afd1083475dc6680b5da87759c62d31fcf368996185573694fc40d5317")
|
version("2.6.0", sha256="25b4f6afd1083475dc6680b5da87759c62d31fcf368996185573694fc40d5317")
|
||||||
@ -115,6 +116,9 @@ class Apex(CMakePackage):
|
|||||||
conflicts("+jemalloc", when="+gperftools")
|
conflicts("+jemalloc", when="+gperftools")
|
||||||
conflicts("+plugins", when="~activeharmony")
|
conflicts("+plugins", when="~activeharmony")
|
||||||
|
|
||||||
|
# https://github.com/UO-OACISS/apex/pull/177#issuecomment-1726322959
|
||||||
|
conflicts("+openmp", when="%gcc")
|
||||||
|
|
||||||
# Patches
|
# Patches
|
||||||
|
|
||||||
# This patch ensures that the missing dependency_tree.hpp header is
|
# This patch ensures that the missing dependency_tree.hpp header is
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
--- a/src/cmake/cxxConfigure.cmake 2017-06-22 12:14:50.000000000 -0500
|
||||||
|
+++ b/src/cmake/cxxConfigure.cmake 2023-09-25 11:50:55.819690648 -0500
|
||||||
|
@@ -118,7 +118,7 @@
|
||||||
|
set(BCL2FASTQ_DEP_LIB ${BCL2FASTQ_DEP_LIB} "${LIBEXSLT_LIBRARIES}" "${LIBXSLT_LIBRARIES}" "${LIBXML2_LIBRARIES}")
|
||||||
|
|
||||||
|
#set (CMAKE_CXX_FLAGS "$ENV{CXX_FLAGS} $ENV{CXXFLAGS} -fopenmp -msse2 -Werror -Wall -Wextra -Wunused -Wno-long-long -Wsign-compare -Wpointer-arith" CACHE STRING "g++ flags" FORCE)
|
||||||
|
-set (CMAKE_CXX_FLAGS "$ENV{CXX_FLAGS} $ENV{CXXFLAGS} -std=c++11 -fopenmp -msse2 -Wall -Wextra -Wunused -Wno-long-long -Wsign-compare -Wpointer-arith" CACHE STRING "g++ flags" FORCE)
|
||||||
|
+set (CMAKE_CXX_FLAGS "$ENV{CXX_FLAGS} $ENV{CXXFLAGS} -std=c++11 -fopenmp -Wall -Wextra -Wunused -Wno-long-long -Wsign-compare -Wpointer-arith" CACHE STRING "g++ flags" FORCE)
|
||||||
|
#set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -pg -fprofile-arcs -ftest-coverage -D_GLIBCXX_DEBUG" CACHE STRING "g++ flags" FORCE)
|
||||||
|
set (CMAKE_CXX_FLAGS_DEBUG "-O0 -std=c++11 -g -pg -fprofile-arcs -ftest-coverage" CACHE STRING "g++ flags" FORCE)
|
||||||
|
#set (CMAKE_CXX_FLAGS_DEBUG "-std=c++11 -O0 -g -pg -fprofile-arcs -ftest-coverage" CACHE STRING "g++ flags" FORCE)
|
@ -49,6 +49,8 @@ class Bcl2fastq2(Package):
|
|||||||
# After finding the libxslt bits, cmake still needs to wire in the
|
# After finding the libxslt bits, cmake still needs to wire in the
|
||||||
# libexslt bits.
|
# libexslt bits.
|
||||||
patch("cxxConfigure-cmake.patch")
|
patch("cxxConfigure-cmake.patch")
|
||||||
|
# -msse2 isn't valid for arm
|
||||||
|
patch("cxxConfigure-aarch64.patch", when="target=aarch64:")
|
||||||
|
|
||||||
root_cmakelists_dir = "src"
|
root_cmakelists_dir = "src"
|
||||||
|
|
||||||
|
@ -498,7 +498,9 @@ def determine_bootstrap_options(self, spec, with_libs, options):
|
|||||||
with open("user-config.jam", "w") as f:
|
with open("user-config.jam", "w") as f:
|
||||||
# Boost may end up using gcc even though clang+gfortran is set in
|
# Boost may end up using gcc even though clang+gfortran is set in
|
||||||
# compilers.yaml. Make sure this does not happen:
|
# compilers.yaml. Make sure this does not happen:
|
||||||
f.write("using {0} : : {1} ;\n".format(boost_toolset_id, spack_cxx))
|
if not spec.satisfies("platform=windows"):
|
||||||
|
# Skip this on Windows since we don't have a cl.exe wrapper in spack
|
||||||
|
f.write("using {0} : : {1} ;\n".format(boost_toolset_id, spack_cxx))
|
||||||
|
|
||||||
if "+mpi" in spec:
|
if "+mpi" in spec:
|
||||||
# Use the correct mpi compiler. If the compiler options are
|
# Use the correct mpi compiler. If the compiler options are
|
||||||
@ -584,7 +586,7 @@ def determine_b2_options(self, spec, options):
|
|||||||
|
|
||||||
options.extend(["link=%s" % ",".join(link_types), "--layout=%s" % layout])
|
options.extend(["link=%s" % ",".join(link_types), "--layout=%s" % layout])
|
||||||
|
|
||||||
if not spec.satisfies("@:1.75 %intel"):
|
if not spec.satisfies("@:1.75 %intel") and not spec.satisfies("platform=windows"):
|
||||||
# When building any version >= 1.76, the toolset must be specified.
|
# When building any version >= 1.76, the toolset must be specified.
|
||||||
# Earlier versions could not specify Intel as the toolset
|
# Earlier versions could not specify Intel as the toolset
|
||||||
# as that was considered to be redundant/conflicting with
|
# as that was considered to be redundant/conflicting with
|
||||||
@ -634,7 +636,7 @@ def determine_b2_options(self, spec, options):
|
|||||||
return threading_opts
|
return threading_opts
|
||||||
|
|
||||||
def add_buildopt_symlinks(self, prefix):
|
def add_buildopt_symlinks(self, prefix):
|
||||||
with working_dir(prefix.lib):
|
with working_dir(prefix.lib, create=True):
|
||||||
for lib in os.listdir(os.curdir):
|
for lib in os.listdir(os.curdir):
|
||||||
if os.path.isfile(lib):
|
if os.path.isfile(lib):
|
||||||
prefix, remainder = lib.split(".", 1)
|
prefix, remainder = lib.split(".", 1)
|
||||||
@ -687,12 +689,15 @@ def install(self, spec, prefix):
|
|||||||
# to make Boost find the user-config.jam
|
# to make Boost find the user-config.jam
|
||||||
env["BOOST_BUILD_PATH"] = self.stage.source_path
|
env["BOOST_BUILD_PATH"] = self.stage.source_path
|
||||||
|
|
||||||
bootstrap = Executable("./bootstrap.sh")
|
|
||||||
|
|
||||||
bootstrap_options = ["--prefix=%s" % prefix]
|
bootstrap_options = ["--prefix=%s" % prefix]
|
||||||
self.determine_bootstrap_options(spec, with_libs, bootstrap_options)
|
self.determine_bootstrap_options(spec, with_libs, bootstrap_options)
|
||||||
|
|
||||||
bootstrap(*bootstrap_options)
|
if self.spec.satisfies("platform=windows"):
|
||||||
|
bootstrap = Executable("cmd.exe")
|
||||||
|
bootstrap("/c", ".\\bootstrap.bat", *bootstrap_options)
|
||||||
|
else:
|
||||||
|
bootstrap = Executable("./bootstrap.sh")
|
||||||
|
bootstrap(*bootstrap_options)
|
||||||
|
|
||||||
# strip the toolchain to avoid double include errors (intel) or
|
# strip the toolchain to avoid double include errors (intel) or
|
||||||
# user-config being overwritten (again intel, but different boost version)
|
# user-config being overwritten (again intel, but different boost version)
|
||||||
@ -704,6 +709,8 @@ def install(self, spec, prefix):
|
|||||||
|
|
||||||
# b2 used to be called bjam, before 1.47 (sigh)
|
# b2 used to be called bjam, before 1.47 (sigh)
|
||||||
b2name = "./b2" if spec.satisfies("@1.47:") else "./bjam"
|
b2name = "./b2" if spec.satisfies("@1.47:") else "./bjam"
|
||||||
|
if self.spec.satisfies("platform=windows"):
|
||||||
|
b2name = "b2.exe" if spec.satisfies("@1.47:") else "bjam.exe"
|
||||||
|
|
||||||
b2 = Executable(b2name)
|
b2 = Executable(b2name)
|
||||||
jobs = make_jobs
|
jobs = make_jobs
|
||||||
@ -711,11 +718,14 @@ def install(self, spec, prefix):
|
|||||||
if jobs > 64 and spec.satisfies("@:1.58"):
|
if jobs > 64 and spec.satisfies("@:1.58"):
|
||||||
jobs = 64
|
jobs = 64
|
||||||
|
|
||||||
b2_options = [
|
# Windows just wants a b2 call with no args
|
||||||
"-j",
|
b2_options = []
|
||||||
"%s" % jobs,
|
if not self.spec.satisfies("platform=windows"):
|
||||||
"--user-config=%s" % os.path.join(self.stage.source_path, "user-config.jam"),
|
path_to_config = "--user-config=%s" % os.path.join(
|
||||||
]
|
self.stage.source_path, "user-config.jam"
|
||||||
|
)
|
||||||
|
b2_options = ["-j", "%s" % jobs]
|
||||||
|
b2_options.append(path_to_config)
|
||||||
|
|
||||||
threading_opts = self.determine_b2_options(spec, b2_options)
|
threading_opts = self.determine_b2_options(spec, b2_options)
|
||||||
|
|
||||||
@ -727,8 +737,11 @@ def install(self, spec, prefix):
|
|||||||
|
|
||||||
# In theory it could be done on one call but it fails on
|
# In theory it could be done on one call but it fails on
|
||||||
# Boost.MPI if the threading options are not separated.
|
# Boost.MPI if the threading options are not separated.
|
||||||
for threading_opt in threading_opts:
|
if not self.spec.satisfies("platform=windows"):
|
||||||
b2("install", "threading=%s" % threading_opt, *b2_options)
|
for threading_opt in threading_opts:
|
||||||
|
b2("install", "threading=%s" % threading_opt, *b2_options)
|
||||||
|
else:
|
||||||
|
b2("install", *b2_options)
|
||||||
|
|
||||||
if "+multithreaded" in spec and "~taggedlayout" in spec:
|
if "+multithreaded" in spec and "~taggedlayout" in spec:
|
||||||
self.add_buildopt_symlinks(prefix)
|
self.add_buildopt_symlinks(prefix)
|
||||||
|
@ -27,6 +27,7 @@ class Cmake(Package):
|
|||||||
executables = ["^cmake[0-9]*$"]
|
executables = ["^cmake[0-9]*$"]
|
||||||
|
|
||||||
version("master", branch="master")
|
version("master", branch="master")
|
||||||
|
version("3.27.6", sha256="ef3056df528569e0e8956f6cf38806879347ac6de6a4ff7e4105dc4578732cfb")
|
||||||
version("3.27.4", sha256="0a905ca8635ca81aa152e123bdde7e54cbe764fdd9a70d62af44cad8b92967af")
|
version("3.27.4", sha256="0a905ca8635ca81aa152e123bdde7e54cbe764fdd9a70d62af44cad8b92967af")
|
||||||
version("3.27.3", sha256="66afdc0f181461b70b6fedcde9ecc4226c5cd184e7203617c83b7d8e47f49521")
|
version("3.27.3", sha256="66afdc0f181461b70b6fedcde9ecc4226c5cd184e7203617c83b7d8e47f49521")
|
||||||
version("3.27.2", sha256="798e50085d423816fe96c9ef8bee5e50002c9eca09fed13e300de8a91d35c211")
|
version("3.27.2", sha256="798e50085d423816fe96c9ef8bee5e50002c9eca09fed13e300de8a91d35c211")
|
||||||
|
@ -17,6 +17,7 @@ class CrosstoolNg(AutotoolsPackage):
|
|||||||
|
|
||||||
maintainers("alalazo")
|
maintainers("alalazo")
|
||||||
|
|
||||||
|
version("1.26.0", sha256="e8ce69c5c8ca8d904e6923ccf86c53576761b9cf219e2e69235b139c8e1b74fc")
|
||||||
version("1.25.0", sha256="68162f342243cd4189ed7c1f4e3bb1302caa3f2cbbf8331879bd01fe06c60cd3")
|
version("1.25.0", sha256="68162f342243cd4189ed7c1f4e3bb1302caa3f2cbbf8331879bd01fe06c60cd3")
|
||||||
|
|
||||||
depends_on("ncurses")
|
depends_on("ncurses")
|
||||||
|
71
var/spack/repos/builtin/packages/elbencho/package.py
Normal file
71
var/spack/repos/builtin/packages/elbencho/package.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from spack.package import *
|
||||||
|
|
||||||
|
|
||||||
|
class Elbencho(MakefilePackage):
|
||||||
|
|
||||||
|
"""
|
||||||
|
Elbencho storage benchmark
|
||||||
|
"""
|
||||||
|
|
||||||
|
homepage = "https://github.com/breuner/elbencho"
|
||||||
|
url = "https://github.com/breuner/elbencho/archive/refs/tags/v3.0-1.tar.gz"
|
||||||
|
|
||||||
|
maintainers("ethanjjjjjjj")
|
||||||
|
|
||||||
|
version("3.0-1", sha256="19dad85e1fc74419dcdf740f11a47d3f6d566770a06e40976755a3404566c11d")
|
||||||
|
version("2.2-5", sha256="4b598639452665a8b79c4c9d8a22ae63fb9b04057635a45e686aa3939ee255b4")
|
||||||
|
version("2.2-3", sha256="0ae2d495d2863b84f21f55b7c526674fab1be723d0697087017946647f79d0e6")
|
||||||
|
version("2.1-5", sha256="5d2293dcdb766e9194bed964486a10b4c8c308cc1ba8c0044c6e5a2aadd4f199")
|
||||||
|
version("2.1-3", sha256="9d08aa0e83753666cb16a78320dfa5710350879f9f4f1e281dacd69f53249d01")
|
||||||
|
version("2.1-1", sha256="18be49f521df2fab4f16a1a9f00dd6104a25e5ea335ce8801bf07268ed9271a9")
|
||||||
|
version("2.0-9", sha256="fe0f67fbb7dd7c743f8b3e0a92358f7393f2950da456474d4adb38690fab1878")
|
||||||
|
version("2.0-7", sha256="a2e49cb2cf1ae99e46e9fa95b42ece250cb58fbadb4c393f9776b40204e8b2c0")
|
||||||
|
|
||||||
|
variant("s3", default=False, description="Enable support for s3 api")
|
||||||
|
variant("cuda", default=True, description="Enable CUDA support", when="+cufile")
|
||||||
|
variant("cuda", default=False, description="Enable CUDA support")
|
||||||
|
variant("cufile", default=False, description="GPU Direct Storage")
|
||||||
|
|
||||||
|
depends_on("cuda", when="+cuda")
|
||||||
|
depends_on(
|
||||||
|
"""
|
||||||
|
boost
|
||||||
|
+filesystem+program_options
|
||||||
|
+thread
|
||||||
|
+system+date_time
|
||||||
|
+regex
|
||||||
|
+serialization
|
||||||
|
+iostreams
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
depends_on("ncurses")
|
||||||
|
depends_on("numactl")
|
||||||
|
depends_on("libaio")
|
||||||
|
depends_on("curl", when="+s3")
|
||||||
|
depends_on("libarchive", when="+s3")
|
||||||
|
depends_on("openssl", when="+s3")
|
||||||
|
depends_on("libuuid", when="+s3")
|
||||||
|
depends_on("zlib", when="+s3")
|
||||||
|
depends_on("cmake", when="+s3")
|
||||||
|
|
||||||
|
conflicts("+cufile", when="~cuda")
|
||||||
|
|
||||||
|
def edit(self, spec, prefix):
|
||||||
|
os.mkdir(prefix.bin)
|
||||||
|
os.environ["INST_PATH"] = prefix.bin
|
||||||
|
if "+s3" in spec:
|
||||||
|
os.environ["S3_SUPPORT"] = "1"
|
||||||
|
if "+cuda" in spec:
|
||||||
|
os.environ["CUDA_SUPPORT"] = "1"
|
||||||
|
if "+cufile" in spec:
|
||||||
|
os.environ["CUFILE_SUPPORT"] = "1"
|
||||||
|
makefile = FileFilter("Makefile")
|
||||||
|
makefile.filter(r"\s+/etc/bash_completion.d/", f" {prefix}/etc/bash_completion.d/")
|
||||||
|
makefile.filter(r"-lncurses", "-ltinfo -lncurses")
|
@ -128,6 +128,10 @@ def headers(self):
|
|||||||
headers.directories = [self.prefix.include]
|
headers.directories = [self.prefix.include]
|
||||||
return headers
|
return headers
|
||||||
|
|
||||||
|
@when("@:6.0 %apple-clang@15:")
|
||||||
|
def setup_build_environment(self, env):
|
||||||
|
env.append_flags("LDFLAGS", "-Wl,-ld_classic")
|
||||||
|
|
||||||
def enable_or_disable_meta(self, variant, options):
|
def enable_or_disable_meta(self, variant, options):
|
||||||
switch = "enable" if "+{0}".format(variant) in self.spec else "disable"
|
switch = "enable" if "+{0}".format(variant) in self.spec else "disable"
|
||||||
return ["--{0}-{1}".format(switch, option) for option in options]
|
return ["--{0}-{1}".format(switch, option) for option in options]
|
||||||
|
194
var/spack/repos/builtin/packages/glibc/95f5a9a-2.11.patch
Normal file
194
var/spack/repos/builtin/packages/glibc/95f5a9a-2.11.patch
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Joseph Myers <joseph@codesourcery.com>
|
||||||
|
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
||||||
|
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
||||||
|
|
||||||
|
diff --git a/Makeconfig b/Makeconfig
|
||||||
|
index 47638b13c6..6384e22a72 100644
|
||||||
|
--- a/Makeconfig
|
||||||
|
+++ b/Makeconfig
|
||||||
|
@@ -423,7 +423,7 @@ endif
|
||||||
|
|
||||||
|
# Command for linking programs with the C library.
|
||||||
|
ifndef +link
|
||||||
|
-+link = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||||
|
++link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||||
|
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||||
|
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
|
||||||
|
$(addprefix $(csu-objpfx),$(start-installed-name)) \
|
||||||
|
@@ -432,7 +432,10 @@ ifndef +link
|
||||||
|
$(start-installed-name))\
|
||||||
|
$(+preinit) $(link-extra-libs) \
|
||||||
|
$(common-objpfx)libc% $(+postinit),$^) \
|
||||||
|
- $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
|
||||||
|
+ $(link-extra-libs)
|
||||||
|
++link-after-libc = $(+postctor) $(+postinit)
|
||||||
|
++link = $(+link-before-libc) $(link-libc) $(+link-after-libc)
|
||||||
|
++link-tests = $(+link-before-libc) $(link-libc-tests) $(+link-after-libc)
|
||||||
|
endif
|
||||||
|
# Command for linking PIE programs with the C library.
|
||||||
|
ifndef +link-pie
|
||||||
|
@@ -449,7 +452,7 @@ ifndef +link-pie
|
||||||
|
endif
|
||||||
|
# Command for statically linking programs with the C library.
|
||||||
|
ifndef +link-static
|
||||||
|
-+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||||
|
++link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||||
|
$(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||||
|
$(addprefix $(csu-objpfx),$(static-start-installed-name)) \
|
||||||
|
$(+preinit) $(+prector) \
|
||||||
|
@@ -457,7 +460,12 @@ ifndef +link-static
|
||||||
|
$(start-installed-name))\
|
||||||
|
$(+preinit) $(link-extra-libs-static) \
|
||||||
|
$(common-objpfx)libc% $(+postinit),$^) \
|
||||||
|
- $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit)
|
||||||
|
+ $(link-extra-libs-static) $(link-libc-static)
|
||||||
|
++link-static-after-libc = $(+postctor) $(+postinit)
|
||||||
|
++link-static = $(+link-static-before-libc) $(link-libc-static) \
|
||||||
|
+ $(+link-static-after-libc)
|
||||||
|
++link-static-tests = $(+link-static-before-libc) $(link-libc-static-tests) \
|
||||||
|
+ $(+link-static-after-libc)
|
||||||
|
endif
|
||||||
|
# Command for statically linking bounded-pointer programs with the C library.
|
||||||
|
ifndef +link-bounded
|
||||||
|
@@ -482,9 +490,11 @@ ifeq ($(elf),yes)
|
||||||
|
# We need the versioned name of libc.so in the deps of $(others) et al
|
||||||
|
# so that the symlink to libc.so is created before anything tries to
|
||||||
|
# run the linked programs.
|
||||||
|
-link-libc = -Wl,-rpath-link=$(rpath-link) \
|
||||||
|
+link-libc-before-gnulib = -Wl,-rpath-link=$(rpath-link) \
|
||||||
|
$(common-objpfx)libc.so$(libc.so-version) \
|
||||||
|
- $(common-objpfx)$(patsubst %,$(libtype.oS),c) $(gnulib)
|
||||||
|
+ $(common-objpfx)$(patsubst %,$(libtype.oS),c)
|
||||||
|
+link-libc = $(link-libc-before-gnulib) $(gnulib)
|
||||||
|
+link-libc-tests = $(link-libc-before-gnulib) $(gnulib-tests)
|
||||||
|
# This is how to find at build-time things that will be installed there.
|
||||||
|
rpath-dirs = math elf dlfcn nss nis rt resolv crypt
|
||||||
|
endif
|
||||||
|
@@ -495,6 +505,7 @@ else
|
||||||
|
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
|
||||||
|
resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv)
|
||||||
|
link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
|
||||||
|
+link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
@@ -523,6 +534,7 @@ endif
|
||||||
|
# The static libraries.
|
||||||
|
ifeq (yes,$(build-static))
|
||||||
|
link-libc-static = $(common-objpfx)libc.a $(static-gnulib) $(common-objpfx)libc.a
|
||||||
|
+link-libc-static-tests = $(common-objpfx)libc.a $(static-gnulib-tests) $(common-objpfx)libc.a
|
||||||
|
else
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
# We can try to link the programs with lib*_pic.a...
|
||||||
|
@@ -542,8 +554,12 @@ ifneq ($(have-as-needed),yes)
|
||||||
|
else
|
||||||
|
libgcc_eh := -Wl,--as-needed -lgcc_s$(libgcc_s_suffix) $(libunwind) -Wl,--no-as-needed
|
||||||
|
endif
|
||||||
|
-gnulib := -lgcc $(libgcc_eh)
|
||||||
|
-static-gnulib := -lgcc -lgcc_eh $(libunwind)
|
||||||
|
+gnulib-arch =
|
||||||
|
+gnulib = -lgcc $(gnulib-arch)
|
||||||
|
+gnulib-tests := -lgcc $(libgcc_eh)
|
||||||
|
+static-gnulib-arch =
|
||||||
|
+static-gnulib = -lgcc $(static-gnulib-arch)
|
||||||
|
+static-gnulib-tests := -lgcc -lgcc_eh $(libunwind)
|
||||||
|
libc.so-gnulib := -lgcc
|
||||||
|
endif
|
||||||
|
ifeq ($(elf),yes)
|
||||||
|
diff --git a/Rules b/Rules
|
||||||
|
index 5ace24cee0..45eb7541dc 100644
|
||||||
|
--- a/Rules
|
||||||
|
+++ b/Rules
|
||||||
|
@@ -104,29 +104,52 @@ xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-bp.out)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(build-programs),yes)
|
||||||
|
-binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
|
||||||
|
-binaries-static = $(others-static) $(tests-static) $(xtests-static)
|
||||||
|
+binaries-all-notests = $(others) $(sysdep-others)
|
||||||
|
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all = $(binaries-all-notests) $(binaries-all-tests)
|
||||||
|
+binaries-static-notests = $(others-static)
|
||||||
|
+binaries-static-tests = $(tests-static) $(xtests-static)
|
||||||
|
+binaries-static = $(binaries-static-notests) $(binaries-static-tests)
|
||||||
|
else
|
||||||
|
-binaries-all = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all-notests =
|
||||||
|
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all = $(binaries-all-tests)
|
||||||
|
+binaries-static-notests =
|
||||||
|
+binaries-static-tests =
|
||||||
|
binaries-static =
|
||||||
|
endif
|
||||||
|
|
||||||
|
-binaries-shared = $(filter-out $(binaries-static), $(binaries-all))
|
||||||
|
+binaries-shared-tests = $(filter-out $(binaries-static), $(binaries-all-tests))
|
||||||
|
+binaries-shared-notests = $(filter-out $(binaries-static), $(binaries-all-notests))
|
||||||
|
|
||||||
|
-ifneq "$(strip $(binaries-shared))" ""
|
||||||
|
-$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
||||||
|
+ifneq "$(strip $(binaries-shared-notests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \
|
||||||
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||||
|
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
$(+link)
|
||||||
|
endif
|
||||||
|
|
||||||
|
-ifneq "$(strip $(binaries-static))" ""
|
||||||
|
-$(addprefix $(objpfx),$(binaries-static)): %: %.o \
|
||||||
|
+ifneq "$(strip $(binaries-shared-tests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \
|
||||||
|
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||||
|
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
+ $(+link-tests)
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifneq "$(strip $(binaries-static-notests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \
|
||||||
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
|
||||||
|
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
$(+link-static)
|
||||||
|
endif
|
||||||
|
|
||||||
|
+ifneq "$(strip $(binaries-static-tests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \
|
||||||
|
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \
|
||||||
|
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
+ $(+link-static-tests)
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
ifeq ($(build-bounded),yes)
|
||||||
|
binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs))
|
||||||
|
$(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \
|
||||||
|
diff --git a/elf/Makefile b/elf/Makefile
|
||||||
|
index 34609a0f85..84709920e8 100644
|
||||||
|
--- a/elf/Makefile
|
||||||
|
+++ b/elf/Makefile
|
||||||
|
@@ -150,6 +150,8 @@ others = sprof sln
|
||||||
|
install-bin = sprof
|
||||||
|
others-static = sln
|
||||||
|
install-rootsbin = sln
|
||||||
|
+sln-modules := static-stubs
|
||||||
|
+extra-objs += $(sln-modules:=.o)
|
||||||
|
|
||||||
|
ifeq (yes,$(use-ldconfig))
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
@@ -157,7 +159,7 @@ others-static += ldconfig
|
||||||
|
others += ldconfig
|
||||||
|
install-rootsbin += ldconfig
|
||||||
|
|
||||||
|
-ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
|
||||||
|
+ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs
|
||||||
|
extra-objs += $(ldconfig-modules:=.o)
|
||||||
|
|
||||||
|
# To find xmalloc.c and xstrdup.c
|
||||||
|
@@ -448,6 +450,8 @@ $(objpfx)ldd: ldd.bash.in $(common-objpfx)soversions.mk \
|
||||||
|
|
||||||
|
$(objpfx)sprof: $(libdl)
|
||||||
|
|
||||||
|
+$(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)
|
||||||
|
+
|
||||||
|
$(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
|
||||||
|
SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"'
|
||||||
|
CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
|
195
var/spack/repos/builtin/packages/glibc/95f5a9a-2.13.patch
Normal file
195
var/spack/repos/builtin/packages/glibc/95f5a9a-2.13.patch
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Joseph Myers <joseph@codesourcery.com>
|
||||||
|
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
||||||
|
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
||||||
|
|
||||||
|
diff --git a/Makeconfig b/Makeconfig
|
||||||
|
index e5cbf646fa..870a4bec4f 100644
|
||||||
|
--- a/Makeconfig
|
||||||
|
+++ b/Makeconfig
|
||||||
|
@@ -431,7 +431,7 @@ endif
|
||||||
|
|
||||||
|
# Command for linking programs with the C library.
|
||||||
|
ifndef +link
|
||||||
|
-+link = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||||
|
++link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||||
|
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||||
|
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
|
||||||
|
$(addprefix $(csu-objpfx),$(start-installed-name)) \
|
||||||
|
@@ -440,7 +440,10 @@ ifndef +link
|
||||||
|
$(start-installed-name))\
|
||||||
|
$(+preinit) $(link-extra-libs) \
|
||||||
|
$(common-objpfx)libc% $(+postinit),$^) \
|
||||||
|
- $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
|
||||||
|
+ $(link-extra-libs)
|
||||||
|
++link-after-libc = $(+postctor) $(+postinit)
|
||||||
|
++link = $(+link-before-libc) $(link-libc) $(+link-after-libc)
|
||||||
|
++link-tests = $(+link-before-libc) $(link-libc-tests) $(+link-after-libc)
|
||||||
|
endif
|
||||||
|
# Command for linking PIE programs with the C library.
|
||||||
|
ifndef +link-pie
|
||||||
|
@@ -457,7 +460,7 @@ ifndef +link-pie
|
||||||
|
endif
|
||||||
|
# Command for statically linking programs with the C library.
|
||||||
|
ifndef +link-static
|
||||||
|
-+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||||
|
++link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||||
|
$(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||||
|
$(addprefix $(csu-objpfx),$(static-start-installed-name)) \
|
||||||
|
$(+preinit) $(+prector) \
|
||||||
|
@@ -465,7 +468,12 @@ ifndef +link-static
|
||||||
|
$(start-installed-name))\
|
||||||
|
$(+preinit) $(link-extra-libs-static) \
|
||||||
|
$(common-objpfx)libc% $(+postinit),$^) \
|
||||||
|
- $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit)
|
||||||
|
+ $(link-extra-libs-static) $(link-libc-static)
|
||||||
|
++link-static-after-libc = $(+postctor) $(+postinit)
|
||||||
|
++link-static = $(+link-static-before-libc) $(link-libc-static) \
|
||||||
|
+ $(+link-static-after-libc)
|
||||||
|
++link-static-tests = $(+link-static-before-libc) $(link-libc-static-tests) \
|
||||||
|
+ $(+link-static-after-libc)
|
||||||
|
endif
|
||||||
|
# Command for statically linking bounded-pointer programs with the C library.
|
||||||
|
ifndef +link-bounded
|
||||||
|
@@ -490,10 +498,12 @@ ifeq ($(elf),yes)
|
||||||
|
# We need the versioned name of libc.so in the deps of $(others) et al
|
||||||
|
# so that the symlink to libc.so is created before anything tries to
|
||||||
|
# run the linked programs.
|
||||||
|
-link-libc = -Wl,-rpath-link=$(rpath-link) \
|
||||||
|
+link-libc-before-gnulib = -Wl,-rpath-link=$(rpath-link) \
|
||||||
|
$(common-objpfx)libc.so$(libc.so-version) \
|
||||||
|
$(common-objpfx)$(patsubst %,$(libtype.oS),c) \
|
||||||
|
- $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed) $(gnulib)
|
||||||
|
+ $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed)
|
||||||
|
+link-libc = $(link-libc-before-gnulib) $(gnulib)
|
||||||
|
+link-libc-tests = $(link-libc-before-gnulib) $(gnulib-tests)
|
||||||
|
# This is how to find at build-time things that will be installed there.
|
||||||
|
rpath-dirs = math elf dlfcn nss nis rt resolv crypt
|
||||||
|
endif
|
||||||
|
@@ -504,6 +514,7 @@ else
|
||||||
|
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
|
||||||
|
resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv)
|
||||||
|
link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
|
||||||
|
+link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
@@ -532,6 +543,7 @@ endif
|
||||||
|
# The static libraries.
|
||||||
|
ifeq (yes,$(build-static))
|
||||||
|
link-libc-static = $(common-objpfx)libc.a $(static-gnulib) $(common-objpfx)libc.a
|
||||||
|
+link-libc-static-tests = $(common-objpfx)libc.a $(static-gnulib-tests) $(common-objpfx)libc.a
|
||||||
|
else
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
# We can try to link the programs with lib*_pic.a...
|
||||||
|
@@ -551,8 +563,12 @@ ifneq ($(have-as-needed),yes)
|
||||||
|
else
|
||||||
|
libgcc_eh := -Wl,--as-needed -lgcc_s$(libgcc_s_suffix) $(libunwind) -Wl,--no-as-needed
|
||||||
|
endif
|
||||||
|
-gnulib := -lgcc $(libgcc_eh)
|
||||||
|
-static-gnulib := -lgcc -lgcc_eh $(libunwind)
|
||||||
|
+gnulib-arch =
|
||||||
|
+gnulib = -lgcc $(gnulib-arch)
|
||||||
|
+gnulib-tests := -lgcc $(libgcc_eh)
|
||||||
|
+static-gnulib-arch =
|
||||||
|
+static-gnulib = -lgcc $(static-gnulib-arch)
|
||||||
|
+static-gnulib-tests := -lgcc -lgcc_eh $(libunwind)
|
||||||
|
libc.so-gnulib := -lgcc
|
||||||
|
endif
|
||||||
|
ifeq ($(elf),yes)
|
||||||
|
diff --git a/Rules b/Rules
|
||||||
|
index 5ace24cee0..45eb7541dc 100644
|
||||||
|
--- a/Rules
|
||||||
|
+++ b/Rules
|
||||||
|
@@ -104,29 +104,52 @@ xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-bp.out)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(build-programs),yes)
|
||||||
|
-binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
|
||||||
|
-binaries-static = $(others-static) $(tests-static) $(xtests-static)
|
||||||
|
+binaries-all-notests = $(others) $(sysdep-others)
|
||||||
|
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all = $(binaries-all-notests) $(binaries-all-tests)
|
||||||
|
+binaries-static-notests = $(others-static)
|
||||||
|
+binaries-static-tests = $(tests-static) $(xtests-static)
|
||||||
|
+binaries-static = $(binaries-static-notests) $(binaries-static-tests)
|
||||||
|
else
|
||||||
|
-binaries-all = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all-notests =
|
||||||
|
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all = $(binaries-all-tests)
|
||||||
|
+binaries-static-notests =
|
||||||
|
+binaries-static-tests =
|
||||||
|
binaries-static =
|
||||||
|
endif
|
||||||
|
|
||||||
|
-binaries-shared = $(filter-out $(binaries-static), $(binaries-all))
|
||||||
|
+binaries-shared-tests = $(filter-out $(binaries-static), $(binaries-all-tests))
|
||||||
|
+binaries-shared-notests = $(filter-out $(binaries-static), $(binaries-all-notests))
|
||||||
|
|
||||||
|
-ifneq "$(strip $(binaries-shared))" ""
|
||||||
|
-$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
||||||
|
+ifneq "$(strip $(binaries-shared-notests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \
|
||||||
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||||
|
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
$(+link)
|
||||||
|
endif
|
||||||
|
|
||||||
|
-ifneq "$(strip $(binaries-static))" ""
|
||||||
|
-$(addprefix $(objpfx),$(binaries-static)): %: %.o \
|
||||||
|
+ifneq "$(strip $(binaries-shared-tests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \
|
||||||
|
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||||
|
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
+ $(+link-tests)
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifneq "$(strip $(binaries-static-notests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \
|
||||||
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
|
||||||
|
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
$(+link-static)
|
||||||
|
endif
|
||||||
|
|
||||||
|
+ifneq "$(strip $(binaries-static-tests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \
|
||||||
|
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \
|
||||||
|
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
+ $(+link-static-tests)
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
ifeq ($(build-bounded),yes)
|
||||||
|
binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs))
|
||||||
|
$(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \
|
||||||
|
diff --git a/elf/Makefile b/elf/Makefile
|
||||||
|
index 2d2d568013..fe1924ebd4 100644
|
||||||
|
--- a/elf/Makefile
|
||||||
|
+++ b/elf/Makefile
|
||||||
|
@@ -150,6 +150,8 @@ others = sprof sln
|
||||||
|
install-bin = sprof
|
||||||
|
others-static = sln
|
||||||
|
install-rootsbin = sln
|
||||||
|
+sln-modules := static-stubs
|
||||||
|
+extra-objs += $(sln-modules:=.o)
|
||||||
|
|
||||||
|
ifeq (yes,$(use-ldconfig))
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
@@ -157,7 +159,7 @@ others-static += ldconfig
|
||||||
|
others += ldconfig
|
||||||
|
install-rootsbin += ldconfig
|
||||||
|
|
||||||
|
-ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
|
||||||
|
+ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs
|
||||||
|
extra-objs += $(ldconfig-modules:=.o)
|
||||||
|
|
||||||
|
# To find xmalloc.c and xstrdup.c
|
||||||
|
@@ -458,6 +460,8 @@ $(objpfx)ldd: ldd.bash.in $(common-objpfx)soversions.mk \
|
||||||
|
|
||||||
|
$(objpfx)sprof: $(libdl)
|
||||||
|
|
||||||
|
+$(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)
|
||||||
|
+
|
||||||
|
$(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
|
||||||
|
SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"'
|
||||||
|
CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
|
211
var/spack/repos/builtin/packages/glibc/95f5a9a-2.15.patch
Normal file
211
var/spack/repos/builtin/packages/glibc/95f5a9a-2.15.patch
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Joseph Myers <joseph@codesourcery.com>
|
||||||
|
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
||||||
|
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
||||||
|
|
||||||
|
diff --git a/Makeconfig b/Makeconfig
|
||||||
|
index 8195245052..b23cee8723 100644
|
||||||
|
--- a/Makeconfig
|
||||||
|
+++ b/Makeconfig
|
||||||
|
@@ -447,7 +447,7 @@ endif
|
||||||
|
|
||||||
|
# Command for linking programs with the C library.
|
||||||
|
ifndef +link
|
||||||
|
-+link = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||||
|
++link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||||
|
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||||
|
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
|
||||||
|
$(addprefix $(csu-objpfx),$(start-installed-name)) \
|
||||||
|
@@ -456,7 +456,10 @@ ifndef +link
|
||||||
|
$(start-installed-name))\
|
||||||
|
$(+preinit) $(link-extra-libs) \
|
||||||
|
$(common-objpfx)libc% $(+postinit),$^) \
|
||||||
|
- $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
|
||||||
|
+ $(link-extra-libs)
|
||||||
|
++link-after-libc = $(+postctor) $(+postinit)
|
||||||
|
++link = $(+link-before-libc) $(link-libc) $(+link-after-libc)
|
||||||
|
++link-tests = $(+link-before-libc) $(link-libc-tests) $(+link-after-libc)
|
||||||
|
endif
|
||||||
|
# Command for linking PIE programs with the C library.
|
||||||
|
ifndef +link-pie
|
||||||
|
@@ -473,7 +476,7 @@ ifndef +link-pie
|
||||||
|
endif
|
||||||
|
# Command for statically linking programs with the C library.
|
||||||
|
ifndef +link-static
|
||||||
|
-+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||||
|
++link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||||
|
$(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||||
|
$(addprefix $(csu-objpfx),$(static-start-installed-name)) \
|
||||||
|
$(+preinit) $(+prector) \
|
||||||
|
@@ -481,7 +484,12 @@ ifndef +link-static
|
||||||
|
$(start-installed-name))\
|
||||||
|
$(+preinit) $(link-extra-libs-static) \
|
||||||
|
$(common-objpfx)libc% $(+postinit),$^) \
|
||||||
|
- $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit)
|
||||||
|
+ $(link-extra-libs-static) $(link-libc-static)
|
||||||
|
++link-static-after-libc = $(+postctor) $(+postinit)
|
||||||
|
++link-static = $(+link-static-before-libc) $(link-libc-static) \
|
||||||
|
+ $(+link-static-after-libc)
|
||||||
|
++link-static-tests = $(+link-static-before-libc) $(link-libc-static-tests) \
|
||||||
|
+ $(+link-static-after-libc)
|
||||||
|
endif
|
||||||
|
# Command for statically linking bounded-pointer programs with the C library.
|
||||||
|
ifndef +link-bounded
|
||||||
|
@@ -506,10 +514,12 @@ ifeq ($(elf),yes)
|
||||||
|
# We need the versioned name of libc.so in the deps of $(others) et al
|
||||||
|
# so that the symlink to libc.so is created before anything tries to
|
||||||
|
# run the linked programs.
|
||||||
|
-link-libc = -Wl,-rpath-link=$(rpath-link) \
|
||||||
|
+link-libc-before-gnulib = -Wl,-rpath-link=$(rpath-link) \
|
||||||
|
$(common-objpfx)libc.so$(libc.so-version) \
|
||||||
|
$(common-objpfx)$(patsubst %,$(libtype.oS),c) \
|
||||||
|
- $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed) $(gnulib)
|
||||||
|
+ $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed)
|
||||||
|
+link-libc = $(link-libc-before-gnulib) $(gnulib)
|
||||||
|
+link-libc-tests = $(link-libc-before-gnulib) $(gnulib-tests)
|
||||||
|
# This is how to find at build-time things that will be installed there.
|
||||||
|
rpath-dirs = math elf dlfcn nss nis rt resolv crypt
|
||||||
|
endif
|
||||||
|
@@ -520,6 +530,7 @@ else
|
||||||
|
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
|
||||||
|
resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv)
|
||||||
|
link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
|
||||||
|
+link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
@@ -548,6 +559,7 @@ endif
|
||||||
|
# The static libraries.
|
||||||
|
ifeq (yes,$(build-static))
|
||||||
|
link-libc-static = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib) -Wl,--end-group
|
||||||
|
+link-libc-static-tests = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib-tests) -Wl,--end-group
|
||||||
|
else
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
# We can try to link the programs with lib*_pic.a...
|
||||||
|
@@ -567,8 +579,12 @@ ifneq ($(have-as-needed),yes)
|
||||||
|
else
|
||||||
|
libgcc_eh := -Wl,--as-needed -lgcc_s$(libgcc_s_suffix) $(libunwind) -Wl,--no-as-needed
|
||||||
|
endif
|
||||||
|
-gnulib := -lgcc $(libgcc_eh)
|
||||||
|
-static-gnulib := -lgcc -lgcc_eh $(libunwind)
|
||||||
|
+gnulib-arch =
|
||||||
|
+gnulib = -lgcc $(gnulib-arch)
|
||||||
|
+gnulib-tests := -lgcc $(libgcc_eh)
|
||||||
|
+static-gnulib-arch =
|
||||||
|
+static-gnulib = -lgcc $(static-gnulib-arch)
|
||||||
|
+static-gnulib-tests := -lgcc -lgcc_eh $(libunwind)
|
||||||
|
libc.so-gnulib := -lgcc
|
||||||
|
endif
|
||||||
|
ifeq ($(elf),yes)
|
||||||
|
diff --git a/Rules b/Rules
|
||||||
|
index 00f03df6da..4a31d2905c 100644
|
||||||
|
--- a/Rules
|
||||||
|
+++ b/Rules
|
||||||
|
@@ -104,29 +104,46 @@ xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-bp.out)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(build-programs),yes)
|
||||||
|
-binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
|
||||||
|
-binaries-static = $(others-static) $(tests-static) $(xtests-static)
|
||||||
|
+binaries-all-notests = $(others) $(sysdep-others)
|
||||||
|
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all = $(binaries-all-notests) $(binaries-all-tests)
|
||||||
|
+binaries-static-notests = $(others-static)
|
||||||
|
+binaries-static-tests = $(tests-static) $(xtests-static)
|
||||||
|
+binaries-static = $(binaries-static-notests) $(binaries-static-tests)
|
||||||
|
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||||
|
binaries-pie = $(others-pie) $(tests-pie) $(xtests-pie)
|
||||||
|
else
|
||||||
|
binaries-pie =
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
-binaries-all = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all-notests =
|
||||||
|
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all = $(binaries-all-tests)
|
||||||
|
+binaries-static-notests =
|
||||||
|
+binaries-static-tests =
|
||||||
|
binaries-static =
|
||||||
|
binaries-pie =
|
||||||
|
endif
|
||||||
|
|
||||||
|
-binaries-shared = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||||
|
- $(binaries-all))
|
||||||
|
+binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||||
|
+ $(binaries-all-tests))
|
||||||
|
+binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||||
|
+ $(binaries-all-notests))
|
||||||
|
|
||||||
|
-ifneq "$(strip $(binaries-shared))" ""
|
||||||
|
-$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
||||||
|
+ifneq "$(strip $(binaries-shared-notests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \
|
||||||
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||||
|
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
$(+link)
|
||||||
|
endif
|
||||||
|
|
||||||
|
+ifneq "$(strip $(binaries-shared-tests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \
|
||||||
|
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||||
|
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
+ $(+link-tests)
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
ifneq "$(strip $(binaries-pie))" ""
|
||||||
|
$(addprefix $(objpfx),$(binaries-pie)): %: %.o \
|
||||||
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||||
|
@@ -134,13 +151,20 @@ $(addprefix $(objpfx),$(binaries-pie)): %: %.o \
|
||||||
|
$(+link-pie)
|
||||||
|
endif
|
||||||
|
|
||||||
|
-ifneq "$(strip $(binaries-static))" ""
|
||||||
|
-$(addprefix $(objpfx),$(binaries-static)): %: %.o \
|
||||||
|
+ifneq "$(strip $(binaries-static-notests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \
|
||||||
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
|
||||||
|
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
$(+link-static)
|
||||||
|
endif
|
||||||
|
|
||||||
|
+ifneq "$(strip $(binaries-static-tests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \
|
||||||
|
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \
|
||||||
|
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
+ $(+link-static-tests)
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
ifeq ($(build-bounded),yes)
|
||||||
|
binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs))
|
||||||
|
$(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \
|
||||||
|
diff --git a/elf/Makefile b/elf/Makefile
|
||||||
|
index f20f52dee1..64555b9243 100644
|
||||||
|
--- a/elf/Makefile
|
||||||
|
+++ b/elf/Makefile
|
||||||
|
@@ -156,6 +156,8 @@ others = sprof sln pldd
|
||||||
|
install-bin = sprof pldd
|
||||||
|
others-static = sln
|
||||||
|
install-rootsbin = sln
|
||||||
|
+sln-modules := static-stubs
|
||||||
|
+extra-objs += $(sln-modules:=.o)
|
||||||
|
|
||||||
|
ifeq (yes,$(use-ldconfig))
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
@@ -163,7 +165,7 @@ others-static += ldconfig
|
||||||
|
others += ldconfig
|
||||||
|
install-rootsbin += ldconfig
|
||||||
|
|
||||||
|
-ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
|
||||||
|
+ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs
|
||||||
|
extra-objs += $(ldconfig-modules:=.o)
|
||||||
|
|
||||||
|
pldd-modules := xmalloc
|
||||||
|
@@ -495,6 +497,8 @@ $(objpfx)ldd: ldd.bash.in $(common-objpfx)soversions.mk \
|
||||||
|
|
||||||
|
$(objpfx)sprof: $(libdl)
|
||||||
|
|
||||||
|
+$(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)
|
||||||
|
+
|
||||||
|
$(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
|
||||||
|
|
||||||
|
$(objpfx)pldd: $(pldd-modules:%=$(objpfx)%.o)
|
214
var/spack/repos/builtin/packages/glibc/95f5a9a-2.16.patch
Normal file
214
var/spack/repos/builtin/packages/glibc/95f5a9a-2.16.patch
Normal file
@ -0,0 +1,214 @@
|
|||||||
|
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Joseph Myers <joseph@codesourcery.com>
|
||||||
|
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
||||||
|
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
||||||
|
|
||||||
|
diff --git a/Makeconfig b/Makeconfig
|
||||||
|
index 417fa508a6..c860e68cdd 100644
|
||||||
|
--- a/Makeconfig
|
||||||
|
+++ b/Makeconfig
|
||||||
|
@@ -415,9 +415,9 @@ LDFLAGS.so += $(hashstyle-LDFLAGS)
|
||||||
|
LDFLAGS-rtld += $(hashstyle-LDFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
-# Command for linking programs with the C library.
|
||||||
|
+# Commands for linking programs with the C library.
|
||||||
|
ifndef +link
|
||||||
|
-+link = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||||
|
++link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||||
|
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||||
|
$(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
|
||||||
|
$(addprefix $(csu-objpfx),$(start-installed-name)) \
|
||||||
|
@@ -426,7 +426,10 @@ ifndef +link
|
||||||
|
$(start-installed-name))\
|
||||||
|
$(+preinit) $(link-extra-libs) \
|
||||||
|
$(common-objpfx)libc% $(+postinit),$^) \
|
||||||
|
- $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
|
||||||
|
+ $(link-extra-libs)
|
||||||
|
++link-after-libc = $(+postctor) $(+postinit)
|
||||||
|
++link = $(+link-before-libc) $(link-libc) $(+link-after-libc)
|
||||||
|
++link-tests = $(+link-before-libc) $(link-libc-tests) $(+link-after-libc)
|
||||||
|
endif
|
||||||
|
# Command for linking PIE programs with the C library.
|
||||||
|
ifndef +link-pie
|
||||||
|
@@ -443,7 +446,7 @@ ifndef +link-pie
|
||||||
|
endif
|
||||||
|
# Command for statically linking programs with the C library.
|
||||||
|
ifndef +link-static
|
||||||
|
-+link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||||
|
++link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \
|
||||||
|
$(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
|
||||||
|
$(addprefix $(csu-objpfx),$(static-start-installed-name)) \
|
||||||
|
$(+preinit) $(+prector) \
|
||||||
|
@@ -451,7 +454,12 @@ ifndef +link-static
|
||||||
|
$(start-installed-name))\
|
||||||
|
$(+preinit) $(link-extra-libs-static) \
|
||||||
|
$(common-objpfx)libc% $(+postinit),$^) \
|
||||||
|
- $(link-extra-libs-static) $(link-libc-static) $(+postctor) $(+postinit)
|
||||||
|
+ $(link-extra-libs-static) $(link-libc-static)
|
||||||
|
++link-static-after-libc = $(+postctor) $(+postinit)
|
||||||
|
++link-static = $(+link-static-before-libc) $(link-libc-static) \
|
||||||
|
+ $(+link-static-after-libc)
|
||||||
|
++link-static-tests = $(+link-static-before-libc) $(link-libc-static-tests) \
|
||||||
|
+ $(+link-static-after-libc)
|
||||||
|
endif
|
||||||
|
# Command for statically linking bounded-pointer programs with the C library.
|
||||||
|
ifndef +link-bounded
|
||||||
|
@@ -475,10 +483,12 @@ ifeq (yes,$(build-shared))
|
||||||
|
# We need the versioned name of libc.so in the deps of $(others) et al
|
||||||
|
# so that the symlink to libc.so is created before anything tries to
|
||||||
|
# run the linked programs.
|
||||||
|
-link-libc = -Wl,-rpath-link=$(rpath-link) \
|
||||||
|
+link-libc-before-gnulib = -Wl,-rpath-link=$(rpath-link) \
|
||||||
|
$(common-objpfx)libc.so$(libc.so-version) \
|
||||||
|
$(common-objpfx)$(patsubst %,$(libtype.oS),c) \
|
||||||
|
- $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed) $(gnulib)
|
||||||
|
+ $(as-needed) $(common-objpfx)elf/ld.so $(no-as-needed)
|
||||||
|
+link-libc = $(link-libc-before-gnulib) $(gnulib)
|
||||||
|
+link-libc-tests = $(link-libc-before-gnulib) $(gnulib-tests)
|
||||||
|
# This is how to find at build-time things that will be installed there.
|
||||||
|
rpath-dirs = math elf dlfcn nss nis rt resolv crypt
|
||||||
|
rpath-link = \
|
||||||
|
@@ -488,6 +498,7 @@ else
|
||||||
|
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
|
||||||
|
resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv)
|
||||||
|
link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
|
||||||
|
+link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
@@ -513,6 +524,7 @@ endif
|
||||||
|
|
||||||
|
# The static libraries.
|
||||||
|
link-libc-static = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib) -Wl,--end-group
|
||||||
|
+link-libc-static-tests = -Wl,--start-group $(common-objpfx)libc.a $(static-gnulib-tests) -Wl,--end-group
|
||||||
|
link-libc-bounded = $(common-objpfx)libc_b.a $(gnulib) $(common-objpfx)libc_b.a
|
||||||
|
|
||||||
|
ifndef gnulib
|
||||||
|
@@ -522,8 +534,12 @@ else
|
||||||
|
libunwind = -lunwind
|
||||||
|
endif
|
||||||
|
libgcc_eh := -Wl,--as-needed -lgcc_s $(libunwind) -Wl,--no-as-needed
|
||||||
|
-gnulib := -lgcc $(libgcc_eh)
|
||||||
|
-static-gnulib := -lgcc -lgcc_eh $(libunwind)
|
||||||
|
+gnulib-arch =
|
||||||
|
+gnulib = -lgcc $(gnulib-arch)
|
||||||
|
+gnulib-tests := -lgcc $(libgcc_eh)
|
||||||
|
+static-gnulib-arch =
|
||||||
|
+static-gnulib = -lgcc $(static-gnulib-arch)
|
||||||
|
+static-gnulib-tests := -lgcc -lgcc_eh $(libunwind)
|
||||||
|
libc.so-gnulib := -lgcc
|
||||||
|
endif
|
||||||
|
+preinit = $(addprefix $(csu-objpfx),crti.o)
|
||||||
|
diff --git a/Rules b/Rules
|
||||||
|
index 3c61a2933b..be3a738574 100644
|
||||||
|
--- a/Rules
|
||||||
|
+++ b/Rules
|
||||||
|
@@ -103,29 +103,46 @@ xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-bp.out)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(build-programs),yes)
|
||||||
|
-binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
|
||||||
|
-binaries-static = $(others-static) $(tests-static) $(xtests-static)
|
||||||
|
+binaries-all-notests = $(others) $(sysdep-others)
|
||||||
|
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all = $(binaries-all-notests) $(binaries-all-tests)
|
||||||
|
+binaries-static-notests = $(others-static)
|
||||||
|
+binaries-static-tests = $(tests-static) $(xtests-static)
|
||||||
|
+binaries-static = $(binaries-static-notests) $(binaries-static-tests)
|
||||||
|
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||||
|
binaries-pie = $(others-pie) $(tests-pie) $(xtests-pie)
|
||||||
|
else
|
||||||
|
binaries-pie =
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
-binaries-all = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all-notests =
|
||||||
|
+binaries-all-tests = $(tests) $(xtests) $(test-srcs)
|
||||||
|
+binaries-all = $(binaries-all-tests)
|
||||||
|
+binaries-static-notests =
|
||||||
|
+binaries-static-tests =
|
||||||
|
binaries-static =
|
||||||
|
binaries-pie =
|
||||||
|
endif
|
||||||
|
|
||||||
|
-binaries-shared = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||||
|
- $(binaries-all))
|
||||||
|
+binaries-shared-tests = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||||
|
+ $(binaries-all-tests))
|
||||||
|
+binaries-shared-notests = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||||
|
+ $(binaries-all-notests))
|
||||||
|
|
||||||
|
-ifneq "$(strip $(binaries-shared))" ""
|
||||||
|
-$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
||||||
|
+ifneq "$(strip $(binaries-shared-notests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-shared-notests)): %: %.o \
|
||||||
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||||
|
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
$(+link)
|
||||||
|
endif
|
||||||
|
|
||||||
|
+ifneq "$(strip $(binaries-shared-tests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-shared-tests)): %: %.o \
|
||||||
|
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||||
|
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
+ $(+link-tests)
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
ifneq "$(strip $(binaries-pie))" ""
|
||||||
|
$(addprefix $(objpfx),$(binaries-pie)): %: %.o \
|
||||||
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
|
||||||
|
@@ -133,13 +150,20 @@ $(addprefix $(objpfx),$(binaries-pie)): %: %.o \
|
||||||
|
$(+link-pie)
|
||||||
|
endif
|
||||||
|
|
||||||
|
-ifneq "$(strip $(binaries-static))" ""
|
||||||
|
-$(addprefix $(objpfx),$(binaries-static)): %: %.o \
|
||||||
|
+ifneq "$(strip $(binaries-static-notests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-static-notests)): %: %.o \
|
||||||
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
|
||||||
|
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
$(+link-static)
|
||||||
|
endif
|
||||||
|
|
||||||
|
+ifneq "$(strip $(binaries-static-tests))" ""
|
||||||
|
+$(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \
|
||||||
|
+ $(sort $(filter $(common-objpfx)lib%,$(link-libc-static-tests))) \
|
||||||
|
+ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
|
||||||
|
+ $(+link-static-tests)
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
ifeq ($(build-bounded),yes)
|
||||||
|
binaries-bounded = $(addsuffix -bp,$(tests) $(xtests) $(test-srcs))
|
||||||
|
$(addprefix $(objpfx),$(binaries-bounded)): %-bp: %.ob \
|
||||||
|
diff --git a/elf/Makefile b/elf/Makefile
|
||||||
|
index 0c26ce545a..90541991d2 100644
|
||||||
|
--- a/elf/Makefile
|
||||||
|
+++ b/elf/Makefile
|
||||||
|
@@ -71,6 +71,8 @@ others = sprof sln pldd
|
||||||
|
install-bin = sprof pldd
|
||||||
|
others-static = sln
|
||||||
|
install-rootsbin = sln
|
||||||
|
+sln-modules := static-stubs
|
||||||
|
+extra-objs += $(sln-modules:=.o)
|
||||||
|
|
||||||
|
ifeq (yes,$(use-ldconfig))
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
@@ -78,7 +80,7 @@ others-static += ldconfig
|
||||||
|
others += ldconfig
|
||||||
|
install-rootsbin += ldconfig
|
||||||
|
|
||||||
|
-ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
|
||||||
|
+ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs
|
||||||
|
extra-objs += $(ldconfig-modules:=.o)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
@@ -411,6 +413,8 @@ $(objpfx)ldd: ldd.bash.in $(common-objpfx)soversions.mk \
|
||||||
|
|
||||||
|
$(objpfx)sprof: $(libdl)
|
||||||
|
|
||||||
|
+$(objpfx)sln: $(sln-modules:%=$(objpfx)%.o)
|
||||||
|
+
|
||||||
|
$(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o)
|
||||||
|
|
||||||
|
$(objpfx)pldd: $(pldd-modules:%=$(objpfx)%.o)
|
57
var/spack/repos/builtin/packages/glibc/95f5a9a-stub.patch
Normal file
57
var/spack/repos/builtin/packages/glibc/95f5a9a-stub.patch
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
From 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Joseph Myers <joseph@codesourcery.com>
|
||||||
|
Date: Tue, 3 Jul 2012 19:14:59 +0000
|
||||||
|
Subject: [PATCH] Avoid use of libgcc_s and libgcc_eh when building glibc.
|
||||||
|
|
||||||
|
diff --git a/elf/static-stubs.c b/elf/static-stubs.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..6c5eebc3fb
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/elf/static-stubs.c
|
||||||
|
@@ -0,0 +1,46 @@
|
||||||
|
+/* Stub implementations of functions to link into statically linked
|
||||||
|
+ programs without needing libgcc_eh.
|
||||||
|
+ Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
|
+ This file is part of the GNU C Library.
|
||||||
|
+
|
||||||
|
+ The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
+ modify it under the terms of the GNU Lesser General Public
|
||||||
|
+ License as published by the Free Software Foundation; either
|
||||||
|
+ version 2.1 of the License, or (at your option) any later version.
|
||||||
|
+
|
||||||
|
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
+ Lesser General Public License for more details.
|
||||||
|
+
|
||||||
|
+ You should have received a copy of the GNU Lesser General Public
|
||||||
|
+ License along with the GNU C Library; if not, see
|
||||||
|
+ <http://www.gnu.org/licenses/>. */
|
||||||
|
+
|
||||||
|
+/* Avoid backtrace (and so _Unwind_Backtrace) dependencies from
|
||||||
|
+ sysdeps/unix/sysv/linux/libc_fatal.c. */
|
||||||
|
+#include <sysdeps/posix/libc_fatal.c>
|
||||||
|
+
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+#include <unwind.h>
|
||||||
|
+
|
||||||
|
+/* These programs do not use thread cancellation, so _Unwind_Resume
|
||||||
|
+ and the personality routine are never actually called. */
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+_Unwind_Resume (struct _Unwind_Exception *exc __attribute__ ((unused)))
|
||||||
|
+{
|
||||||
|
+ abort ();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+_Unwind_Reason_Code
|
||||||
|
+__gcc_personality_v0 (int version __attribute__ ((unused)),
|
||||||
|
+ _Unwind_Action actions __attribute__ ((unused)),
|
||||||
|
+ _Unwind_Exception_Class exception_class
|
||||||
|
+ __attribute__ ((unused)),
|
||||||
|
+ struct _Unwind_Exception *ue_header
|
||||||
|
+ __attribute__ ((unused)),
|
||||||
|
+ struct _Unwind_Context *context __attribute__ ((unused)))
|
||||||
|
+{
|
||||||
|
+ abort ();
|
||||||
|
+}
|
176
var/spack/repos/builtin/packages/glibc/965cb60-2.5.patch
Normal file
176
var/spack/repos/builtin/packages/glibc/965cb60-2.5.patch
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
diff --git a/csu/libc-start.c b/csu/libc-start.c
|
||||||
|
index 194db6b1ec..f85ec9604e 100644
|
||||||
|
--- a/csu/libc-start.c
|
||||||
|
+++ b/csu/libc-start.c
|
||||||
|
@@ -151,8 +151,8 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
|
||||||
|
|
||||||
|
# ifndef SHARED
|
||||||
|
/* Set up the stack checker's canary. */
|
||||||
|
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||||
|
-# ifdef THREAD_SET_STACK_GUARD
|
||||||
|
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||||
|
+# ifdef THREAD_SET_STACK_GUARD
|
||||||
|
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||||
|
# else
|
||||||
|
__stack_chk_guard = stack_chk_guard;
|
||||||
|
diff --git a/elf/dl-support.c b/elf/dl-support.c
|
||||||
|
index 4b7be6bc27..f62867abf1 100644
|
||||||
|
--- a/elf/dl-support.c
|
||||||
|
+++ b/elf/dl-support.c
|
||||||
|
@@ -84,6 +84,9 @@ struct r_scope_elem _dl_initial_searchlist;
|
||||||
|
int _dl_starting_up = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Random data provided by the kernel. */
|
||||||
|
+void *_dl_random;
|
||||||
|
+
|
||||||
|
/* Get architecture specific initializer. */
|
||||||
|
#include <dl-procinfo.c>
|
||||||
|
|
||||||
|
@@ -218,6 +221,9 @@ _dl_aux_init (ElfW(auxv_t) *av)
|
||||||
|
__libc_enable_secure = av->a_un.a_val;
|
||||||
|
__libc_enable_secure_decided = 1;
|
||||||
|
break;
|
||||||
|
+ case AT_RANDOM:
|
||||||
|
+ _dl_random = (void *) av->a_un.a_val;
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
if (seen == 0xf)
|
||||||
|
{
|
||||||
|
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
|
||||||
|
index 68e08f480a..133ba0d29f 100644
|
||||||
|
--- a/elf/dl-sysdep.c
|
||||||
|
+++ b/elf/dl-sysdep.c
|
||||||
|
@@ -62,6 +62,7 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
|
||||||
|
void *__libc_stack_end attribute_relro = NULL;
|
||||||
|
rtld_hidden_data_def(__libc_stack_end)
|
||||||
|
static ElfW(auxv_t) *_dl_auxv attribute_relro;
|
||||||
|
+void *_dl_random attribute_relro = NULL;
|
||||||
|
|
||||||
|
#ifndef DL_FIND_ARG_COMPONENTS
|
||||||
|
# define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
|
||||||
|
@@ -173,6 +174,9 @@ _dl_sysdep_start (void **start_argptr,
|
||||||
|
GLRO(dl_sysinfo_dso) = (void *) av->a_un.a_val;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
+ case AT_RANDOM:
|
||||||
|
+ _dl_random = (void *) av->a_un.a_val;
|
||||||
|
+ break;
|
||||||
|
#ifdef DL_PLATFORM_AUXV
|
||||||
|
DL_PLATFORM_AUXV
|
||||||
|
#endif
|
||||||
|
@@ -293,6 +297,7 @@ _dl_show_auxv (void)
|
||||||
|
[AT_SECURE - 2] = { "AT_SECURE: ", dec },
|
||||||
|
[AT_SYSINFO - 2] = { "AT_SYSINFO: 0x", hex },
|
||||||
|
[AT_SYSINFO_EHDR - 2] = { "AT_SYSINFO_EHDR: 0x", hex },
|
||||||
|
+ [AT_RANDOM - 2] = { "AT_RANDOM: 0x", hex },
|
||||||
|
};
|
||||||
|
unsigned int idx = (unsigned int) (av->a_type - 2);
|
||||||
|
|
||||||
|
diff --git a/elf/rtld.c b/elf/rtld.c
|
||||||
|
index a357a46987..a02a319677 100644
|
||||||
|
--- a/elf/rtld.c
|
||||||
|
+++ b/elf/rtld.c
|
||||||
|
@@ -1837,7 +1837,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Set up the stack checker's canary. */
|
||||||
|
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||||
|
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||||
|
#ifdef THREAD_SET_STACK_GUARD
|
||||||
|
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||||
|
#else
|
||||||
|
diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h
|
||||||
|
index 60b84a900d..02ec28d424 100644
|
||||||
|
--- a/sysdeps/generic/dl-osinfo.h
|
||||||
|
+++ b/sysdeps/generic/dl-osinfo.h
|
||||||
|
@@ -1,12 +1,29 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
-_dl_setup_stack_chk_guard (void)
|
||||||
|
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||||
|
{
|
||||||
|
- uintptr_t ret = 0;
|
||||||
|
- unsigned char *p = (unsigned char *) &ret;
|
||||||
|
- p[sizeof (ret) - 1] = 255;
|
||||||
|
- p[sizeof (ret) - 2] = '\n';
|
||||||
|
- p[0] = 0;
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ if (dl_random == NULL)
|
||||||
|
+ {
|
||||||
|
+ ret = 0;
|
||||||
|
+ unsigned char *p = (unsigned char *) &ret;
|
||||||
|
+ p[sizeof (ret) - 1] = 255;
|
||||||
|
+ p[sizeof (ret) - 2] = '\n';
|
||||||
|
+ p[0] = 0;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ memcmp (&ret, dl_random, sizeof (ret));
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||||
|
+{
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ if (dl_random == NULL)
|
||||||
|
+ ret = stack_chk_guard;
|
||||||
|
+ else
|
||||||
|
+ memcmp (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
|
||||||
|
index eee6141c6a..54789c0639 100644
|
||||||
|
--- a/sysdeps/generic/ldsodefs.h
|
||||||
|
+++ b/sysdeps/generic/ldsodefs.h
|
||||||
|
@@ -740,6 +740,9 @@ weak_extern (_dl_starting_up)
|
||||||
|
extern int _dl_starting_up_internal attribute_hidden;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Random data provided by the kernel. */
|
||||||
|
+extern void *_dl_random attribute_hidden;
|
||||||
|
+
|
||||||
|
/* OS-dependent function to open the zero-fill device. */
|
||||||
|
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
index 0738501a56..d796651ff4 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
@@ -159,22 +159,20 @@ _dl_discover_osversion (void)
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
-_dl_setup_stack_chk_guard (void)
|
||||||
|
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||||
|
{
|
||||||
|
uintptr_t ret;
|
||||||
|
-#ifdef ENABLE_STACKGUARD_RANDOMIZE
|
||||||
|
- int fd = __open ("/dev/urandom", O_RDONLY);
|
||||||
|
- if (fd >= 0)
|
||||||
|
- {
|
||||||
|
- ssize_t reslen = __read (fd, &ret, sizeof (ret));
|
||||||
|
- __close (fd);
|
||||||
|
- if (reslen == (ssize_t) sizeof (ret))
|
||||||
|
- return ret;
|
||||||
|
- }
|
||||||
|
-#endif
|
||||||
|
- ret = 0;
|
||||||
|
- unsigned char *p = (unsigned char *) &ret;
|
||||||
|
- p[sizeof (ret) - 1] = 255;
|
||||||
|
- p[sizeof (ret) - 2] = '\n';
|
||||||
|
+ /* We need in the moment only 8 bytes on 32-bit platforms and 16
|
||||||
|
+ bytes on 64-bit platforms. Therefore we can use the data
|
||||||
|
+ directly and not use the kernel-provided data to seed a PRNG. */
|
||||||
|
+ memcpy (&ret, dl_random, sizeof (ret));
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||||
|
+{
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||||
|
return ret;
|
||||||
|
}
|
176
var/spack/repos/builtin/packages/glibc/965cb60-2.6.patch
Normal file
176
var/spack/repos/builtin/packages/glibc/965cb60-2.6.patch
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
diff --git a/csu/libc-start.c b/csu/libc-start.c
|
||||||
|
index 0ed993651e..a8b1be8c7d 100644
|
||||||
|
--- a/csu/libc-start.c
|
||||||
|
+++ b/csu/libc-start.c
|
||||||
|
@@ -142,8 +142,8 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
|
||||||
|
|
||||||
|
# ifndef SHARED
|
||||||
|
/* Set up the stack checker's canary. */
|
||||||
|
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||||
|
-# ifdef THREAD_SET_STACK_GUARD
|
||||||
|
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||||
|
+# ifdef THREAD_SET_STACK_GUARD
|
||||||
|
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||||
|
# else
|
||||||
|
__stack_chk_guard = stack_chk_guard;
|
||||||
|
diff --git a/elf/dl-support.c b/elf/dl-support.c
|
||||||
|
index 2c11ac6881..321ed07a18 100644
|
||||||
|
--- a/elf/dl-support.c
|
||||||
|
+++ b/elf/dl-support.c
|
||||||
|
@@ -84,6 +84,9 @@ struct r_scope_elem _dl_initial_searchlist;
|
||||||
|
int _dl_starting_up = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Random data provided by the kernel. */
|
||||||
|
+void *_dl_random;
|
||||||
|
+
|
||||||
|
/* Get architecture specific initializer. */
|
||||||
|
#include <dl-procinfo.c>
|
||||||
|
|
||||||
|
@@ -216,6 +219,9 @@ _dl_aux_init (ElfW(auxv_t) *av)
|
||||||
|
__libc_enable_secure = av->a_un.a_val;
|
||||||
|
__libc_enable_secure_decided = 1;
|
||||||
|
break;
|
||||||
|
+ case AT_RANDOM:
|
||||||
|
+ _dl_random = (void *) av->a_un.a_val;
|
||||||
|
+ break;
|
||||||
|
# ifdef DL_PLATFORM_AUXV
|
||||||
|
DL_PLATFORM_AUXV
|
||||||
|
# endif
|
||||||
|
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
|
||||||
|
index 85e331a90f..6ce20b5150 100644
|
||||||
|
--- a/elf/dl-sysdep.c
|
||||||
|
+++ b/elf/dl-sysdep.c
|
||||||
|
@@ -62,6 +62,7 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
|
||||||
|
void *__libc_stack_end attribute_relro = NULL;
|
||||||
|
rtld_hidden_data_def(__libc_stack_end)
|
||||||
|
static ElfW(auxv_t) *_dl_auxv attribute_relro;
|
||||||
|
+void *_dl_random attribute_relro = NULL;
|
||||||
|
|
||||||
|
#ifndef DL_FIND_ARG_COMPONENTS
|
||||||
|
# define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
|
||||||
|
@@ -173,6 +174,9 @@ _dl_sysdep_start (void **start_argptr,
|
||||||
|
GLRO(dl_sysinfo_dso) = (void *) av->a_un.a_val;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
+ case AT_RANDOM:
|
||||||
|
+ _dl_random = (void *) av->a_un.a_val;
|
||||||
|
+ break;
|
||||||
|
#ifdef DL_PLATFORM_AUXV
|
||||||
|
DL_PLATFORM_AUXV
|
||||||
|
#endif
|
||||||
|
@@ -293,6 +297,7 @@ _dl_show_auxv (void)
|
||||||
|
[AT_SECURE - 2] = { "AT_SECURE: ", dec },
|
||||||
|
[AT_SYSINFO - 2] = { "AT_SYSINFO: 0x", hex },
|
||||||
|
[AT_SYSINFO_EHDR - 2] = { "AT_SYSINFO_EHDR: 0x", hex },
|
||||||
|
+ [AT_RANDOM - 2] = { "AT_RANDOM: 0x", hex },
|
||||||
|
};
|
||||||
|
unsigned int idx = (unsigned int) (av->a_type - 2);
|
||||||
|
|
||||||
|
diff --git a/elf/rtld.c b/elf/rtld.c
|
||||||
|
index 7612a69324..e77ac43713 100644
|
||||||
|
--- a/elf/rtld.c
|
||||||
|
+++ b/elf/rtld.c
|
||||||
|
@@ -1816,7 +1816,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
|
||||||
|
tcbp = init_tls ();
|
||||||
|
|
||||||
|
/* Set up the stack checker's canary. */
|
||||||
|
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||||
|
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||||
|
#ifdef THREAD_SET_STACK_GUARD
|
||||||
|
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||||
|
#else
|
||||||
|
diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h
|
||||||
|
index 60b84a900d..02ec28d424 100644
|
||||||
|
--- a/sysdeps/generic/dl-osinfo.h
|
||||||
|
+++ b/sysdeps/generic/dl-osinfo.h
|
||||||
|
@@ -1,12 +1,29 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
-_dl_setup_stack_chk_guard (void)
|
||||||
|
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||||
|
{
|
||||||
|
- uintptr_t ret = 0;
|
||||||
|
- unsigned char *p = (unsigned char *) &ret;
|
||||||
|
- p[sizeof (ret) - 1] = 255;
|
||||||
|
- p[sizeof (ret) - 2] = '\n';
|
||||||
|
- p[0] = 0;
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ if (dl_random == NULL)
|
||||||
|
+ {
|
||||||
|
+ ret = 0;
|
||||||
|
+ unsigned char *p = (unsigned char *) &ret;
|
||||||
|
+ p[sizeof (ret) - 1] = 255;
|
||||||
|
+ p[sizeof (ret) - 2] = '\n';
|
||||||
|
+ p[0] = 0;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ memcmp (&ret, dl_random, sizeof (ret));
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||||
|
+{
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ if (dl_random == NULL)
|
||||||
|
+ ret = stack_chk_guard;
|
||||||
|
+ else
|
||||||
|
+ memcmp (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
|
||||||
|
index aefd105f0a..929b91b56c 100644
|
||||||
|
--- a/sysdeps/generic/ldsodefs.h
|
||||||
|
+++ b/sysdeps/generic/ldsodefs.h
|
||||||
|
@@ -726,6 +726,9 @@ weak_extern (_dl_starting_up)
|
||||||
|
extern int _dl_starting_up_internal attribute_hidden;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Random data provided by the kernel. */
|
||||||
|
+extern void *_dl_random attribute_hidden;
|
||||||
|
+
|
||||||
|
/* OS-dependent function to open the zero-fill device. */
|
||||||
|
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
index 0738501a56..d796651ff4 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
@@ -159,22 +159,20 @@ _dl_discover_osversion (void)
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
-_dl_setup_stack_chk_guard (void)
|
||||||
|
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||||
|
{
|
||||||
|
uintptr_t ret;
|
||||||
|
-#ifdef ENABLE_STACKGUARD_RANDOMIZE
|
||||||
|
- int fd = __open ("/dev/urandom", O_RDONLY);
|
||||||
|
- if (fd >= 0)
|
||||||
|
- {
|
||||||
|
- ssize_t reslen = __read (fd, &ret, sizeof (ret));
|
||||||
|
- __close (fd);
|
||||||
|
- if (reslen == (ssize_t) sizeof (ret))
|
||||||
|
- return ret;
|
||||||
|
- }
|
||||||
|
-#endif
|
||||||
|
- ret = 0;
|
||||||
|
- unsigned char *p = (unsigned char *) &ret;
|
||||||
|
- p[sizeof (ret) - 1] = 255;
|
||||||
|
- p[sizeof (ret) - 2] = '\n';
|
||||||
|
+ /* We need in the moment only 8 bytes on 32-bit platforms and 16
|
||||||
|
+ bytes on 64-bit platforms. Therefore we can use the data
|
||||||
|
+ directly and not use the kernel-provided data to seed a PRNG. */
|
||||||
|
+ memcpy (&ret, dl_random, sizeof (ret));
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||||
|
+{
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||||
|
return ret;
|
||||||
|
}
|
174
var/spack/repos/builtin/packages/glibc/965cb60-2.7.patch
Normal file
174
var/spack/repos/builtin/packages/glibc/965cb60-2.7.patch
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
diff --git a/csu/libc-start.c b/csu/libc-start.c
|
||||||
|
index a14ed71616..8b3f436f46 100644
|
||||||
|
--- a/csu/libc-start.c
|
||||||
|
+++ b/csu/libc-start.c
|
||||||
|
@@ -140,7 +140,7 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
|
||||||
|
__pthread_initialize_minimal ();
|
||||||
|
|
||||||
|
/* Set up the stack checker's canary. */
|
||||||
|
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||||
|
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||||
|
# ifdef THREAD_SET_STACK_GUARD
|
||||||
|
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||||
|
# else
|
||||||
|
diff --git a/elf/dl-support.c b/elf/dl-support.c
|
||||||
|
index 2c11ac6881..321ed07a18 100644
|
||||||
|
--- a/elf/dl-support.c
|
||||||
|
+++ b/elf/dl-support.c
|
||||||
|
@@ -84,6 +84,9 @@ struct r_scope_elem _dl_initial_searchlist;
|
||||||
|
int _dl_starting_up = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Random data provided by the kernel. */
|
||||||
|
+void *_dl_random;
|
||||||
|
+
|
||||||
|
/* Get architecture specific initializer. */
|
||||||
|
#include <dl-procinfo.c>
|
||||||
|
|
||||||
|
@@ -216,6 +219,9 @@ _dl_aux_init (ElfW(auxv_t) *av)
|
||||||
|
__libc_enable_secure = av->a_un.a_val;
|
||||||
|
__libc_enable_secure_decided = 1;
|
||||||
|
break;
|
||||||
|
+ case AT_RANDOM:
|
||||||
|
+ _dl_random = (void *) av->a_un.a_val;
|
||||||
|
+ break;
|
||||||
|
# ifdef DL_PLATFORM_AUXV
|
||||||
|
DL_PLATFORM_AUXV
|
||||||
|
# endif
|
||||||
|
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
|
||||||
|
index 85e331a90f..6ce20b5150 100644
|
||||||
|
--- a/elf/dl-sysdep.c
|
||||||
|
+++ b/elf/dl-sysdep.c
|
||||||
|
@@ -62,6 +62,7 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
|
||||||
|
void *__libc_stack_end attribute_relro = NULL;
|
||||||
|
rtld_hidden_data_def(__libc_stack_end)
|
||||||
|
static ElfW(auxv_t) *_dl_auxv attribute_relro;
|
||||||
|
+void *_dl_random attribute_relro = NULL;
|
||||||
|
|
||||||
|
#ifndef DL_FIND_ARG_COMPONENTS
|
||||||
|
# define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
|
||||||
|
@@ -173,6 +174,9 @@ _dl_sysdep_start (void **start_argptr,
|
||||||
|
GLRO(dl_sysinfo_dso) = (void *) av->a_un.a_val;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
+ case AT_RANDOM:
|
||||||
|
+ _dl_random = (void *) av->a_un.a_val;
|
||||||
|
+ break;
|
||||||
|
#ifdef DL_PLATFORM_AUXV
|
||||||
|
DL_PLATFORM_AUXV
|
||||||
|
#endif
|
||||||
|
@@ -293,6 +297,7 @@ _dl_show_auxv (void)
|
||||||
|
[AT_SECURE - 2] = { "AT_SECURE: ", dec },
|
||||||
|
[AT_SYSINFO - 2] = { "AT_SYSINFO: 0x", hex },
|
||||||
|
[AT_SYSINFO_EHDR - 2] = { "AT_SYSINFO_EHDR: 0x", hex },
|
||||||
|
+ [AT_RANDOM - 2] = { "AT_RANDOM: 0x", hex },
|
||||||
|
};
|
||||||
|
unsigned int idx = (unsigned int) (av->a_type - 2);
|
||||||
|
|
||||||
|
diff --git a/elf/rtld.c b/elf/rtld.c
|
||||||
|
index 7612a69324..e77ac43713 100644
|
||||||
|
--- a/elf/rtld.c
|
||||||
|
+++ b/elf/rtld.c
|
||||||
|
@@ -1816,7 +1816,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
|
||||||
|
tcbp = init_tls ();
|
||||||
|
|
||||||
|
/* Set up the stack checker's canary. */
|
||||||
|
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||||
|
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||||
|
#ifdef THREAD_SET_STACK_GUARD
|
||||||
|
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||||
|
#else
|
||||||
|
diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h
|
||||||
|
index 60b84a900d..02ec28d424 100644
|
||||||
|
--- a/sysdeps/generic/dl-osinfo.h
|
||||||
|
+++ b/sysdeps/generic/dl-osinfo.h
|
||||||
|
@@ -1,12 +1,29 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
-_dl_setup_stack_chk_guard (void)
|
||||||
|
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||||
|
{
|
||||||
|
- uintptr_t ret = 0;
|
||||||
|
- unsigned char *p = (unsigned char *) &ret;
|
||||||
|
- p[sizeof (ret) - 1] = 255;
|
||||||
|
- p[sizeof (ret) - 2] = '\n';
|
||||||
|
- p[0] = 0;
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ if (dl_random == NULL)
|
||||||
|
+ {
|
||||||
|
+ ret = 0;
|
||||||
|
+ unsigned char *p = (unsigned char *) &ret;
|
||||||
|
+ p[sizeof (ret) - 1] = 255;
|
||||||
|
+ p[sizeof (ret) - 2] = '\n';
|
||||||
|
+ p[0] = 0;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ memcmp (&ret, dl_random, sizeof (ret));
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||||
|
+{
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ if (dl_random == NULL)
|
||||||
|
+ ret = stack_chk_guard;
|
||||||
|
+ else
|
||||||
|
+ memcmp (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
|
||||||
|
index 958a099b82..c4d2874085 100644
|
||||||
|
--- a/sysdeps/generic/ldsodefs.h
|
||||||
|
+++ b/sysdeps/generic/ldsodefs.h
|
||||||
|
@@ -726,6 +726,9 @@ weak_extern (_dl_starting_up)
|
||||||
|
extern int _dl_starting_up_internal attribute_hidden;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Random data provided by the kernel. */
|
||||||
|
+extern void *_dl_random attribute_hidden;
|
||||||
|
+
|
||||||
|
/* OS-dependent function to open the zero-fill device. */
|
||||||
|
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
index 082790f63b..d90f228942 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
@@ -154,22 +154,20 @@ _dl_discover_osversion (void)
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
-_dl_setup_stack_chk_guard (void)
|
||||||
|
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||||
|
{
|
||||||
|
uintptr_t ret;
|
||||||
|
-#ifdef ENABLE_STACKGUARD_RANDOMIZE
|
||||||
|
- int fd = __open ("/dev/urandom", O_RDONLY);
|
||||||
|
- if (fd >= 0)
|
||||||
|
- {
|
||||||
|
- ssize_t reslen = __read (fd, &ret, sizeof (ret));
|
||||||
|
- __close (fd);
|
||||||
|
- if (reslen == (ssize_t) sizeof (ret))
|
||||||
|
- return ret;
|
||||||
|
- }
|
||||||
|
-#endif
|
||||||
|
- ret = 0;
|
||||||
|
- unsigned char *p = (unsigned char *) &ret;
|
||||||
|
- p[sizeof (ret) - 1] = 255;
|
||||||
|
- p[sizeof (ret) - 2] = '\n';
|
||||||
|
+ /* We need in the moment only 8 bytes on 32-bit platforms and 16
|
||||||
|
+ bytes on 64-bit platforms. Therefore we can use the data
|
||||||
|
+ directly and not use the kernel-provided data to seed a PRNG. */
|
||||||
|
+ memcpy (&ret, dl_random, sizeof (ret));
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||||
|
+{
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||||
|
return ret;
|
||||||
|
}
|
205
var/spack/repos/builtin/packages/glibc/965cb60.patch
Normal file
205
var/spack/repos/builtin/packages/glibc/965cb60.patch
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
From 965cb60a21674edb8e20b1a2a41297bcd4622361 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ulrich Drepper <drepper@redhat.com>
|
||||||
|
Date: Sun, 11 Jan 2009 04:44:06 +0000
|
||||||
|
Subject: [PATCH] * sysdeps/generic/dl-osinfo.h (_dl_setup_stack_chk_guard)
|
||||||
|
|
||||||
|
diff --git a/elf/dl-support.c b/elf/dl-support.c
|
||||||
|
index 6bd573ec57..7b3ccf3d4d 100644
|
||||||
|
--- a/elf/dl-support.c
|
||||||
|
+++ b/elf/dl-support.c
|
||||||
|
@@ -84,6 +84,9 @@ struct r_scope_elem _dl_initial_searchlist;
|
||||||
|
int _dl_starting_up = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Random data provided by the kernel. */
|
||||||
|
+void *_dl_random;
|
||||||
|
+
|
||||||
|
/* Get architecture specific initializer. */
|
||||||
|
#include <dl-procinfo.c>
|
||||||
|
|
||||||
|
@@ -216,6 +219,9 @@ _dl_aux_init (ElfW(auxv_t) *av)
|
||||||
|
__libc_enable_secure = av->a_un.a_val;
|
||||||
|
__libc_enable_secure_decided = 1;
|
||||||
|
break;
|
||||||
|
+ case AT_RANDOM:
|
||||||
|
+ _dl_random = (void *) av->a_un.a_val;
|
||||||
|
+ break;
|
||||||
|
# ifdef DL_PLATFORM_AUXV
|
||||||
|
DL_PLATFORM_AUXV
|
||||||
|
# endif
|
||||||
|
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
|
||||||
|
index e6f4272a63..29ae895473 100644
|
||||||
|
--- a/elf/dl-sysdep.c
|
||||||
|
+++ b/elf/dl-sysdep.c
|
||||||
|
@@ -62,6 +62,7 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
|
||||||
|
void *__libc_stack_end attribute_relro = NULL;
|
||||||
|
rtld_hidden_data_def(__libc_stack_end)
|
||||||
|
static ElfW(auxv_t) *_dl_auxv attribute_relro;
|
||||||
|
+void *_dl_random attribute_relro = NULL;
|
||||||
|
|
||||||
|
#ifndef DL_FIND_ARG_COMPONENTS
|
||||||
|
# define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
|
||||||
|
@@ -173,6 +174,9 @@ _dl_sysdep_start (void **start_argptr,
|
||||||
|
GLRO(dl_sysinfo_dso) = (void *) av->a_un.a_val;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
+ case AT_RANDOM:
|
||||||
|
+ _dl_random = (void *) av->a_un.a_val;
|
||||||
|
+ break;
|
||||||
|
#ifdef DL_PLATFORM_AUXV
|
||||||
|
DL_PLATFORM_AUXV
|
||||||
|
#endif
|
||||||
|
@@ -294,6 +298,7 @@ _dl_show_auxv (void)
|
||||||
|
[AT_SECURE - 2] = { "AT_SECURE: ", dec },
|
||||||
|
[AT_SYSINFO - 2] = { "AT_SYSINFO: 0x", hex },
|
||||||
|
[AT_SYSINFO_EHDR - 2] = { "AT_SYSINFO_EHDR: 0x", hex },
|
||||||
|
+ [AT_RANDOM - 2] = { "AT_RANDOM: 0x", hex },
|
||||||
|
};
|
||||||
|
unsigned int idx = (unsigned int) (av->a_type - 2);
|
||||||
|
|
||||||
|
diff --git a/elf/rtld.c b/elf/rtld.c
|
||||||
|
index 46bece7fa3..60d414d637 100644
|
||||||
|
--- a/elf/rtld.c
|
||||||
|
+++ b/elf/rtld.c
|
||||||
|
@@ -841,7 +841,7 @@ static void
|
||||||
|
security_init (void)
|
||||||
|
{
|
||||||
|
/* Set up the stack checker's canary. */
|
||||||
|
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||||
|
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||||
|
#ifdef THREAD_SET_STACK_GUARD
|
||||||
|
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||||
|
#else
|
||||||
|
@@ -851,18 +851,18 @@ security_init (void)
|
||||||
|
/* Set up the pointer guard as well, if necessary. */
|
||||||
|
if (GLRO(dl_pointer_guard))
|
||||||
|
{
|
||||||
|
- // XXX If it is cheap, we should use a separate value.
|
||||||
|
- uintptr_t pointer_chk_guard = stack_chk_guard;
|
||||||
|
-#ifndef HP_TIMING_NONAVAIL
|
||||||
|
- hp_timing_t now;
|
||||||
|
- HP_TIMING_NOW (now);
|
||||||
|
- pointer_chk_guard ^= now;
|
||||||
|
-#endif
|
||||||
|
+ uintptr_t pointer_chk_guard = _dl_setup_pointer_guard (_dl_random,
|
||||||
|
+ stack_chk_guard);
|
||||||
|
#ifdef THREAD_SET_POINTER_GUARD
|
||||||
|
THREAD_SET_POINTER_GUARD (pointer_chk_guard);
|
||||||
|
#endif
|
||||||
|
__pointer_chk_guard_local = pointer_chk_guard;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ /* We do not need the _dl_random value anymore. The less
|
||||||
|
+ information we leave behind, the better, so clear the
|
||||||
|
+ variable. */
|
||||||
|
+ _dl_random = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/sysdeps/generic/dl-osinfo.h b/sysdeps/generic/dl-osinfo.h
|
||||||
|
index 60b84a900d..02ec28d424 100644
|
||||||
|
--- a/sysdeps/generic/dl-osinfo.h
|
||||||
|
+++ b/sysdeps/generic/dl-osinfo.h
|
||||||
|
@@ -1,12 +1,29 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
-_dl_setup_stack_chk_guard (void)
|
||||||
|
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||||
|
{
|
||||||
|
- uintptr_t ret = 0;
|
||||||
|
- unsigned char *p = (unsigned char *) &ret;
|
||||||
|
- p[sizeof (ret) - 1] = 255;
|
||||||
|
- p[sizeof (ret) - 2] = '\n';
|
||||||
|
- p[0] = 0;
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ if (dl_random == NULL)
|
||||||
|
+ {
|
||||||
|
+ ret = 0;
|
||||||
|
+ unsigned char *p = (unsigned char *) &ret;
|
||||||
|
+ p[sizeof (ret) - 1] = 255;
|
||||||
|
+ p[sizeof (ret) - 2] = '\n';
|
||||||
|
+ p[0] = 0;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ memcmp (&ret, dl_random, sizeof (ret));
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||||
|
+{
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ if (dl_random == NULL)
|
||||||
|
+ ret = stack_chk_guard;
|
||||||
|
+ else
|
||||||
|
+ memcmp (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
|
||||||
|
index 4d857404a3..f5606f373f 100644
|
||||||
|
--- a/sysdeps/generic/ldsodefs.h
|
||||||
|
+++ b/sysdeps/generic/ldsodefs.h
|
||||||
|
@@ -731,6 +731,9 @@ weak_extern (_dl_starting_up)
|
||||||
|
extern int _dl_starting_up_internal attribute_hidden;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* Random data provided by the kernel. */
|
||||||
|
+extern void *_dl_random attribute_hidden;
|
||||||
|
+
|
||||||
|
/* OS-dependent function to open the zero-fill device. */
|
||||||
|
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
|
||||||
|
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
index 5271d4e4de..ee8eaf20e4 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
|
||||||
|
@@ -60,22 +60,20 @@ dl_fatal (const char *str)
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
-_dl_setup_stack_chk_guard (void)
|
||||||
|
+_dl_setup_stack_chk_guard (void *dl_random)
|
||||||
|
{
|
||||||
|
uintptr_t ret;
|
||||||
|
-#ifdef ENABLE_STACKGUARD_RANDOMIZE
|
||||||
|
- int fd = __open ("/dev/urandom", O_RDONLY);
|
||||||
|
- if (fd >= 0)
|
||||||
|
- {
|
||||||
|
- ssize_t reslen = __read (fd, &ret, sizeof (ret));
|
||||||
|
- __close (fd);
|
||||||
|
- if (reslen == (ssize_t) sizeof (ret))
|
||||||
|
- return ret;
|
||||||
|
- }
|
||||||
|
-#endif
|
||||||
|
- ret = 0;
|
||||||
|
- unsigned char *p = (unsigned char *) &ret;
|
||||||
|
- p[sizeof (ret) - 1] = 255;
|
||||||
|
- p[sizeof (ret) - 2] = '\n';
|
||||||
|
+ /* We need in the moment only 8 bytes on 32-bit platforms and 16
|
||||||
|
+ bytes on 64-bit platforms. Therefore we can use the data
|
||||||
|
+ directly and not use the kernel-provided data to seed a PRNG. */
|
||||||
|
+ memcpy (&ret, dl_random, sizeof (ret));
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline uintptr_t __attribute__ ((always_inline))
|
||||||
|
+_dl_setup_pointer_guard (void *dl_random, uintptr_t stack_chk_guard)
|
||||||
|
+{
|
||||||
|
+ uintptr_t ret;
|
||||||
|
+ memcpy (&ret, (char *) dl_random + sizeof (ret), sizeof (ret));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
diff --git a/csu/libc-start.c b/csu/libc-start.c
|
||||||
|
index a14ed71616a..80b672f88d8 100644
|
||||||
|
--- a/csu/libc-start.c
|
||||||
|
+++ b/csu/libc-start.c
|
||||||
|
@@ -140,7 +140,7 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
|
||||||
|
__pthread_initialize_minimal ();
|
||||||
|
|
||||||
|
/* Set up the stack checker's canary. */
|
||||||
|
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
|
||||||
|
+ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (_dl_random);
|
||||||
|
# ifdef THREAD_SET_STACK_GUARD
|
||||||
|
THREAD_SET_STACK_GUARD (stack_chk_guard);
|
||||||
|
# else
|
@ -57,11 +57,6 @@ class Glibc(AutotoolsPackage, GNUMirrorPackage):
|
|||||||
version("2.6.1", sha256="6be7639ccad715d25eef560ce9d1637ef206fb9a162714f6ab8167fc0d971cae")
|
version("2.6.1", sha256="6be7639ccad715d25eef560ce9d1637ef206fb9a162714f6ab8167fc0d971cae")
|
||||||
version("2.5", sha256="16d3ac4e86eed75d85d80f1f214a6bd58d27f13590966b5ad0cc181df85a3493")
|
version("2.5", sha256="16d3ac4e86eed75d85d80f1f214a6bd58d27f13590966b5ad0cc181df85a3493")
|
||||||
|
|
||||||
# Spack commit 29aa7117f42f758bc537e03e4bedf66ced0accfa has older versions
|
|
||||||
# of glibc, but they are removed, because glibc < 2.17 links against
|
|
||||||
# libgcc_s and libgcc_eh, see glibc commit "Avoid use of libgcc_s and
|
|
||||||
# libgcc_eh when building glibc." 95f5a9a866695da4e038aa4e6ccbbfd5d9cf63b7
|
|
||||||
|
|
||||||
# Fix for newer GCC, related to -fno-common
|
# Fix for newer GCC, related to -fno-common
|
||||||
patch("locs.patch", when="@2.23:2.25")
|
patch("locs.patch", when="@2.23:2.25")
|
||||||
patch("locs-2.22.patch", when="@:2.22")
|
patch("locs-2.22.patch", when="@:2.22")
|
||||||
@ -75,6 +70,13 @@ class Glibc(AutotoolsPackage, GNUMirrorPackage):
|
|||||||
# rpc/types.h include issue, should be from local version, not system.
|
# rpc/types.h include issue, should be from local version, not system.
|
||||||
patch("fb21f89.patch", when="@:2.16")
|
patch("fb21f89.patch", when="@:2.16")
|
||||||
|
|
||||||
|
# Avoid linking libgcc_eh
|
||||||
|
patch("95f5a9a-stub.patch", when="@:2.16")
|
||||||
|
patch("95f5a9a-2.16.patch", when="@2.16")
|
||||||
|
patch("95f5a9a-2.15.patch", when="@2.14:2.15")
|
||||||
|
patch("95f5a9a-2.13.patch", when="@2.12:2.13")
|
||||||
|
patch("95f5a9a-2.11.patch", when="@:2.11")
|
||||||
|
|
||||||
# Use init_array (modified commit 4a531bb to unconditionally define
|
# Use init_array (modified commit 4a531bb to unconditionally define
|
||||||
# NO_CTORS_DTORS_SECTIONS)
|
# NO_CTORS_DTORS_SECTIONS)
|
||||||
patch("4a531bb.patch", when="@:2.12")
|
patch("4a531bb.patch", when="@:2.12")
|
||||||
@ -85,6 +87,14 @@ class Glibc(AutotoolsPackage, GNUMirrorPackage):
|
|||||||
# linker flag output regex
|
# linker flag output regex
|
||||||
patch("7c8a673.patch", when="@:2.9")
|
patch("7c8a673.patch", when="@:2.9")
|
||||||
|
|
||||||
|
# Use AT_RANDOM provided by the kernel instead of /dev/urandom;
|
||||||
|
# recent gcc + binutils have issues with the inline assembly in
|
||||||
|
# the fallback code, so better to use the kernel-provided value.
|
||||||
|
patch("965cb60.patch", when="@2.8:2.9")
|
||||||
|
patch("965cb60-2.7.patch", when="@2.7")
|
||||||
|
patch("965cb60-2.6.patch", when="@2.6")
|
||||||
|
patch("965cb60-2.5.patch", when="@2.5")
|
||||||
|
|
||||||
# include_next <limits.h> not working
|
# include_next <limits.h> not working
|
||||||
patch("67fbfa5.patch", when="@:2.7")
|
patch("67fbfa5.patch", when="@:2.7")
|
||||||
|
|
||||||
@ -95,6 +105,12 @@ def setup_build_environment(self, env):
|
|||||||
# for some reason CPPFLAGS -U_FORTIFY_SOURCE is not enough, it has to be CFLAGS
|
# for some reason CPPFLAGS -U_FORTIFY_SOURCE is not enough, it has to be CFLAGS
|
||||||
env.append_flags("CPPFLAGS", "-U_FORTIFY_SOURCE")
|
env.append_flags("CPPFLAGS", "-U_FORTIFY_SOURCE")
|
||||||
env.append_flags("CFLAGS", "-O2 -g -fno-stack-protector -U_FORTIFY_SOURCE")
|
env.append_flags("CFLAGS", "-O2 -g -fno-stack-protector -U_FORTIFY_SOURCE")
|
||||||
|
if self.spec.satisfies("@:2.9"):
|
||||||
|
# missing defines in elf.h after 965cb60.patch
|
||||||
|
env.append_flags("CFLAGS", "-DAT_BASE_PLATFORM=24 -DAT_RANDOM=25")
|
||||||
|
if self.spec.satisfies("@:2.6"):
|
||||||
|
# change of defaults in gcc 10
|
||||||
|
env.append_flags("CFLAGS", "-fcommon")
|
||||||
if self.spec.satisfies("@2.5"):
|
if self.spec.satisfies("@2.5"):
|
||||||
env.append_flags("CFLAGS", "-fgnu89-inline")
|
env.append_flags("CFLAGS", "-fgnu89-inline")
|
||||||
|
|
||||||
|
@ -16,6 +16,9 @@ class GmapGsnap(AutotoolsPackage):
|
|||||||
|
|
||||||
maintainers("snehring")
|
maintainers("snehring")
|
||||||
|
|
||||||
|
version(
|
||||||
|
"2023-07-20", sha256="19e70eebd9b282d8596721812d071efed188b6d5000627b9948f0486f87fe68f"
|
||||||
|
)
|
||||||
version(
|
version(
|
||||||
"2023-06-01", sha256="c7e6f6cf644e6f66f9f5a0811a49da8cc81f095a4bd7b7cef2ab10aa5b314430"
|
"2023-06-01", sha256="c7e6f6cf644e6f66f9f5a0811a49da8cc81f095a4bd7b7cef2ab10aa5b314430"
|
||||||
)
|
)
|
||||||
@ -60,12 +63,18 @@ class GmapGsnap(AutotoolsPackage):
|
|||||||
depends_on("bzip2")
|
depends_on("bzip2")
|
||||||
depends_on("perl", type="run")
|
depends_on("perl", type="run")
|
||||||
|
|
||||||
|
requires("simd=arm", when="target=aarch64", msg="simd=arm is required when building on arm")
|
||||||
|
|
||||||
variant(
|
variant(
|
||||||
"simd",
|
"simd",
|
||||||
description="CPU support.",
|
description="CPU support.",
|
||||||
values=("avx2", "sse42", "avx512", "sse2"),
|
values=(
|
||||||
|
conditional("avx2", "sse42", "avx512", "sse2", when="target=x86_64:"),
|
||||||
|
conditional("arm", when="@2023-02-17: target=aarch64:"),
|
||||||
|
conditional("avx512", "avx512bw", when="@2023-03-24: target=x86_64:"),
|
||||||
|
),
|
||||||
multi=True,
|
multi=True,
|
||||||
default="sse2",
|
default="avx2",
|
||||||
)
|
)
|
||||||
|
|
||||||
def configure(self, spec, prefix):
|
def configure(self, spec, prefix):
|
||||||
|
46
var/spack/repos/builtin/packages/gsibec/package.py
Normal file
46
var/spack/repos/builtin/packages/gsibec/package.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
|
from spack.package import *
|
||||||
|
|
||||||
|
|
||||||
|
class Gsibec(CMakePackage):
|
||||||
|
"""GSIbec: Extracts the background error covariance (BEC) model
|
||||||
|
capabilities from the Gridpoint Statistical Interpolation (GSI)
|
||||||
|
atmospheric analysis system into a library of its own."""
|
||||||
|
|
||||||
|
homepage = "https://github.com/GEOS-ESM/gsibec"
|
||||||
|
git = "https://github.com/GEOS-ESM/gsibec.git"
|
||||||
|
url = "https://github.com/GEOS-ESM/gsibec/archive/refs/tags/1.0.2.tar.gz"
|
||||||
|
|
||||||
|
maintainers("mathomp4", "danholdaway")
|
||||||
|
|
||||||
|
version("develop", branch="develop")
|
||||||
|
version("1.1.3", sha256="9cac000562250487c16608e8245d97457cc1663b1793b3833be5a76ebccb4b47")
|
||||||
|
version("1.1.2", sha256="8bdcdf1663e6071b6ad9e893a76307abc70a6de744fb75a13986e70242993ada")
|
||||||
|
version("1.0.7", sha256="53912f1f19d46f4941b377803cc2fce89a2b50d2ece7562f8fd65215a8908158")
|
||||||
|
version("1.0.6", sha256="10e2561685156bcfba35c7799732c77f9c05bd180888506a339540777db833dd")
|
||||||
|
version("1.0.5", sha256="ac0cecc59e38da7eefb5a8f27975b33752fa61a4abd3bdbbfb55578ea59d95b3")
|
||||||
|
version("1.0.4", sha256="6460e221f2a45640adab016336c070fbe3e7c4b6fc55257945bf5cdb38d5d3e2")
|
||||||
|
version("1.0.3", sha256="f104daf55705c5093a3d984073f082017bc9166f51ded36c7f7bb8adf233c916")
|
||||||
|
version("1.0.2", sha256="7dc02f1f499e0d9f2843440f517d6c8e5d10ea084cbb2567ec198ba06816bc8b")
|
||||||
|
|
||||||
|
depends_on("mpi", type=("build", "run"))
|
||||||
|
depends_on("netcdf-c +mpi", type=("build", "run"))
|
||||||
|
depends_on("netcdf-fortran", type=("build", "run"))
|
||||||
|
|
||||||
|
depends_on("lapack", type=("build", "run"))
|
||||||
|
|
||||||
|
depends_on("ecbuild", type=("build"))
|
||||||
|
depends_on("jedi-cmake", type=("build"))
|
||||||
|
depends_on("sp", type=("build"))
|
||||||
|
|
||||||
|
def cmake_args(self):
|
||||||
|
args = []
|
||||||
|
|
||||||
|
mkl_providers = ["intel-mkl", "intel-oneapi-mkl", "intel-parallel-studio"]
|
||||||
|
args.append(self.define("ENABLE_MKL", spec["lapack"].name in mkl_providers))
|
||||||
|
|
||||||
|
return args
|
@ -76,6 +76,7 @@ class Hypre(AutotoolsPackage, CudaPackage, ROCmPackage):
|
|||||||
variant("gptune", default=False, description="Add the GPTune hookup code")
|
variant("gptune", default=False, description="Add the GPTune hookup code")
|
||||||
variant("umpire", default=False, description="Enable Umpire support")
|
variant("umpire", default=False, description="Enable Umpire support")
|
||||||
variant("sycl", default=False, description="Enable SYCL support")
|
variant("sycl", default=False, description="Enable SYCL support")
|
||||||
|
variant("magma", default=False, description="Enable MAGMA interface")
|
||||||
variant("caliper", default=False, description="Enable Caliper support")
|
variant("caliper", default=False, description="Enable Caliper support")
|
||||||
|
|
||||||
# Patch to add gptune hookup codes
|
# Patch to add gptune hookup codes
|
||||||
@ -100,6 +101,7 @@ def patch(self): # fix sequential compilation in 'src/seq_mv'
|
|||||||
depends_on("mpi", when="+mpi")
|
depends_on("mpi", when="+mpi")
|
||||||
depends_on("blas")
|
depends_on("blas")
|
||||||
depends_on("lapack")
|
depends_on("lapack")
|
||||||
|
depends_on("magma", when="+magma")
|
||||||
depends_on("superlu-dist", when="+superlu-dist+mpi")
|
depends_on("superlu-dist", when="+superlu-dist+mpi")
|
||||||
depends_on("rocsparse", when="+rocm")
|
depends_on("rocsparse", when="+rocm")
|
||||||
depends_on("rocthrust", when="+rocm")
|
depends_on("rocthrust", when="+rocm")
|
||||||
@ -108,18 +110,23 @@ def patch(self): # fix sequential compilation in 'src/seq_mv'
|
|||||||
depends_on("umpire", when="+umpire")
|
depends_on("umpire", when="+umpire")
|
||||||
depends_on("caliper", when="+caliper")
|
depends_on("caliper", when="+caliper")
|
||||||
|
|
||||||
|
gpu_pkgs = ["magma", "umpire"]
|
||||||
for sm_ in CudaPackage.cuda_arch_values:
|
for sm_ in CudaPackage.cuda_arch_values:
|
||||||
depends_on(
|
for pkg in gpu_pkgs:
|
||||||
"umpire+cuda cuda_arch={0}".format(sm_), when="+umpire+cuda cuda_arch={0}".format(sm_)
|
depends_on(
|
||||||
)
|
"{0}+cuda cuda_arch={1}".format(pkg, sm_),
|
||||||
for gfx in ROCmPackage.amdgpu_targets:
|
when="+{0}+cuda cuda_arch={1}".format(pkg, sm_),
|
||||||
depends_on(
|
)
|
||||||
"umpire+rocm amdgpu_target={0}".format(gfx),
|
|
||||||
when="+umpire+rocm amdgpu_target={0}".format(gfx),
|
|
||||||
)
|
|
||||||
|
|
||||||
# Uses deprecated cuSPARSE functions/types (e.g. csrsv2Info_t).
|
for gfx in ROCmPackage.amdgpu_targets:
|
||||||
depends_on("cuda@:11", when="+cuda")
|
for pkg in gpu_pkgs:
|
||||||
|
depends_on(
|
||||||
|
"{0}+rocm amdgpu_target={1}".format(pkg, gfx),
|
||||||
|
when="+{0}+rocm amdgpu_target={1}".format(pkg, gfx),
|
||||||
|
)
|
||||||
|
|
||||||
|
# hypre@:2.28.0 uses deprecated cuSPARSE functions/types (e.g. csrsv2Info_t).
|
||||||
|
depends_on("cuda@:11", when="@:2.28.0+cuda")
|
||||||
|
|
||||||
# Conflicts
|
# Conflicts
|
||||||
conflicts("+cuda", when="+int64")
|
conflicts("+cuda", when="+int64")
|
||||||
@ -150,6 +157,9 @@ def patch(self): # fix sequential compilation in 'src/seq_mv'
|
|||||||
# Option added in v2.24.0
|
# Option added in v2.24.0
|
||||||
conflicts("+sycl", when="@:2.23")
|
conflicts("+sycl", when="@:2.23")
|
||||||
|
|
||||||
|
# Option added in v2.29.0
|
||||||
|
conflicts("+magma", when="@:2.28")
|
||||||
|
|
||||||
configure_directory = "src"
|
configure_directory = "src"
|
||||||
|
|
||||||
def url_for_version(self, version):
|
def url_for_version(self, version):
|
||||||
@ -280,6 +290,11 @@ def configure_args(self):
|
|||||||
if "+unified-memory" in spec:
|
if "+unified-memory" in spec:
|
||||||
configure_args.append("--enable-unified-memory")
|
configure_args.append("--enable-unified-memory")
|
||||||
|
|
||||||
|
if "+magma" in spec:
|
||||||
|
configure_args.append("--with-magma-include=%s" % spec["magma"].prefix.include)
|
||||||
|
configure_args.append("--with-magma-lib=%s" % spec["magma"].libs)
|
||||||
|
configure_args.append("--with-magma")
|
||||||
|
|
||||||
configure_args.extend(self.enable_or_disable("fortran"))
|
configure_args.extend(self.enable_or_disable("fortran"))
|
||||||
|
|
||||||
return configure_args
|
return configure_args
|
||||||
@ -329,7 +344,7 @@ def install(self, spec, prefix):
|
|||||||
|
|
||||||
@run_after("install")
|
@run_after("install")
|
||||||
def cache_test_sources(self):
|
def cache_test_sources(self):
|
||||||
self.cache_extra_test_sources(self.extra_install_tests)
|
cache_extra_test_sources(self, self.extra_install_tests)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _cached_tests_work_dir(self):
|
def _cached_tests_work_dir(self):
|
||||||
|
@ -111,6 +111,13 @@ class IntelOneapiMpi(IntelOneApiLibraryPackage):
|
|||||||
def component_dir(self):
|
def component_dir(self):
|
||||||
return "mpi"
|
return "mpi"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def env_script_args(self):
|
||||||
|
if "+external-libfabric" in self.spec:
|
||||||
|
return ("-i_mpi_ofi_internal=0",)
|
||||||
|
else:
|
||||||
|
return ()
|
||||||
|
|
||||||
def setup_dependent_package(self, module, dep_spec):
|
def setup_dependent_package(self, module, dep_spec):
|
||||||
if "+generic-names" in self.spec:
|
if "+generic-names" in self.spec:
|
||||||
self.spec.mpicc = join_path(self.component_prefix.bin, "mpicc")
|
self.spec.mpicc = join_path(self.component_prefix.bin, "mpicc")
|
||||||
|
24
var/spack/repos/builtin/packages/jedi-cmake/package.py
Normal file
24
var/spack/repos/builtin/packages/jedi-cmake/package.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
||||||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
|
from spack.package import *
|
||||||
|
|
||||||
|
|
||||||
|
class JediCmake(CMakePackage):
|
||||||
|
"""CMake/ecbuild toolchains to facilitate portability on different systems."""
|
||||||
|
|
||||||
|
homepage = "https://github.com/JCSDA/jedi-cmake"
|
||||||
|
git = "https://github.com/JCSDA/jedi-cmake.git"
|
||||||
|
|
||||||
|
maintainers("climbfuji")
|
||||||
|
|
||||||
|
version("master", branch="master", no_cache=True)
|
||||||
|
version("develop", branch="develop", no_cache=True)
|
||||||
|
version(
|
||||||
|
"1.4.0", commit="36fc99bdff5d3d8835480b37a3dcc75e5f8da256", preferred=True, submodules=True
|
||||||
|
)
|
||||||
|
version("1.3.0", commit="729a9b2ec97a7e93cbc58213493f28ca11f08754")
|
||||||
|
|
||||||
|
depends_on("cmake @3.10:", type=("build"))
|
@ -24,12 +24,14 @@ class Kealib(CMakePackage):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
homepage = "http://www.kealib.org/"
|
homepage = "http://www.kealib.org/"
|
||||||
url = "https://github.com/ubarsc/kealib/releases/download/kealib-1.5.0/kealib-1.5.0.tar.gz"
|
url = "https://github.com/ubarsc/kealib/releases/download/kealib-1.5.2/kealib-1.5.2.tar.gz"
|
||||||
git = "https://github.com/ubarsc/kealib"
|
git = "https://github.com/ubarsc/kealib"
|
||||||
|
|
||||||
maintainers("gillins", "neilflood", "petebunting")
|
maintainers("gillins", "neilflood", "petebunting")
|
||||||
|
|
||||||
version("develop", git=git)
|
version("develop", git=git)
|
||||||
|
version("1.5.2", sha256="c4e17c472761a39e45184b5fa687395b319ac75430e0f6584dbf4cec6e335572")
|
||||||
|
version("1.5.1", sha256="06cd547b1e40394b9539beaf6982bd249e8ee93d6150295e9cd9161d00829657")
|
||||||
version("1.5.0", sha256="d19a0fb051019f87fe413bda76472bf4fff8fca52ede92e0ffd983caeafd05b8")
|
version("1.5.0", sha256="d19a0fb051019f87fe413bda76472bf4fff8fca52ede92e0ffd983caeafd05b8")
|
||||||
version("1.4.15", sha256="40f2573c00f005f93c1fa88f1f13bfbd485cbc7a9b3f1c706931e69bff17dae4")
|
version("1.4.15", sha256="40f2573c00f005f93c1fa88f1f13bfbd485cbc7a9b3f1c706931e69bff17dae4")
|
||||||
version("1.4.12", sha256="0b100e36b3e25e57487aa197d7be47f22e1b30afb16a57fdaa5f877696ec321e")
|
version("1.4.12", sha256="0b100e36b3e25e57487aa197d7be47f22e1b30afb16a57fdaa5f877696ec321e")
|
||||||
@ -39,8 +41,9 @@ class Kealib(CMakePackage):
|
|||||||
version("1.4.8", sha256="0f24d8478865abcb17865c8f49c0370095726c529b8ac373ffae018ad3d40a02")
|
version("1.4.8", sha256="0f24d8478865abcb17865c8f49c0370095726c529b8ac373ffae018ad3d40a02")
|
||||||
version("1.4.7", sha256="ec38751b3b555d3a26f0c7445f2d2cd9d7c3a3502237519a206a50cb58df56ec")
|
version("1.4.7", sha256="ec38751b3b555d3a26f0c7445f2d2cd9d7c3a3502237519a206a50cb58df56ec")
|
||||||
|
|
||||||
depends_on("cmake@2.8.10:", type="build")
|
depends_on("cmake@3.5:", type="build")
|
||||||
depends_on("hdf5+cxx+hl")
|
depends_on("hdf5+cxx+hl", when="@:1.5.1")
|
||||||
|
depends_on("hdf5+cxx", when="@1.5.2:")
|
||||||
|
|
||||||
patch("cmake.patch", when="@1.4.7")
|
patch("cmake.patch", when="@1.4.7")
|
||||||
|
|
||||||
|
@ -16,10 +16,15 @@ class Last(MakefilePackage):
|
|||||||
git = "https://gitlab.com/mcfrith/last.git"
|
git = "https://gitlab.com/mcfrith/last.git"
|
||||||
maintainers("snehring")
|
maintainers("snehring")
|
||||||
|
|
||||||
|
version("1499", commit="2cc68d3ba8ae5ca46ceeb69302aef18b9db04f46")
|
||||||
version("1282", commit="4368be912f4759e52b549940276f1adf087f489a")
|
version("1282", commit="4368be912f4759e52b549940276f1adf087f489a")
|
||||||
version("869", sha256="6371a6282bc1bb02a5e5013cc463625f2ce3e7746ff2ea0bdf9fe6b15605a67c")
|
version("869", sha256="6371a6282bc1bb02a5e5013cc463625f2ce3e7746ff2ea0bdf9fe6b15605a67c")
|
||||||
|
|
||||||
|
depends_on("zlib-api")
|
||||||
|
|
||||||
def edit(self, spec, prefix):
|
def edit(self, spec, prefix):
|
||||||
|
if not spec.satisfies("target=x86_64:"):
|
||||||
|
filter_file("-msse4", "", "makefile")
|
||||||
files = ["mat-doc.sh", "mat-inc.sh", "seed-doc.sh", "seed-inc.sh"]
|
files = ["mat-doc.sh", "mat-inc.sh", "seed-doc.sh", "seed-inc.sh"]
|
||||||
if spec.satisfies("@1282:"):
|
if spec.satisfies("@1282:"):
|
||||||
files.append("gc-inc.sh")
|
files.append("gc-inc.sh")
|
||||||
|
@ -16,14 +16,15 @@ class Libressl(AutotoolsPackage):
|
|||||||
|
|
||||||
maintainers("eschnett")
|
maintainers("eschnett")
|
||||||
|
|
||||||
|
version("3.7.2", sha256="b06aa538fefc9c6b33c4db4931a09a5f52d9d2357219afcbff7d93fe12ebf6f7")
|
||||||
|
version("3.6.3", sha256="87b1bbe36e9eec8d0ae5f04c83d36b2c5b0e581784c7eb0817025ed29eadea37")
|
||||||
version("3.6.1", sha256="acfac61316e93b919c28d62d53037ca734de85c46b4d703f19fd8395cf006774")
|
version("3.6.1", sha256="acfac61316e93b919c28d62d53037ca734de85c46b4d703f19fd8395cf006774")
|
||||||
|
|
||||||
variant("shared", default=True, description="Build shared libraries")
|
variant("shared", default=True, description="Build shared libraries")
|
||||||
variant("static", default=False, description="Build static libraries")
|
variant("static", default=False, description="Build static libraries")
|
||||||
|
|
||||||
def configure_args(self):
|
def configure_args(self):
|
||||||
args = [
|
args = []
|
||||||
"--enable-shared" if "+shared" in spec else "--disable-shared",
|
args.extend(self.enable_or_disable("shared"))
|
||||||
"--enable-static" if "+static" in spec else "--disable-static",
|
args.extend(self.enable_or_disable("static"))
|
||||||
]
|
|
||||||
return args
|
return args
|
||||||
|
@ -27,6 +27,16 @@ class Mash(AutotoolsPackage):
|
|||||||
depends_on("capnproto")
|
depends_on("capnproto")
|
||||||
depends_on("gsl")
|
depends_on("gsl")
|
||||||
|
|
||||||
|
def patch(self):
|
||||||
|
if self.spec.satisfies("target=aarch64:"):
|
||||||
|
filter_file(
|
||||||
|
"CXXFLAGS += -include src/mash/memcpyLink.h -Wl,--wrap=memcpy",
|
||||||
|
"",
|
||||||
|
"Makefile.in",
|
||||||
|
string=True,
|
||||||
|
)
|
||||||
|
filter_file("CFLAGS += -include src/mash/memcpyLink.h", "", "Makefile.in", string=True)
|
||||||
|
|
||||||
def configure_args(self):
|
def configure_args(self):
|
||||||
args = []
|
args = []
|
||||||
args.append("--with-capnp=" + self.spec["capnproto"].prefix)
|
args.append("--with-capnp=" + self.spec["capnproto"].prefix)
|
||||||
|
@ -17,7 +17,8 @@ class Nccl(MakefilePackage, CudaPackage):
|
|||||||
maintainers("adamjstewart")
|
maintainers("adamjstewart")
|
||||||
libraries = ["libnccl.so"]
|
libraries = ["libnccl.so"]
|
||||||
|
|
||||||
version("2.18.3-1", sha256="b4f5d7d9eea2c12e32e7a06fe138b2cfc75969c6d5c473aa6f819a792db2fc96")
|
version("2.18.5-1", sha256="16ac98f3e926c024ce48e10ab220e19ce734adc48c423cfd55ad6f509bd1179f")
|
||||||
|
version("2.18.3-1", sha256="6477d83c9edbb34a0ebce6d751a1b32962bc6415d75d04972b676c6894ceaef9")
|
||||||
version("2.18.1-1", sha256="0e4ede5cf8df009bff5aeb3a9f194852c03299ae5664b5a425b43358e7a9eef2")
|
version("2.18.1-1", sha256="0e4ede5cf8df009bff5aeb3a9f194852c03299ae5664b5a425b43358e7a9eef2")
|
||||||
version("2.17.1-1", sha256="1311a6fd7cd44ad6d4523ba03065ce694605843fd30a5c0f77aa3d911abe706d")
|
version("2.17.1-1", sha256="1311a6fd7cd44ad6d4523ba03065ce694605843fd30a5c0f77aa3d911abe706d")
|
||||||
version("2.16.2-1", sha256="7f7c738511a8876403fc574d13d48e7c250d934d755598d82e14bab12236fc64")
|
version("2.16.2-1", sha256="7f7c738511a8876403fc574d13d48e7c250d934d755598d82e14bab12236fc64")
|
||||||
|
@ -19,6 +19,11 @@ class OmegaH(CMakePackage, CudaPackage):
|
|||||||
maintainers("cwsmith")
|
maintainers("cwsmith")
|
||||||
tags = ["e4s"]
|
tags = ["e4s"]
|
||||||
version("main", branch="main")
|
version("main", branch="main")
|
||||||
|
version(
|
||||||
|
"scorec.10.7.0",
|
||||||
|
commit="0e5de8618c3370f702e08c1b1af476dbbc118892",
|
||||||
|
git="https://github.com/SCOREC/omega_h.git",
|
||||||
|
)
|
||||||
version(
|
version(
|
||||||
"scorec.10.6.0",
|
"scorec.10.6.0",
|
||||||
commit="f376fad4741b55a4b2482218eb3437d719b7c72e",
|
commit="f376fad4741b55a4b2482218eb3437d719b7c72e",
|
||||||
|
13
var/spack/repos/builtin/packages/openblas/ifort-msvc.patch
Normal file
13
var/spack/repos/builtin/packages/openblas/ifort-msvc.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
diff -ruN spack-src/cmake/fc.cmake spack-src-new/cmake/fc.cmake
|
||||||
|
--- spack-src/cmake/fc.cmake 2023-04-01 14:18:01.000000000 -0600
|
||||||
|
+++ spack-src-new/cmake/fc.cmake 2023-06-06 09:34:12.921982500 -0600
|
||||||
|
@@ -89,6 +89,9 @@
|
||||||
|
|
||||||
|
if (${F_COMPILER} STREQUAL "INTEL")
|
||||||
|
set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_INTEL")
|
||||||
|
+ if (MSVC)
|
||||||
|
+ set(FCOMMON_OPT "${FCOMMON_OPT} -names:uppercase -assume:underscore")
|
||||||
|
+ endif ()
|
||||||
|
if (INTERFACE64)
|
||||||
|
set(FCOMMON_OPT "${FCOMMON_OPT} -i8")
|
||||||
|
endif ()
|
@ -6,11 +6,13 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
import spack.build_systems.cmake
|
||||||
|
import spack.build_systems.makefile
|
||||||
from spack.package import *
|
from spack.package import *
|
||||||
from spack.package_test import compare_output_file, compile_c_and_execute
|
from spack.package_test import compare_output_file, compile_c_and_execute
|
||||||
|
|
||||||
|
|
||||||
class Openblas(MakefilePackage):
|
class Openblas(CMakePackage, MakefilePackage):
|
||||||
"""OpenBLAS: An optimized BLAS library"""
|
"""OpenBLAS: An optimized BLAS library"""
|
||||||
|
|
||||||
homepage = "https://www.openblas.net"
|
homepage = "https://www.openblas.net"
|
||||||
@ -19,7 +21,7 @@ class Openblas(MakefilePackage):
|
|||||||
)
|
)
|
||||||
git = "https://github.com/OpenMathLib/OpenBLAS.git"
|
git = "https://github.com/OpenMathLib/OpenBLAS.git"
|
||||||
|
|
||||||
libraries = ["libopenblas"]
|
libraries = ["libopenblas", "openblas"]
|
||||||
|
|
||||||
version("develop", branch="develop")
|
version("develop", branch="develop")
|
||||||
version("0.3.24", sha256="ceadc5065da97bd92404cac7254da66cc6eb192679cf1002098688978d4d5132")
|
version("0.3.24", sha256="ceadc5065da97bd92404cac7254da66cc6eb192679cf1002098688978d4d5132")
|
||||||
@ -91,6 +93,9 @@ class Openblas(MakefilePackage):
|
|||||||
provides("lapack@3.9.1:", when="@0.3.15:")
|
provides("lapack@3.9.1:", when="@0.3.15:")
|
||||||
provides("lapack@3.7.0", when="@0.2.20")
|
provides("lapack@3.7.0", when="@0.2.20")
|
||||||
|
|
||||||
|
# https://github.com/xianyi/OpenBLAS/pull/2519/files
|
||||||
|
patch("ifort-msvc.patch", when="%msvc")
|
||||||
|
|
||||||
# https://github.com/OpenMathLib/OpenBLAS/pull/3712
|
# https://github.com/OpenMathLib/OpenBLAS/pull/3712
|
||||||
patch("cce.patch", when="@0.3.20 %cce")
|
patch("cce.patch", when="@0.3.20 %cce")
|
||||||
|
|
||||||
@ -213,6 +218,8 @@ class Openblas(MakefilePackage):
|
|||||||
|
|
||||||
depends_on("perl", type="build")
|
depends_on("perl", type="build")
|
||||||
|
|
||||||
|
build_system("makefile", "cmake", default="makefile")
|
||||||
|
|
||||||
def flag_handler(self, name, flags):
|
def flag_handler(self, name, flags):
|
||||||
spec = self.spec
|
spec = self.spec
|
||||||
iflags = []
|
iflags = []
|
||||||
@ -242,13 +249,37 @@ def check_compilers(self):
|
|||||||
# require both.
|
# require both.
|
||||||
# As of 08/2022 (0.3.21), we can build purely with a C compiler using
|
# As of 08/2022 (0.3.21), we can build purely with a C compiler using
|
||||||
# a f2c translated LAPACK version
|
# a f2c translated LAPACK version
|
||||||
# https://github.com/OpenMathLib/OpenBLAS/releases/tag/v0.3.21
|
# https://github.com/xianyi/OpenBLAS/releases/tag/v0.3.21
|
||||||
if self.compiler.fc is None and "~fortran" not in self.spec:
|
if self.compiler.fc is None and "~fortran" not in self.spec:
|
||||||
raise InstallError(
|
raise InstallError(
|
||||||
self.compiler.cc
|
self.compiler.cc
|
||||||
+ " has no Fortran compiler added in spack. Add it or use openblas~fortran!"
|
+ " has no Fortran compiler added in spack. Add it or use openblas~fortran!"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def headers(self):
|
||||||
|
# The only public headers for cblas and lapacke in
|
||||||
|
# openblas are cblas.h and lapacke.h. The remaining headers are private
|
||||||
|
# headers either included in one of these two headers, or included in
|
||||||
|
# one of the source files implementing functions declared in these
|
||||||
|
# headers.
|
||||||
|
return find_headers(["cblas", "lapacke"], self.prefix.include)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def libs(self):
|
||||||
|
spec = self.spec
|
||||||
|
|
||||||
|
# Look for openblas{symbol_suffix}
|
||||||
|
name = ["libopenblas", "openblas"]
|
||||||
|
search_shared = bool(spec.variants["shared"].value)
|
||||||
|
suffix = spec.variants["symbol_suffix"].value
|
||||||
|
if suffix != "none":
|
||||||
|
name += suffix
|
||||||
|
|
||||||
|
return find_libraries(name, spec.prefix, shared=search_shared, recursive=True)
|
||||||
|
|
||||||
|
|
||||||
|
class MakefileBuilder(spack.build_systems.makefile.MakefileBuilder):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _read_targets(target_file):
|
def _read_targets(target_file):
|
||||||
"""Parse a list of available targets from the OpenBLAS/TargetList.txt
|
"""Parse a list of available targets from the OpenBLAS/TargetList.txt
|
||||||
@ -304,7 +335,7 @@ def _microarch_target_args(self):
|
|||||||
if microarch.name in available_targets:
|
if microarch.name in available_targets:
|
||||||
break
|
break
|
||||||
|
|
||||||
if self.version >= Version("0.3"):
|
if self.spec.version >= Version("0.3"):
|
||||||
# 'ARCH' argument causes build errors in older OpenBLAS
|
# 'ARCH' argument causes build errors in older OpenBLAS
|
||||||
# see https://github.com/spack/spack/issues/15385
|
# see https://github.com/spack/spack/issues/15385
|
||||||
arch_name = microarch.family.name
|
arch_name = microarch.family.name
|
||||||
@ -379,9 +410,9 @@ def make_defs(self):
|
|||||||
|
|
||||||
if "~shared" in self.spec:
|
if "~shared" in self.spec:
|
||||||
if "+pic" in self.spec:
|
if "+pic" in self.spec:
|
||||||
make_defs.append("CFLAGS={0}".format(self.compiler.cc_pic_flag))
|
make_defs.append("CFLAGS={0}".format(self.pkg.compiler.cc_pic_flag))
|
||||||
if "~fortran" not in self.spec:
|
if "~fortran" not in self.spec:
|
||||||
make_defs.append("FFLAGS={0}".format(self.compiler.f77_pic_flag))
|
make_defs.append("FFLAGS={0}".format(self.pkg.compiler.f77_pic_flag))
|
||||||
make_defs += ["NO_SHARED=1"]
|
make_defs += ["NO_SHARED=1"]
|
||||||
# fix missing _dggsvd_ and _sggsvd_
|
# fix missing _dggsvd_ and _sggsvd_
|
||||||
if self.spec.satisfies("@0.2.16"):
|
if self.spec.satisfies("@0.2.16"):
|
||||||
@ -442,28 +473,6 @@ def make_defs(self):
|
|||||||
|
|
||||||
return make_defs
|
return make_defs
|
||||||
|
|
||||||
@property
|
|
||||||
def headers(self):
|
|
||||||
# As in netlib-lapack, the only public headers for cblas and lapacke in
|
|
||||||
# openblas are cblas.h and lapacke.h. The remaining headers are private
|
|
||||||
# headers either included in one of these two headers, or included in
|
|
||||||
# one of the source files implementing functions declared in these
|
|
||||||
# headers.
|
|
||||||
return find_headers(["cblas", "lapacke"], self.prefix.include)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def libs(self):
|
|
||||||
spec = self.spec
|
|
||||||
|
|
||||||
# Look for openblas{symbol_suffix}
|
|
||||||
name = "libopenblas"
|
|
||||||
search_shared = bool(spec.variants["shared"].value)
|
|
||||||
suffix = spec.variants["symbol_suffix"].value
|
|
||||||
if suffix != "none":
|
|
||||||
name += suffix
|
|
||||||
|
|
||||||
return find_libraries(name, spec.prefix, shared=search_shared, recursive=True)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def build_targets(self):
|
def build_targets(self):
|
||||||
return ["-s"] + self.make_defs + ["all"]
|
return ["-s"] + self.make_defs + ["all"]
|
||||||
@ -499,3 +508,28 @@ def check_install(self):
|
|||||||
|
|
||||||
output = compile_c_and_execute(source_file, [include_flags], link_flags.split())
|
output = compile_c_and_execute(source_file, [include_flags], link_flags.split())
|
||||||
compare_output_file(output, blessed_file)
|
compare_output_file(output, blessed_file)
|
||||||
|
|
||||||
|
|
||||||
|
class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder):
|
||||||
|
def cmake_args(self):
|
||||||
|
cmake_defs = [self.define("TARGET", "GENERIC")]
|
||||||
|
if self.spec.satisfies("platform=windows"):
|
||||||
|
cmake_defs += [
|
||||||
|
self.define("DYNAMIC_ARCH", "OFF"),
|
||||||
|
self.define("BUILD_WITHOUT_LAPACK", "ON"),
|
||||||
|
]
|
||||||
|
|
||||||
|
if "~fortran" in self.spec:
|
||||||
|
cmake_defs += [self.define("NOFORTRAN", "ON")]
|
||||||
|
|
||||||
|
if "+shared" in self.spec:
|
||||||
|
cmake_defs += [self.define("BUILD_SHARED_LIBS", "ON")]
|
||||||
|
|
||||||
|
if self.spec.satisfies("threads=openmp"):
|
||||||
|
cmake_defs += [self.define("USE_OPENMP", "ON"), self.define("USE_THREAD", "ON")]
|
||||||
|
elif self.spec.satisfies("threads=pthreads"):
|
||||||
|
cmake_defs += [self.define("USE_OPENMP", "OFF"), self.define("USE_THREAD", "ON")]
|
||||||
|
else:
|
||||||
|
cmake_defs += [self.define("USE_OPENMP", "OFF"), self.define("USE_THREAD", "OFF")]
|
||||||
|
|
||||||
|
return cmake_defs
|
||||||
|
@ -19,6 +19,8 @@ class Opencv(CMakePackage, CudaPackage):
|
|||||||
maintainers("bvanessen", "adamjstewart")
|
maintainers("bvanessen", "adamjstewart")
|
||||||
|
|
||||||
version("master", branch="master")
|
version("master", branch="master")
|
||||||
|
version("4.8.0", sha256="cbf47ecc336d2bff36b0dcd7d6c179a9bb59e805136af6b9670ca944aef889bd")
|
||||||
|
version("4.7.0", sha256="8df0079cdbe179748a18d44731af62a245a45ebf5085223dc03133954c662973")
|
||||||
version("4.6.0", sha256="1ec1cba65f9f20fe5a41fda1586e01c70ea0c9a6d7b67c9e13edf0cfe2239277")
|
version("4.6.0", sha256="1ec1cba65f9f20fe5a41fda1586e01c70ea0c9a6d7b67c9e13edf0cfe2239277")
|
||||||
version("4.5.5", sha256="a1cfdcf6619387ca9e232687504da996aaa9f7b5689986b8331ec02cb61d28ad")
|
version("4.5.5", sha256="a1cfdcf6619387ca9e232687504da996aaa9f7b5689986b8331ec02cb61d28ad")
|
||||||
version("4.5.4", sha256="c20bb83dd790fc69df9f105477e24267706715a9d3c705ca1e7f613c7b3bad3d")
|
version("4.5.4", sha256="c20bb83dd790fc69df9f105477e24267706715a9d3c705ca1e7f613c7b3bad3d")
|
||||||
@ -63,6 +65,8 @@ class Opencv(CMakePackage, CudaPackage):
|
|||||||
"4.5.4",
|
"4.5.4",
|
||||||
"4.5.5",
|
"4.5.5",
|
||||||
"4.6.0",
|
"4.6.0",
|
||||||
|
"4.7.0",
|
||||||
|
"4.8.0",
|
||||||
]
|
]
|
||||||
for cv in contrib_vers:
|
for cv in contrib_vers:
|
||||||
resource(
|
resource(
|
||||||
@ -691,6 +695,7 @@ class Opencv(CMakePackage, CudaPackage):
|
|||||||
"mfx",
|
"mfx",
|
||||||
"ngraph",
|
"ngraph",
|
||||||
"nvcuvid", # disabled, details: https://github.com/opencv/opencv/issues/14850
|
"nvcuvid", # disabled, details: https://github.com/opencv/opencv/issues/14850
|
||||||
|
"nvcuvenc", # disabled, depends on nvcuvid being enabled
|
||||||
"opencl_svm",
|
"opencl_svm",
|
||||||
"openclamdblas",
|
"openclamdblas",
|
||||||
"openclamdfft",
|
"openclamdfft",
|
||||||
@ -740,8 +745,9 @@ class Opencv(CMakePackage, CudaPackage):
|
|||||||
depends_on("cudnn@:7.3", when="@3.3.1:3.4+cudnn")
|
depends_on("cudnn@:7.3", when="@3.3.1:3.4+cudnn")
|
||||||
depends_on("cudnn@:6", when="@:3.3.0+cudnn")
|
depends_on("cudnn@:6", when="@:3.3.0+cudnn")
|
||||||
depends_on("eigen", when="+eigen")
|
depends_on("eigen", when="+eigen")
|
||||||
depends_on("ffmpeg+avresample", when="+ffmpeg")
|
depends_on("ffmpeg", when="+ffmpeg")
|
||||||
depends_on("ffmpeg@:4+avresample", when="@:4.5+ffmpeg")
|
depends_on("ffmpeg@:5", when="@:4.7+ffmpeg")
|
||||||
|
depends_on("ffmpeg@:4+avresample", when="@:4.6+ffmpeg")
|
||||||
depends_on("gdal", when="+gdal")
|
depends_on("gdal", when="+gdal")
|
||||||
depends_on("gtkplus", when="+gtk")
|
depends_on("gtkplus", when="+gtk")
|
||||||
depends_on("hpx", when="+hpx")
|
depends_on("hpx", when="+hpx")
|
||||||
|
@ -30,9 +30,14 @@ class Openssl(Package): # Uses Fake Autotools, should subclass Package
|
|||||||
|
|
||||||
executables = ["openssl"]
|
executables = ["openssl"]
|
||||||
|
|
||||||
version("3.1.2", sha256="a0ce69b8b97ea6a35b96875235aa453b966ba3cba8af2de23657d8b6767d6539")
|
version("3.1.3", sha256="f0316a2ebd89e7f2352976445458689f80302093788c466692fb2a188b2eacf6")
|
||||||
version("3.0.10", sha256="1761d4f5b13a1028b9b6f3d4b8e17feb0cedc9370f6afe61d7193d2cdce83323")
|
version("3.0.11", sha256="b3425d3bb4a2218d0697eb41f7fc0cdede016ed19ca49d168b78e8d947887f55")
|
||||||
|
|
||||||
|
version(
|
||||||
|
"3.1.2",
|
||||||
|
sha256="a0ce69b8b97ea6a35b96875235aa453b966ba3cba8af2de23657d8b6767d6539",
|
||||||
|
deprecated=True,
|
||||||
|
)
|
||||||
version(
|
version(
|
||||||
"3.1.1",
|
"3.1.1",
|
||||||
sha256="b3aa61334233b852b63ddb048df181177c2c659eb9d4376008118f9c08d07674",
|
sha256="b3aa61334233b852b63ddb048df181177c2c659eb9d4376008118f9c08d07674",
|
||||||
@ -43,6 +48,11 @@ class Openssl(Package): # Uses Fake Autotools, should subclass Package
|
|||||||
sha256="aaa925ad9828745c4cad9d9efeb273deca820f2cdcf2c3ac7d7c1212b7c497b4",
|
sha256="aaa925ad9828745c4cad9d9efeb273deca820f2cdcf2c3ac7d7c1212b7c497b4",
|
||||||
deprecated=True,
|
deprecated=True,
|
||||||
)
|
)
|
||||||
|
version(
|
||||||
|
"3.0.10",
|
||||||
|
sha256="1761d4f5b13a1028b9b6f3d4b8e17feb0cedc9370f6afe61d7193d2cdce83323",
|
||||||
|
deprecated=True,
|
||||||
|
)
|
||||||
version(
|
version(
|
||||||
"3.0.9",
|
"3.0.9",
|
||||||
sha256="eb1ab04781474360f77c318ab89d8c5a03abc38e63d65a603cabbf1b00a1dc90",
|
sha256="eb1ab04781474360f77c318ab89d8c5a03abc38e63d65a603cabbf1b00a1dc90",
|
||||||
@ -83,6 +93,11 @@ class Openssl(Package): # Uses Fake Autotools, should subclass Package
|
|||||||
sha256="59eedfcb46c25214c9bd37ed6078297b4df01d012267fe9e9eee31f61bc70536",
|
sha256="59eedfcb46c25214c9bd37ed6078297b4df01d012267fe9e9eee31f61bc70536",
|
||||||
deprecated=True,
|
deprecated=True,
|
||||||
)
|
)
|
||||||
|
version(
|
||||||
|
"1.1.1w",
|
||||||
|
sha256="cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8",
|
||||||
|
deprecated=True,
|
||||||
|
)
|
||||||
version(
|
version(
|
||||||
"1.1.1v",
|
"1.1.1v",
|
||||||
sha256="d6697e2871e77238460402e9362d47d18382b15ef9f246aba6c7bd780d38a6b0",
|
sha256="d6697e2871e77238460402e9362d47d18382b15ef9f246aba6c7bd780d38a6b0",
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
Submodule VTK contains modified content
|
||||||
diff --git a/VTK/CMake/FindFreetype.cmake b/VTK/CMake/FindFreetype.cmake
|
diff --git a/VTK/CMake/FindFreetype.cmake b/VTK/CMake/FindFreetype.cmake
|
||||||
index b4532735c2..f06d32327e 100644
|
index b4532735c2..51671d4c3c 100644
|
||||||
--- a/VTK/CMake/FindFreetype.cmake
|
--- a/VTK/CMake/FindFreetype.cmake
|
||||||
+++ b/VTK/CMake/FindFreetype.cmake
|
+++ b/VTK/CMake/FindFreetype.cmake
|
||||||
@@ -63,6 +63,30 @@ directory of a Freetype installation.
|
@@ -63,6 +63,32 @@ directory of a Freetype installation.
|
||||||
# I'm going to attempt to cut out the middleman and hope
|
# I'm going to attempt to cut out the middleman and hope
|
||||||
# everything still works.
|
# everything still works.
|
||||||
|
|
||||||
@ -14,6 +15,8 @@ index b4532735c2..f06d32327e 100644
|
|||||||
+ get_target_property(freetype_location freetype LOCATION)
|
+ get_target_property(freetype_location freetype LOCATION)
|
||||||
+ if (freetype_library_type STREQUAL STATIC_LIBRARY)
|
+ if (freetype_library_type STREQUAL STATIC_LIBRARY)
|
||||||
+ set(freetype_library_type STATIC)
|
+ set(freetype_library_type STATIC)
|
||||||
|
+ elseif (freetype_library_type STREQUAL SHARED_LIBRARY)
|
||||||
|
+ set(freetype_library_type SHARED)
|
||||||
+ endif()
|
+ endif()
|
||||||
+ get_target_property(freetype_interface_include_directories freetype INTERFACE_INCLUDE_DIRECTORIES)
|
+ get_target_property(freetype_interface_include_directories freetype INTERFACE_INCLUDE_DIRECTORIES)
|
||||||
+ get_target_property(freetype_interface_link_libraries freetype INTERFACE_LINK_LIBRARIES)
|
+ get_target_property(freetype_interface_link_libraries freetype INTERFACE_LINK_LIBRARIES)
|
||||||
|
@ -29,10 +29,11 @@ class Paraview(CMakePackage, CudaPackage, ROCmPackage):
|
|||||||
|
|
||||||
version("master", branch="master", submodules=True)
|
version("master", branch="master", submodules=True)
|
||||||
version(
|
version(
|
||||||
"5.11.1",
|
"5.11.2",
|
||||||
sha256="5cc2209f7fa37cd3155d199ff6c3590620c12ca4da732ef7698dec37fa8dbb34",
|
sha256="5c5d2f922f30d91feefc43b4a729015dbb1459f54c938896c123d2ac289c7a1e",
|
||||||
preferred=True,
|
preferred=True,
|
||||||
)
|
)
|
||||||
|
version("5.11.1", sha256="5cc2209f7fa37cd3155d199ff6c3590620c12ca4da732ef7698dec37fa8dbb34")
|
||||||
version("5.11.0", sha256="9a0b8fe8b1a2cdfd0ace9a87fa87e0ec21ee0f6f0bcb1fdde050f4f585a25165")
|
version("5.11.0", sha256="9a0b8fe8b1a2cdfd0ace9a87fa87e0ec21ee0f6f0bcb1fdde050f4f585a25165")
|
||||||
version("5.10.1", sha256="520e3cdfba4f8592be477314c2f6c37ec73fb1d5b25ac30bdbd1c5214758b9c2")
|
version("5.10.1", sha256="520e3cdfba4f8592be477314c2f6c37ec73fb1d5b25ac30bdbd1c5214758b9c2")
|
||||||
version("5.10.0", sha256="86d85fcbec395cdbc8e1301208d7c76d8f48b15dc6b967ffbbaeee31242343a5")
|
version("5.10.0", sha256="86d85fcbec395cdbc8e1301208d7c76d8f48b15dc6b967ffbbaeee31242343a5")
|
||||||
|
@ -3,10 +3,12 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
|
import spack.build_systems.autotools
|
||||||
|
import spack.build_systems.cmake
|
||||||
from spack.package import *
|
from spack.package import *
|
||||||
|
|
||||||
|
|
||||||
class Pcre(AutotoolsPackage):
|
class Pcre(AutotoolsPackage, CMakePackage):
|
||||||
"""The PCRE package contains Perl Compatible Regular Expression
|
"""The PCRE package contains Perl Compatible Regular Expression
|
||||||
libraries. These are useful for implementing regular expression
|
libraries. These are useful for implementing regular expression
|
||||||
pattern matching using the same syntax and semantics as Perl 5."""
|
pattern matching using the same syntax and semantics as Perl 5."""
|
||||||
@ -26,6 +28,8 @@ class Pcre(AutotoolsPackage):
|
|||||||
maintainers("drkennetz")
|
maintainers("drkennetz")
|
||||||
patch("intel.patch", when="@8.38")
|
patch("intel.patch", when="@8.38")
|
||||||
|
|
||||||
|
build_system("autotools", "cmake", default="autotools")
|
||||||
|
|
||||||
variant("jit", default=False, description="Enable JIT support.")
|
variant("jit", default=False, description="Enable JIT support.")
|
||||||
|
|
||||||
variant("multibyte", default=True, description="Enable support for 16 and 32 bit characters.")
|
variant("multibyte", default=True, description="Enable support for 16 and 32 bit characters.")
|
||||||
@ -36,6 +40,8 @@ class Pcre(AutotoolsPackage):
|
|||||||
description="Enable support for UTF-8/16/32, " "incompatible with EBCDIC.",
|
description="Enable support for UTF-8/16/32, " "incompatible with EBCDIC.",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder):
|
||||||
def configure_args(self):
|
def configure_args(self):
|
||||||
args = []
|
args = []
|
||||||
|
|
||||||
@ -51,3 +57,21 @@ def configure_args(self):
|
|||||||
args.append("--enable-unicode-properties")
|
args.append("--enable-unicode-properties")
|
||||||
|
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder):
|
||||||
|
def cmake_args(self):
|
||||||
|
args = []
|
||||||
|
|
||||||
|
if "+jit" in self.spec:
|
||||||
|
args.append("-DPCRE_SUPPORT_JIT:BOOL=ON")
|
||||||
|
|
||||||
|
if "+multibyte" in self.spec:
|
||||||
|
args.append("-DPCRE_BUILD_PCRE16:BOOL=ON")
|
||||||
|
args.append("-DPCRE_BUILD_PCRE32:BOOL=ON")
|
||||||
|
|
||||||
|
if "+utf" in self.spec:
|
||||||
|
args.append("-DPCRE_SUPPORT_UTF:BOOL=ON")
|
||||||
|
args.append("-DPCRE_SUPPORT_UNICODE_PROPERTIES:BOOL=ON")
|
||||||
|
|
||||||
|
return args
|
||||||
|
41
var/spack/repos/builtin/packages/ploticus/package.py
Normal file
41
var/spack/repos/builtin/packages/ploticus/package.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
|
from spack.package import *
|
||||||
|
|
||||||
|
|
||||||
|
class Ploticus(MakefilePackage):
|
||||||
|
"""Ploticus can produce various types of plots and graphs."""
|
||||||
|
|
||||||
|
homepage = "http://ploticus.sourceforge.net/doc/welcome.html"
|
||||||
|
|
||||||
|
maintainers("Christoph-TU")
|
||||||
|
|
||||||
|
version("2.42", sha256="3f29e4b9f405203a93efec900e5816d9e1b4381821881e241c08cab7dd66e0b0")
|
||||||
|
|
||||||
|
depends_on("zlib-api")
|
||||||
|
depends_on("libpng")
|
||||||
|
|
||||||
|
build_directory = "src"
|
||||||
|
|
||||||
|
def url_for_version(self, version):
|
||||||
|
# spack's default url_for_version may replace "242_src" with 2.42_src, causing a 404.
|
||||||
|
# Returning the correct url here instead of as 'url =' fixes this issue:
|
||||||
|
return (
|
||||||
|
"https://sourceforge.net/projects/ploticus/files/ploticus/2.42/ploticus242_src.tar.gz"
|
||||||
|
)
|
||||||
|
|
||||||
|
def setup_run_environment(self, env):
|
||||||
|
env.set("PLOTICUS_PREFABS", self.prefix.prefabs)
|
||||||
|
|
||||||
|
def edit(self, spec, prefix):
|
||||||
|
makefile = FileFilter("src/Makefile")
|
||||||
|
makefile.filter("CC = .*", "CC = {0}".format(spack_cc))
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
mkdir(prefix.bin)
|
||||||
|
mkdir(prefix.prefabs)
|
||||||
|
install("src/pl", prefix.bin)
|
||||||
|
install_tree("prefabs", prefix.prefabs)
|
@ -23,6 +23,15 @@ class PyNanobind(PythonPackage):
|
|||||||
maintainers("ma595")
|
maintainers("ma595")
|
||||||
|
|
||||||
version("master", branch="master", submodules=True)
|
version("master", branch="master", submodules=True)
|
||||||
|
version(
|
||||||
|
"1.5.2", tag="v1.5.2", commit="b0e24d5b0ab0d518317d6b263a257ae72d4d29a2", submodules=True
|
||||||
|
)
|
||||||
|
version(
|
||||||
|
"1.5.1", tag="v1.5.1", commit="ec6168d06dbf2ab94c31858223bd1d7617222706", submodules=True
|
||||||
|
)
|
||||||
|
version(
|
||||||
|
"1.5.0", tag="v1.5.0", commit="e85a51049db500383808aaa4a77306ff37d96131", submodules=True
|
||||||
|
)
|
||||||
version(
|
version(
|
||||||
"1.4.0", tag="v1.4.0", commit="05cba0ef85ba2bb68aa115af4b74c30aa2aa7bec", submodules=True
|
"1.4.0", tag="v1.4.0", commit="05cba0ef85ba2bb68aa115af4b74c30aa2aa7bec", submodules=True
|
||||||
)
|
)
|
||||||
|
@ -282,8 +282,8 @@ class Python(Package):
|
|||||||
patch("tkinter-3.10.patch", when="@3.10.0:3.10 ~tkinter")
|
patch("tkinter-3.10.patch", when="@3.10.0:3.10 ~tkinter")
|
||||||
patch("tkinter-3.11.patch", when="@3.11.0:3.11 ~tkinter")
|
patch("tkinter-3.11.patch", when="@3.11.0:3.11 ~tkinter")
|
||||||
|
|
||||||
# Ensure that distutils chooses correct compiler option for RPATH on cray:
|
# Ensure that distutils chooses correct compiler option for RPATH:
|
||||||
patch("cray-rpath-3.1.patch", when="@3 platform=cray")
|
patch("rpath-non-gcc.patch", when="@:3.11")
|
||||||
|
|
||||||
# Ensure that distutils chooses correct compiler option for RPATH on fj:
|
# Ensure that distutils chooses correct compiler option for RPATH on fj:
|
||||||
patch("fj-rpath-3.1.patch", when="@:3.9.7,3.10.0 %fj")
|
patch("fj-rpath-3.1.patch", when="@:3.9.7,3.10.0 %fj")
|
||||||
|
@ -140,7 +140,7 @@ class Seacas(CMakePackage):
|
|||||||
depends_on("netcdf-c@4.8.0:~mpi", when="~mpi")
|
depends_on("netcdf-c@4.8.0:~mpi", when="~mpi")
|
||||||
depends_on("hdf5+hl~mpi", when="~mpi")
|
depends_on("hdf5+hl~mpi", when="~mpi")
|
||||||
|
|
||||||
depends_on("fmt@8.1.0:", when="@2022-03-04:2022-05-16")
|
depends_on("fmt@8.1.0:9", when="@2022-03-04:2022-05-16")
|
||||||
depends_on("fmt@9.1.0", when="@2022-10-14")
|
depends_on("fmt@9.1.0", when="@2022-10-14")
|
||||||
depends_on("fmt@9.1.0:", when="@2023-05-30")
|
depends_on("fmt@9.1.0:", when="@2023-05-30")
|
||||||
depends_on("matio", when="+matio")
|
depends_on("matio", when="+matio")
|
||||||
|
@ -12,6 +12,7 @@ class Spdlog(CMakePackage):
|
|||||||
homepage = "https://github.com/gabime/spdlog"
|
homepage = "https://github.com/gabime/spdlog"
|
||||||
url = "https://github.com/gabime/spdlog/archive/v0.9.0.tar.gz"
|
url = "https://github.com/gabime/spdlog/archive/v0.9.0.tar.gz"
|
||||||
|
|
||||||
|
version("1.12.0", sha256="4dccf2d10f410c1e2feaff89966bfc49a1abb29ef6f08246335b110e001e09a9")
|
||||||
version("1.11.0", sha256="ca5cae8d6cac15dae0ec63b21d6ad3530070650f68076f3a4a862ca293a858bb")
|
version("1.11.0", sha256="ca5cae8d6cac15dae0ec63b21d6ad3530070650f68076f3a4a862ca293a858bb")
|
||||||
version("1.10.0", sha256="697f91700237dbae2326b90469be32b876b2b44888302afbc7aceb68bcfe8224")
|
version("1.10.0", sha256="697f91700237dbae2326b90469be32b876b2b44888302afbc7aceb68bcfe8224")
|
||||||
version("1.9.2", sha256="6fff9215f5cb81760be4cc16d033526d1080427d236e86d70bb02994f85e3d38")
|
version("1.9.2", sha256="6fff9215f5cb81760be4cc16d033526d1080427d236e86d70bb02994f85e3d38")
|
||||||
|
@ -14,6 +14,7 @@ class Subread(MakefilePackage):
|
|||||||
|
|
||||||
homepage = "https://subread.sourceforge.net/"
|
homepage = "https://subread.sourceforge.net/"
|
||||||
url = "https://sourceforge.net/projects/subread/files/subread-1.5.2/subread-1.5.2-source.tar.gz/download"
|
url = "https://sourceforge.net/projects/subread/files/subread-1.5.2/subread-1.5.2-source.tar.gz/download"
|
||||||
|
maintainers("snehring")
|
||||||
|
|
||||||
version("2.0.6", sha256="f0fdda6b98634d2946028948c220253e10a0f27c7fa5f24913b65b3ac6cbb045")
|
version("2.0.6", sha256="f0fdda6b98634d2946028948c220253e10a0f27c7fa5f24913b65b3ac6cbb045")
|
||||||
version("2.0.4", sha256="c54b37ed83b34318d8f119b5c02fb9d0a65c811195bcc9e1745df6daf74ca2db")
|
version("2.0.4", sha256="c54b37ed83b34318d8f119b5c02fb9d0a65c811195bcc9e1745df6daf74ca2db")
|
||||||
@ -31,12 +32,11 @@ def build(self, spec, prefix):
|
|||||||
with working_dir("src"):
|
with working_dir("src"):
|
||||||
if plat.startswith("linux"):
|
if plat.startswith("linux"):
|
||||||
filter_file("CC_EXEC = gcc", "CC_EXEC = {0}".format(spack_cc), "Makefile.Linux")
|
filter_file("CC_EXEC = gcc", "CC_EXEC = {0}".format(spack_cc), "Makefile.Linux")
|
||||||
if spec.target.family == "aarch64":
|
filter_file("-mtune=core2", "", "Makefile.Linux")
|
||||||
filter_file("-mtune=core2", "", "Makefile.Linux")
|
if spec.satisfies("@1.6.2:"):
|
||||||
if spec.satisfies("@1.6.2:2.0.0"):
|
filter_file("-mtune=core2", "", "longread-one/Makefile")
|
||||||
filter_file("-mtune=core2", "", "longread-one/Makefile")
|
if spec.satisfies("@1.6.0"):
|
||||||
elif spec.satisfies("@1.6.0"):
|
filter_file("-mtune=core2", "", "longread-mapping/Makefile")
|
||||||
filter_file("-mtune=core2", "", "longread-mapping/Makefile")
|
|
||||||
make("-f", "Makefile.Linux")
|
make("-f", "Makefile.Linux")
|
||||||
elif plat.startswith("darwin"):
|
elif plat.startswith("darwin"):
|
||||||
make("-f", "Makefile.MacOS")
|
make("-f", "Makefile.MacOS")
|
||||||
|
@ -46,6 +46,8 @@ class Superlu(CMakePackage, Package):
|
|||||||
conditional("cmake", when="@5:"), conditional("generic", when="@:4"), default="cmake"
|
conditional("cmake", when="@5:"), conditional("generic", when="@:4"), default="cmake"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
requires("build_system=cmake", when="platform=windows")
|
||||||
|
|
||||||
variant("pic", default=True, description="Build with position independent code")
|
variant("pic", default=True, description="Build with position independent code")
|
||||||
|
|
||||||
depends_on("blas")
|
depends_on("blas")
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import pathlib
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from spack.build_environment import dso_suffix
|
from spack.build_environment import dso_suffix
|
||||||
@ -366,6 +367,18 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
|
|||||||
conflicts("+stokhos", when="%xl")
|
conflicts("+stokhos", when="%xl")
|
||||||
conflicts("+stokhos", when="%xl_r")
|
conflicts("+stokhos", when="%xl_r")
|
||||||
|
|
||||||
|
# Current Windows support, only have serial static builds
|
||||||
|
conflicts(
|
||||||
|
"+shared",
|
||||||
|
when="platform=windows",
|
||||||
|
msg="Only static builds are supported on Windows currently.",
|
||||||
|
)
|
||||||
|
conflicts(
|
||||||
|
"+mpi",
|
||||||
|
when="platform=windows",
|
||||||
|
msg="Only serial builds are supported on Windows currently.",
|
||||||
|
)
|
||||||
|
|
||||||
# ###################### Dependencies ##########################
|
# ###################### Dependencies ##########################
|
||||||
|
|
||||||
# External Kokkos
|
# External Kokkos
|
||||||
@ -393,7 +406,9 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
|
|||||||
depends_on("cgns", when="+exodus")
|
depends_on("cgns", when="+exodus")
|
||||||
depends_on("cmake@3.23:", type="build", when="@14.0.0:")
|
depends_on("cmake@3.23:", type="build", when="@14.0.0:")
|
||||||
depends_on("hdf5+hl", when="+hdf5")
|
depends_on("hdf5+hl", when="+hdf5")
|
||||||
depends_on("hypre~internal-superlu~int64", when="+hypre")
|
for plat in ["cray", "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")
|
depends_on("kokkos-nvcc-wrapper", when="+wrapper")
|
||||||
depends_on("lapack")
|
depends_on("lapack")
|
||||||
# depends_on('perl', type=('build',)) # TriBITS finds but doesn't use...
|
# depends_on('perl', type=('build',)) # TriBITS finds but doesn't use...
|
||||||
@ -811,7 +826,7 @@ def define_tpl(trilinos_name, spack_name, have_dep):
|
|||||||
define("CMAKE_C_COMPILER", spec["mpi"].mpicc),
|
define("CMAKE_C_COMPILER", spec["mpi"].mpicc),
|
||||||
define("CMAKE_CXX_COMPILER", spec["mpi"].mpicxx),
|
define("CMAKE_CXX_COMPILER", spec["mpi"].mpicxx),
|
||||||
define("CMAKE_Fortran_COMPILER", spec["mpi"].mpifc),
|
define("CMAKE_Fortran_COMPILER", spec["mpi"].mpifc),
|
||||||
define("MPI_BASE_DIR", spec["mpi"].prefix),
|
define("MPI_BASE_DIR", str(pathlib.PurePosixPath(spec["mpi"].prefix))),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ class VtkM(CMakePackage, CudaPackage, ROCmPackage):
|
|||||||
|
|
||||||
version("master", branch="master")
|
version("master", branch="master")
|
||||||
version("release", branch="release")
|
version("release", branch="release")
|
||||||
|
version("2.1.0-rc1", sha256="337df672ac5c2e0b442571a1380aa98ae70a155c93488c32198d055cb893417a")
|
||||||
version(
|
version(
|
||||||
"2.0.0",
|
"2.0.0",
|
||||||
sha256="32643cf3564fa77f8e2a2a5456a574b6b2355bb68918eb62ccde493993ade1a3",
|
sha256="32643cf3564fa77f8e2a2a5456a574b6b2355bb68918eb62ccde493993ade1a3",
|
||||||
|
@ -72,6 +72,8 @@ class Vtk(CMakePackage):
|
|||||||
# We cannot build with both osmesa and qt in spack
|
# We cannot build with both osmesa and qt in spack
|
||||||
conflicts("+osmesa", when="+qt")
|
conflicts("+osmesa", when="+qt")
|
||||||
|
|
||||||
|
conflicts("%gcc@13", when="@9.2")
|
||||||
|
|
||||||
with when("+python"):
|
with when("+python"):
|
||||||
# Depend on any Python, add bounds below.
|
# Depend on any Python, add bounds below.
|
||||||
extends("python@2.7:", type=("build", "run"))
|
extends("python@2.7:", type=("build", "run"))
|
||||||
@ -165,8 +167,20 @@ class Vtk(CMakePackage):
|
|||||||
depends_on("proj@4:7", when="@9:")
|
depends_on("proj@4:7", when="@9:")
|
||||||
depends_on("cgns@4.1.1:+mpi", when="@9.1: +mpi")
|
depends_on("cgns@4.1.1:+mpi", when="@9.1: +mpi")
|
||||||
depends_on("cgns@4.1.1:~mpi", when="@9.1: ~mpi")
|
depends_on("cgns@4.1.1:~mpi", when="@9.1: ~mpi")
|
||||||
depends_on("seacas@2021-05-12:+mpi", when="@9.1: +mpi")
|
with when("@9.1:"):
|
||||||
depends_on("seacas@2021-05-12:~mpi", when="@9.1: ~mpi")
|
depends_on("seacas+mpi", when="+mpi")
|
||||||
|
depends_on("seacas~mpi", when="~mpi")
|
||||||
|
depends_on("seacas@2021-05-12:")
|
||||||
|
|
||||||
|
# seacas@2023-05-30 does not provide needed SEACASIoss_INCLUDE_DIRS:
|
||||||
|
# CMake Error at CMake/vtkModule.cmake:5552 (message):
|
||||||
|
# The variable `SEACASIoss_INCLUDE_DIRS` was expected to have been available,
|
||||||
|
# but was not defined:
|
||||||
|
conflicts("seacas@2023-05-30", when="@:9.2")
|
||||||
|
|
||||||
|
# vtk@9.2: need Ioss::Utils::get_debug_stream() which only 2022-10-14 provides,
|
||||||
|
# and to be safe against other issues, make them build with this version only:
|
||||||
|
depends_on("seacas@2022-10-14", when="@9.2:")
|
||||||
depends_on("nlohmann-json", when="@9.2:")
|
depends_on("nlohmann-json", when="@9.2:")
|
||||||
|
|
||||||
# For finding Fujitsu-MPI wrapper commands
|
# For finding Fujitsu-MPI wrapper commands
|
||||||
@ -186,6 +200,13 @@ class Vtk(CMakePackage):
|
|||||||
when="@9.1",
|
when="@9.1",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@when("@9.2:")
|
||||||
|
def patch(self):
|
||||||
|
# provide definition for Ioss::Init::Initializer::Initializer(),
|
||||||
|
# required on macOS, as "-undefined error" is the default,
|
||||||
|
# but not on Linux, as undefined symbols are tolerated
|
||||||
|
filter_file("TARGETS Ioss", "TARGETS Ioss Ionit", "ThirdParty/ioss/CMakeLists.txt")
|
||||||
|
|
||||||
def url_for_version(self, version):
|
def url_for_version(self, version):
|
||||||
url = "http://www.vtk.org/files/release/{0}/VTK-{1}.tar.gz"
|
url = "http://www.vtk.org/files/release/{0}/VTK-{1}.tar.gz"
|
||||||
return url.format(version.up_to(2), version)
|
return url.format(version.up_to(2), version)
|
||||||
|
Loading…
Reference in New Issue
Block a user