mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
132 lines
3.2 KiB
Markdown
132 lines
3.2 KiB
Markdown
Notes for cross-compiling with mingw.
|
|
|
|
On openSUSE use the packages:
|
|
```
|
|
mingw64-cross-binutils
|
|
mingw64-cross-cpp
|
|
mingw64-cross-gcc
|
|
mingw64-cross-gcc-c++
|
|
mingw64-filesystem
|
|
mingw64-headers
|
|
mingw64-runtime
|
|
|
|
mingw64-libwinpthread1
|
|
mingw64-winpthreads-devel
|
|
|
|
mingw64-libfftw3
|
|
mingw64-fftw3-devel
|
|
```
|
|
|
|
This setup is missing zlib, so download that manually and compile as a
|
|
*static* library.
|
|
|
|
```
|
|
CC="$(wmake -show-c) CFLAGS="$(wmake -show-cflags) ./configure --static
|
|
```
|
|
|
|
The resulting output files (zconf.h zlib.h) and (libz.a) either need
|
|
to be installed in system locations where OpenFOAM can find it, or if
|
|
they are to be shipped directly with OpenFOAM, they can also be placed
|
|
in the `src/OpenFOAM/include` and `platforms/XXX/lib` paths.
|
|
|
|
When using the cross-compiled executables and libraries, additional
|
|
runtime libraries are required. On openSUSE these are provided by the
|
|
packages:
|
|
```
|
|
mingw64-libgcc_s_seh1
|
|
mingw64-libstdc++6
|
|
```
|
|
|
|
In a few locations within OpenFOAM, flex is used to generate code. The
|
|
generated C++ code requires the `FlexLexer.h` header file.
|
|
This is normally located under `/usr/include/FlexLexer.h`, which will
|
|
be ignored by the cross-compiler.
|
|
|
|
As a fairly ugly hack, a copy of this file can be made in a standard
|
|
project include location. For example,
|
|
|
|
```
|
|
mkdir src/OpenFOAM/lnInclude
|
|
cp /usr/include/FlexLexer.h src/OpenFOAM/lnInclude
|
|
```
|
|
|
|
|
|
The last point to consider when cross-compiling is the behaviour of
|
|
the OpenFOAM tools used during compilation. These are found under
|
|
`wmake/src`. When these are compiled they will create executables that
|
|
work on the target platform (Windows), but *not* on the host platform.
|
|
|
|
The workaround:
|
|
|
|
1. Activate the native OpenFOAM environment (Linux with system gcc)
|
|
and use that to compile the build tools
|
|
```
|
|
wmake/src/Allmake
|
|
```
|
|
This can be skipped if you already have an existing OpenFOAM build.
|
|
|
|
2. Activate the OpenFOAM for cross-compiling (Linux with mingw)
|
|
and use that to compile the build tools
|
|
```
|
|
wmake/src/Allmake
|
|
```
|
|
|
|
3. Copy the contents of the native platform build tools into the
|
|
cross-compilation platform directory. For example,
|
|
```
|
|
cp wmake/platforms/linux64Gcc/* wmake/platforms/linux64Mingw/
|
|
```
|
|
|
|
The `wmake/platforms/linux64Mingw/` directory should now contain
|
|
native and cross-compiled tools:
|
|
```
|
|
dirToString
|
|
wmkdep
|
|
wmkdepend
|
|
|
|
dirToString.exe
|
|
wmkdep.exe
|
|
wmkdepend.exe
|
|
```
|
|
|
|
The native tools are the one that will (automatically) be used
|
|
throughout the balance of the cross-compilation process.
|
|
|
|
|
|
Adjust paths for third-party sources. Eg, in `etc/config.sh/FFTW` you
|
|
may wish to have the following:
|
|
```
|
|
fftw_version=fftw-system
|
|
export FFTW_ARCH_PATH=/usr/x86_64-w64-mingw32/sys-root/mingw
|
|
```
|
|
|
|
|
|
The settings for cross-compilation are normally defined in the
|
|
`etc/pref.sh` file with contents like this:
|
|
|
|
```
|
|
# For mingw cross-compile
|
|
|
|
export WM_COMPILER=Mingw
|
|
export WM_MPLIB=MSMPI
|
|
|
|
export WM_LABEL_SIZE=32
|
|
# other settings...
|
|
```
|
|
|
|
|
|
Additional adjustments may be required in some other places. For example
|
|
in `etc/config.sh/FFTW`
|
|
```
|
|
fftw_version=fftw-system
|
|
export FFTW_ARCH_PATH=/usr/x86_64-w64-mingw32/sys-root/mingw
|
|
```
|
|
|
|
|
|
Known limitations (2019-05-01)
|
|
|
|
- No CGAL support (ie, no foamyHexMesh)
|
|
- No ParaView plugin, runTimepostProcessing
|
|
- reacting EulerFoam solvers have too many interdependencies and do
|
|
not yet compile.
|