Update CHANGELOG.md for v0.19.0
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
This commit is contained in:
		
							
								
								
									
										268
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										268
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,3 +1,271 @@ | ||||
| # v0.19.0 (2022-11-11) | ||||
|  | ||||
| `v0.19.0` is a major feature release. | ||||
|  | ||||
| ## Major features in this release | ||||
|  | ||||
| 1. **Package requirements** | ||||
|  | ||||
|    Spack's traditional [package preferences]( | ||||
|      https://spack.readthedocs.io/en/latest/build_settings.html#package-preferences) | ||||
|    are soft, but we've added hard requriements to `packages.yaml` and `spack.yaml` | ||||
|    (#32528, #32369). Package requirements use the same syntax as specs: | ||||
|  | ||||
|    ```yaml | ||||
|    packages: | ||||
|      libfabric: | ||||
|        require: "@1.13.2" | ||||
|      mpich: | ||||
|        require: | ||||
|        - one_of: ["+cuda", "+rocm"] | ||||
|    ``` | ||||
|  | ||||
|    More details in [the docs]( | ||||
|      https://spack.readthedocs.io/en/latest/build_settings.html#package-requirements). | ||||
|  | ||||
| 2. **Environment UI Improvements** | ||||
|  | ||||
|    * Fewer surprising modifications to `spack.yaml` (#33711): | ||||
|  | ||||
|      * `spack install` in an environment will no longer add to the `specs:` list; you'll | ||||
|        need to either use `spack add <spec>` or `spack install --add <spec>`. | ||||
|  | ||||
|      * Similarly, `spack uninstall` will not remove from your environment's `specs:` | ||||
|        list; you'll need to use `spack remove` or `spack uninstall --remove`. | ||||
|  | ||||
|      This will make it easier to manage an environment, as there is clear separation | ||||
|      between the stack to be installed (`spack.yaml`/`spack.lock`) and which parts of | ||||
|      it should be installed (`spack install` / `spack uninstall`). | ||||
|  | ||||
|    * `concretizer:unify:true` is now the default mode for new environments (#31787) | ||||
|  | ||||
|      We see more users creating `unify:true` environments now. Users who need | ||||
|      `unify:false` can add it to their environment to get the old behavior. This will | ||||
|      concretize every spec in the environment independently. | ||||
|  | ||||
|    * Include environment configuration from URLs (#29026, [docs]( | ||||
|        https://spack.readthedocs.io/en/latest/environments.html#included-configurations)) | ||||
|  | ||||
|      You can now include configuration in your environment directly from a URL: | ||||
|  | ||||
|      ```yaml | ||||
|      spack: | ||||
|        include: | ||||
|        - https://github.com/path/to/raw/config/compilers.yaml | ||||
|      ``` | ||||
|  | ||||
| 4. **Multiple Build Systems** | ||||
|  | ||||
|    An increasing number of packages in the ecosystem need the ability to support | ||||
|    multiple build systems (#30738, [docs]( | ||||
|      https://spack.readthedocs.io/en/latest/packaging_guide.html#multiple-build-systems)), | ||||
|    either across versions, across platforms, or within the same version of the software. | ||||
|    This has been hard to support through multiple inheritance, as methods from different | ||||
|    build system superclasses would conflict. `package.py` files can now define separate | ||||
|    builder classes with installation logic for different build systems, e.g.: | ||||
|  | ||||
|    ```python | ||||
|    class ArpackNg(CMakePackage, AutotoolsPackage): | ||||
|  | ||||
|        build_system( | ||||
|            conditional("cmake", when="@0.64:"), | ||||
|            conditional("autotools", when="@:0.63"), | ||||
|            default="cmake", | ||||
|        ) | ||||
|  | ||||
|    class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder): | ||||
|        def cmake_args(self): | ||||
|            pass | ||||
|  | ||||
|    class Autotoolsbuilder(spack.build_systems.autotools.AutotoolsBuilder): | ||||
|        def configure_args(self): | ||||
|            pass | ||||
|    ``` | ||||
|  | ||||
| 5. **Compiler and variant propagation** | ||||
|  | ||||
|    Currently, compiler flags and variants are inconsistent: compiler flags set for a | ||||
|    package are inherited by its dependencies, while variants are not. We should have | ||||
|    these be consistent by allowing for inheritance to be enabled or disabled for both | ||||
|    variants and compiler flags. | ||||
|  | ||||
|    Example syntax: | ||||
|    - `package ++variant`: | ||||
|          enabled variant that will be propagated to dependencies | ||||
|    - `package +variant`: | ||||
|          enabled variant that will NOT be propagated to dependencies | ||||
|    - `package ~~variant`: | ||||
|          disabled variant that will be propagated to dependencies | ||||
|    - `package ~variant`: | ||||
|          disabled variant that will NOT be propagated to dependencies | ||||
|    - `package cflags==-g`: | ||||
|          `cflags` will be propagated to dependencies | ||||
|    - `package cflags=-g`: | ||||
|          `cflags` will NOT be propagated to dependencies | ||||
|  | ||||
|    Syntax for non-boolan variants is similar to compiler flags. More in the docs for | ||||
|    [variants]( | ||||
|      https://spack.readthedocs.io/en/latest/basic_usage.html#variants) and [compiler flags]( | ||||
|      https://spack.readthedocs.io/en/latest/basic_usage.html#compiler-flags). | ||||
|  | ||||
| 6. **Enhancements to git version specifiers** | ||||
|  | ||||
|    * `v0.18.0` added the ability to use git commits as versions. You can now use the | ||||
|      `git.` prefix to specify git tags or branches as versions. All of these are valid git | ||||
|      versions in `v0.19` (#31200): | ||||
|  | ||||
|      ```console | ||||
|      foo@abcdef1234abcdef1234abcdef1234abcdef1234      # raw commit | ||||
|      foo@git.abcdef1234abcdef1234abcdef1234abcdef1234  # commit with git prefix | ||||
|      foo@git.develop                                   # the develop branch | ||||
|      foo@git.0.19                                      # use the 0.19 tag | ||||
|      ``` | ||||
|  | ||||
|    * `v0.19` also gives you more control over how Spack interprets git versions, in case | ||||
|      Spack cannot detect the version from the git repository. You can suffix a git | ||||
|      version with `=<version>` to force Spack to concretize it as a particular version | ||||
|      (#30998, #31914, #32257): | ||||
|  | ||||
|      ```console | ||||
|      # use mybranch, but treat it as version 3.2 for version comparison | ||||
|      foo@git.mybranch=3.2 | ||||
|  | ||||
|      # use the given commit, but treat it as develop for version comparison | ||||
|      foo@git.abcdef1234abcdef1234abcdef1234abcdef1234=develop | ||||
|      ``` | ||||
|  | ||||
|      More in [the docs]( | ||||
|        https://spack.readthedocs.io/en/latest/basic_usage.html#version-specifier) | ||||
|  | ||||
| 7. **Changes to Cray EX Support** | ||||
|  | ||||
|    Cray machines have historically had their own "platform" within Spack, because we | ||||
|    needed to go through the module system to leverage compilers and MPI installations on | ||||
|    these machines. The Cray EX programming environment now provides standalone `craycc` | ||||
|    executables and proper `mpicc` wrappers, so Spack can treat EX machines like Linux | ||||
|    with extra packages (#29392). | ||||
|  | ||||
|    We expect this to greatly reduce bugs, as external packages and compilers can now be | ||||
|    used by prefix instead of through modules. We will also no longer be subject to | ||||
|    reproducibility issues when modules change from Cray PE release to release and from | ||||
|    site to site. This also simplifies dealing with the underlying Linux OS on cray | ||||
|    systems, as Spack will properly model the machine's OS as either SuSE or RHEL. | ||||
|  | ||||
| 8. **Improvements to tests and testing in CI** | ||||
|  | ||||
|    * `spack ci generate --tests` will generate a `.gitlab-ci.yml` file that not only does | ||||
|      builds but also runs tests for built packages (#27877). Public GitHub pipelines now | ||||
|      also run tests in CI. | ||||
|  | ||||
|    * `spack test run --explicit` will only run tests for packages that are explicitly | ||||
|      installed, instead of all packages. | ||||
|  | ||||
| 9. **Experimental binding link model** | ||||
|  | ||||
|    You can add a new option to `config.yaml` to make Spack embed absolute paths to | ||||
|    needed shared libraries in ELF executables and shared libraries on Linux (#31948, [docs]( | ||||
|      https://spack.readthedocs.io/en/latest/config_yaml.html#shared-linking-bind)): | ||||
|  | ||||
|    ```yaml | ||||
|    config: | ||||
|      shared_linking: | ||||
|        type: rpath | ||||
|        bind: true | ||||
|    ``` | ||||
|  | ||||
|    This can improve launch time at scale for parallel applications, and it can make | ||||
|    installations less susceptible to environment variables like `LD_LIBRARY_PATH`, even | ||||
|    especially when dealing with external libraries that use `RUNPATH`. You can think of | ||||
|    this as a faster, even higher-precedence version of `RPATH`. | ||||
|  | ||||
| ## Other new features of note | ||||
|  | ||||
| * `spack spec` prints dependencies more legibly. Dependencies in the output now appear | ||||
|   at the *earliest* level of indentation possible (#33406) | ||||
| * You can override `package.py` attributes like `url`, directly in `packages.yaml` | ||||
|   (#33275, [docs]( | ||||
|     https://spack.readthedocs.io/en/latest/build_settings.html#assigning-package-attributes)) | ||||
| * There are a number of new architecture-related format strings you can use in Spack | ||||
|   configuration files to specify paths (#29810, [docs]( | ||||
|     https://spack.readthedocs.io/en/latest/configuration.html#config-file-variables)) | ||||
| * Spack now supports bootstrapping Clingo on Windows (#33400) | ||||
| * There is now support for an `RPATH`-like library model on Windows (#31930) | ||||
|  | ||||
| ## Performance Improvements | ||||
|  | ||||
| * Major performance improvements for installation from binary caches (#27610, #33628, | ||||
|   #33636, #33608, #33590, #33496) | ||||
| * Test suite can now be parallelized using `xdist` (used in GitHub Actions) (#32361) | ||||
| * Reduce lock contention for parallel builds in environments (#31643) | ||||
|  | ||||
| ## New binary caches and stacks | ||||
|  | ||||
| * We now build nearly all of E4S with `oneapi` in our buildcache (#31781, #31804, | ||||
|   #31804, #31803, #31840, #31991, #32117, #32107, #32239) | ||||
| * Added 3 new machine learning-centric stacks to binary cache: `x86_64_v3`, CUDA, ROCm | ||||
|   (#31592, #33463) | ||||
|  | ||||
| ## Removals and Deprecations | ||||
|  | ||||
| * Support for Python 3.5 is dropped (#31908). Only Python 2.7 and 3.6+ are officially | ||||
|   supported. | ||||
|  | ||||
| * This is the last Spack release that will support Python 2 (#32615). Spack `v0.19` | ||||
|   will emit a deprecation warning if you run it with Python 2, and Python 2 support will | ||||
|   soon be removed from the `develop` branch. | ||||
|  | ||||
| * `LD_LIBRARY_PATH` is no longer set by default by `spack load` or module loads. | ||||
|  | ||||
|   Setting `LD_LIBRARY_PATH` in Spack environments/modules can cause binaries from | ||||
|   outside of Spack to crash, and Spack's own builds use `RPATH` and do not need | ||||
|   `LD_LIBRARY_PATH` set in order to run. If you still want the old behavior, you | ||||
|   can run these commands to configure Spack to set `LD_LIBRARY_PATH`: | ||||
|  | ||||
|   ```console | ||||
|   spack config add modules:prefix_inspections:lib64:[LD_LIBRARY_PATH] | ||||
|   spack config add modules:prefix_inspections:lib:[LD_LIBRARY_PATH] | ||||
|   ``` | ||||
|  | ||||
| * The `spack:concretization:[together|separately]` has been removed after being | ||||
|   deprecated in `v0.18`. Use `concretizer:unify:[true|false]`. | ||||
| * `config:module_roots` is no longer supported after being deprecated in `v0.18`. Use | ||||
|   configuration in module sets instead (#28659, [docs]( | ||||
|     https://spack.readthedocs.io/en/latest/module_file_support.html)). | ||||
| * `spack activate` and `spack deactivate` are no longer supported, having been | ||||
|   deprecated in `v0.18`. Use an environment with a view instead of | ||||
|   activating/deactivating ([docs]( | ||||
|     https://spack.readthedocs.io/en/latest/environments.html#configuration-in-spack-yaml)). | ||||
| * The old YAML format for buildcaches is now deprecated (#33707). If you are using an | ||||
|   old buildcache with YAML metadata you will need to regenerate it with JSON metadata. | ||||
| * `spack bootstrap trust` and `spack bootstrap untrust` are deprecated in favor of | ||||
|   `spack bootstrap enable` and `spack bootstrap disable` and will be removed in `v0.20`. | ||||
|   (#33600) | ||||
| * The `graviton2` architecture has been renamed to `neoverse_n1`, and `graviton3` | ||||
|   is now `neoverse_v1`. Buildcaches using the old architecture names will need to be rebuilt. | ||||
| * The terms `blacklist` and `whitelist` have been replaced with `include` and `exclude` | ||||
|   in all configuration files (#31569). You can use `spack config update` to | ||||
|   automatically fix your configuration files. | ||||
|  | ||||
| ## Notable Bugfixes | ||||
|  | ||||
| * Permission setting on installation now handles effective uid properly (#19980) | ||||
| * `buildable:true` for an MPI implementation now overrides `buildable:false` for `mpi` (#18269) | ||||
| * Improved error messages when attempting to use an unconfigured compiler (#32084) | ||||
| * Do not punish explicitly requested compiler mismatches in the solver (#30074) | ||||
| * `spack stage`: add missing --fresh and --reuse (#31626) | ||||
| * Fixes for adding build system executables like `cmake` to package scope (#31739) | ||||
| * Bugfix for binary relocation with aliased strings produced by newer `binutils` (#32253) | ||||
|  | ||||
| ## Spack community stats | ||||
|  | ||||
| * 6,751 total packages, 335 new since `v0.18.0` | ||||
|     * 141 new Python packages | ||||
|     * 89 new R packages | ||||
| * 303 people contributed to this release | ||||
|     * 287 committers to packages | ||||
|     * 57 committers to core | ||||
|  | ||||
|  | ||||
| # v0.18.1 (2022-07-19) | ||||
|  | ||||
| ### Spack Bugfixes | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Todd Gamblin
					Todd Gamblin