On Jan 22, 2021, at 9:49 AM, Alvaro Payero Pinto via users <users@lists.open-mpi.org> wrote: > > I am trying to install Open MPI with Intel compiler suite for the Fortran > side and GNU compiler suite for the C side. For factors that don’t depend > upon me, I’m not allowed to change the C compiler suite to Intel one since > that would mean an additional license.
Yoinks. I'll say right off that this will be a challenge. > Problem arises with the fact that the installation should not dynamically > depend on Intel libraries, so the flag “-static-intel” (or similar) should be > passed to the Fortran compiler. I’ve seen in the FAQ that this problem is > solved by passing an Autotools option “-Wc,-static-intel” to the variable > LDFLAGS when invoking configure with Intel compilers. This works if both > C/C++ and Fortran compilers are from Intel. However, it crashes if the > compiler suite is mixed since GNU C/C++ does not recognise the > “-static-intel” option. The problem is that the same LDFLAGS value is used for all 3 languages (C, C++, Fortran), because they can all be compiled into a single application. So the Autotools don't separate out different LDFLAGS for the different languages. > Is there any way to bypass this crash and to indicate that such option should > only be passed when using Fortran compiler? Keep in mind that there's also two different cases here: 1. When compiling Open MPI itself 2. When compiling MPI applications You can customize the behavior of the mpifort wrapper compiler by editing share/openmpi/mpifort-wrapper-data.txt. #1 is likely to be a bit more of a challenge. ...but the thought occurs to me that #2 may be sufficient. You might want to try it and see if your MPI applications have the Intel libraries statically linked, and that's enough...? > Configure call to reproduce the crash is made as follows: > > ./configure --prefix=/usr/local/ --libdir=/usr/local/lib64/ > --includedir=/usr/local/include/ CC=gcc CXX=g++ 'FLAGS=-O2 -m64' 'CFLAGS=-O2 > -m64' 'CXXFLAGS=-O2 -m64' FC=ifort 'FCFLAGS=-O2 -m64' > LDFLAGS=-Wc,-static-intel The other, slightly more invasive mechanism you could try if #2 is not sufficient is to write your own wrapper compiler script that intercepts / strips out -Wc,-static-intel for the C and C++ compilers. For example: ./configure CC=my_gcc_wrapper.sh CXX=my_g++_wrapper.sh ... LDFLAGS=-Wc,-static-intel Those two scripts are simple shell scripts that strip -Wc,-static-intel if it sees it, but otherwise just invoke gcc/g++ with all other contents of $*. It's a gross hack, but it might work. -- Jeff Squyres jsquy...@cisco.com