pkg-config file does not propagate dependencies correctly
I have ELPA built with Spack and a Spack-provided CUDA. The ELPA shared libraries are correctly linked against that version of CUDA (in this case installed in /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/cuda-11.4.4-32q6h4aw7nfc6bm24hhlex3xbjho2zbs/
).
$ ldd /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/elpa-2021.11.001-7z75o35wbzejlarg2f3rdh2ba4ct6vk3/lib/libelpa_openmp.so
linux-vdso.so.1 (0x00007fff51b4c000)
libcudart.so.11.0 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/cuda-11.4.4-32q6h4aw7nfc6bm24hhlex3xbjho2zbs/lib64/libcudart.so.11.0 (0x00007fe3ad200000)
libcublas.so.11 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/cuda-11.4.4-32q6h4aw7nfc6bm24hhlex3xbjho2zbs/lib64/libcublas.so.11 (0x00007fe3a3e00000)
libscalapack.so => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/netlib-scalapack-2.1.0-n455vez6w6zrmmsaa6blizkd2dhpjp4g/lib/libscalapack.so (0x00007fe3a3866000)
libopenblas.so.0 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/openblas-0.3.20-urulap4bpumsqt4witgc7zjrwygpvfd7/lib/libopenblas.so.0 (0x00007fe3a2b2a000)
libmpi_usempif08.so.40 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/openmpi-4.1.4-fzlupbc53f4c7rv56ksg2ijp7cmjk3p2/lib/libmpi_usempif08.so.40 (0x00007fe3ad5e9000)
libmpi_usempi_ignore_tkr.so.40 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/openmpi-4.1.4-fzlupbc53f4c7rv56ksg2ijp7cmjk3p2/lib/libmpi_usempi_ignore_tkr.so.40 (0x00007fe3ad5d8000)
libmpi_mpifh.so.40 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/openmpi-4.1.4-fzlupbc53f4c7rv56ksg2ijp7cmjk3p2/lib/libmpi_mpifh.so.40 (0x00007fe3ad568000)
libmpi.so.40 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/openmpi-4.1.4-fzlupbc53f4c7rv56ksg2ijp7cmjk3p2/lib/libmpi.so.40 (0x00007fe3a27fa000)
libgfortran.so.5 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-x86_64_v2/gcc-10.4.0/gcc-11.3.0-vbm62s5zafmejv43sy2jxrk7kjsdvy5c/lib64/libgfortran.so.5 (0x00007fe3a254f000)
libm.so.6 => /lib64/libm.so.6 (0x00007fe3a2403000)
libgomp.so.1 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-x86_64_v2/gcc-10.4.0/gcc-11.3.0-vbm62s5zafmejv43sy2jxrk7kjsdvy5c/lib64/libgomp.so.1 (0x00007fe3ad4f0000)
libquadmath.so.0 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-x86_64_v2/gcc-10.4.0/gcc-11.3.0-vbm62s5zafmejv43sy2jxrk7kjsdvy5c/lib64/libquadmath.so.0 (0x00007fe3ad4a8000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe3ad1dc000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe3a220c000)
libgcc_s.so.1 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-x86_64_v2/gcc-10.4.0/gcc-11.3.0-vbm62s5zafmejv43sy2jxrk7kjsdvy5c/lib64/libgcc_s.so.1 (0x00007fe3ad1c3000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe3ad95f000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe3ad1be000)
librt.so.1 => /lib64/librt.so.1 (0x00007fe3ad1b4000)
libcublasLt.so.11 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/cuda-11.4.4-32q6h4aw7nfc6bm24hhlex3xbjho2zbs/lib64/libcublasLt.so.11 (0x00007fe38e800000)
libopen-rte.so.40 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/openmpi-4.1.4-fzlupbc53f4c7rv56ksg2ijp7cmjk3p2/lib/libopen-rte.so.40 (0x00007fe38e6d6000)
libopen-pal.so.40 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/openmpi-4.1.4-fzlupbc53f4c7rv56ksg2ijp7cmjk3p2/lib/libopen-pal.so.40 (0x00007fe38e5bd000)
libucp.so.0 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/ucx-1.13.1-blorefcxmyrtaw6bohmqni2jfopg7qgz/lib/libucp.so.0 (0x00007fe38e501000)
libuct.so.0 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/ucx-1.13.1-blorefcxmyrtaw6bohmqni2jfopg7qgz/lib/libuct.so.0 (0x00007fe38e4c7000)
libucm.so.0 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/ucx-1.13.1-blorefcxmyrtaw6bohmqni2jfopg7qgz/lib/libucm.so.0 (0x00007fe38e4aa000)
libucs.so.0 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/ucx-1.13.1-blorefcxmyrtaw6bohmqni2jfopg7qgz/lib/libucs.so.0 (0x00007fe38e44a000)
libpmix.so.2 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/pmix-4.1.2-5rfcuayjujkz34vzv6xrxb62oim2nq6l/lib/libpmix.so.2 (0x00007fe38e253000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007fe3a2206000)
libz.so.1 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/zlib-1.2.13-strlfw5tgsnsidsylwj62qn2d2bjcju2/lib/libz.so.1 (0x00007fe38e23b000)
libhwloc.so.15 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/hwloc-2.8.0-dqe5wh7xoko5nk4d4fqagb2ojlozz4yu/lib/libhwloc.so.15 (0x00007fe38e1dc000)
libevent_core-2.1.so.7 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/libevent-2.1.12-ayltwo3wtjbzrwes3xuceqxin4i3awea/lib/libevent_core-2.1.so.7 (0x00007fe38e1a6000)
libevent_pthreads-2.1.so.7 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/libevent-2.1.12-ayltwo3wtjbzrwes3xuceqxin4i3awea/lib/libevent_pthreads-2.1.so.7 (0x00007fe3a2202000)
libnuma.so.1 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/numactl-2.0.14-hurh7orzyk3j53trmysdw2mhbhudfbmc/lib/libnuma.so.1 (0x00007fe38e199000)
libpciaccess.so.0 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/libpciaccess-0.16-vkvruq6waqd5ykaausuasxstprppewvz/lib/libpciaccess.so.0 (0x00007fe38e18d000)
libxml2.so.2 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/libxml2-2.10.1-67i7fqm3rcif6pkdga6xesjd64gqgbyx/lib/libxml2.so.2 (0x00007fe38e028000)
libatomic.so.1 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-x86_64_v2/gcc-10.4.0/gcc-11.3.0-vbm62s5zafmejv43sy2jxrk7kjsdvy5c/lib64/libatomic.so.1 (0x00007fe38e01e000)
liblzma.so.5 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/xz-5.2.7-zynnvn6zxkjith7y7fk26w6m7ynndjvr/lib/liblzma.so.5 (0x00007fe38dff6000)
libiconv.so.2 => /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/libiconv-1.16-fh2cpeogok6yjhafcn4ccpbbc7kcad3q/lib/libiconv.so.2 (0x00007fe38def9000)
However, the pkg-config file does not reflect this custom library path and only contains -lcudart -lcublas
. Any downstream consumer will now fail to link against ELPA because the transitive dependency on CUDA cannot be resolved.
$ cat /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/elpa-2021.11.001-7z75o35wbzejlarg2f3rdh2ba4ct6vk3/lib/pkgconfig/elpa_openmp.pc
prefix=/home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/elpa-2021.11.001-7z75o35wbzejlarg2f3rdh2ba4ct6vk3
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: elpa_openmp
Description: ELPA is a Fortran-based high-performance computational library for the (massively) parallel solution of symmetric or Hermitian, standard or generalized eigenvalue problems.
Version: 2021.11.001
URL:
Libs: -L${libdir} -lelpa_openmp -lcudart -lcublas -lscalapack -lopenblas -lopenblas /home/menke/Code/octopus/mpsd-software/23b/cascadelake/spack/opt/spack/linux-opensuse_leap15-cascadelake/gcc-11.3.0/netlib-scalapack-2.1.0-n455vez6w6zrmmsaa6blizkd2dhpjp4g/lib/libscalapack.so -fopenmp
Cflags: -I${includedir}/elpa_openmp-2021.11.001 -fopenmp
fcflags= -I${includedir}/elpa_openmp-2021.11.001/modules -fopenmp