This repository contains several Github Action workflows that are used to generate binaries to bootstrap Spack. Stable binary artifacts are tagged and released.
Spack has some minimum requirements to work correctly. Most of them are
currently system requirements i.e. they are assumed to be present on
the machines where Spack is run.
This is usually the case for common software found on linux
systems,
such as the patch
or tar
executables.
A few less common, but critical, dependencies are
instead bootstrapped by Spack if not present on the system.
These are currently:
clingo
: needed to concretize specsGnuPG
: needed to sign and verify binariespatchelf
: needed to relocate binaries onlinux
The purpose of this repository is to define workflows that generate binary packages suitable for bootstrapping Spack on most architectures. For completeness we report a summary of Spack requirements below:
Name | Supported Versions | System Requirement | Requirement Reason |
---|---|---|---|
Python | 3.6-3.13 | Yes | Interpreter for Spack |
C/C++ compilers | - | Yes | Building software |
GNU make | - | Yes | Building software |
patch | - | Yes | Building software |
curl | - | Yes | Fetching archives |
tar | - | Yes | Extract/create archives |
gzip | - | Yes | Archive compression |
unzip | - | Yes | Archive compression |
bzip2 | - | Yes | Archive compression |
xz | - | Yes | Archive compression |
zstd | - | Yes | Archive compression |
file | - | Yes | Binary packages |
patchelf | 0.13 or later | No | Binary packages |
GnuPG | 2.3 or later | No | Binary packages |
clingo | 5.5 | No | Concretization |
git | - | Yes | Software repositories |
hg | - | Yes | Software repositories |
svn | - | Yes | Software repositories |
A few different toolchains have been used to produce binaries depending on the target platform and architecture. Choices have been mainly driven by compatibility with the manylinux project.
Platform | Compatibility | Compiler Toolchain | Architecture | Python |
---|---|---|---|---|
linux |
glibc 2.17 or later |
GCC 10.2.1 |
x86_64 |
3.6-3.13 |
linux |
glibc 2.17 or later |
GCC 10.2.1 |
aarch64 |
3.6-3.13 |
linux |
glibc 2.17 or later |
GCC 10.2.1 |
ppc64le |
3.6-3.13 |
darwin |
macOS 10.13 or later |
Apple Clang 15.0.0 |
x86_64 |
3.6-3.13 |
darwin |
macOS 11 or later |
Apple Clang 15.0.0 |
aarch64 |
3.8-3.13 |
All the linux
workflows make use of a slightly customized
manylinux2014 image. The customization is minimal
and amounts to building multi-arch images with the same name
on Github Actions.
To avoid having runtime dependencies on libstdc++.so
, clingo
is
linked against a static version of the runtime library.
On darwin
GnuPG
had to be built with --disable-nls --without-libintl-prefix
to avoid having binary requirements on
the system libintl
installed in the CI environment.