From c89aa2c678986859ba7d0e11bad65f2bc57567e0 Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Thu, 31 Jul 2025 13:11:40 -0700 Subject: [PATCH 01/13] partial updates --- tutorial_configuration.rst | 138 +++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 76 deletions(-) diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index 16f297d99e..3f9969b092 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -147,58 +147,59 @@ YAML Format ----------- Spack configurations are nested YAML dictionaries with a specified schema. -The configuration is organized into sections based on theme (e.g., a 'compilers' section) and the highest-level keys of the dictionary specify the section. +The configuration is organized into sections based on theme (e.g., a 'packages' section) and the highest-level keys of the dictionary specify the section. Spack generally maintains a separate file for each section, although environments keep them together (in ``spack.yaml``). When Spack checks its configuration, the configuration scopes are updated as dictionaries in increasing order of precedence, allowing higher precedence files to override lower. YAML dictionaries use a colon ":" to specify key-value pairs. Spack extends YAML syntax slightly to allow a double-colon "::" to specify a key-value pair. When a double-colon is used, instead of adding that section, Spack replaces what was in that section with the new value. -For example, consider a user's compilers configuration file as follows: +For example, look at high-level config: + +.. code-block:: console + + $ spack config blame config .. code-block:: yaml - compilers:: - - compiler: - spec: gcc@11.4.0 - paths: - cc: /usr/bin/gcc - cxx: /usr/bin/g++ - f77: /usr/bin/gfortran - fc: /usr/bin/gfortran - flags: {} - operating_system: ubuntu22.04 - target: x86_64 - modules: [] - environment: {} - extra_rpaths: [] + --- config: + /etc/spack/config.yaml:2 suppress_gpg_warnings: True + /home/spack/spack/etc/spack/defaults/config.yaml:19 install_tree: + /home/spack/spack/etc/spack/defaults/config.yaml:20 root: $spack/opt/spack + ... + /home/spack/spack/etc/spack/defaults/config.yaml:238 aliases: + /home/spack/spack/etc/spack/defaults/config.yaml:239 concretise: concretize + /home/spack/spack/etc/spack/defaults/config.yaml:240 containerise: containerize + /home/spack/spack/etc/spack/defaults/config.yaml:241 rm: remove + +We can see overrides in action with: +.. code-block:: console -This ensures that no other compilers are used, as the user configuration scope is the last scope searched and the ``compilers::`` line replaces information from all previous configuration files. -If the same configuration file had a single colon instead of the double colon, it would add the GCC version 11.3.0 compiler to whatever other compilers were listed in other configuration files. + $ spack config add config:aliases::{} + $ spack config blame config + +.. code-block:: yaml + --- config: + /home/spack/.spack/config.yaml:2 aliases: {} + +The default write scope is the user scope, which overrides the defaults. +You can undo this by editing the config section like: + +.. code-block:: console + + $ spack config edit config A configuration section appears nearly the same when managed in an environment's ``spack.yaml`` file except that the section is nested 1 level underneath the top-level 'spack' key. -For example the above ``compilers.yaml`` could be incorporated into an environment's ``spack.yaml`` like so: +For example the above ``config.yaml`` could be incorporated into an environment's ``spack.yaml`` like so: .. code-block:: yaml spack: specs: [] view: true - compilers:: - - compiler: - spec: gcc@11.4.0 - paths: - cc: /usr/bin/gcc - cxx: /usr/bin/g++ - f77: /usr/bin/gfortran - fc: /usr/bin/gfortran - flags: {} - operating_system: ubuntu22.04 - target: x86_64 - modules: [] - environment: {} - extra_rpaths: [] + config: + aliases:: {} .. _configs-tutorial-compilers: @@ -212,57 +213,42 @@ As discussed in the basic installation tutorial, we can also tell Spack where co However, in some circumstances, we want even more fine-grained control over the compilers available. This section will teach you how to exercise that control using the compilers configuration file. -We will start by opening the compilers configuration file: +We will start by opening the compilers configuration (which lives in the packages section): .. code-block:: console - $ spack config edit compilers + $ spack config edit packages -We start with no active environment, so this will open a ``compilers.yaml`` file for editing (you can also do this with an active environment): +We start with no active environment, so this will open a ``packages.yaml`` file for editing (you can also do this with an active environment): .. code-block:: yaml - compilers: - - compiler: - spec: clang@=14.0.0 - paths: - cc: /usr/bin/clang - cxx: /usr/bin/clang++ - f77: - fc: - flags: {} - operating_system: ubuntu22.04 - target: x86_64 - modules: [] - environment: {} - extra_rpaths: [] - - compiler: - spec: gcc@=10.5.0 - paths: - cc: /usr/bin/gcc-10 - cxx: /usr/bin/g++-10 - f77: /usr/bin/gfortran-10 - fc: /usr/bin/gfortran-10 - flags: {} - operating_system: ubuntu22.04 - target: x86_64 - modules: [] - environment: {} - extra_rpaths: [] - - compiler: - spec: gcc@=11.4.0 - paths: - cc: /usr/bin/gcc - cxx: /usr/bin/g++ - f77: /usr/bin/gfortran - fc: /usr/bin/gfortran - flags: {} - operating_system: ubuntu22.04 - target: x86_64 - modules: [] - environment: {} - extra_rpaths: [] + packages: + gcc: + externals: + - spec: gcc@10.5.0 languages:='c,c++,fortran' + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/gcc-10 + cxx: /usr/bin/g++-10 + fortran: /usr/bin/gfortran-10 + - spec: gcc@11.4.0 languages:='c,c++,fortran' + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/gcc + cxx: /usr/bin/g++ + fortran: /usr/bin/gfortran + llvm: + externals: + - spec: llvm@14.0.0+clang~flang~lld~lldb + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/clang + cxx: /usr/bin/clang++ This specifies two versions of the GCC compiler and one version of the Clang compiler with no Flang compiler. Now suppose we have a code that we want to compile with the Clang compiler for C/C++ code, but with gfortran for Fortran components. From ad0893c57577145fbbe3f086baaba6a62eb6c977 Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Thu, 31 Jul 2025 14:22:39 -0700 Subject: [PATCH 02/13] more edits --- outputs/config/0.compiler_flags.out | 31 ++---- tutorial_configuration.rst | 158 +++++++++++----------------- 2 files changed, 69 insertions(+), 120 deletions(-) diff --git a/outputs/config/0.compiler_flags.out b/outputs/config/0.compiler_flags.out index e0d76bcbf3..a2fee32705 100644 --- a/outputs/config/0.compiler_flags.out +++ b/outputs/config/0.compiler_flags.out @@ -1,24 +1,7 @@ -$ spack spec json-fortran%clang@14.0.0-gfortran -Input spec --------------------------------- - - json-fortran%clang@14.0.0-gfortran - -Concretized --------------------------------- - - json-fortran@8.3.0%clang@14.0.0-gfortran cppflags="-g" ~ipo build_system=cmake build_type=Release generator=make arch=linux-ubuntu22.04-x86_64_v3 - - ^cmake@3.27.7%clang@14.0.0-gfortran cppflags="-g" ~doc+ncurses+ownlibs build_system=generic build_type=Release arch=linux-ubuntu22.04-x86_64_v3 - - ^curl@8.4.0%clang@14.0.0-gfortran cppflags="-g" ~gssapi~ldap~libidn2~librtmp~libssh~libssh2+nghttp2 build_system=autotools libs=shared,static tls=openssl arch=linux-ubuntu22.04-x86_64_v3 - - ^nghttp2@1.57.0%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^openssl@3.1.3%clang@14.0.0-gfortran cppflags="-g" ~docs+shared build_system=generic certs=mozilla arch=linux-ubuntu22.04-x86_64_v3 - - ^ca-certificates-mozilla@2023-05-30%clang@14.0.0-gfortran cppflags="-g" build_system=generic arch=linux-ubuntu22.04-x86_64_v3 - - ^perl@5.38.0%clang@14.0.0-gfortran cppflags="-g" +cpanm+opcode+open+shared+threads build_system=generic patches=714e4d1 arch=linux-ubuntu22.04-x86_64_v3 - - ^berkeley-db@18.1.40%clang@14.0.0-gfortran cppflags="-g" +cxx~docs+stl build_system=autotools patches=26090f4,b231fcc arch=linux-ubuntu22.04-x86_64_v3 - - ^bzip2@1.0.8%clang@14.0.0-gfortran cppflags="-g" ~debug~pic+shared build_system=generic arch=linux-ubuntu22.04-x86_64_v3 - - ^diffutils@3.9%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^libiconv@1.17%clang@14.0.0-gfortran cppflags="-g" build_system=autotools libs=shared,static arch=linux-ubuntu22.04-x86_64_v3 - - ^gdbm@1.23%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^readline@8.2%clang@14.0.0-gfortran cppflags="-g" build_system=autotools patches=bbf97f1 arch=linux-ubuntu22.04-x86_64_v3 - - ^pkgconf@1.9.5%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^ncurses@6.4%clang@14.0.0-gfortran cppflags="-g" ~symlinks+termlib abi=none build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^zlib-ng@2.1.4%clang@14.0.0-gfortran cppflags="-g" +compat+opt build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^gmake@4.4.1%clang@14.0.0-gfortran cppflags="-g" ~guile build_system=generic arch=linux-ubuntu22.04-x86_64_v3 \ No newline at end of file +$ spack spec zlib%gcc@11.4.0 + - zlib@1.3.1 cppflags=-g +optimize+pic+shared build_system=makefile arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^compiler-wrapper@1.0 build_system=generic arch=linux-ubuntu22.04-x86_64 +[e] ^gcc@11.4.0~binutils+bootstrap~graphite~nvptx~piclibs~profiled~strip build_system=autotools build_type=RelWithDebInfo languages:='c,c++,fortran' arch=linux-ubuntu22.04-x86_64 + - ^gcc-runtime@11.4.0 cppflags=-g build_system=generic arch=linux-ubuntu22.04-x86_64 +[e] ^glibc@2.35 build_system=autotools arch=linux-ubuntu22.04-x86_64 + - ^gmake@4.4.1 cppflags=-g ~guile build_system=generic arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 \ No newline at end of file diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index 3f9969b092..9e5cb03791 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -211,7 +211,7 @@ Compiler Configuration For most tasks, we can use Spack with the compilers auto-detected the first time Spack runs on a system. As discussed in the basic installation tutorial, we can also tell Spack where compilers are located using the ``spack compiler add`` command. However, in some circumstances, we want even more fine-grained control over the compilers available. -This section will teach you how to exercise that control using the compilers configuration file. +This section will teach you how to exercise that control using the compilers configuration. We will start by opening the compilers configuration (which lives in the packages section): @@ -252,56 +252,34 @@ We start with no active environment, so this will open a ``packages.yaml`` file This specifies two versions of the GCC compiler and one version of the Clang compiler with no Flang compiler. Now suppose we have a code that we want to compile with the Clang compiler for C/C++ code, but with gfortran for Fortran components. -We can do this by adding another entry to the ``compilers.yaml`` file: - -.. code-block:: yaml - :emphasize-lines: 2,6-7 - - - compiler: - spec: clang@=14.0.0-gfortran - paths: - cc: /usr/bin/clang - cxx: /usr/bin/clang++ - f77: /usr/bin/gfortran - fc: /usr/bin/gfortran - flags: {} - operating_system: ubuntu22.04 - target: x86_64 - modules: [] - environment: {} - extra_rpaths: [] - - -Let's talk about the sections of this compiler entry that we've changed. -The biggest change we've made is to the ``paths`` section. -This lists the paths to the compilers to use for each language/specification. -In this case, we point to the Clang compiler for C/C++ and the gfortran compiler for both specifications of Fortran. -We've also changed the ``spec`` entry for this compiler. -The ``spec`` entry is effectively the name of the compiler for Spack. -It consists of a name and a version number, separated by the ``@`` sigil. -The name must be one of the supported compiler names in Spack (aocc, apple-clang, arm, cce, clang, dpcpp, fj, gcc, intel, msvc, nag, nvhpc, oneapi, pgi, rocmcc, xl, xl_r). -The version number can be an arbitrary string of alphanumeric characters, as well as ``-``, ``.``, and ``_``. -The ``target`` and ``operating_system`` sections we leave unchanged. -These sections specify when Spack can use different compilers, and are primarily useful for configuration files that will be used across multiple systems. - -We can verify that our new compiler works by invoking it now: +We can do this by adding creating a toolchain config: .. code-block:: console - $ spack install --no-cache zlib %clang@14.0.0-gfortran - ... + $ spack config edit toolchains +.. code-block:: yaml + + toolchains: + clang_gfortran: + - spec: '%c=llvm@14.0.0' + when: '%c' + - spec: '%cxx=llvm@14.0.0' + when: '%cxx' + - spec: '%fortran=gcc@11.4.0' + when: '%fortran' -This new compiler also works on Fortran codes. -We'll show this by compiling a small package using ``cmake%gcc@11.4.0`` as a build dependency, since it is already available in our binary cache: +We are essentially saying "use Clang for c/c++, and use GCC for Fortran". +You can use this new entry like so: .. code-block:: console - $ spack install --reuse cmake %gcc@11.4.0 - ... - $ spack install --no-cache --reuse json-fortran %clang@=14.0.0-gfortran ^cmake%gcc@11.4.0 - ... + $ spack spec openblas %clang_gfortran + +Note the identifier `clang_gfortran` is not itself a spec (you don't version it). You reference it in other specs. +Note that without `when: '%fortran'`, you could not use `clang_gfortran` with packages unless they depended on Fortran (likewise for the `when` statements on c/cxx). +.. These sections specify when Spack can use different compilers, and are primarily useful for configuration files that will be used across multiple systems. ^^^^^^^^^^^^^^ Compiler flags @@ -315,22 +293,20 @@ As on the command line, the flags are set through the implicit build variables ` Let's open our compilers configuration file again and add a compiler flag: .. code-block:: yaml - :emphasize-lines: 8-9 - - - compiler: - spec: clang@=14.0.0-gfortran - paths: - cc: /usr/bin/clang - cxx: /usr/bin/clang++ - f77: /usr/bin/gfortran - fc: /usr/bin/gfortran - flags: - cppflags: -g - operating_system: ubuntu22.04 - target: x86_64 - modules: [] - environment: {} - extra_rpaths: [] + :emphasize-lines: 11-12 + + packages: + gcc: + externals: + - spec: gcc@11.4.0 languages:='c,c++,fortran' + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/gcc + cxx: /usr/bin/g++ + fortran: /usr/bin/gfortran + flags: + cppflags: -g We can test this out using the ``spack spec`` command to show how the spec is concretized: @@ -341,46 +317,45 @@ We can test this out using the ``spack spec`` command to show how the spec is co We can see that ``cppflags="-g"`` has been added to every node in the DAG. +.. It even added it to gcc-runtime, hmm... + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Advanced compiler configuration ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -There are four fields of the compiler configuration entry that we have not yet talked about. - -The ``target`` field of the compiler defines the cpu architecture **family** that the compiler supports. +Some additional fields not discussed yet, in an example: .. code-block:: yaml + :emphasize-lines: 6-7, 15-19 - - compiler: - ... - target: ppc64le - ... - -The ``modules`` field of the compiler was originally designed to support older Cray systems, but can be useful on any system that has compilers that are only usable when a particular module is loaded. -Any modules in the ``modules`` field of the compiler configuration will be loaded as part of the build environment for packages using that compiler: + packages: + gcc: + externals: + - spec: gcc@11.4.0 languages:='c,c++,fortran' + prefix: /usr + modules: + - gcc/11.4.0 + extra_attributes: + compilers: + c: /usr/bin/gcc + cxx: /usr/bin/g++ + fortran: /usr/bin/gfortran + flags: + cppflags: -g + extra_rpaths: + - /a/path/to/somewhere/important + environment: + set: + EG_A_LICENSE_FILE: 1713@license4 -.. code-block:: yaml +.. The ``target`` field of the compiler defines the cpu architecture **family** that the compiler supports. +.. (target isn't in the compiler schema in packages anymore: how do we say "target generic x86_64 whenever you use this compiler") - - compiler: - ... - modules: - - PrgEnv-gnu - - gcc/5.3.0 - ... +The ``modules`` field of the compiler was originally designed to support older Cray systems, but can be useful on any system that has compilers that are only usable when a particular module is loaded. +Any modules in the ``modules`` field of the compiler configuration will be loaded as part of the build environment for packages using that compiler. The ``environment`` field of the compiler configuration is used for compilers that require environment variables to be set during build time. -For example, if your Intel compiler suite requires the ``INTEL_LICENSE_FILE`` environment variable to point to the proper license server, you can set this in ``compilers.yaml`` as follows: - -.. code-block:: yaml - - - compiler: - ... - environment: - set: - INTEL_LICENSE_FILE: 1713@license4 - ... - - +For example, if your Intel compiler suite requires the ``INTEL_LICENSE_FILE`` environment variable to point to the proper license server. In addition to ``set``, ``environment`` also supports ``unset``, ``prepend_path``, and ``append_path``. The ``extra_rpaths`` field of the compiler configuration is used for compilers that do not rpath all of their dependencies by default. @@ -388,15 +363,6 @@ Since compilers are often installed externally to Spack, Spack is unable to mana This can lead to packages not finding link dependencies imposed by the compiler properly. For compilers that impose link dependencies on the resulting executables that are not rpath'ed into the executable automatically, the ``extra_rpaths`` field of the compiler configuration tells Spack which dependencies to rpath into every executable created by that compiler. The executables will then be able to find the link dependencies imposed by the compiler. -As an example, this field can be set by: - -.. code-block:: yaml - - - compiler: - ... - extra_rpaths: - - /apps/intel/ComposerXE2017/compilers_and_libraries_2017.5.239/linux/compiler/lib/intel64_lin - ... .. _configs-tutorial-package-prefs: From 553b2936d87f02a44b75360ae04f373c6d61f49d Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Thu, 31 Jul 2025 15:25:57 -0700 Subject: [PATCH 03/13] style format --- tutorial_configuration.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index 9e5cb03791..4e7cd7e05a 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -276,7 +276,8 @@ You can use this new entry like so: $ spack spec openblas %clang_gfortran -Note the identifier `clang_gfortran` is not itself a spec (you don't version it). You reference it in other specs. +Note the identifier `clang_gfortran` is not itself a spec (you don't version it). +You reference it in other specs. Note that without `when: '%fortran'`, you could not use `clang_gfortran` with packages unless they depended on Fortran (likewise for the `when` statements on c/cxx). .. These sections specify when Spack can use different compilers, and are primarily useful for configuration files that will be used across multiple systems. From 5fe5b0776c9d9a64acd3535f5db0b001217316a6 Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Thu, 31 Jul 2025 15:31:45 -0700 Subject: [PATCH 04/13] lack of space excludes example --- tutorial_configuration.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index 4e7cd7e05a..3632ba6bf0 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -180,6 +180,7 @@ We can see overrides in action with: $ spack config blame config .. code-block:: yaml + --- config: /home/spack/.spack/config.yaml:2 aliases: {} From d35706aa19fb1089051284ea5b091da0081d48d7 Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Thu, 31 Jul 2025 16:20:07 -0700 Subject: [PATCH 05/13] now everything up to variant preferences --- outputs/config/0.prefs.out | 94 ++++++++++++++++++------------------- outputs/config/1.prefs.out | 96 +++++++++++++++++++------------------- tutorial_configuration.rst | 16 ++++--- 3 files changed, 104 insertions(+), 102 deletions(-) diff --git a/outputs/config/0.prefs.out b/outputs/config/0.prefs.out index 038eb2a53c..a39d854f91 100644 --- a/outputs/config/0.prefs.out +++ b/outputs/config/0.prefs.out @@ -1,48 +1,48 @@ $ spack spec hdf5 -Input spec --------------------------------- - - hdf5 - -Concretized --------------------------------- -[+] hdf5@1.14.3%gcc@11.4.0~cxx~fortran~hl~ipo~java~map+mpi+shared~szip~threadsafe+tools api=default build_system=cmake build_type=Release generator=make arch=linux-ubuntu22.04-x86_64_v3 -[+] ^cmake@3.27.7%gcc@11.4.0~doc+ncurses+ownlibs build_system=generic build_type=Release arch=linux-ubuntu22.04-x86_64_v3 -[+] ^curl@8.4.0%gcc@11.4.0~gssapi~ldap~libidn2~librtmp~libssh~libssh2+nghttp2 build_system=autotools libs=shared,static tls=openssl arch=linux-ubuntu22.04-x86_64_v3 -[+] ^nghttp2@1.57.0%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^openssl@3.1.3%gcc@11.4.0~docs+shared build_system=generic certs=mozilla arch=linux-ubuntu22.04-x86_64_v3 -[+] ^ca-certificates-mozilla@2023-05-30%gcc@11.4.0 build_system=generic arch=linux-ubuntu22.04-x86_64_v3 -[+] ^ncurses@6.4%gcc@11.4.0~symlinks+termlib abi=none build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^gmake@4.4.1%gcc@11.4.0~guile build_system=generic arch=linux-ubuntu22.04-x86_64_v3 -[+] ^openmpi@4.1.6%gcc@11.4.0~atomics~cuda~cxx~cxx_exceptions~gpfs~internal-hwloc~internal-pmix~java~legacylaunchers~lustre~memchecker~openshmem~orterunprefix+romio+rsh~singularity+static+vt+wrapper-rpath build_system=autotools fabrics=none schedulers=none arch=linux-ubuntu22.04-x86_64_v3 -[+] ^hwloc@2.9.1%gcc@11.4.0~cairo~cuda~gl~libudev+libxml2~netloc~nvml~oneapi-level-zero~opencl+pci~rocm build_system=autotools libs=shared,static arch=linux-ubuntu22.04-x86_64_v3 -[+] ^libpciaccess@0.17%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^util-macros@1.19.3%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^libxml2@2.10.3%gcc@11.4.0+pic~python+shared build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^libiconv@1.17%gcc@11.4.0 build_system=autotools libs=shared,static arch=linux-ubuntu22.04-x86_64_v3 -[+] ^xz@5.4.1%gcc@11.4.0~pic build_system=autotools libs=shared,static arch=linux-ubuntu22.04-x86_64_v3 -[+] ^numactl@2.0.14%gcc@11.4.0 build_system=autotools patches=4e1d78c,62fc8a8,ff37630 arch=linux-ubuntu22.04-x86_64_v3 -[+] ^autoconf@2.69%gcc@11.4.0 build_system=autotools patches=35c4492,7793209,a49dd5b arch=linux-ubuntu22.04-x86_64_v3 -[+] ^automake@1.16.5%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^libtool@2.4.7%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^m4@1.4.19%gcc@11.4.0+sigsegv build_system=autotools patches=9dc5fbd,bfdffa7 arch=linux-ubuntu22.04-x86_64_v3 -[+] ^diffutils@3.9%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^libsigsegv@2.14%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^openssh@9.5p1%gcc@11.4.0+gssapi build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^krb5@1.20.1%gcc@11.4.0+shared build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^bison@3.8.2%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^findutils@4.9.0%gcc@11.4.0 build_system=autotools patches=440b954 arch=linux-ubuntu22.04-x86_64_v3 -[+] ^gettext@0.22.3%gcc@11.4.0+bzip2+curses+git~libunistring+libxml2+pic+shared+tar+xz build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^tar@1.34%gcc@11.4.0 build_system=autotools zip=pigz arch=linux-ubuntu22.04-x86_64_v3 -[+] ^pigz@2.7%gcc@11.4.0 build_system=makefile arch=linux-ubuntu22.04-x86_64_v3 -[+] ^zstd@1.5.5%gcc@11.4.0+programs build_system=makefile compression=none libs=shared,static arch=linux-ubuntu22.04-x86_64_v3 -[+] ^libedit@3.1-20210216%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^libxcrypt@4.4.35%gcc@11.4.0~obsolete_api build_system=autotools patches=4885da3 arch=linux-ubuntu22.04-x86_64_v3 -[+] ^perl@5.38.0%gcc@11.4.0+cpanm+opcode+open+shared+threads build_system=generic patches=714e4d1 arch=linux-ubuntu22.04-x86_64_v3 -[+] ^berkeley-db@18.1.40%gcc@11.4.0+cxx~docs+stl build_system=autotools patches=26090f4,b231fcc arch=linux-ubuntu22.04-x86_64_v3 -[+] ^bzip2@1.0.8%gcc@11.4.0~debug~pic+shared build_system=generic arch=linux-ubuntu22.04-x86_64_v3 -[+] ^gdbm@1.23%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^readline@8.2%gcc@11.4.0 build_system=autotools patches=bbf97f1 arch=linux-ubuntu22.04-x86_64_v3 -[+] ^pmix@5.0.1%gcc@11.4.0~docs+pmi_backwards_compatibility~python~restful build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^libevent@2.1.12%gcc@11.4.0+openssl build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^pkgconf@1.9.5%gcc@11.4.0 build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 -[+] ^zlib-ng@2.1.4%gcc@11.4.0+compat+opt build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 \ No newline at end of file + - hdf5@1.14.6~cxx~fortran~hl~ipo~java~map+mpi+shared~subfiling~szip~threadsafe+tools api=default build_system=cmake build_type=Release generator=make arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^cmake@3.31.8~doc+ncurses+ownlibs~qtgui build_system=generic build_type=Release arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^curl@8.11.1~gssapi~ldap~libidn2~librtmp~libssh~libssh2+nghttp2 build_system=autotools libs:=shared,static tls:=openssl arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^nghttp2@1.65.0 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^diffutils@3.10 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^openssl@3.4.1~docs+shared build_system=generic certs=mozilla arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^ca-certificates-mozilla@2025-05-20 build_system=generic arch=linux-ubuntu22.04-x86_64 + - ^ncurses@6.5-20250705~symlinks+termlib abi=none build_system=autotools patches:=7a351bc arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^compiler-wrapper@1.0 build_system=generic arch=linux-ubuntu22.04-x86_64 +[e] ^gcc@11.4.0~binutils+bootstrap~graphite~nvptx~piclibs~profiled~strip build_system=autotools build_type=RelWithDebInfo languages:='c,c++,fortran' arch=linux-ubuntu22.04-x86_64 + - ^gcc-runtime@11.4.0 build_system=generic arch=linux-ubuntu22.04-x86_64 +[e] ^glibc@2.35 build_system=autotools arch=linux-ubuntu22.04-x86_64 + - ^gmake@4.4.1~guile build_system=generic arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^openmpi@5.0.8+atomics~cuda~debug+fortran~gpfs~internal-hwloc~internal-libevent~internal-pmix~ipv6~java~lustre~memchecker~openshmem~rocm~romio+rsh~static~two_level_namespace+vt+wrapper-rpath build_system=autotools fabrics:=none romio-filesystem:=none schedulers:=none arch=linux-ubuntu22.04-x86_64 %c,cxx,fortran=gcc@11.4.0 + - ^autoconf@2.72 build_system=autotools arch=linux-ubuntu22.04-x86_64 + - ^m4@1.4.20+sigsegv build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^libsigsegv@2.14 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^automake@1.16.5 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^hwloc@2.11.1~cairo~cuda~gl~level_zero~libudev+libxml2~nvml~opencl+pci~rocm build_system=autotools libs:=shared,static arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^libpciaccess@0.17 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^util-macros@1.20.1 build_system=autotools arch=linux-ubuntu22.04-x86_64 + - ^libxml2@2.13.5~http+pic~python+shared build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^libiconv@1.18 build_system=autotools libs:=shared,static arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^xz@5.6.3~pic build_system=autotools libs:=shared,static arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^libevent@2.1.12+openssl build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^libtool@2.4.7 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^findutils@4.10.0 build_system=autotools patches:=440b954 arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^gettext@0.23.1+bzip2+curses+git~libunistring+libxml2+pic+shared+tar+xz build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^tar@1.35 build_system=autotools zip=pigz arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^pigz@2.8 build_system=makefile arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^zstd@1.5.7+programs build_system=makefile compression:=none libs:=shared,static arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^numactl@2.0.18 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^openssh@9.9p1+gssapi build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^krb5@1.21.3+shared build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^bison@3.8.2~color build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^libedit@3.1-20240808 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^libxcrypt@4.4.38~obsolete_api build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^perl@5.42.0+cpanm+opcode+open+shared+threads build_system=generic arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^berkeley-db@18.1.40+cxx~docs+stl build_system=autotools patches:=26090f4,b231fcc arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^bzip2@1.0.8~debug~pic+shared build_system=generic arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^gdbm@1.23 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^readline@8.3 build_system=autotools patches:=21f0a03 arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^pmix@6.0.0~munge~python build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^prrte@4.0.0 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^flex@2.6.3+lex~nls build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 + - ^pkgconf@2.5.1 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^zlib-ng@2.2.4+compat+new_strategies+opt+pic+shared build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=gcc@11.4.0 \ No newline at end of file diff --git a/outputs/config/1.prefs.out b/outputs/config/1.prefs.out index bd123d2f8f..05188e9f81 100644 --- a/outputs/config/1.prefs.out +++ b/outputs/config/1.prefs.out @@ -1,50 +1,48 @@ $ spack spec hdf5 -Input spec --------------------------------- - - hdf5 - -Concretized --------------------------------- - - hdf5@1.14.3%clang@14.0.0-gfortran cppflags="-g" ~cxx~fortran~hl~ipo~java~map+mpi+shared~szip~threadsafe+tools api=default build_system=cmake build_type=Release generator=make arch=linux-ubuntu22.04-x86_64_v3 - - ^cmake@3.27.7%clang@14.0.0-gfortran cppflags="-g" ~doc+ncurses+ownlibs build_system=generic build_type=Release arch=linux-ubuntu22.04-x86_64_v3 - - ^curl@8.4.0%clang@14.0.0-gfortran cppflags="-g" ~gssapi~ldap~libidn2~librtmp~libssh~libssh2+nghttp2 build_system=autotools libs=shared,static tls=openssl arch=linux-ubuntu22.04-x86_64_v3 - - ^nghttp2@1.57.0%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^openssl@3.1.3%clang@14.0.0-gfortran cppflags="-g" ~docs+shared build_system=generic certs=mozilla arch=linux-ubuntu22.04-x86_64_v3 - - ^ca-certificates-mozilla@2023-05-30%clang@14.0.0-gfortran cppflags="-g" build_system=generic arch=linux-ubuntu22.04-x86_64_v3 - - ^perl@5.38.0%clang@14.0.0-gfortran cppflags="-g" +cpanm+opcode+open+shared+threads build_system=generic patches=714e4d1 arch=linux-ubuntu22.04-x86_64_v3 - - ^berkeley-db@18.1.40%clang@14.0.0-gfortran cppflags="-g" +cxx~docs+stl build_system=autotools patches=26090f4,b231fcc arch=linux-ubuntu22.04-x86_64_v3 - - ^ncurses@6.4%clang@14.0.0-gfortran cppflags="-g" ~symlinks+termlib abi=none build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^gmake@4.4.1%clang@14.0.0-gfortran cppflags="-g" ~guile build_system=generic arch=linux-ubuntu22.04-x86_64_v3 - - ^mpich@4.1.2%clang@14.0.0-gfortran cppflags="-g" ~argobots~cuda+fortran+hwloc+hydra+libxml2+pci~rocm+romio~slurm~vci~verbs+wrapperrpath build_system=autotools datatype-engine=auto device=ch4 netmod=ofi pmi=pmi arch=linux-ubuntu22.04-x86_64_v3 - - ^findutils@4.9.0%clang@14.0.0-gfortran cppflags="-g" build_system=autotools patches=440b954 arch=linux-ubuntu22.04-x86_64_v3 - - ^hwloc@2.9.1%clang@14.0.0-gfortran cppflags="-g" ~cairo~cuda~gl~libudev+libxml2~netloc~nvml~oneapi-level-zero~opencl+pci~rocm build_system=autotools libs=shared,static arch=linux-ubuntu22.04-x86_64_v3 - - ^libfabric@1.19.0%clang@14.0.0-gfortran cppflags="-g" ~debug~kdreg build_system=autotools fabrics=sockets,tcp,udp arch=linux-ubuntu22.04-x86_64_v3 - - ^libpciaccess@0.17%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^libtool@2.4.7%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^util-macros@1.19.3%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^libxml2@2.10.3%clang@14.0.0-gfortran cppflags="-g" +pic~python+shared build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^libiconv@1.17%clang@14.0.0-gfortran cppflags="-g" build_system=autotools libs=shared,static arch=linux-ubuntu22.04-x86_64_v3 - - ^xz@5.4.1%clang@14.0.0-gfortran cppflags="-g" ~pic build_system=autotools libs=shared,static arch=linux-ubuntu22.04-x86_64_v3 - - ^yaksa@0.3%clang@14.0.0-gfortran cppflags="-g" ~cuda~rocm build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^autoconf@2.69%clang@14.0.0-gfortran cppflags="-g" build_system=autotools patches=35c4492,7793209,a49dd5b arch=linux-ubuntu22.04-x86_64_v3 - - ^automake@1.16.5%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^m4@1.4.19%clang@14.0.0-gfortran cppflags="-g" +sigsegv build_system=autotools patches=9dc5fbd,bfdffa7 arch=linux-ubuntu22.04-x86_64_v3 - - ^diffutils@3.9%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^libsigsegv@2.14%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^python@3.11.6%clang@14.0.0-gfortran cppflags="-g" +bz2+crypt+ctypes+dbm~debug+libxml2+lzma~nis~optimizations+pic+pyexpat+pythoncmd+readline+shared+sqlite3+ssl~tkinter+uuid+zlib build_system=generic patches=13fa8bf,b0615b2,ebdca64,f2fd060 arch=linux-ubuntu22.04-x86_64_v3 - - ^bzip2@1.0.8%clang@14.0.0-gfortran cppflags="-g" ~debug~pic+shared build_system=generic arch=linux-ubuntu22.04-x86_64_v3 - - ^expat@2.5.0%clang@14.0.0-gfortran cppflags="-g" +libbsd build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^libbsd@0.11.7%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^libmd@1.0.4%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^gdbm@1.23%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^gettext@0.22.3%clang@14.0.0-gfortran cppflags="-g" +bzip2+curses+git~libunistring+libxml2+pic+shared+tar+xz build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^tar@1.34%clang@14.0.0-gfortran cppflags="-g" build_system=autotools zip=pigz arch=linux-ubuntu22.04-x86_64_v3 - - ^pigz@2.7%clang@14.0.0-gfortran cppflags="-g" build_system=makefile arch=linux-ubuntu22.04-x86_64_v3 - - ^zstd@1.5.5%clang@14.0.0-gfortran cppflags="-g" +programs build_system=makefile compression=none libs=shared,static arch=linux-ubuntu22.04-x86_64_v3 - - ^libffi@3.4.4%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^libxcrypt@4.4.35%clang@14.0.0-gfortran cppflags="-g" ~obsolete_api build_system=autotools patches=4885da3 arch=linux-ubuntu22.04-x86_64_v3 - - ^readline@8.2%clang@14.0.0-gfortran cppflags="-g" build_system=autotools patches=bbf97f1 arch=linux-ubuntu22.04-x86_64_v3 - - ^sqlite@3.43.2%clang@14.0.0-gfortran cppflags="-g" +column_metadata+dynamic_extensions+fts~functions+rtree build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^util-linux-uuid@2.38.1%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^pkgconf@1.9.5%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^zlib-ng@2.1.4%clang@14.0.0-gfortran cppflags="-g" +compat+opt build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 \ No newline at end of file + - hdf5@1.14.6~cxx~fortran~hl~ipo~java~map+mpi+shared~subfiling~szip~threadsafe+tools api=default build_system=cmake build_type=Release generator=make arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^cmake@3.31.8~doc+ncurses+ownlibs~qtgui build_system=generic build_type=Release arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^curl@8.11.1~gssapi~ldap~libidn2~librtmp~libssh~libssh2+nghttp2 build_system=autotools libs:=shared,static tls:=openssl arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^nghttp2@1.65.0 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^diffutils@3.10 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^openssl@3.4.1~docs+shared build_system=generic certs=mozilla arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^ca-certificates-mozilla@2025-05-20 build_system=generic arch=linux-ubuntu22.04-x86_64 + - ^perl@5.42.0+cpanm+opcode+open+shared+threads build_system=generic arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^berkeley-db@18.1.40+cxx~docs+stl build_system=autotools patches:=26090f4,b231fcc arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^ncurses@6.5-20250705~symlinks+termlib abi=none build_system=autotools patches:=7a351bc arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^compiler-wrapper@1.0 build_system=generic arch=linux-ubuntu22.04-x86_64 +[e] ^glibc@2.35 build_system=autotools arch=linux-ubuntu22.04-x86_64 + - ^gmake@4.4.1~guile build_system=generic arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 +[e] ^llvm@14.0.0+clang~cuda~flang+gold+libomptarget~libomptarget_debug~link_llvm_dylib~lld~lldb+llvm_dylib+lua~mlir+polly~python~split_dwarf~z3 build_system=cmake build_type=Release compiler-rt=runtime generator=ninja libcxx=runtime libunwind=runtime openmp=runtime patches:=1f42874,25bc503,6379168,8248141,b216cff,cb8e645 shlib_symbol_version=none targets:=all version_suffix=none arch=linux-ubuntu22.04-x86_64 + - ^mpich@4.3.1~argobots~cuda+fortran+hwloc+hydra~level_zero+libxml2+pci~rocm+romio~slurm~vci~verbs+wrapperrpath~xpmem build_system=autotools datatype-engine=auto device=ch4 netmod=ofi pmi=default arch=linux-ubuntu22.04-x86_64 %fortran=gcc@11.4.0 %c,cxx=clang@14.0.0 + - ^findutils@4.10.0 build_system=autotools patches:=440b954 arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^gettext@0.23.1+bzip2+curses+git~libunistring+libxml2+pic+shared+tar+xz build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^bzip2@1.0.8~debug~pic+shared build_system=generic arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^tar@1.35 build_system=autotools zip=pigz arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^pigz@2.8 build_system=makefile arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^zstd@1.5.7+programs build_system=makefile compression:=none libs:=shared,static arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 +[e] ^gcc@11.4.0~binutils+bootstrap~graphite~nvptx~piclibs~profiled~strip build_system=autotools build_type=RelWithDebInfo languages:='c,c++,fortran' arch=linux-ubuntu22.04-x86_64 + - ^gcc-runtime@11.4.0 build_system=generic arch=linux-ubuntu22.04-x86_64 + - ^hwloc@2.11.1~cairo~cuda~gl~level_zero~libudev+libxml2~nvml~opencl+pci~rocm build_system=autotools libs:=shared,static arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^libfabric@2.2.0~cuda~debug~kdreg~level_zero~uring build_system=autotools fabrics:=sockets,tcp,udp arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^libpciaccess@0.17 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^util-macros@1.20.1 build_system=autotools arch=linux-ubuntu22.04-x86_64 + - ^libxml2@2.13.5~http+pic~python+shared build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^libiconv@1.18 build_system=autotools libs:=shared,static arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^xz@5.6.3~pic build_system=autotools libs:=shared,static arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^yaksa@0.3~cuda~level_zero~rocm build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^autoconf@2.72 build_system=autotools arch=linux-ubuntu22.04-x86_64 + - ^automake@1.16.5 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^libtool@2.4.7 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^m4@1.4.20+sigsegv build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^libsigsegv@2.14 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^python@3.13.5+bz2+ctypes+dbm~debug+libxml2+lzma~optimizations+pic+pyexpat+pythoncmd+readline+shared+sqlite3+ssl~tkinter+uuid+zlib build_system=generic arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^expat@2.7.1+libbsd build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^libbsd@0.12.2 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^libmd@1.1.0 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^gdbm@1.23 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^libffi@3.4.8 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^readline@8.3 build_system=autotools patches:=21f0a03 arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^sqlite@3.46.0+column_metadata+dynamic_extensions+fts~functions+rtree build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^util-linux-uuid@2.41 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^pkgconf@2.5.1 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^zlib-ng@2.2.4+compat+new_strategies+opt+pic+shared build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 \ No newline at end of file diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index 3632ba6bf0..d2168ce68a 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -378,21 +378,22 @@ First, we will look at the default ``packages.yaml`` file. .. code-block:: console - $ spack config --scope defaults edit packages + $ spack config --scope=defaults:base edit packages .. literalinclude:: _spack_root/etc/spack/defaults/packages.yaml :language: yaml - :emphasize-lines: 18,45 + :emphasize-lines: 51 -This sets the default preferences for compilers and for providers of virtual packages. +This sets the default preferences for providers of virtual packages. +We can edit this to change provider preferences and also to create a preference for compilers. To illustrate how this works, suppose we want to change the preferences to prefer the Clang compiler and to prefer MPICH over OpenMPI. Currently, we prefer GCC and OpenMPI. .. literalinclude:: outputs/config/0.prefs.out :language: console - :emphasize-lines: 16 + :emphasize-lines: 15 Let's override these default preferences in an environment. @@ -420,9 +421,12 @@ When you have an activated environment, you can edit the associated configuratio spack: specs: [] view: true + concretizer: + unify: true packages: all: - compiler: [clang, gcc, intel, pgi, xl, nag, fj] + require: + - one_of: ["%llvm", "%gcc"] providers: mpi: [mpich, openmpi] @@ -431,7 +435,7 @@ Because of the configuration scoping we discussed earlier, this overrides the de .. literalinclude:: outputs/config/1.prefs.out :language: console - :emphasize-lines: 18 + :emphasize-lines: 16 ^^^^^^^^^^^^^^^^^^^ From d125c32660898a5832f5ac1a42c553509da25767 Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Thu, 31 Jul 2025 17:11:54 -0700 Subject: [PATCH 06/13] everything up to installation permissions --- outputs/config/2.externals.out | 22 ++++---- outputs/config/3.prefs.out | 43 ++++++++-------- tutorial_configuration.rst | 93 ++++++++++++---------------------- 3 files changed, 66 insertions(+), 92 deletions(-) diff --git a/outputs/config/2.externals.out b/outputs/config/2.externals.out index a279ec99d6..324ed1a2fb 100644 --- a/outputs/config/2.externals.out +++ b/outputs/config/2.externals.out @@ -1,9 +1,13 @@ -$ spack spec hdf5%clang - - hdf5@1.14.5%clang@14.0.0-gfortran cppflags=-g ~cxx~fortran~hl~ipo~java~map~mpi+shared~szip~threadsafe+tools api=default build_system=cmake build_type=Release generator=make arch=linux-ubuntu22.04-x86_64_v3 - - ^cmake@3.30.5%clang@14.0.0-gfortran cppflags=-g ~doc+ncurses+ownlibs~qtgui build_system=generic build_type=Release patches=dbc3892 arch=linux-ubuntu22.04-x86_64_v3 -[e] ^curl@7.81.0%gcc@11.4.0~gssapi~ldap~libidn2~librtmp~libssh~libssh2+nghttp2 build_system=autotools libs=shared,static tls=openssl arch=linux-ubuntu22.04-x86_64_v3 - - ^ncurses@6.5%clang@14.0.0-gfortran cppflags=-g ~symlinks+termlib abi=none build_system=autotools patches=7a351bc arch=linux-ubuntu22.04-x86_64_v3 -[e] ^glibc@2.35%clang@14.0.0-gfortran cppflags=-g build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^gmake@4.4.1%clang@14.0.0-gfortran cppflags=-g ~guile build_system=generic arch=linux-ubuntu22.04-x86_64_v3 - - ^pkgconf@2.2.0%clang@14.0.0-gfortran cppflags=-g build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^zlib-ng@2.2.1%clang@14.0.0-gfortran cppflags=-g +compat+new_strategies+opt+pic+shared build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 +$ spack spec hdf5 + - hdf5@1.14.6~cxx~fortran~hl~ipo~java~map~mpi+shared~szip~threadsafe+tools api=default build_system=cmake build_type=Release generator=make arch=linux-ubuntu22.04-x86_64 %c=gcc@11.4.0 + - ^cmake@3.31.8~doc+ncurses+ownlibs~qtgui build_system=generic build_type=Release arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 +[e] ^curl@7.81.0~gssapi~ldap~libidn2~librtmp~libssh~libssh2+nghttp2 build_system=autotools libs:=shared,static tls:=openssl arch=linux-ubuntu22.04-x86_64 +[e] ^llvm@14.0.0+clang~cuda~flang+gold+libomptarget~libomptarget_debug~link_llvm_dylib~lld~lldb+llvm_dylib+lua~mlir+polly~python~split_dwarf~z3 build_system=cmake build_type=Release compiler-rt=runtime generator=ninja libcxx=runtime libunwind=runtime openmp=runtime patches:=1f42874,25bc503,6379168,8248141,b216cff,cb8e645 shlib_symbol_version=none targets:=all version_suffix=none arch=linux-ubuntu22.04-x86_64 + - ^ncurses@6.5-20250705~symlinks+termlib abi=none build_system=autotools patches:=7a351bc arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^compiler-wrapper@1.0 build_system=generic arch=linux-ubuntu22.04-x86_64 +[e] ^gcc@11.4.0~binutils+bootstrap~graphite~nvptx~piclibs~profiled~strip build_system=autotools build_type=RelWithDebInfo languages:='c,c++,fortran' arch=linux-ubuntu22.04-x86_64 + - ^gcc-runtime@11.4.0 build_system=generic arch=linux-ubuntu22.04-x86_64 +[e] ^glibc@2.35 build_system=autotools arch=linux-ubuntu22.04-x86_64 + - ^gmake@4.4.1~guile build_system=generic arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^pkgconf@2.5.1 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^zlib-ng@2.2.4+compat+new_strategies+opt+pic+shared build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 diff --git a/outputs/config/3.prefs.out b/outputs/config/3.prefs.out index 57249e07d2..f1048d7b1b 100644 --- a/outputs/config/3.prefs.out +++ b/outputs/config/3.prefs.out @@ -1,24 +1,21 @@ $ spack spec hdf5 -Input spec --------------------------------- - - hdf5 - -Concretized --------------------------------- - - hdf5@1.14.3%clang@14.0.0-gfortran cppflags="-g" ~cxx~fortran~hl~ipo~java~map~mpi+shared~szip~threadsafe+tools api=default build_system=cmake build_type=Release generator=make arch=linux-ubuntu22.04-x86_64_v3 - - ^cmake@3.27.7%clang@14.0.0-gfortran cppflags="-g" ~doc+ncurses+ownlibs build_system=generic build_type=Release arch=linux-ubuntu22.04-x86_64_v3 - - ^curl@8.4.0%clang@14.0.0-gfortran cppflags="-g" ~gssapi~ldap~libidn2~librtmp~libssh~libssh2+nghttp2 build_system=autotools libs=shared,static tls=openssl arch=linux-ubuntu22.04-x86_64_v3 - - ^nghttp2@1.57.0%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^openssl@3.1.3%clang@14.0.0-gfortran cppflags="-g" ~docs+shared build_system=generic certs=mozilla arch=linux-ubuntu22.04-x86_64_v3 - - ^ca-certificates-mozilla@2023-05-30%clang@14.0.0-gfortran cppflags="-g" build_system=generic arch=linux-ubuntu22.04-x86_64_v3 - - ^perl@5.38.0%clang@14.0.0-gfortran cppflags="-g" +cpanm+opcode+open+shared+threads build_system=generic patches=714e4d1 arch=linux-ubuntu22.04-x86_64_v3 - - ^berkeley-db@18.1.40%clang@14.0.0-gfortran cppflags="-g" +cxx~docs+stl build_system=autotools patches=26090f4,b231fcc arch=linux-ubuntu22.04-x86_64_v3 - - ^bzip2@1.0.8%clang@14.0.0-gfortran cppflags="-g" ~debug~pic+shared build_system=generic arch=linux-ubuntu22.04-x86_64_v3 - - ^diffutils@3.9%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^libiconv@1.17%clang@14.0.0-gfortran cppflags="-g" build_system=autotools libs=shared,static arch=linux-ubuntu22.04-x86_64_v3 - - ^gdbm@1.23%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^readline@8.2%clang@14.0.0-gfortran cppflags="-g" build_system=autotools patches=bbf97f1 arch=linux-ubuntu22.04-x86_64_v3 - - ^ncurses@6.4%clang@14.0.0-gfortran cppflags="-g" ~symlinks+termlib abi=none build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^gmake@4.4.1%clang@14.0.0-gfortran cppflags="-g" ~guile build_system=generic arch=linux-ubuntu22.04-x86_64_v3 - - ^pkgconf@1.9.5%clang@14.0.0-gfortran cppflags="-g" build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 - - ^zlib-ng@2.1.4%clang@14.0.0-gfortran cppflags="-g" +compat+opt build_system=autotools arch=linux-ubuntu22.04-x86_64_v3 \ No newline at end of file + - hdf5@1.14.6~cxx~fortran~hl~ipo~java~map~mpi+shared~szip~threadsafe+tools api=default build_system=cmake build_type=Release generator=make arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^cmake@3.31.8~doc+ncurses+ownlibs~qtgui build_system=generic build_type=Release arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^curl@8.11.1~gssapi~ldap~libidn2~librtmp~libssh~libssh2+nghttp2 build_system=autotools libs:=shared,static tls:=openssl arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^nghttp2@1.65.0 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^diffutils@3.10 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^libiconv@1.18 build_system=autotools libs:=shared,static arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^openssl@3.4.1~docs+shared build_system=generic certs=mozilla arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^ca-certificates-mozilla@2025-05-20 build_system=generic arch=linux-ubuntu22.04-x86_64 + - ^perl@5.42.0+cpanm+opcode+open+shared+threads build_system=generic arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^berkeley-db@18.1.40+cxx~docs+stl build_system=autotools patches:=26090f4,b231fcc arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^bzip2@1.0.8~debug~pic+shared build_system=generic arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^gdbm@1.23 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^readline@8.3 build_system=autotools patches:=21f0a03 arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^ncurses@6.5-20250705~symlinks+termlib abi=none build_system=autotools patches:=7a351bc arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 + - ^compiler-wrapper@1.0 build_system=generic arch=linux-ubuntu22.04-x86_64 +[e] ^glibc@2.35 build_system=autotools arch=linux-ubuntu22.04-x86_64 + - ^gmake@4.4.1~guile build_system=generic arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 +[e] ^llvm@14.0.0+clang~cuda~flang+gold+libomptarget~libomptarget_debug~link_llvm_dylib~lld~lldb+llvm_dylib+lua~mlir+polly~python~split_dwarf~z3 build_system=cmake build_type=Release compiler-rt=runtime generator=ninja libcxx=runtime libunwind=runtime openmp=runtime patches:=1f42874,25bc503,6379168,8248141,b216cff,cb8e645 shlib_symbol_version=none targets:=all version_suffix=none arch=linux-ubuntu22.04-x86_64 + - ^pkgconf@2.5.1 build_system=autotools arch=linux-ubuntu22.04-x86_64 %c=clang@14.0.0 + - ^zlib-ng@2.2.4+compat+new_strategies+opt+pic+shared build_system=autotools arch=linux-ubuntu22.04-x86_64 %c,cxx=clang@14.0.0 \ No newline at end of file diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index d2168ce68a..e429cbd605 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -444,17 +444,20 @@ Variant preferences As we've seen throughout this tutorial, HDF5 builds with MPI enabled by default in Spack. If we were working on a project that would routinely need serial HDF5, that might get annoying quickly, having to type ``hdf5~mpi`` all the time. -Instead, we'll update our preferences for HDF5. +Instead, we'll update our config to force disable it: .. code-block:: yaml - :emphasize-lines: 9-10 + :emphasize-lines: 12-13 spack: specs: [] view: true + concretizer: + unify: true packages: all: - compiler: [clang, gcc, intel, pgi, xl, nag, fj] + require: + - one_of: ["%llvm", "%gcc"] providers: mpi: [mpich, openmpi] hdf5: @@ -465,7 +468,7 @@ Now hdf5 will concretize without an MPI dependency by default. .. literalinclude:: outputs/config/3.prefs.out :language: console - :emphasize-lines: 8 + :emphasize-lines: 2 In general, every attribute that we can set for all packages we can set separately for an individual package. @@ -482,14 +485,17 @@ On these systems, we have a pre-installed curl. Let's tell Spack about this package and where it can be found: .. code-block:: yaml - :emphasize-lines: 11-14 + :emphasize-lines: 14-17 spack: specs: [] view: true + concretizer: + unify: true packages: all: - compiler: [clang, gcc, intel, pgi, xl, nag, fj] + require: + - one_of: ["%llvm", "%gcc"] providers: mpi: [mpich, openmpi] hdf5: @@ -498,49 +504,15 @@ Let's tell Spack about this package and where it can be found: externals: - spec: curl@7.81.0 %gcc@11.4.0 prefix: /usr + buildable: false Here, we've told Spack that Curl 7.81.0 is installed on our system. We've also told it the installation prefix where Curl can be found. We don't know exactly which variants it was built with, but that's okay. - -.. literalinclude:: outputs/config/0.externals.out - :language: console - - -You'll notice that Spack is now using the external Curl installation, but the compiler used to build Curl is now overriding our compiler preference of clang. -If we explicitly specify Clang: - -.. literalinclude:: outputs/config/1.externals.out - :language: console - -Spack concretizes to both HDF5 and Curl being built with Clang. -This has a side-effect of rebuilding Curl. -If we want to force Spack to use the system Curl, we have two choices. -We can either specify it on the command line, or we can tell Spack that it's not allowed to build its own Curl. -We'll go with the latter. - -.. code-block:: yaml - :emphasize-lines: 15 - - spack: - specs: [] - view: true - packages: - all: - compiler: [clang, gcc, intel, pgi, xl, nag, fj] - providers: - mpi: [mpich, openmpi] - hdf5: - require: ~mpi - curl: - externals: - - spec: curl@5.34.0 %gcc@11.4.0 - prefix: /usr - buildable: false - - -Now Spack will be forced to choose the external Curl. +Finally, we set `buildable: false` to require that Spack not try to +build its own. +.. The weighting/preferences dont work quite the same so I skipped right to buildable:false .. literalinclude:: outputs/config/2.externals.out :language: console @@ -560,14 +532,17 @@ To express that we don't want any other MPI installed, we can use the virtual `` While we're editing the ``spack.yaml`` file, make sure to configure HDF5 to be able to build with MPI again: .. code-block:: yaml - :emphasize-lines: 14-19 + :emphasize-lines: 19-24 spack: specs: [] view: true + concretizer: + unify: true packages: all: - compiler: [clang, gcc, intel, pgi, xl, nag, fj] + require: + - one_of: ["%llvm", "%gcc"] providers: mpi: [mpich, openmpi] curl: @@ -582,27 +557,25 @@ While we're editing the ``spack.yaml`` file, make sure to configure HDF5 to be a mpi: buildable: false -Now that we have configured Spack not to build any possible provider for MPI, we can try again. +.. 3.externals.out has mpich +.. The concretization result is strange and enables some qt stuff that makes it huge -.. literalinclude:: outputs/config/3.externals.out - :language: console - :emphasize-lines: 15 - -Notice that we still haven't build ``hdf5`` with our external ``mpich``. +If you run this as-is, you'll notice Spack still hasn't built ``hdf5`` with our external ``mpich``. The concretizer has instead turned off ``mpi`` support in ``hdf5``. To debug this, we will force Spack to use ``hdf5+mpi``. .. code-block:: console - $ spack spec hdf5%clang+mpi - ==> Error: concretization failed for the following reasons: - - 1. hdf5: '+mpi' conflicts with '^mpich@4.0:4.0.3' - 2. hdf5: '+mpi' conflicts with '^mpich@4.0:4.0.3' - required because conflict applies to spec ^mpich@4.0:4.0.3 - required because hdf5%clang+mpi requested from CLI + $ spack spec hdf5+mpi + ==> Error: failed to concretize `hdf5+mpi` for the following reasons: + 1. cannot satisfy a requirement for package 'mpich'. + 2. hdf5: '+mpi' conflicts with '^mpich@4.0:4.0.3' + 3. hdf5: '+mpi' conflicts with '^mpich@4.0:4.0.3' required because conflict is triggered when +mpi - required because hdf5%clang+mpi requested from CLI + required because hdf5+mpi requested explicitly + required because conflict constraint ^mpich@4.0:4.0.3 + required because mpich available as external when satisfying mpich@=4.0+hydra device=ch4 netmod=ofi + required because hdf5+mpi requested explicitly In this case, we cannot use the external mpich. The version is incompatible with ``hdf5``. From 85347f06978ec4b932d68849581954e63bcc65da Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Thu, 31 Jul 2025 17:15:28 -0700 Subject: [PATCH 07/13] rst auto format --- tutorial_configuration.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index e429cbd605..224d59fc80 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -510,8 +510,7 @@ Let's tell Spack about this package and where it can be found: Here, we've told Spack that Curl 7.81.0 is installed on our system. We've also told it the installation prefix where Curl can be found. We don't know exactly which variants it was built with, but that's okay. -Finally, we set `buildable: false` to require that Spack not try to -build its own. +Finally, we set `buildable: false` to require that Spack not try to build its own. .. The weighting/preferences dont work quite the same so I skipped right to buildable:false .. literalinclude:: outputs/config/2.externals.out From 3ad9948c5b680de8a8bab8a0c4ec0e70474b87bb Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Fri, 1 Aug 2025 09:58:34 -0700 Subject: [PATCH 08/13] italics->code; accidentally displayed a comment (added space) --- tutorial_configuration.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index 224d59fc80..1a783dabd5 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -277,9 +277,9 @@ You can use this new entry like so: $ spack spec openblas %clang_gfortran -Note the identifier `clang_gfortran` is not itself a spec (you don't version it). +Note the identifier ``clang_gfortran`` is not itself a spec (you don't version it). You reference it in other specs. -Note that without `when: '%fortran'`, you could not use `clang_gfortran` with packages unless they depended on Fortran (likewise for the `when` statements on c/cxx). +Note that without ``when: '%fortran'``, you could not use ``clang_gfortran`` with packages unless they depended on Fortran (likewise for the `when` statements on c/cxx). .. These sections specify when Spack can use different compilers, and are primarily useful for configuration files that will be used across multiple systems. @@ -510,7 +510,8 @@ Let's tell Spack about this package and where it can be found: Here, we've told Spack that Curl 7.81.0 is installed on our system. We've also told it the installation prefix where Curl can be found. We don't know exactly which variants it was built with, but that's okay. -Finally, we set `buildable: false` to require that Spack not try to build its own. +Finally, we set ``buildable: false`` to require that Spack not try to build its own. + .. The weighting/preferences dont work quite the same so I skipped right to buildable:false .. literalinclude:: outputs/config/2.externals.out From 0894d3130855af69facdcaa09aa6adaa5801784a Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Mon, 4 Aug 2025 09:36:57 -0700 Subject: [PATCH 09/13] Omit compilers as a separate section --- tutorial_configuration.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index 1a783dabd5..f92a041966 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -24,12 +24,10 @@ A partial list of some key configuration sections is provided below. - General settings (install location, number of build jobs, etc) * - concretizer - Specialization of the concretizer behavior (reuse, unification, etc) - * - compilers - - Define the compilers that Spack can use (required and system specific) * - Mirrors - Locations where spack can look for stashed source or binary distributions * - Packages - - Specific settings and rules for packages + - Define the compilers that Spack can use, and add rules/preferences for package concretization * - Modules - Naming, location and additional configuration of Spack generated modules From 6a29814ea90ff5fd4f7045a002972a7dcd47c00e Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Mon, 4 Aug 2025 14:41:51 -0700 Subject: [PATCH 10/13] one_of -> any_of; another pass fixing some issues --- tutorial_configuration.rst | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index f92a041966..1fa769b867 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -424,7 +424,7 @@ When you have an activated environment, you can edit the associated configuratio packages: all: require: - - one_of: ["%llvm", "%gcc"] + - any_of: ["%llvm", "%gcc"] providers: mpi: [mpich, openmpi] @@ -455,13 +455,16 @@ Instead, we'll update our config to force disable it: packages: all: require: - - one_of: ["%llvm", "%gcc"] + - any_of: ["%llvm", "%gcc"] providers: mpi: [mpich, openmpi] hdf5: - require: ~mpi + require: + - spec: "~mpi" + - any_of: ["%llvm", "gcc"] +Note that defining ``hdf5`` overrides everything under ``all``, so the Clang preference must be reintroduced. Now hdf5 will concretize without an MPI dependency by default. .. literalinclude:: outputs/config/3.prefs.out @@ -493,22 +496,27 @@ Let's tell Spack about this package and where it can be found: packages: all: require: - - one_of: ["%llvm", "%gcc"] + - any_of: ["%llvm", "%gcc"] providers: mpi: [mpich, openmpi] hdf5: - require: ~mpi + require: + - spec: "~mpi" + - any_of: ["%llvm", "gcc"] curl: externals: - spec: curl@7.81.0 %gcc@11.4.0 prefix: /usr buildable: false - + cmake: + require: + - spec: "~qtgui" Here, we've told Spack that Curl 7.81.0 is installed on our system. We've also told it the installation prefix where Curl can be found. We don't know exactly which variants it was built with, but that's okay. Finally, we set ``buildable: false`` to require that Spack not try to build its own. +The cmake config isn't strictly required, but you might get a strange concretization without it. .. The weighting/preferences dont work quite the same so I skipped right to buildable:false @@ -540,7 +548,7 @@ While we're editing the ``spack.yaml`` file, make sure to configure HDF5 to be a packages: all: require: - - one_of: ["%llvm", "%gcc"] + - any_of: ["%llvm", "%gcc"] providers: mpi: [mpich, openmpi] curl: @@ -548,6 +556,9 @@ While we're editing the ``spack.yaml`` file, make sure to configure HDF5 to be a - spec: curl@7.81.0 %gcc@11.4.0 prefix: /usr buildable: false + cmake: + require: + - spec: "~qtgui" mpich: externals: - spec: mpich@4.0+hydra device=ch4 netmod=ofi From 1bfbda4b5b4d91454030349b79b5ac23365d8e90 Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Mon, 4 Aug 2025 17:12:52 -0700 Subject: [PATCH 11/13] some typos --- tutorial_configuration.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index 1fa769b867..b118584c9c 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -461,7 +461,7 @@ Instead, we'll update our config to force disable it: hdf5: require: - spec: "~mpi" - - any_of: ["%llvm", "gcc"] + - any_of: ["%llvm", "%gcc"] Note that defining ``hdf5`` overrides everything under ``all``, so the Clang preference must be reintroduced. @@ -486,7 +486,7 @@ On these systems, we have a pre-installed curl. Let's tell Spack about this package and where it can be found: .. code-block:: yaml - :emphasize-lines: 14-17 + :emphasize-lines: 16-20 spack: specs: [] @@ -502,7 +502,7 @@ Let's tell Spack about this package and where it can be found: hdf5: require: - spec: "~mpi" - - any_of: ["%llvm", "gcc"] + - any_of: ["%llvm", "%gcc"] curl: externals: - spec: curl@7.81.0 %gcc@11.4.0 From fd153a772f3182e7f915cfffee4c5cf033ee0c86 Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Mon, 4 Aug 2025 17:29:29 -0700 Subject: [PATCH 12/13] swap requirement with prefer; cmake cfg not needed in new image --- tutorial_configuration.rst | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index b118584c9c..0698678a47 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -423,8 +423,8 @@ When you have an activated environment, you can edit the associated configuratio unify: true packages: all: - require: - - any_of: ["%llvm", "%gcc"] + prefer: + - "%llvm" providers: mpi: [mpich, openmpi] @@ -454,14 +454,13 @@ Instead, we'll update our config to force disable it: unify: true packages: all: - require: - - any_of: ["%llvm", "%gcc"] + prefer: + - "%llvm" providers: mpi: [mpich, openmpi] hdf5: require: - spec: "~mpi" - - any_of: ["%llvm", "%gcc"] Note that defining ``hdf5`` overrides everything under ``all``, so the Clang preference must be reintroduced. @@ -495,22 +494,18 @@ Let's tell Spack about this package and where it can be found: unify: true packages: all: - require: - - any_of: ["%llvm", "%gcc"] + prefer: + - "%llvm" providers: mpi: [mpich, openmpi] hdf5: require: - spec: "~mpi" - - any_of: ["%llvm", "%gcc"] curl: externals: - spec: curl@7.81.0 %gcc@11.4.0 prefix: /usr buildable: false - cmake: - require: - - spec: "~qtgui" Here, we've told Spack that Curl 7.81.0 is installed on our system. We've also told it the installation prefix where Curl can be found. @@ -547,8 +542,8 @@ While we're editing the ``spack.yaml`` file, make sure to configure HDF5 to be a unify: true packages: all: - require: - - any_of: ["%llvm", "%gcc"] + prefer: + - "%llvm" providers: mpi: [mpich, openmpi] curl: @@ -556,9 +551,6 @@ While we're editing the ``spack.yaml`` file, make sure to configure HDF5 to be a - spec: curl@7.81.0 %gcc@11.4.0 prefix: /usr buildable: false - cmake: - require: - - spec: "~qtgui" mpich: externals: - spec: mpich@4.0+hydra device=ch4 netmod=ofi From 2aaaeede00b989f2fce01e20e181d2e1911b2cfe Mon Sep 17 00:00:00 2001 From: Peter Scheibel Date: Mon, 4 Aug 2025 18:22:36 -0700 Subject: [PATCH 13/13] I have finally conquered whack-a-mole of config changes --- tutorial_configuration.rst | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tutorial_configuration.rst b/tutorial_configuration.rst index 0698678a47..1931db393a 100644 --- a/tutorial_configuration.rst +++ b/tutorial_configuration.rst @@ -425,11 +425,12 @@ When you have an activated environment, you can edit the associated configuratio all: prefer: - "%llvm" - providers: - mpi: [mpich, openmpi] + mpi: + require: mpich +We see if we retry that we now get what we want without getting any more specific on the command line. -Because of the configuration scoping we discussed earlier, this overrides the default settings just for these two items. +.. Because of the configuration scoping we discussed earlier, this overrides the default settings just for these two items. .. literalinclude:: outputs/config/1.prefs.out :language: console @@ -445,7 +446,7 @@ If we were working on a project that would routinely need serial HDF5, that migh Instead, we'll update our config to force disable it: .. code-block:: yaml - :emphasize-lines: 12-13 + :emphasize-lines: 12-14 spack: specs: [] @@ -456,15 +457,14 @@ Instead, we'll update our config to force disable it: all: prefer: - "%llvm" - providers: - mpi: [mpich, openmpi] + mpi: + require: mpich hdf5: require: - spec: "~mpi" -Note that defining ``hdf5`` overrides everything under ``all``, so the Clang preference must be reintroduced. -Now hdf5 will concretize without an MPI dependency by default. +Note if you define ``require`` under ``all`` and ``hdf5``, you must reintroduce any requirements in ``hdf5``. .. literalinclude:: outputs/config/3.prefs.out :language: console @@ -485,7 +485,7 @@ On these systems, we have a pre-installed curl. Let's tell Spack about this package and where it can be found: .. code-block:: yaml - :emphasize-lines: 16-20 + :emphasize-lines: 15-19 spack: specs: [] @@ -496,8 +496,8 @@ Let's tell Spack about this package and where it can be found: all: prefer: - "%llvm" - providers: - mpi: [mpich, openmpi] + mpi: + require: mpich hdf5: require: - spec: "~mpi" @@ -544,8 +544,8 @@ While we're editing the ``spack.yaml`` file, make sure to configure HDF5 to be a all: prefer: - "%llvm" - providers: - mpi: [mpich, openmpi] + mpi: + require: mpich curl: externals: - spec: curl@7.81.0 %gcc@11.4.0