FFTW / fftw3

DO NOT CHECK OUT THESE FILES FROM GITHUB UNLESS YOU KNOW WHAT YOU ARE DOING. (See below.)
GNU General Public License v2.0
2.72k stars 661 forks source link

Cannot build with MPI on macOS #274

Open eschnett opened 2 years ago

eschnett commented 2 years ago

I want to install fftw with MPI on macOS. I am using Spack, and I opened this issue https://github.com/spack/spack/issues/29224. I think this is caused by a configure problem in fftw itself, and I am re-raising the issue here.

fftw is configured with

'../configure' '--prefix=/Users/eschnett/src/spack/opt/spack/darwin-monterey-skylake/gcc-11.2.0/fftw-3.3.10-beequmaebpecoqrwnyoyvr32v66ymrv2' '--enable-shared' '--enable-threads' '--enable-openmp' '--enable-mpi' '--enable-sse2' '--enable-avx' '--enable-avx2' '--disable-avx512' '--disable-avx-128-fma' '--disable-kcvi' '--disable-vsx' '--enable-fma'

and the error message is

/bin/sh ../libtool  --tag=CC   --mode=link /Users/eschnett/src/spack/opt/spack/darwin-monterey-skylake/gcc-11.2.0/openmpi-4.1.2-7poxc72sktaq4bllursf2spuanjv7sw2/bin/mpicc  -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -Wa,-q -Wl,-no_compact_unwind -version-info 9:10:6  -o libfftw3_mpi.la -rpath /Users/eschnett/src/spack/opt/spack/darwin-monterey-skylake/gcc-11.2.0/fftw-3.3.10-beequmaebpecoqrwnyoyvr32v66ymrv2/lib any-true.lo api.lo block.lo choose-radix.lo conf.lo dtensor.lo rearrange.lo wisdom-api.lo f03-wrap.lo transpose-alltoall.lo transpose-pairwise.lo transpose-recurse.lo transpose-problem.lo transpose-solve.lo dft-serial.lo dft-rank-geq2.lo dft-rank-geq2-transposed.lo dft-rank1.lo dft-rank1-bigvec.lo dft-problem.lo dft-solve.lo rdft-serial.lo rdft-rank-geq2.lo rdft-rank-geq2-transposed.lo rdft-rank1-bigvec.lo rdft-problem.lo rdft-solve.lo rdft2-serial.lo rdft2-rank-geq2.lo rdft2-rank-geq2-transposed.lo rdft2-problem.lo rdft2-solve.lo ../libfftw3.la   -lm 
libtool: link: /Users/eschnett/src/spack/lib/spack/env/gcc/gcc -dynamiclib  -o .libs/libfftw3_mpi.3.dylib  .libs/any-true.o .libs/api.o .libs/block.o .libs/choose-radix.o .libs/conf.o .libs/dtensor.o .libs/rearrange.o .libs/wisdom-api.o .libs/f03-wrap.o .libs/transpose-alltoall.o .libs/transpose-pairwise.o .libs/transpose-recurse.o .libs/transpose-problem.o .libs/transpose-solve.o .libs/dft-serial.o .libs/dft-rank-geq2.o .libs/dft-rank-geq2-transposed.o .libs/dft-rank1.o .libs/dft-rank1-bigvec.o .libs/dft-problem.o .libs/dft-solve.o .libs/rdft-serial.o .libs/rdft-rank-geq2.o .libs/rdft-rank-geq2-transposed.o .libs/rdft-rank1-bigvec.o .libs/rdft-problem.o .libs/rdft-solve.o .libs/rdft2-serial.o .libs/rdft2-rank-geq2.o .libs/rdft2-rank-geq2-transposed.o .libs/rdft2-problem.o .libs/rdft2-solve.o   ../.libs/libfftw3.dylib -lm  -O3 -mtune=native -malign-double -Wl,-no_compact_unwind   -install_name  /Users/eschnett/src/spack/opt/spack/darwin-monterey-skylake/gcc-11.2.0/fftw-3.3.10-beequmaebpecoqrwnyoyvr32v66ymrv2/lib/libfftw3_mpi.3.dylib -compatibility_version 10 -current_version 10.10 -Wl,-single_module
Undefined symbols for architecture x86_64:
  "_MPI_Abort", referenced from:
      _fftw_mpi_gather_wisdom in wisdom-api.o
      _fftw_mpi_broadcast_wisdom in wisdom-api.o

plus many more undefined symbols. The complete build output is here.

I believe the problem is related to libtool. libtool is first configured without MPI, and saves as CC the path to the actual compiler. Later, when building MPI code, fftw redefines CC to $MPICC. However, libtool seems to ignore this setting, and then tires to create a dynamic library while calling $CC, which fails since the -lmpi option is missing.