spack/lib/spack/env
Andrey Parfenov 7dc485d288
cc: Ensure that user-specified flags take precedence over others (#37376)
Spack flags supplied by users should supersede flags from package build systems and
other places in Spack.  However, Spack currently adds user-supplied flags to the 
beginning of the compile line, which means that in some cases build system flags will
supersede user-supplied ones.

The right place to add a flag to ensure it has highest precedence for the compiler really
depends on the type of flag.  For example, search paths like `-L` and `-I` are examined
in order, so adding them first is highest precedence.  Compilers take the *last* occurrence
of optimization flags like `-O2`, so those should be placed *after* other such flags.  Shim
libraries with `-l` should go *before* other libraries on the command line, so we want
user-supplied libs to go first, etc.

`lib/spack/env/cc` already knows how to split arguments into categories like `libs_list`,
`rpath_dirs_list`, etc., so we can leverage that functionality to merge user flags into
the arg list correctly.

The general rules for injected flags are:

1. All `-L`, `-I`, `-isystem`, `-l`, and `*-rpath` flags from `spack_flags_*` to appear
   before their regular counterparts.
2. All other flags ordered with the ones from flags after their regular counterparts,
   i.e. `other_flags` before `spack_flags_other_flags`

- [x] Generalize argument categorization into its own function in the `cc` shell script
- [x] Apply the same splitting logic to injected flags and flags from the original compile line.
- [x] Use the resulting flag lists to merge user- and build-system-supplied flags by category.
- [x] Add tests.

Signed-off-by: Andrey Parfenov <andrey.parfenov@intel.com>

Co-authored-by: iermolae <igor.ermolaev@intel.com>
2023-06-18 14:07:08 -07:00
..
aocc Adding AOCC compiler to SPACK community (#19345) 2020-10-20 10:50:09 -05:00
arm Armcompiler (#9840) 2019-01-08 16:31:25 -08:00
case-insensitive Dependencies now work. Added libelf, libdwarf. 2013-02-18 23:46:04 -08:00
cce Cray support: use linux platform for newer craype versions (#29392) 2022-11-04 14:52:11 -07:00
clang compilers/clang: add flang (#5503) 2017-10-10 13:52:10 -07:00
fj Add Fujitsu compiler to Spack. (#11287) 2019-05-21 20:31:14 -05:00
gcc Fix #254: libtool & distutils want certain compiler names. 2015-12-19 02:06:47 -08:00
intel Fix #254: libtool & distutils want certain compiler names. 2015-12-19 02:06:47 -08:00
nag Add symlink for NAG Fortran Compiler 2016-01-19 13:07:07 -06:00
nvhpc New compiler: nvhpc (NVIDIA HPC SDK) (#19294) 2020-10-16 14:04:27 -07:00
oneapi Support packages which need to explicitly refer to dpcpp by name (#27168) 2021-12-02 15:49:20 -08:00
pgi Modifications to get PGI working 2016-03-03 16:50:51 -06:00
rocmcc rocmcc compiler: initial commit based on aocc and clang (#28575) 2022-03-03 14:34:22 -07:00
xl Fix #254: libtool & distutils want certain compiler names. 2015-12-19 02:06:47 -08:00
xl_r Add support for IBM threaded compilers: xl*_r (#2894) 2017-01-25 16:26:17 -07:00
c++ Dependencies now work. Added libelf, libdwarf. 2013-02-18 23:46:04 -08:00
c89 Dependencies now work. Added libelf, libdwarf. 2013-02-18 23:46:04 -08:00
c99 Dependencies now work. Added libelf, libdwarf. 2013-02-18 23:46:04 -08:00
cc cc: Ensure that user-specified flags take precedence over others (#37376) 2023-06-18 14:07:08 -07:00
cpp Dependencies now work. Added libelf, libdwarf. 2013-02-18 23:46:04 -08:00
f77 Fix for SPACK-35: Fortran not working properly 2014-07-09 01:28:23 -07:00
f90 Fix for SPACK-35: Fortran not working properly 2014-07-09 01:28:23 -07:00
f95 Fix for SPACK-35: Fortran not working properly 2014-07-09 01:28:23 -07:00
fc Fix for SPACK-35: Fortran not working properly 2014-07-09 01:28:23 -07:00
ftn Add ftn to lib/spack/env (#11180) 2019-04-17 13:12:25 -07:00
ld Dependencies now work. Added libelf, libdwarf. 2013-02-18 23:46:04 -08:00
ld.gold Add ld.gold and ld.lld compiler wrapper (#25626) 2021-08-27 13:16:26 +02:00
ld.lld Add ld.gold and ld.lld compiler wrapper (#25626) 2021-08-27 13:16:26 +02:00