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

Reply via email to