Re: [OMPI users] Cannot build working Open MPI 4.1.1 with NAG Fortran/clang on macOS (but I could before!)

2021-10-28 Thread Gilles Gouaillardet via users
Matt,

did you build the same Open MPI 4.1.1 from an official tarball with the
previous NAG Fortran?
did you run autogen.pl (--force) ?

Just to be sure, can you rerun the same test with the previous NAG version?


When using static libraries, you can try manually linking with
-lopen-orted-mpir and see if it helps.
If you want to use shared libraries, I would try to run configure,
and then edit the generated libtool file:
look a line like

CC="nagfor"

and then edit the next line


# Commands used to build a shared archive.

archive_cmds="\$CC -dynamiclib \$allow_undef ..."

simply manually remove "-dynamiclib" here and see if it helps


Cheers,

Gilles
On Fri, Oct 29, 2021 at 12:30 AM Matt Thompson via users <
users@lists.open-mpi.org> wrote:

> Dear Open MPI Gurus,
>
> This is a...confusing one. For some reason, I cannot build a working Open
> MPI with NAG 7.0.7062 and clang on my MacBook running macOS 11.6.1. The
> thing is, I could do this back in July with NAG 7.0.7048. So my fear is
> that something changed with macOS, or clang/xcode, or something in between.
>
> So here are the symptoms, I usually build with a few extra flags that I've
> always carried around but for now I'm going to go basic. First, I try to
> build Open MPI in a basic way:
>
> ../configure FCFLAGS"=-mismatch_all -fpp" CC=clang CXX=clang++ FC=nagfor
> --prefix=$HOME/installed/Compiler/nag-7.0_7062/openmpi/4.1.1-basic |& tee
> configure.log
>
> Note that the FCFLAGS are needed for NAG since it doesn't preprocess .F90
> files by default (so -fpp) and it can be *very* strict with interfaces and
> any slight interface difference is an error so we use -mismatch_all.
>
> Now with this configure line, I then build and:
>
> Making all in mpi/fortran/use-mpi-tkr
> make[2]: Entering directory
> '/Users/mathomp4/src/MPI/openmpi-4.1.1/build-basic/ompi/mpi/fortran/use-mpi-tkr'
>   FCLD libmpi_usempi.la
> NAG Fortran Compiler Release 7.0(Yurakucho) Build 7062
> Option error: Unrecognised option -dynamiclib
> make[2]: *** [Makefile:1966: libmpi_usempi.la] Error 2
> make[2]: Leaving directory
> '/Users/mathomp4/src/MPI/openmpi-4.1.1/build-basic/ompi/mpi/fortran/use-mpi-tkr'
> make[1]: *** [Makefile:3555: all-recursive] Error 1
> make[1]: Leaving directory
> '/Users/mathomp4/src/MPI/openmpi-4.1.1/build-basic/ompi'
> make: *** [Makefile:1901: all-recursive] Error 1
>
> For some reason, the make system is trying to pass a clang option,
> -dynamiclib, to nagfor and it fails. With verbose on:
>
> libtool: link: nagfor -dynamiclib -Wl,-Wl,,-undefined
> -Wl,-Wl,,dynamic_lookup -o .libs/libmpi_usempi.40.dylib  .libs/mpi.o
> .libs/mpi_aint_add_f90.o .libs/mpi_aint_diff_f90.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 .libs/mpi-tkr-sizeof.o...
>
> As a test, I tried the same thing with NAG 7.0.7048 (which worked in July)
> and I get the same issue:
>
> Option error: Unrecognised option -dynamiclib
>
> Note, that Intel Fortran and Gfortran *do* support this flag, but NAG has
> something like:
>
>-Bbinding Specify  static  or  dynamic binding.  This only has
> effect if specified during the link phase.  The default is dynamic binding.
>
> but maybe the Open MPI system doesn't know NAG?
>
> So I say to myself, okay, dynamiclib is a shared library sounding thing,
> so let's try static library build! So, following the documentation I try:
>
> ../configure --enable-static -disable-shared FCFLAGS"=-mismatch_all -fpp"
> CC=gcc CXX=g++ FC=nagfor
> --prefix=$HOME/installed/Compiler/nag-7.0_7062/openmpi/4.1.1-static |& tee
> configure.log
>
> and it builds! Yay! And then I try to build helloworld.c and it fails! To
> wit:
> ❯ cat helloworld.c
> /*The Parallel Hello World Program*/
> #include 
> #include 
>
> int main(int argc, char **argv)
> {
>int node;
>
>MPI_Init(,);
>MPI_Comm_rank(MPI_COMM_WORLD, );
>
>printf("Hello World from Node %d\n",node);
>
>MPI_Finalize();
> }
> ❯
> /Users/mathomp4/installed/Compiler/nag-7.0_7062/openmpi/4.1.1-static/bin/mpicc
> helloworld.c
> Undefined symbols for architecture x86_64:
>   "_MPIR_Breakpoint", referenced from:
>   _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>   "_MPIR_attach_fifo", referenced from:
>   _orte_submit_finalize in libopen-rte.a(orted_submit.o)
>   _orte_submit_job in libopen-rte.a(orted_submit.o)
>   _open_fifo in libopen-rte.a(orted_submit.o)
>   "_MPIR_being_debugged", referenced from:
>   _ompi_rte_wait_for_debugger in libmpi.a(rte_orte_module.o)
>   _orte_submit_job in libopen-rte.a(orted_submit.o)
>   _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>   _attach_debugger in libopen-rte.a(orted_submit.o)
>   "_MPIR_debug_state", referenced from:
>   _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>   "_MPIR_executable_path", referenced from:
>   

