On Fri, Jan 17, 2020 at 7:00 AM Lars Odsæter <lars.odsa...@sintef.no> wrote:
> Dear PETSc users, > > First, thanks to the developers for your great effort with the PETSc > library, which I have benefited from several times. > > I want to share with you that I recently was able to cross compile PETSc > with the MXE (mxe.cc) cross compiler, and then link it into an application > (also built with the mxe compiler) to produce an executable that I > successfully ran on my Windows computer. In doing this I realized that > there is very little documentation of this on the web, so maybe others > could benefit from my approach. It contains a few hacks that might be > solved more elegant, but that is probably out of may range. > > First, I installed the mxe cross compiler following the tutorial ( > mxe.cc/#tutorial): > > git clone https://github.com/mxe/mxe.git > make cc > make blas lapack > export PATH=~/code/mxe/usr/bin:$PATH > > Then I compiled PETSc (3.11.3 tarball): > > wget > http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.11.3.tar.gz > gunzip -c petsc-3.11.3.tar.gz | tar -xof - > cd petsc-3.11.3/ > ./configure PETSC_ARCH=arch-mxe-static \ > --with-mpi=0 --host=i686-w64-mingw32.static \ > --enable-static --disable-shared \ > --with-cc=i686-w64-mingw32.static-gcc \ > --with-cxx=i686-w64-mingw32.static-g++ \ > --with-fc=i686-w64-mingw32.static-gfortran \ > --with-ld=i686-w64-mingw32.static-ld \ > --with-ar=i686-w64-mingw32.static-ar \ > --with-pkg-config=i686-w64-mingw32.static-pkg-config \ > --with-batch --known-64-bit-blas-indices > > Next, I did the reconfigure step that was explained in the output from the > call to configure: > > * copy 'conftest-arch-mxe-static' to your Windows machine > * Rename it with extension '.exe' > * Run the application in Windows. This generates > 'reconfigure-arch-mxe-static.py' > * Copy 'reconfigure-arch-mxe-static.py' back to the Linux machine > * Run the python script: > > python reconfigure-arch-mxe-static.py > > Now, 'make all' failed to compile, but I did two hacks to mitigate it: > > 1) In '~/code/petsc-3.11.3/arch-mxe-static/include/petscconf.h' include > the following lines: > #ifndef PETSC_HAVE_DIRECT_H > #define PETSC_HAVE_DIRECT_H 1 > #endif > > 2) In ~/code/petsc-3.11.3/src/sys/error/fp.c, comment out line 405-406: > // elif defined PETSC_HAVE_XMMINTRIN_H > > // _MM_SET_EXCEPTION_MASK(_MM_MASK_INEXACT | _MM_MASK_UNDERFLOW); > > After this 'make all' ran successfully. > I was finally able to compile my code (linking PETSc) following step 5 of > the mxe tutorial: mxe.cc/#tutorial > Then, simply copy to Windows and double-click. > Great! It sounds like we can make a couple of fixes that make this easier: 1) Name the batch executable .exe for this 2) Find direct.h correctly 3) Do not find xmmintrin.h Can you send me your configure.log so I can see what went wrong on the header location. Thanks, Matt > Best regards, > > Lars Hov Odsæter > > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>