[petsc-dev] build on cygwin for cygwin

Satish Balay balay at mcs.anl.gov
Mon Feb 27 12:56:59 CST 2017


On Mon, 27 Feb 2017, Marco Atzeri wrote:

> On 27/02/2017 19:15, Satish Balay wrote:
> > Ah - previously I didn't check the error log closely.
> >
> > > > > > >
> > Using PETSC_DIR=/usr/local and PETSC_ARCH=
> > > > C/C++ example src/snes/examples/tutorials/ex19 run successfully with 1
> > > > MPI process
> > > > C/C++ example src/snes/examples/tutorials/ex19 run successfully with 2
> > > > MPI processes
> > <<<<<
> >
> > So the C tests did run fine. [with openmpi build]
> 
> the trick seems to copy/move the shared libs from
> usr/local/lib to /usr/local/bin so that libpetsc.so.3.7.5
> is on the PATH.

Yeah - we now do 'PATH=$PATH:$PETSC_DIR/$PETSC_ARCH/lib make test'
[instead of the copy to bin]. Most PETSc installs shouldn't go into
/usr/loca/bin anyway.


> 
> > > > >
> > > > Possible error running C/C++ src/snes/examples/tutorials/ex19 with 1 MPI
> > > > process
> > <<<<
> >
> > Hm - the test for sequential build failed? Perhaps you had some mixup
> > of files with the previous openmpi build.
> > When changing builds (like switching mpi) - its best to remove build
> > files in PETSC_ARCH - and install files in prefix-dir - before the
> > next build.  Or use a different PETSC_ARCH/prefix values for the
> > second build.
> 
> I am using in general different directories.
> I will try again just in case I missed something.
> 
> > I tried both builds - and they ran fine for me. [with maint/3.7]
> >
> > Either way - fortran examples don't work with dlls - so its best to
> > use --with-shared-libraries=0
> 
> don't work in general or just for cygwin ?

PETSc fortran interface uses fortran common blocks - and DLLs (with
common blocks) require some compiler directives (perhaps compiler
specific wrt ifort vs gfortran) to handle this.

We don't yet have that in petsc.

> 
> additional question :
> - where is defined the  `libpetsc.so.3.7.5` name for the shared lib ?
> 
> I would prefer to use the cygwin standard nomenclature.

You can run 'make V=1' to check the exact command used to create
libpetsc.dll - and figure out appropriate the modification for cygwin.

>>>>
gcc -Wall -Wwrite-strings -Wno-strict-aliasing -Wno-unknown-pragmas -fstack-protector -fvisibility=hidden -g3  -shared -Wl,-soname,libpetsc.so.3.07 -o /home/balay/petsc/arch-mswin-c-debug/lib/libpetsc.so.3.07.5 arch-mswin-c-debug/obj/src/sys/objects/f2003-src/fsrc/optionenum.o .....
<<<<

configure sets some of these options in SL_LINKER_FUNCTION variable in
PETSC_ARCH/lib/petsc/conf/petscvariables file

>>>>
SL_LINKER_FUNCTION = -shared -Wl,-soname,$(call SONAME_FUNCTION,$(notdir $(1)),$(2))
<<<<

This gets used by PETSC_DIR/gmakefile [you can look for all SL_LINKER usage here] when building the dll.

Perhaps SL_LINKER_FUNCTION in PETSC_ARCH/lib/petsc/conf/petscvariables
can be changed sufficiently to get the appropriate naming for cygwin.

Satish



More information about the petsc-dev mailing list