Difference between revisions of "TestWyldckat"

From OpenFOAMWiki
Line 128: Line 128:
 
</ul>
 
</ul>
  
 +
== Cross-Compile OpenFOAM ==
 +
<ol><li>Open a new terminal window or tab, so it will reset environment variables and add the newly built cross-compiling gcc into the executable path variable (see [#Tweaking environment options]). Go to the project folder as so:
 +
<bash>cd $WM_PROJECT_DIR</bash></li>
 +
<li>Go to the folder "OpenFOAM-1.6" and run "Allwmake":
 +
<bash>./Allwmake</bash>
 +
This will build the entire OpenFOAM package. This does not include: '''Paraview''', '''ccm26ToFoam''', '''OpenMPI''' and code documentation.</li>
 +
<li>Optional - For code documentation, you should add '''doc''' to '''./Allwmake''', as such:
 +
<bash>./Allwmake doc</bash>
  
[[User:Wyldckat|Wyldckat]] 18:13, 10 November 2009 (UTC)
+
Or run afterward:
 +
<bash>./doc/Allwmake</bash>
 +
 
 +
'''NOTE''': if you want to create a '''CHM''' file in Windows, that will have the whole documentation in a single Compressed HTML '''index.chm''' file, then copy the file at the folder '''pnb''', as such:
 +
<bash>cp ../pnb/Doxyfile ./doc/Doxygen/</bash>
 +
 
 +
In chapter [#Creating a Compiled HTML file for the documentation] is explained how to finish this step.</li>
 +
<li>Optional - To build the mesh conversion utility '''ccm26ToFoam''', just run:
 +
<bash>$FOAM_APP/utilities/mesh/conversion/Optional/Allwmake</bash>
 +
 
 +
The rest is done automatically, including downloading the libraries used for handling '''ccm''' files, and patching where necessary.</li>
 +
<li>Optional - Build the parallel test application:
 +
<bash>cd $WM_PROJECT_DIR
 +
wmake applications/test/parallel</bash>
 +
 
 +
The built executable will be placed in the folder '''OpenFOAM/$USER-1.6/application/bin/$WM_OPTIONS'''.</li>
 +
</ol>
 +
[[User:Wyldckat|Wyldckat]] 18:23, 10 November 2009 (UTC)

Revision as of 18:24, 10 November 2009

1 Introduction

This is a step by step guide on how to cross-compile OpenFOAM in Linux for Windows, for both 32 and 64 bits architectures (to and from), using the patches available here.

These patches were based on Symscape's "v3" patch for OpenFOAM available here. They differ substantially from that patch, as well as the more recent one available here. The build scripts for mingw were also based on the build-script available on the 1.5.x link.

With this guide and available patches, you should be able to cross-compile the whole OpenFOAM library and applications, using MPICH2 instead of Open MPI for parallel computing. You can cross-compile using mingw32 and/or mingw-w64. These enable you to build OpenFOAM 1.6 for Windows 32 and 64 bit versions, from Linux 32 and 64bit architectures.

Versions these patches apply to:

OF version 16.png

2 Get OpenFOAM packages

  1. In your Linux machine, open a terminal window and create the folder $HOME/OpenFOAM.
  2. Get OpenFOAM-1.6.General.gtgz and ThirdParty-1.6.General.gtgz from the OpenCFD's website and copy/move them to the folder $HOME/OpenFOAM.
  3. Extract both files, by running in a terminal:
    cd $HOME/OpenFOAM
    tar xzf OpenFOAM-1.6.General.gtgz
    tar xzf ThirdParty-1.6.General.gtgz

3 Optional: Using a specific gcc version for building the wmake binaries

This is optional, because the current patch will use the system's gcc for building them (more specifically gcc as compiler name).

  1. Edit $HOME/.bashrc and add the following line to the end of it:
    . $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc
    NOTE: sometimes the leading dot doesn't work, so use the following instead:
    source $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc
    1. You might want to edit $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc and set the Linux architecture correctly, namely WM_ARCH_OPTION to 32 or 64.

  2. Two possibilities are now available:
    1. Use the system's gcc - edit $HOME/OpenFOAM/OpenFOAM-1.6/etc/settings.sh and change compilerInstall=OpenFOAM to compilerInstall=System.
    2. Use the gcc that comes with the ThirdParty-1.6.General.gtgz package - again, two choices:
      1. You can compile the gcc by running the following line:
        (cd $HOME/OpenFOAM/ThirdParty-1.6 && makeGcc gcc-4.3.3)
      2. Or by getting the available compiled version for your Linux version ( ThirdParty-1.6.linuxGcc.gtgz or ThirdParty-1.6.linux64Gcc.gtgz from OpenCFD's website).
    3. launch a new terminal and run the following line, thus building wmkdep and dirToString:
      (cd $HOME/OpenFOAM/OpenFOAM-1.6/wmake/src && make)

4 Applying patches

  1. Copy/move the PatchesNBatches.tar.gz file into the $HOME/OpenFOAM folder. Then unpack it by running:
    tar -xzf PatchesNBatches.tar.gz
  2. A new folder is created, named pnb. Now to apply the patches, run from the $HOME/OpenFOAM folder:
    patch -p0 < pnb/OpenFOAM-1.6_patch
    patch -p0 < pnb/ThirdParty-1.6_patch
  3. Still have to do some chmodding, for new scripts to run properly. Run the following lines in the terminal:
    chmod 744 $HOME/OpenFOAM/ThirdParty-1.6/build-mingw32
    chmod 744 $HOME/OpenFOAM/ThirdParty-1.6/build-mingw-w32
    chmod 744 $HOME/OpenFOAM/ThirdParty-1.6/build-mingw-w64
    chmod 744 $HOME/OpenFOAM/ThirdParty-1.6/build-mingw-w64-45
    chmod 744 $HOME/OpenFOAM/ThirdParty-1.6/makeGcc44
    chmod 744 $HOME/OpenFOAM/ThirdParty-1.6/get-mpich2
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/src/mingwFunctions
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/src/Allclean
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc-mingw32
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc-mingw-w32
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc-mingw-w32-prof
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc-mingw-w32S
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc-mingw-w64
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc-mingw-w64-45
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc-mingw-w64-prof
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/applications/utilities/parallelProcessing/Allwmake
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/bin/tutowin
    chmod 744 $HOME/OpenFOAM/OpenFOAM-1.6/bin/foamDiff

5 Getting Windows version of MPICH2 into the ThirdParty-1.6 folder in Linux

  1. There are two ways of getting MPICH2 into your Linux+OpenFOAM set up:
    1. Use the get-mpich2 script, that requires Wine to be installed. With Wine installed and with msiexec executable from the terminal, then the get-mpich2 script should work. To check whether you have msiexec accessible in the terminal, run:
      which msiexec
      If it returns the full path to the executable, then it is ready to use.
    2. Copy MPICH2 files from a Windows Installation. Three steps for this part:
      • Download and install in Windows the MPICH2, version 1.1.1p1 Win32 IA32 from here. Get and install the 64bit version, if you wish to build OpenFOAM for Windows x64.
      • Create the folder ThirdParty-1.6/mpich2-1.1.1p1 in your Linux set up.
      • Copy the folders bin, include and lib from the installed version of MPICH2 in Windows, into the folder ThirdParty-1.6/mpich2-1.1.1 in Linux.
The Allwmake script at the folder ThirdParty-1.6 will take care of the rest. For now, the tough part is that, this way, you can only build one version of OpenFOAM (32 or 64bit) at a time.

6 Tweaking environment options

  1. Choose which version you want to use:
    mingw32 
    for getting a 32bit version of OpenFOAM, that builds on Linux i?86, using mingw;
    mingw-w32 
    for getting a 32bit version of OpenFOAM, that builds on Linux i686 and x86_64, using mingw-w64;
    mingw-w64 
    for getting a 64bit version of OpenFOAM, that builds on Linux i686 and x86_64, using mingw-w64;
    Variants of the "bashrc" file that is inside the folder "OpenFOAM-1.6/etc", have been created, to meet the most likely options. These are:
    sample - <bashrc-version> 
    configured for <compiler>, <mingw version>, <MPI option>, <WM_COMPILE_OPTION>, <WM_ARCH_OPTION>
    bashrc-mingw32 
    configured for gcc-4.3.3, mingw32, MPI with MPICH2, Opt, DP, 32
    bashrc-mingw-w32 
    configured for gcc-4.4.2, mingw-w32, MPI with MPICH2, Opt, DP, 32
    bashrc-mingw-w32-prof 
    configured for gcc-4.4.2, mingw-w32, No MPI, Prof, DP, 32
    bashrc-mingw-w32S 
    configured for gcc-4.4.2, mingw-w32, MPI with MPICH2, Opt, SP, 32
    bashrc-mingw-w64 
    configured for gcc-4.4.2, mingw-w64, MPI with MPICH2, Opt, DP, 64
    bashrc-mingw-w64-prof 
    configured for gcc-4.4.2, mingw-w64, No MPI, Prof, DP, 64
    bashrc-mingw-w64-45 
    configured for gcc-4.5.0, mingw-w64, MPI with MPICH2, Opt, DP, 64
  2. After choosing the version you wish to build, edit the file $HOME/.bashrc and add to the end of it, a line analogous to the following line:
    . $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc-mingw32

    NOTE: sometimes the leading dot doesn't work, so use the following instead:

    source $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc-mingw32
  3. Before launching a new terminal, edit the picked file $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc-mingw version. You have two additional variables that are configurable and non standard to the original OpenFOAM version:
    • WM_PSTREAMLINK - this variable allows control over the linking method that is with the Pstream library. Two options are available:
      1. If set to DONTLINKTOPSTREAM, then depending on the variable WM_MPLIB being set to "NONE" or "MPICH", then OpenFOAM will be statically linked with that version, being able only without MPI capabilities or only to run with MPICH2 installed, respectively.
      2. If LINKTOPSTREAM, then DLLs of the library Pstream are created, both dummy and MPICH2 versions; this allows you to choose which version to use in Windows, without rebuilding OpenFOAM again, allowing one build to be used in multiple installations.
    • WM_GETMPICH2 - this variable controls whether MPICH2 is setup automatically or manually. The two options are:
      1. If set to GETMPICH2, then wget is used for downloading the MPICH2 installation packages, and Wine will be used to unpack the ".msi" files.
      2. If DONTGETMPICH2, then the script will assume that the steps at 4.1.2 were taken.
  4. Optional - If you want to use a version of MPICH2 other than 1.1.1p1, then edit the file $HOME/OpenFOAM/OpenFOAM-1.6/etc/settings.sh and find the line that has mpi_version=mpich2-1.1.1p1 and change to the version you want, as show here.

7 Build the cross compiler

  1. Open a new terminal window or tab, so the edited file $HOME/.bashrc is executed, thus setting up the chosen OpenFOAM development environment (see #Tweaking environment options).
  2. Now go to the ThirdParty-1.6 folder, in your new terminal:
    cd $WM_THIRD_PARTY_DIR
  3. Now you have to build the cross-compiler. Accordingly to the version you picked, you have type one of the following versions:
    • to build the mingw32 version, run:
      ./build-mingw32 gcc-4.3.3
    • to build the mingw-w32 version, run:
      ./build-mingw-w32
    • to build the mingw-w64 version, run:
      ./build-mingw-w64
    • to build the mingw-w64-45 version, run:
      ./build-mingw-w64-45
    Alternatively, you can run:
    ./makeGcc gcc-4.3.3

    This will launch the respective build-mingw* script, according to the environment settings, but gcc-4.3.3 will only be used for mingw32; and the script build-mingw-w64-45 isn't called from makeGcc.
    NOTE: updates are bound to be done to the packages that these scripts use. Therefore, you should edit the script you have chosen, and check accordingly:

    • mingw32 - search for:
      BINUTILS_ARCHIVE="binutils-2.19.1-src.tar.gz"
      MINGW_ARCHIVE="mingwrt-3.15.2-mingw32-dev.tar.gz"
      W32API_ARCHIVE="w32api-3.13-mingw32-dev.tar.gz"
      REGEX_ARCHIVE="mingw-libgnurx-2.5.1-bin.tar.gz"
      REGEX2_ARCHIVE="mingw-libgnurx-2.5.1-dev.tar.gz"
      And check if they still exist or newer exists, on their website.
    • mingw-w?? - search for:
      MINGW64PACKAGE="mingw-w64-src_4.4.1-1"

      And check here for new versions. Usually the package is around 80MB in size. The line:

      MINGW64PACKAGE2="mingw-w64-crt-release-1.0"
      Relates to the stable run-time source version, available at cadforte. For the package mingw-w64-src_4.4.1-1, this was necessary, because this wasn't the stable version yet. You can change both and comment MINGW64PACKAGE2 and related items if you deem the package indicated in MINGW64PACKAGE stable enough.

    8 Cross-Compile OpenFOAM

    1. Open a new terminal window or tab, so it will reset environment variables and add the newly built cross-compiling gcc into the executable path variable (see [#Tweaking environment options]). Go to the project folder as so:
      cd $WM_PROJECT_DIR
    2. Go to the folder "OpenFOAM-1.6" and run "Allwmake":
      ./Allwmake
      This will build the entire OpenFOAM package. This does not include: Paraview, ccm26ToFoam, OpenMPI and code documentation.
    3. Optional - For code documentation, you should add doc to ./Allwmake, as such:
      ./Allwmake doc

      Or run afterward:

      ./doc/Allwmake

      NOTE: if you want to create a CHM file in Windows, that will have the whole documentation in a single Compressed HTML index.chm file, then copy the file at the folder pnb, as such:

      cp ../pnb/Doxyfile ./doc/Doxygen/
      In chapter [#Creating a Compiled HTML file for the documentation] is explained how to finish this step.
    4. Optional - To build the mesh conversion utility ccm26ToFoam, just run:
      $FOAM_APP/utilities/mesh/conversion/Optional/Allwmake
      The rest is done automatically, including downloading the libraries used for handling ccm files, and patching where necessary.
    5. Optional - Build the parallel test application:
      cd $WM_PROJECT_DIR
      wmake applications/test/parallel
      The built executable will be placed in the folder OpenFOAM/$USER-1.6/application/bin/$WM_OPTIONS.
    Wyldckat 18:23, 10 November 2009 (UTC)