v0.13.0
is our biggest Spack release yet, with many new major features.
From facility deployment to improved environments, microarchitecture
support, and auto-generated build farms, this release has features for all of
our users.
Spack grew by over 700 packages in the past year, and the project now has over 450 contributors. Thanks to all of you for making this release possible.
- Chaining: use dependencies from external "upstream" Spack instances
- Environments now behave more like virtualenv/conda
- Each env has a view: a directory with all packages symlinked in
- Activating an environment sets
PATH
,LD_LIBRARY_PATH
,CPATH
,CMAKE_PREFIX_PATH
,PKG_CONFIG_PATH
, etc. to point to this view.
- Spack detects and builds specifically for your microarchitecture
- named, understandable targets like
skylake
,broadwell
,power9
,zen2
- Spack knows which compilers can build for which architectures
- Packages can easily query support for features like
avx512
andsse3
- You can pick a target with, e.g.
spack install foo target=icelake
- named, understandable targets like
- Spack stacks: combinatorial environments for facility deployment
- Environments can now build cartesian products of specs (with
matrix:
) - Conditional syntax support to exclude certain builds from the stack
- Environments can now build cartesian products of specs (with
- Projections: ability to build easily navigable symlink trees environments
- Support no-source packages (BundlePackage) to aggregate related packages
- Extensions: users can write custom commands that live outside of Spack repo
- Support ARM and Fujitsu compilers
spack release-jobs
can detectpackage.py
changes and generate.gitlab-ci.yml
to create binaries for an environment or stack in parallel (initial support -- will change in future release).- Results of build pipelines can be uploaded to a CDash server.
- Spack can now upload/fetch from package mirrors in Amazon S3
spack mirror create --all
downloads all package sources/resources/patchesspack dev-build
runs phases of the install pipeline on the working directoryspack deprecate
permanently symlinks an old, unwanted package to a new onespack verify
chcecks that packages' files match what was originally installedspack find --json
printsJSON
that is easy to parse with, e.g.jq
spack find --format FORMAT
allows you to flexibly print package metadataspack spec --json
prints JSON version ofspec.yaml
- Auto-build requested compilers if they do not exist
- Spack automatically adds
RPATHs
needed to make executables find compiler runtime libraries (e.g., path to newerlibstdc++
inicpc
org++
) - setup-env.sh is now compatible with Bash, Dash, and Zsh
- Spack now caps build jobs at min(16, ncores) by default
spack compiler find
now also throttles number of spawned processes- Spack now writes stage directories directly to
$TMPDIR
instead of symlinking stages within$spack/var/spack/cache
. - Improved and more powerful
spec
format strings - You can pass a
spec.yaml
file anywhere in the CLI you can type a spec. - Many improvements to binary caching
- Gradually supporting new features from Environment Modules v4
spack edit
respectsVISUAL
environment variable- Simplified package syntax for specifying build/run environment modifications
- Numerous improvements to support for environments across Spack commands
- Concretization improvements
- Multi-lingual documentation (Started a Japanese translation)
- Tutorial now has its own site at spack-tutorial.readthedocs.io
- This enables us to keep multiple versions of the tutorial around
- Spack no longer supports dotkit (LLNL's homegrown, now deprecated module tool)
spack build
,spack configure
,spack diy
deprecated in favor ofspack dev-build
andspack install
- 3,563 total packages (718 added since 0.12.1)
- Spack now defaults to Python 3 (previously preferred 2.7 by default)
- Much improved ARM support thanks to Fugaku (RIKEN) and SNL teams
- Support new special versions: master, trunk, and head (in addition to develop)
- Better finding logic for libraries and headers
This is a minor bugfix release, with a minor fix in the tutorial and a flake8
fix.
Bugfixes
- Add
r
back to regex strings in binary distribution - Fix gcc install version in the tutorial
- Spack environments
spack.yaml
andspack.lock
files for tracking dependencies- Custom configurations via command line
- Better support for linking Python packages into view directories
- Packages have more control over compiler flags via flag handlers
- Better support for module file generation
- Better support for Intel compilers, Intel MPI, etc.
- Many performance improvements, improved startup time
- As of this release, all of Spack is permissively licensed under Apache-2.0 or MIT, at the user's option.
- Consents from over 300 contributors were obtained to make this relicense possible.
- Previous versions were distributed under the LGPL license, version 2.1.
Over 2,900 packages (800 added since last year)
Spack would not be possible without our community. Thanks to all of our contributors for the new features and packages in this release!
This release contains the following fixes:
- Fixes for
gfortran
7 compiler detection (#7017) - Fixes for exceptions thrown during module generation (#7173)
This release contains bugfixes for compiler flag handling. There were issues in v0.11.0
that caused some packages to be built without proper optimization.
Fixes:
- Issue #6999: FFTW installed with Spack 0.11.0 gets built without optimisations
Includes:
- PR #6415: Fixes for flag handling behavior
- PR #6960: Fix type issues with setting flag handlers
- 880e319: Upstream fixes to
list_url
in various R packages
Spack v0.11.0 contains many improvements since v0.10.0. Below is a summary of the major features, broken down by category.
- Spack now has 2,178 packages (from 1,114 in v0.10.0)
- Many more Python packages (356) and R packages (471)
- 48 Exascale Proxy Apps (try
spack list -t proxy-app
)
- Relocatable binary packages (
spack buildcache
, #4854) - Spack now fully supports Python 3 (#3395)
- Packages can be tagged and searched by tags (#4786)
- Custom module file templates using Jinja (#3183)
spack bootstrap
command now sets up a basic module environment (#3057)- Simplified and better organized help output (#3033)
- Improved, less redundant
spack install
output (#5714, #5950) - Reworked
spack dependents
andspack dependencies
commands (#4478)
- Multi-valued variants (#2386)
- New
conflicts()
directive (#3125) - New dependency type:
test
dependencies (#5132) - Packages can require their own patches on dependencies (#5476)
depends_on(..., patches=<patch list>)
- Build interface for passing linker information through Specs (#1875)
- Major packages that use blas/lapack now use this interface
- Flag handlers allow packages more control over compiler flags (#6415)
- Package subclasses support many more build systems:
- autotools, perl, qmake, scons, cmake, makefile, python, R, WAF
- package-level support for installing Intel HPC products (#4300)
spack blame
command shows contributors to packages (#5522)spack create
now guesses many more build systems (#2707)- Better URL parsing to guess package version URLs (#2972)
- Much improved
PythonPackage
support (#3367)
- Much faster concretization (#5716, #5783)
- Improved output redirection (redirecting build output works properly #5084)
- Numerous improvements to internal structure and APIs
- Many updates to documentation
- New tutorial material from SC17
- configuration
- build systems
- build interface
- working with module generation
- Documentation on docker workflows and best practices
- No longer build Python eggs -- installations are plain directories (#3587)
- Improved filtering of system paths from build PATHs and RPATHs (#2083, #3910)
- Git submodules are properly handled on fetch (#3956)
- Can now set default number of parallel build jobs in
config.yaml
- Improvements to
setup-env.csh
(#4044) - Better default compiler discovery on Mac OS X (#3427)
- clang will automatically mix with gfortran
- Improved compiler detection on Cray machines (#3075)
- Better support for IBM XL compilers
- Better tab completion
- Resume gracefully after prematurely terminated partial installs (#4331)
- Better mesa support (#5170)
Spack would not be possible without our community. Thanks to all of our contributors for the new features and packages in this release!
This is Spack v0.10.0
. With this release, we will start to push Spack
releases more regularly. This is the last Spack release without
automated package testing. With the next release, we will begin to run
package tests in addition to unit tests.
Spack has grown rapidly from 422 to
1,114 packages,
thanks to the hard work of over 100 contributors. Below is a condensed
version of all the changes since v0.9.1
.
- Grew from 422 to 1,114 packages
- Includes major updates like X11, Qt
- Expanded HPC, R, and Python ecosystems
- Major speed improvements for spack find and concretization
- Completely reworked architecture support
- Platforms can have front-end and back-end OS/target combinations
- Much better support for Cray and BG/Q cross-compiled environments
- Downloads are now cached locally
- Support installations in deeply nested directories: patch long shebangs using
sbang
- Easier global configuration via config.yaml
- customize install, stage, and cache locations
- Hierarchical configuration scopes: default, site, user
- Platform-specific scopes allow better per-platform defaults
- Ability to set
cflags
,cxxflags
,fflags
on the command line - YAML-configurable support for both Lmod and tcl modules in mainline
spack install
supports --dirty option for emergencies
- Support multiple dependency types:
build
,link
, andrun
- Added
Package
base classes for custom build systemsAutotoolsPackage
,CMakePackage
,PythonPackage
, etc.spack create
now guesses many more build systems
- Development environment integration with
spack setup
- New interface to pass linking information via
spec
objects- Currently used for
BLAS
/LAPACK
/SCALAPACK
libraries - Polymorphic virtual dependency attributes:
spec['blas'].blas_libs
- Currently used for
- Unit tests run continuously on Travis CI for Mac and Linux
- Switched from
nose
topytest
for unit tests.- Unit tests take 1 minute now instead of 8
- Massively expanded documentation
- Docs are now hosted on spack.readthedocs.io