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
$ /lib64/libc.so.6
GNU C Library stable release version 2.4 (20090904), by Roland McGrath
et al.
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Configured for ppc64-suse-linux.
Compiled by GNU CC version 4.1.2 20070115 (SUSE Linux).
Compiled on a Linux 2.6.16 system on 2009-09-04.
Available extensions:
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
GNU libio by Per Bothner
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
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
make[3]: Leaving directory
`/gpfs/home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64/ompi/mpi/f90'
make[2]: *** [all] Error 2
make[2]: Leaving directory
`/gpfs/home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64/ompi/mpi/f90'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory
`/gpfs/home/hargrove/tmp/openmpi-1.4.3rc1/BLD-xlc_r-64/ompi'
make: *** [all-recursive] Error 1
Here is the failure from 1.5rc5 (including re-run w/ V=1)
$ make
[...]
make[4]: Entering directory
`/gpfs/home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi/mpi/f90'
FCLD libmpi_f90.la
/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'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory
`/gpfs/home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi/mpi/f90'
make[2]: *** [all] Error 2
make[2]: Leaving directory
`/gpfs/home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi/mpi/f90'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory
`/gpfs/home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi'
make: *** [all-recursive] Error 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'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory
`/gpfs/home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi/mpi/f90'
make[2]: *** [all] Error 2
make[2]: Leaving directory
`/gpfs/home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi/mpi/f90'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory
`/gpfs/home/hargrove/tmp/openmpi-1.5rc5/BLD-xlc_r-64/ompi'
make: *** [all-recursive] Error 1
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.
-Paul
--
Paul H. Hargrove phhargr...@lbl.gov
Future Technologies Group
HPC Research Department Tel: +1-510-495-2352
Lawrence Berkeley National Laboratory Fax: +1-510-486-6900