Use gnuconfig package for config file replacement for RISC-V. (#26364)
* Use gnuconfig package for config file replacement for RISC-V. This extends the changes in #26035 to handle RISC-V. Before this change, many packages fail to configure on riscv64 due to config.guess being too old to know about RISC-V. This is seen out of the box when clingo fails to build from source due to pkgconfig failing to configure, throwing error: "configure: error: cannot guess build type; you must specify one". * Add riscv64 architecture * Update vendored archspec from upstream project. These archspec updates include changes needed to support riscv64. * Update archspec's __init__.py to reflect the commit hash of archspec being used.
This commit is contained in:
parent
d998ea1bd4
commit
47607dcac5
2
lib/spack/external/__init__.py
vendored
2
lib/spack/external/__init__.py
vendored
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
* Homepage: https://pypi.python.org/pypi/archspec
|
* Homepage: https://pypi.python.org/pypi/archspec
|
||||||
* Usage: Labeling, comparison and detection of microarchitectures
|
* Usage: Labeling, comparison and detection of microarchitectures
|
||||||
* Version: 0.1.2 (commit 8940a8b099a54ded21f8cf4314c4b83b558bb6d1)
|
* Version: 0.1.2 (commit 85757b6666422fca86aa882a769bf78b0f992f54)
|
||||||
|
|
||||||
argparse
|
argparse
|
||||||
--------
|
--------
|
||||||
|
13
lib/spack/external/archspec/README.md
vendored
13
lib/spack/external/archspec/README.md
vendored
@ -49,6 +49,19 @@ $ tox
|
|||||||
congratulations :)
|
congratulations :)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Citing Archspec
|
||||||
|
|
||||||
|
If you are referencing `archspec` in a publication, please cite the following
|
||||||
|
paper:
|
||||||
|
|
||||||
|
* Massimiliano Culpo, Gregory Becker, Carlos Eduardo Arango Gutierrez, Kenneth
|
||||||
|
Hoste, and Todd Gamblin.
|
||||||
|
[**`archspec`: A library for detecting, labeling, and reasoning about
|
||||||
|
microarchitectures**](https://tgamblin.github.io/pubs/archspec-canopie-hpc-2020.pdf).
|
||||||
|
In *2nd International Workshop on Containers and New Orchestration Paradigms
|
||||||
|
for Isolated Environments in HPC (CANOPIE-HPC'20)*, Online Event, November
|
||||||
|
12, 2020.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Archspec is distributed under the terms of both the MIT license and the
|
Archspec is distributed under the terms of both the MIT license and the
|
||||||
|
19
lib/spack/external/archspec/cpu/detect.py
vendored
19
lib/spack/external/archspec/cpu/detect.py
vendored
@ -306,3 +306,22 @@ def compatibility_check_for_aarch64(info, target):
|
|||||||
and (target.vendor == vendor or target.vendor == "generic")
|
and (target.vendor == vendor or target.vendor == "generic")
|
||||||
and target.features.issubset(features)
|
and target.features.issubset(features)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@compatibility_check(architecture_family="riscv64")
|
||||||
|
def compatibility_check_for_riscv64(info, target):
|
||||||
|
"""Compatibility check for riscv64 architectures."""
|
||||||
|
basename = "riscv64"
|
||||||
|
uarch = info.get("uarch")
|
||||||
|
|
||||||
|
# sifive unmatched board
|
||||||
|
if uarch == "sifive,u74-mc":
|
||||||
|
uarch = "u74mc"
|
||||||
|
# catch-all for unknown uarchs
|
||||||
|
else:
|
||||||
|
uarch = "riscv64"
|
||||||
|
|
||||||
|
arch_root = TARGETS[basename]
|
||||||
|
return (target == arch_root or arch_root in target.ancestors) and (
|
||||||
|
target == uarch or target.vendor == "generic"
|
||||||
|
)
|
||||||
|
@ -2017,6 +2017,44 @@
|
|||||||
"features": [],
|
"features": [],
|
||||||
"compilers": {
|
"compilers": {
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"riscv64": {
|
||||||
|
"from": [],
|
||||||
|
"vendor": "generic",
|
||||||
|
"features": [],
|
||||||
|
"compilers": {
|
||||||
|
"gcc": [
|
||||||
|
{
|
||||||
|
"versions": "7.1:",
|
||||||
|
"flags" : "-march=rv64gc"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"clang": [
|
||||||
|
{
|
||||||
|
"versions": "9.0:",
|
||||||
|
"flags" : "-march=rv64gc"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"u74mc": {
|
||||||
|
"from": ["riscv64"],
|
||||||
|
"vendor": "SiFive",
|
||||||
|
"features": [],
|
||||||
|
"compilers": {
|
||||||
|
"gcc": [
|
||||||
|
{
|
||||||
|
"versions": "10.2:",
|
||||||
|
"flags" : "-march=rv64gc -mtune=sifive-7-series"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"clang" : [
|
||||||
|
{
|
||||||
|
"versions": "12.0:",
|
||||||
|
"flags" : "-march=rv64gc -mtune=sifive-7-series"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"feature_aliases": {
|
"feature_aliases": {
|
||||||
|
@ -60,16 +60,18 @@ class AutotoolsPackage(PackageBase):
|
|||||||
def patch_config_files(self):
|
def patch_config_files(self):
|
||||||
"""
|
"""
|
||||||
Whether or not to update old ``config.guess`` and ``config.sub`` files
|
Whether or not to update old ``config.guess`` and ``config.sub`` files
|
||||||
distributed with the tarball. This currently only applies to ``ppc64le:``
|
distributed with the tarball. This currently only applies to
|
||||||
and ``aarch64:`` target architectures. The substitutes are taken from the
|
``ppc64le:``, ``aarch64:``, and ``riscv64`` target architectures. The
|
||||||
``gnuconfig`` package, which is automatically added as a build dependency
|
substitutes are taken from the ``gnuconfig`` package, which is
|
||||||
for these architectures. In case system versions of these config files are
|
automatically added as a build dependency for these architectures. In
|
||||||
required, the ``gnuconfig`` package can be marked external with a prefix
|
case system versions of these config files are required, the
|
||||||
pointing to the directory containing the system ``config.guess`` and
|
``gnuconfig`` package can be marked external with a prefix pointing to
|
||||||
``config.sub`` files.
|
the directory containing the system ``config.guess`` and ``config.sub``
|
||||||
|
files.
|
||||||
"""
|
"""
|
||||||
return (self.spec.satisfies('target=ppc64le:')
|
return (self.spec.satisfies('target=ppc64le:')
|
||||||
or self.spec.satisfies('target=aarch64:'))
|
or self.spec.satisfies('target=aarch64:')
|
||||||
|
or self.spec.satisfies('target=riscv64:'))
|
||||||
|
|
||||||
#: Whether or not to update ``libtool``
|
#: Whether or not to update ``libtool``
|
||||||
#: (currently only for Arm/Clang/Fujitsu compilers)
|
#: (currently only for Arm/Clang/Fujitsu compilers)
|
||||||
@ -99,6 +101,7 @@ def patch_config_files(self):
|
|||||||
|
|
||||||
depends_on('gnuconfig', type='build', when='target=ppc64le:')
|
depends_on('gnuconfig', type='build', when='target=ppc64le:')
|
||||||
depends_on('gnuconfig', type='build', when='target=aarch64:')
|
depends_on('gnuconfig', type='build', when='target=aarch64:')
|
||||||
|
depends_on('gnuconfig', type='build', when='target=riscv64:')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _removed_la_files_log(self):
|
def _removed_la_files_log(self):
|
||||||
@ -121,7 +124,8 @@ def _do_patch_config_files(self):
|
|||||||
"""Some packages ship with older config.guess/config.sub files and
|
"""Some packages ship with older config.guess/config.sub files and
|
||||||
need to have these updated when installed on a newer architecture.
|
need to have these updated when installed on a newer architecture.
|
||||||
In particular, config.guess fails for PPC64LE for version prior
|
In particular, config.guess fails for PPC64LE for version prior
|
||||||
to a 2013-06-10 build date (automake 1.13.4) and for ARM (aarch64).
|
to a 2013-06-10 build date (automake 1.13.4) and for ARM (aarch64) and
|
||||||
|
RISC-V (riscv64).
|
||||||
"""
|
"""
|
||||||
if not self.patch_config_files:
|
if not self.patch_config_files:
|
||||||
return
|
return
|
||||||
@ -133,6 +137,8 @@ def _do_patch_config_files(self):
|
|||||||
config_arch = 'ppc64le'
|
config_arch = 'ppc64le'
|
||||||
elif self.spec.satisfies('target=aarch64:'):
|
elif self.spec.satisfies('target=aarch64:'):
|
||||||
config_arch = 'aarch64'
|
config_arch = 'aarch64'
|
||||||
|
elif self.spec.satisfies('target=riscv64:'):
|
||||||
|
config_arch = 'riscv64'
|
||||||
else:
|
else:
|
||||||
config_arch = 'local'
|
config_arch = 'local'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user