Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] Failure (libtool?) to build F90 bindings w/ XLC/PPC64 (1.5rc5 and 1.4.3rc1)
From: Ralf Wildenhues (Ralf.Wildenhues_at_[hidden])
Date: 2010-10-14 14:53:11


[ http://www.open-mpi.org/community/lists/devel/2010/08/8398.php ]

Hello Paul,

sorry for the late reply. This issue you reported is valid; it is
already fixed in upstream Libtool 2.2.8, with commit
v2.2.6-201-g519bf91:
<http://git.savannah.gnu.org/cgit/libtool.git/commit/?id=v2.2.6-201-g519bf91>

Cheers,
Ralf

* Paul H. Hargrove wrote on Thu, Aug 26, 2010 at 11:12:55PM CEST:
> One of the platforms I've been testing is a Linux/PPC64 (which happens to be
> the front-end to a BG/P, but don't be confused by that - I am NOT trying to
> build for the BG/P). On the system are IBM's XLC compilers (also sold under
> the ABSoft name). When passing "-q64" to the xlc compilers to get an LP64
> ABI (default is ILP32), it seems that the scripts for constricting the F90
> bindings somehow end up passing the "-q64" to /usr/bin/ld, which is not
> happy.
>
> If I don't set {C,CXX,F,FC}FLAGS=-q64 then there is no problem building the
> F90 bindings (for ILP32 ABI).
>
> If I --disable-mpi-f90 the build is fine (except for the atomic test failure
> from "make check", reported in
> http://www.open-mpi.org/community/lists/devel/2010/08/8369.php)
>
> Here are the details of the platform:
>
> $ uname -a
> Linux login1 2.6.16.60-0.67.1-ppc64 #1 SMP Thu Aug 5 10:54:46 UTC 2010
> ppc64 ppc64 ppc64 GNU/Linux
>
> $ which xlc
> /soft/apps/ibmcmp-aug2010/vac/bg/9.0/bin/xlc
> $ xlc -qversion
> IBM XL C/C++ Advanced Edition for Blue Gene/P, V9.0
> Version: 09.00.0000.0009
[...]

> Here is the configure command:
>
> $ [path_to]/configure --with-contrib-vt-flags=--with-platform=linux CC=xlc_r
> CXX=xlC_r F77=xlf FC=xlf90 CFLAGS=-q64 CXXFLAGS=-q64 FFLAGS=-q64
> FCFLAGS=-q64
>
> The problem exists with both 1.5rc5 and 1.4.3rc1.
>
> Here is the failure from 1.4.3.rc1:
>
> $ make
> [...]
> make[4]: Entering directory
> `/gpfs/home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64/ompi/mpi/f90'
> /bin/sh ../../../libtool --mode=link xlf90 -I../../../ompi/include
> -I../../../../ompi/include -I. -I../../../../ompi/mpi/f90
> -I../../../ompi/mpi/f90 -q64 -version-info 0:0:0 -export-dynamic -o
> libmpi_f90.la -rpath /usr/local/lib mpi.lo mpi_sizeof.lo
> mpi_comm_spawn_multiple_f90.lo mpi_testall_f90.lo mpi_testsome_f90.lo
> mpi_waitall_f90.lo mpi_waitsome_f90.lo mpi_wtick_f90.lo mpi_wtime_f90.lo
> ../../../ompi/libmpi.la -lnsl -lutil
> libtool: link: /usr/bin/ld -m elf64ppc -shared .libs/mpi.o
> .libs/mpi_sizeof.o .libs/mpi_comm_spawn_multiple_f90.o
> .libs/mpi_testall_f90.o .libs/mpi_testsome_f90.o .libs/mpi_waitall_f90.o
> .libs/mpi_waitsome_f90.o .libs/mpi_wtick_f90.o .libs/mpi_wtime_f90.o
> -L/home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64/orte/.libs
> -L/home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64/opal/.libs
> ../../../ompi/.libs/libmpi.so
> /home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64/orte/.libs/libopen-rte.so
> /home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64/opal/.libs/libopen-pal.so
> -ldl -lnsl -lutil -q64 -soname libmpi_f90.so.0 -o
> .libs/libmpi_f90.so.0.0.0
> /usr/bin/ld: unrecognized option '-q64'
> /usr/bin/ld: use the --help option for usage information
> make[4]: *** [libmpi_f90.la] Error 1
> make[4]: Leaving directory
> `/gpfs/home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64/ompi/mpi/f90'
> make[3]: *** [all-recursive] Error 1
[...]

> Here is the failure from 1.5rc5 (including re-run w/ V=1)

> $ make V=1
> [...]
> make[4]: Entering directory
> `/gpfs/home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi/mpi/f90'
> /bin/sh ../../../libtool --tag=FC --mode=link xlf90
> -I../../../ompi/include -I../../../../ompi/include -I.
> -I../../../../ompi/mpi/f90 -I../../../ompi/mpi/f90 -q64 -version-info 0:0:0
> -export-dynamic -o libmpi_f90.la -rpath /usr/local/lib mpi.lo mpi_sizeof.lo
> mpi_comm_spawn_multiple_f90.lo mpi_testall_f90.lo mpi_testsome_f90.lo
> mpi_waitall_f90.lo mpi_waitsome_f90.lo mpi_wtick_f90.lo mpi_wtime_f90.lo
> ../../../ompi/mpi/f77/libmpi_f77.la -lnsl -lutil
> libtool: link: /usr/bin/ld -m elf64ppc -shared .libs/mpi.o
> .libs/mpi_sizeof.o .libs/mpi_comm_spawn_multiple_f90.o
> .libs/mpi_testall_f90.o .libs/mpi_testsome_f90.o .libs/mpi_waitall_f90.o
> .libs/mpi_waitsome_f90.o .libs/mpi_wtick_f90.o .libs/mpi_wtime_f90.o
> -L/home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi/.libs
> ../../../ompi/mpi/f77/.libs/libmpi_f77.so
> /home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi/.libs/libmpi.so -ldl
> -lnsl -lutil -q64 -soname libmpi_f90.so.0 -o .libs/libmpi_f90.so.0.0.0
> /usr/bin/ld: unrecognized option '-q64'
> /usr/bin/ld: use the --help option for usage information
> make[4]: *** [libmpi_f90.la] Error 1
> make[4]: Leaving directory
> `/gpfs/home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi/mpi/f90'
[...]

> Based on the make output this might be a libtool issue.
>
> However, I noticed the following comment in ompi/mpi/f90/Makefile.am:
> # This Makefile.am is quite complex and confusing. Part of the
> # problem is that Libtool (v1.5.18) does not understand F90, so we
> # have to do a few things manually (and no shared libraries). Here's a
> # summary of what is happening:
> [...]
>
> Which suggests to me that the problem might come from how libtool is USED in
> this case.
>
> I did see that the Libool configure logic already found the proper ld flags:
>
> *** Libtool configuration
> [...]
> checking whether the xlc_r -q64 linker (/usr/bin/ld -m elf64ppc) supports
> shared libraries... yes
> [...]
> checking whether the xlC_r -q64 linker (/usr/bin/ld -m elf64ppc) supports
> shared libraries... yes
> [...]
> checking whether the xlC_r -q64 linker (/usr/bin/ld -m elf64ppc) supports
> shared libraries... yes
> [...]
> checking whether the xlf -q64 linker (/usr/bin/ld -m elf64ppc) supports
> shared libraries... yes
> [...]
> checking whether the xlf90 -q64 linker (/usr/bin/ld -m elf64ppc) supports
> shared libraries... yes
>
>
>
> I know the FAQ entry (singular) in the Libtool manual suggests trying
> something like CC='xlc_r -q64' instead of CFLAGS-q64 if one has problems
> with flags used to link a shared library. However, I tried that and just
> reach a slightly different instance of the same error:
>
> [...]
> /bin/sh ../../../libtool --mode=link xlf90 -q64 -I../../../ompi/include
> -I../../../../ompi/include -I. -I../../../../ompi/mpi/f90
> -I../../../ompi/mpi/f90 -version-info 0:0:0 -export-dynamic -o
> libmpi_f90.la -rpath /usr/local/lib mpi.lo mpi_sizeof.lo
> mpi_comm_spawn_multiple_f90.lo mpi_testall_f90.lo mpi_testsome_f90.lo
> mpi_waitall_f90.lo mpi_waitsome_f90.lo mpi_wtick_f90.lo mpi_wtime_f90.lo
> ../../../ompi/libmpi.la -lnsl -lutil libtool: link: /usr/bin/ld -m elf64ppc
> -shared .libs/mpi.o .libs/mpi_sizeof.o .libs/mpi_comm_spawn_multiple_f90.o
> .libs/mpi_testall_f90.o .libs/mpi_testsome_f90.o .libs/mpi_waitall_f90.o
> .libs/mpi_waitsome_f90.o .libs/mpi_wtick_f90.o .libs/mpi_wtime_f90.o
> -L/home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64-noflags/orte/.libs
> -L/home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64-noflags/opal/.libs
> ../../../ompi/.libs/libmpi.so /home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64-noflags/orte/.libs/libopen-rte.so /home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64-noflags/opal/.libs/libopen-pal.so
> -ldl -lnsl -lutil -q64 -soname libmpi_f90.so.0 -o
> .libs/libmpi_f90.so.0.0.0
> /usr/bin/ld: unrecognized option '-q64'
> /usr/bin/ld: use the --help option for usage information
> [...]
>
> So, at this point my best guess is that libtool believes that the -q64
> argument is a linker flag, when in fact it is not.