[OMPI users] Cannot build working Open MPI 4.1.1 with NAG Fortran/clang on macOS (but I could before!)

2021-10-28 Thread Matt Thompson via users
Dear Open MPI Gurus,

This is a...confusing one. For some reason, I cannot build a working Open
MPI with NAG 7.0.7062 and clang on my MacBook running macOS 11.6.1. The
thing is, I could do this back in July with NAG 7.0.7048. So my fear is
that something changed with macOS, or clang/xcode, or something in between.

So here are the symptoms, I usually build with a few extra flags that I've
always carried around but for now I'm going to go basic. First, I try to
build Open MPI in a basic way:

../configure FCFLAGS"=-mismatch_all -fpp" CC=clang CXX=clang++ FC=nagfor
--prefix=$HOME/installed/Compiler/nag-7.0_7062/openmpi/4.1.1-basic |& tee
configure.log

Note that the FCFLAGS are needed for NAG since it doesn't preprocess .F90
files by default (so -fpp) and it can be *very* strict with interfaces and
any slight interface difference is an error so we use -mismatch_all.

Now with this configure line, I then build and:

Making all in mpi/fortran/use-mpi-tkr
make[2]: Entering directory
'/Users/mathomp4/src/MPI/openmpi-4.1.1/build-basic/ompi/mpi/fortran/use-mpi-tkr'
  FCLD libmpi_usempi.la
NAG Fortran Compiler Release 7.0(Yurakucho) Build 7062
Option error: Unrecognised option -dynamiclib
make[2]: *** [Makefile:1966: libmpi_usempi.la] Error 2
make[2]: Leaving directory
'/Users/mathomp4/src/MPI/openmpi-4.1.1/build-basic/ompi/mpi/fortran/use-mpi-tkr'
make[1]: *** [Makefile:3555: all-recursive] Error 1
make[1]: Leaving directory
'/Users/mathomp4/src/MPI/openmpi-4.1.1/build-basic/ompi'
make: *** [Makefile:1901: all-recursive] Error 1

For some reason, the make system is trying to pass a clang option,
-dynamiclib, to nagfor and it fails. With verbose on:

libtool: link: nagfor -dynamiclib -Wl,-Wl,,-undefined
-Wl,-Wl,,dynamic_lookup -o .libs/libmpi_usempi.40.dylib  .libs/mpi.o
.libs/mpi_aint_add_f90.o .libs/mpi_aint_diff_f90.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 .libs/mpi-tkr-sizeof.o...

As a test, I tried the same thing with NAG 7.0.7048 (which worked in July)
and I get the same issue:

Option error: Unrecognised option -dynamiclib

Note, that Intel Fortran and Gfortran *do* support this flag, but NAG has
something like:

   -Bbinding Specify  static  or  dynamic binding.  This only has
effect if specified during the link phase.  The default is dynamic binding.

but maybe the Open MPI system doesn't know NAG?

So I say to myself, okay, dynamiclib is a shared library sounding thing, so
let's try static library build! So, following the documentation I try:

../configure --enable-static -disable-shared FCFLAGS"=-mismatch_all -fpp"
CC=gcc CXX=g++ FC=nagfor
--prefix=$HOME/installed/Compiler/nag-7.0_7062/openmpi/4.1.1-static |& tee
configure.log

and it builds! Yay! And then I try to build helloworld.c and it fails! To
wit:
❯ cat helloworld.c
/*The Parallel Hello World Program*/
#include 
#include 

int main(int argc, char **argv)
{
   int node;

   MPI_Init(,);
   MPI_Comm_rank(MPI_COMM_WORLD, );

   printf("Hello World from Node %d\n",node);

   MPI_Finalize();
}
❯
/Users/mathomp4/installed/Compiler/nag-7.0_7062/openmpi/4.1.1-static/bin/mpicc
helloworld.c
Undefined symbols for architecture x86_64:
  "_MPIR_Breakpoint", referenced from:
  _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
  "_MPIR_attach_fifo", referenced from:
  _orte_submit_finalize in libopen-rte.a(orted_submit.o)
  _orte_submit_job in libopen-rte.a(orted_submit.o)
  _open_fifo in libopen-rte.a(orted_submit.o)
  "_MPIR_being_debugged", referenced from:
  _ompi_rte_wait_for_debugger in libmpi.a(rte_orte_module.o)
  _orte_submit_job in libopen-rte.a(orted_submit.o)
  _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
  _attach_debugger in libopen-rte.a(orted_submit.o)
  "_MPIR_debug_state", referenced from:
  _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
  "_MPIR_executable_path", referenced from:
  _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
  _setup_debugger_job in libopen-rte.a(orted_submit.o)
  _run_debugger in libopen-rte.a(orted_submit.o)
  _attach_debugger in libopen-rte.a(orted_submit.o)
  "_MPIR_forward_output", referenced from:
  _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
  _setup_debugger_job in libopen-rte.a(orted_submit.o)
  "_MPIR_i_am_starter", referenced from:
  _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
  "_MPIR_partial_attach_ok", referenced from:
  _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
  "_MPIR_proctable", referenced from:
  _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
  "_MPIR_proctable_size", referenced from:
  _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
  "_MPIR_server_arguments", referenced from:
  _orte_debugger_init_after_spawn