spack / spack

A flexible package manager that supports multiple versions, configurations, platforms, and compilers.
https://spack.io
Other
4.21k stars 2.24k forks source link

Macos `%apple-clang` cannot handle `-rpath` when creating static library #45919

Open Chrismarsh opened 3 weeks ago

Chrismarsh commented 3 weeks ago

Steps to reproduce

When creating a static library on macos using apple-clang, spack passes the entire -rpath to the linker. However apple-clang's ld cannot handle this:

ld: -rpath can only be used when creating a dynamic final linked image

And example of this behaviour is parallel-netcdf-1.12.3 where -rpath is passed to ld as it tries to create a static library:

[...]
/bin/sh ../../libtool  --tag=CXX   --mode=link /Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-fkibfdvo7p66dwxvqcbe6632slj6xucp/bin/mpic++  -fPIC -version-info 4:3:0  -o libpnetcdf.la -rpath /Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/parallel-netcdf-1.12.3-hw6ygpgtgv54yngvev6hwm22xrm3xfyu/lib   ../dispatchers/libdispatchers.la ../drivers/common/libcommon.la ../drivers/ncmpio/libncmpio.la     ../binding/cxx/libcxx.la ../binding/f77/libf77.la ../binding/f90/libf90.la -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-fkibfdvo7p66dwxvqcbe6632slj6xucp/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-tqacx2dxx2udf7x7qaqyhjaoh35srnrh/bin/../lib/gcc/aarch64-apple-darwin23.6.0/14.1.0 -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-tqacx2dxx2udf7x7qaqyhjaoh35srnrh/bin/../lib/gcc -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-tqacx2dxx2udf7x7qaqyhjaoh35srnrh/bin/../lib/gcc/aarch64-apple-darwin23.6.0/14.1.0/../../.. -lemutls_w -lheapt_w -ld_classic -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi -lgfortran -lquadmath -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-fkibfdvo7p66dwxvqcbe6632slj6xucp/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-tqacx2dxx2udf7x7qaqyhjaoh35srnrh/bin/../lib/gcc/aarch64-apple-darwin23.6.0/14.1.0 -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-tqacx2dxx2udf7x7qaqyhjaoh35srnrh/bin/../lib/gcc -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-tqacx2dxx2udf7x7qaqyhjaoh35srnrh/bin/../lib/gcc/aarch64-apple-darwin23.6.0/14.1.0/../../.. -lemutls_w -lheapt_w -ld_classic -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi -lgfortran -lquadmath 
libtool: link: /Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-fkibfdvo7p66dwxvqcbe6632slj6xucp/bin/mpic++ -r -keep_private_externs -nostdlib -o .libs/libpnetcdf.4.dylib-master.o   -Wl,-force_load,../dispatchers/.libs/libdispatchers.a -Wl,-force_load,../drivers/common/.libs/libcommon.a -Wl,-force_load,../drivers/ncmpio/.libs/libncmpio.a -Wl,-force_load,../binding/cxx/.libs/libcxx.a -Wl,-force_load,../binding/f77/.libs/libf77.a -Wl,-force_load,../binding/f90/.libs/libf90.a

Error message

No response

Information on your system

