diff options
author | Harmen Stoppels <me@harmenstoppels.nl> | 2023-11-07 00:17:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-06 15:17:31 -0800 |
commit | 4ce80b95f3cbb8b6e8ce6bb4546dee76b1f398dc (patch) | |
tree | c8f7d8079ef67b9f606c44dffa8945e38e39ca8a /.github/workflows | |
parent | 8f1f9048ec4b7e55d399d787333d901bc5135973 (diff) | |
download | spack-4ce80b95f3cbb8b6e8ce6bb4546dee76b1f398dc.tar.gz spack-4ce80b95f3cbb8b6e8ce6bb4546dee76b1f398dc.tar.bz2 spack-4ce80b95f3cbb8b6e8ce6bb4546dee76b1f398dc.tar.xz spack-4ce80b95f3cbb8b6e8ce6bb4546dee76b1f398dc.zip |
spack compiler find --[no]-mixed-toolchain (#40902)
Currently there's some hacky logic in the AppleClang compiler that makes
it also accept `gfortran` as a fortran compiler if `flang` is not found.
This is guarded by `if sys.platform` checks s.t. it only applies to
Darwin.
But on Linux the feature of detecting mixed toolchains is highly
requested too, cause it's rather annoying to run into a failed build of
`openblas` after dozens of minutes of compiling its dependencies, just
because clang doesn't have a fortran compiler.
In particular in CI where the system compilers may change during system
updates, it's typically impossible to fix compilers in a hand-written
compilers.yaml config file: the config will almost certainly be outdated
sooner or later, and maintaining one config file per target machine and
writing logic to select the correct config is rather undesirable too.
---
This PR introduces a flag `spack compiler find --mixed-toolchain` that
fills out missing `fc` and `f77` entries in `clang` / `apple-clang` by
picking the best matching `gcc`.
It is enabled by default on macOS, but not on Linux, matching current
behavior of `spack compiler find`.
The "best matching gcc" logic and compiler path updates are identical to
how compiler path dictionaries are currently flattened "horizontally"
(per compiler id). This just adds logic to do the same "vertically"
(across different compiler ids).
So, with this change on Ubuntu 22.04:
```
$ spack compiler find --mixed-toolchain
==> Added 6 new compilers to /home/harmen/.spack/linux/compilers.yaml
gcc@13.1.0 gcc@12.3.0 gcc@11.4.0 gcc@10.5.0 clang@16.0.0 clang@15.0.7
==> Compilers are defined in the following files:
/home/harmen/.spack/linux/compilers.yaml
```
you finally get:
```
compilers:
- compiler:
spec: clang@=15.0.7
paths:
cc: /usr/bin/clang
cxx: /usr/bin/clang++
f77: /usr/bin/gfortran
fc: /usr/bin/gfortran
flags: {}
operating_system: ubuntu23.04
target: x86_64
modules: []
environment: {}
extra_rpaths: []
- compiler:
spec: clang@=16.0.0
paths:
cc: /usr/bin/clang-16
cxx: /usr/bin/clang++-16
f77: /usr/bin/gfortran
fc: /usr/bin/gfortran
flags: {}
operating_system: ubuntu23.04
target: x86_64
modules: []
environment: {}
extra_rpaths: []
```
The "best gcc" is automatically default system gcc, since it has no
suffixes / prefixes.
Diffstat (limited to '.github/workflows')
0 files changed, 0 insertions, 0 deletions