OpenFOAM-1712
==================
Known Build Issues
==================

---------------------
Intel MPI (Gcc/Clang)
---------------------

  Either I_MPI_ROOT or MPI_ROOT can be used to specify the Intel-MPI
  installation directory path.

  The ThirdParty build of ptscotch uses `mpiicc` for Intel-MPI
  instead of the usual `mpicc`.
  When gcc or clang are used, it is highly likely that the
  I_MPI_CC environment variable also needs to be set accordingly.

  See `mpiicc -help` for more information about environment variables.


--------------
Intel Compiler
--------------

  Since OpenFOAM uses C++11, a fairly recent version is required.
  The Intel compiler - icc (ICC) 17.0.1 20161005 is ok, but the
  initial release - icc (ICC) 17.0.0 20160721 - has a bug that
  will result in these types of error messages.

    MatrixSpaceI.H(492): error: no instance of overloaded function
    "Foam::MatrixSpace<Form, Cmpt, Mrows, Ncols>::Block<SubTensor,
    BRowStart, BColStart>::operator=" matches the specified type


---
VTK
---

If using the runTimePostProcessing to create on-the-fly images, you
can simply just compile ParaView and these libraries will be used.

If you elect to use a separate VTK compilation (for example for
off-screen rendering), it is advisable to reuse the VTK libraries that
are provided with ParaView by making an appropriate symlink
prior to using makeVTK. This doesn't just reduce disk-space, but works
much better than using the VTK tar file.

Using runTimePostProcessing with the 'plain' VTK libraries does
generally work, but does not exit cleanly:

    symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonExecutionModel-7.1.so.1:
    undefined symbol: _ZN33vtkFilteringInformationKeyManager13ClassFinalizeEv

    symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonDataModel-7.1.so.1:
    undefined symbol: _ZN49vtkInformationQuadratureSchemeDefinitionVectorKeyD1Ev

This error appears to be suppressed if VTK is compiled with a Debug build-type.


-------------------------
Building on older systems
-------------------------

If the system gcc is too old for building OpenFOAM, a third-party gcc or
clang/llvm installation can be used. If building clang/llvm, note that
there are also minimum gcc/g++ requirements there:

   Min gcc/g++
   ===========   ==========
    4.4          llvm-3.4.2
    4.7          llvm-3.5.2 - llvm-3.7.0


If your system compiler is too old to build the minimum required gcc or
clang/llvm, it is just simply too old.


---------------------------------
ThirdParty clang without gmp/mpfr
---------------------------------

If using ThirdParty clang without gmp/mpfr, the ThirdParty makeCGAL
script will need to be run manually and specify that there is no
gmp/mpfr. Eg,

    cd $WM_THIRD_PARTY_DIR
    ./makeCGAL gmp-none mpfr-none

Subequent compilation with Allwmake will now run largely without any
problems, except that the components linking against CGAL
(foamyMesh and surfaceBooleanFeatures) will also try to link against
a nonexistent mpfr library. As a workaround, the link-dependency can
be removed in wmake/rules/General/CGAL :

    CGAL_LIBS = \
        -L$(BOOST_ARCH_PATH)/lib \
        -L$(BOOST_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
        -L$(CGAL_ARCH_PATH)/lib \
        -L$(CGAL_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
        -lCGAL

This is a temporary inconvenience until a more robust solution is found.


-------------------------
Building with spack
-------------------------

If you are building with spack, note that the depends_on for paraview
resolves poorly. The +qt dependency (for building the reader module)
may need to be specified as a preference by including the following in
your `~/.spack/packages.yaml` file:

    packages:
        paraview:
            variants: +qt

It appears that spack will otherwise ignore any paraview+qt version
and attempt to install a paraview~qt version instead.

---------------------------
Building on Darwin (Mac-OS)
---------------------------

Support for Darwin is incomplete, but has been provisioned for.

The following are typical (as of yet) unresolved issues.

* Scotch, ptscotch:
  - The librt linkage is required for Linux, but not for Darwin.

  Current resolution:
  Edit or patch
      src/parallel/decompose/ptscotchDecomp/Make/options
      src/parallel/decompose/scotchDecomp/Make/options

  to remove the '-lrt' library

* CGAL:
  - ThirdParty CGAL will normally need to be compiled without mpfr/gmp.
    This should be done manually prior to building OpenFOAM or other
    ThirdParty. Eg,

        cd $WM_THIRD_PARTY_DIR
        ./makeCGAL gmp-none mpfr-none

  The erroneous references to gmp/mpfr library can be directly removed
  from the wmake/rules/General/CGAL, but it is more advisable to
  override them instead in the wmake/rules/darwin64Clang/CGAL file.

--