spack debug report
* **Spack:** 0.23.0.dev0 (b623f58782c53bc465d14b84b44e91ffc2b872cd)
* **Python:** 3.9.6
[spack-build-out.txt](https://github.com/user-attachments/files/16716577/spack-build-out.txt)

* **Platform:** darwin-sonoma-m1

General information

Chrismarsh commented 3 weeks ago

/cc @haampie in case you have an idea?

haampie commented 3 weeks ago

The logs look incomplete, can you share the bits where the error happens?

Notice that ld is never used to create static libraries

Chrismarsh commented 2 weeks ago

spack-build-out.txt

I'm getting the ld usage from

ld: -rpath can only be used when creating a dynamic final linked image

I am confused though. This log is from last night when I was hitting this while building an env. Thus, I made my PR. This morning I went to generate a new log and building the static library worked. How is that possible?

Chrismarsh commented 6 days ago

Wild. I had to rebuild a bunch of libraries and I ran into this again spack-build-01-autoreconf-out.txt spack-build-02-configure-out.txt spack-build-03-build-out.txt spack-build-env-mods.txt spack-build-env.txt spack-build-out.txt spack-configure-args.txt

Chrismarsh commented 6 days ago

@skosukhin This is the issue I am seeing that motivated https://github.com/spack/spack/pull/45925

Chrismarsh commented 6 days ago

spack -d install logs spack-cc-parallel-netcdf-iobthja.in.log spack-cc-parallel-netcdf-iobthja.out.log

Chrismarsh commented 6 days ago

Ah. I specify an extra rpath in my compilers.yaml

compilers:
- compiler:
    spec: apple-clang@=15.0.0
    paths:
      cc: /usr/bin/clang
      cxx: /usr/bin/clang++
      f77: /Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/bin/gfortran
      fc: /Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/bin/gfortran
    flags: 
      ldflags: "-ld_classic"
    operating_system: sonoma
    target: aarch64
    modules: []
    environment: {}
    extra_rpaths: [/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/lib]

to work around this issue https://github.com/spack/spack/issues/45479. In the last line of the out.log

[ccld] /usr/bin/clang++ -Wl,-headerpad_max_install_names -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/include -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/include -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/pmix-5.0.2-ykn62tawvtumje372h3n3m7is6mwwiam/include -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libevent-2.1.12-zvyk7d6vz2r6vdcxckfthaoqr5zeyu4q/include -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openssl-3.3.1-5rjne4lzjg4khii4vick2kd63hkqbe75/include -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/hwloc-2.11.1-yaguxr62mdwddktr7givoemi6zjmgccg/include -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libxml2-2.10.3-kqgaqfgc5k2dv4xbil5gtzccpuhpvajq/include/libxml2 -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libxml2-2.10.3-kqgaqfgc5k2dv4xbil5gtzccpuhpvajq/include -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/xz-5.4.6-v5efqvigsi4tyu7r3t5ab3ribd7rsbst/include -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/zlib-1.3.1-flrk3ecpvdwc36ebmjgumqrasn7rzk7k/include -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/ncurses-6.5-injc6ig3zwzoumui3kop6vvj7x674l2v/include -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libiconv-1.17-wsnd3wa5h5zopiuzq6p34yirs4ukjogk/include -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/pmix-5.0.2-ykn62tawvtumje372h3n3m7is6mwwiam/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libevent-2.1.12-zvyk7d6vz2r6vdcxckfthaoqr5zeyu4q/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openssl-3.3.1-5rjne4lzjg4khii4vick2kd63hkqbe75/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/hwloc-2.11.1-yaguxr62mdwddktr7givoemi6zjmgccg/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libxml2-2.10.3-kqgaqfgc5k2dv4xbil5gtzccpuhpvajq/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/xz-5.4.6-v5efqvigsi4tyu7r3t5ab3ribd7rsbst/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/zlib-1.3.1-flrk3ecpvdwc36ebmjgumqrasn7rzk7k/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/ncurses-6.5-injc6ig3zwzoumui3kop6vvj7x674l2v/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libiconv-1.17-wsnd3wa5h5zopiuzq6p34yirs4ukjogk/lib -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/lib -Wl,-rpath,/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/lib -r -keep_private_externs -nostdlib -o .libs/libpnetcdf.4.dylib-master.o -Wl,-force_load -Wl,../dispatchers/.libs/libdispatchers.a -Wl,-force_load -Wl,../drivers/common/.libs/libcommon.a -Wl,-force_load -Wl,../drivers/ncmpio/.libs/libncmpio.a -Wl,-force_load -Wl,../binding/cxx/.libs/libcxx.a -Wl,-force_load -Wl,../binding/f77/.libs/libf77.a -Wl,-force_load -Wl,../binding/f90/.libs/libf90.a -lmpi -ld_classic

you can see that rpath being added, causing the issue.

Chrismarsh commented 6 days ago

I also note that the -ld_classic flag is not correctly handled either. In the 2nd to last line, the cc step is correctly adding Wl, prefix:

[cc] [...]  -Wl,-flat_namespace -Wl,-ld_classic

but on the [ccld] step it is incorrectly escaped

 [ccld]  [...] -Wl,-force_load -Wl,../binding/f90/.libs/libf90.a -lmpi -ld_classic
Chrismarsh commented 6 days ago

In the env I see:

SPACK_COMPILER_EXTRA_RPATHS=/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/lib; export SPACK_COMPILER_EXTRA_RPATHS

and in this section https://github.com/spack/spack/blob/develop/lib/spack/env/cc#L875-L880 the extra rpath is added unconditionally to the ccld step as https://github.com/spack/spack/blob/develop/lib/spack/env/cc#L432 isn't being triggered despite -r being present. Thus the problem.

@haampie I'm wondering if you have any insight in how to fix this?

Chrismarsh commented 6 days ago

I traced through the cc wrapper to try to figure out where this was getting injected from.

1 arg_list occurs on line 910 https://github.com/spack/spack/blob/develop/lib/spack/env/cc#L909 2 arg_list occurs on line 940 https://github.com/spack/spack/blob/develop/lib/spack/env/cc#L940 3 arg_list occurs on line 977 https://github.com/spack/spack/blob/develop/lib/spack/env/cc#L977

$@=-r -keep_private_externs -nostdlib -o .libs/libpnetcdf.4.dylib-master.o -Wl,-force_load,../dispatchers/.libs/libdispatchers.a -Wl,-force_load,../drivers/common/.libs/libcommon.a -Wl,-force_load,../drivers/ncmpio/.libs/libncmpio.a -Wl,-force_load,../binding/cxx/.libs/libcxx.a -Wl,-force_load,../binding/f77/.libs/libf77.a -Wl,-force_load,../binding/f90/.libs/libf90.a -I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/include -L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/lib -Wl,-rpath,/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/lib -lmpi
--- add_rpaths=false ----
--- 1 args_list=-Wl,-headerpad_max_install_names
--- 2 args_list=-Wl,-headerpad_max_install_names-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/pmix-5.0.2-ykn62tawvtumje372h3n3m7is6mwwiam/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libevent-2.1.12-zvyk7d6vz2r6vdcxckfthaoqr5zeyu4q/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openssl-3.3.1-5rjne4lzjg4khii4vick2kd63hkqbe75/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/hwloc-2.11.1-yaguxr62mdwddktr7givoemi6zjmgccg/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libxml2-2.10.3-kqgaqfgc5k2dv4xbil5gtzccpuhpvajq/include/libxml2-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libxml2-2.10.3-kqgaqfgc5k2dv4xbil5gtzccpuhpvajq/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/xz-5.4.6-v5efqvigsi4tyu7r3t5ab3ribd7rsbst/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/zlib-1.3.1-flrk3ecpvdwc36ebmjgumqrasn7rzk7k/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/ncurses-6.5-injc6ig3zwzoumui3kop6vvj7x674l2v/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libiconv-1.17-wsnd3wa5h5zopiuzq6p34yirs4ukjogk/include-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/pmix-5.0.2-ykn62tawvtumje372h3n3m7is6mwwiam/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libevent-2.1.12-zvyk7d6vz2r6vdcxckfthaoqr5zeyu4q/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openssl-3.3.1-5rjne4lzjg4khii4vick2kd63hkqbe75/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/hwloc-2.11.1-yaguxr62mdwddktr7givoemi6zjmgccg/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libxml2-2.10.3-kqgaqfgc5k2dv4xbil5gtzccpuhpvajq/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/xz-5.4.6-v5efqvigsi4tyu7r3t5ab3ribd7rsbst/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/zlib-1.3.1-flrk3ecpvdwc36ebmjgumqrasn7rzk7k/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/ncurses-6.5-injc6ig3zwzoumui3kop6vvj7x674l2v/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libiconv-1.17-wsnd3wa5h5zopiuzq6p34yirs4ukjogk/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/lib
spack_flags_spack_store_rpath_dirs_list=
spack_store_rpath_dirs_list=/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/lib
spack_flags_rpath_dirs_list=
rpath_dirs_list=
spack_flags_system_rpath_dirs_list=
system_rpath_dirs_list=
other_args_list=-r-keep_private_externs-nostdlib-o.libs/libpnetcdf.4.dylib-master.o-Wl,-force_load-Wl,../dispatchers/.libs/libdispatchers.a-Wl,-force_load-Wl,../drivers/common/.libs/libcommon.a-Wl,-force_load-Wl,../drivers/ncmpio/.libs/libncmpio.a-Wl,-force_load-Wl,../binding/cxx/.libs/libcxx.a-Wl,-force_load-Wl,../binding/f77/.libs/libf77.a-Wl,-force_load-Wl,../binding/f90/.libs/libf90.a-lmpi
spack_flags_other_args_list=-ld_classic
libs_list=
--- 3 args_list=-Wl,-headerpad_max_install_names-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/pmix-5.0.2-ykn62tawvtumje372h3n3m7is6mwwiam/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libevent-2.1.12-zvyk7d6vz2r6vdcxckfthaoqr5zeyu4q/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openssl-3.3.1-5rjne4lzjg4khii4vick2kd63hkqbe75/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/hwloc-2.11.1-yaguxr62mdwddktr7givoemi6zjmgccg/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libxml2-2.10.3-kqgaqfgc5k2dv4xbil5gtzccpuhpvajq/include/libxml2-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libxml2-2.10.3-kqgaqfgc5k2dv4xbil5gtzccpuhpvajq/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/xz-5.4.6-v5efqvigsi4tyu7r3t5ab3ribd7rsbst/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/zlib-1.3.1-flrk3ecpvdwc36ebmjgumqrasn7rzk7k/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/ncurses-6.5-injc6ig3zwzoumui3kop6vvj7x674l2v/include-I/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libiconv-1.17-wsnd3wa5h5zopiuzq6p34yirs4ukjogk/include-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openmpi-5.0.5-a7kzum6q5prcztolnupihfcbsoi6xdm6/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/pmix-5.0.2-ykn62tawvtumje372h3n3m7is6mwwiam/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libevent-2.1.12-zvyk7d6vz2r6vdcxckfthaoqr5zeyu4q/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/openssl-3.3.1-5rjne4lzjg4khii4vick2kd63hkqbe75/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/hwloc-2.11.1-yaguxr62mdwddktr7givoemi6zjmgccg/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libxml2-2.10.3-kqgaqfgc5k2dv4xbil5gtzccpuhpvajq/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/xz-5.4.6-v5efqvigsi4tyu7r3t5ab3ribd7rsbst/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/zlib-1.3.1-flrk3ecpvdwc36ebmjgumqrasn7rzk7k/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/ncurses-6.5-injc6ig3zwzoumui3kop6vvj7x674l2v/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/libiconv-1.17-wsnd3wa5h5zopiuzq6p34yirs4ukjogk/lib-L/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/lib-Wl,-rpath,/Users/cbm038/Documents/science/code/spack/opt/spack/darwin-sonoma-m1/apple-clang-15.0.0/gcc-14.1.0-457tpmpyozjdws6hjoppm7a7tuyixiuj/lib-r-keep_private_externs-nostdlib-o.libs/libpnetcdf.4.dylib-master.o-Wl,-force_load-Wl,../dispatchers/.libs/libdispatchers.a-Wl,-force_load-Wl,../drivers/common/.libs/libcommon.a-Wl,-force_load-Wl,../drivers/ncmpio/.libs/libncmpio.a-Wl,-force_load-Wl,../binding/cxx/.libs/libcxx.a-Wl,-force_load-Wl,../binding/f77/.libs/libf77.a-Wl,-force_load-Wl,../binding/f90/.libs/libf90.a-lmpi-ld_classic

I assume this occurs at a higher level than then compiler wrapper, but the extra rpath comes in as a -Wl,-rpath. Thus, this arg gets stored into return_spack_store_rpath_dirs_list, via parse_Wl, and ultimately into spack_store_rpath_dirs_list (which you can see in the trace above). This ends up unconditionally added to the args_list in ccld mode: https://github.com/spack/spack/blob/develop/lib/spack/env/cc#L948

I have a PR that I've tested that resolves this rpath problem. I'm not at all sure if it is the spackthonic way of doing things, so I am very open to comments on it.