Third-party dependencies

GEOS makes use of multiple third-party libraries (TPLs) and tools, some of which are mandatory and some optional. We only test against specific versions, and sometimes even require development snapshots (specific git commits). Not all of these guarantee backwards compatibility, so we strongly recommend building with these specific versions.

List of third-party libraries and tools

The two tables below lists the dependencies with their specific versions and relevant CMake variables. Some of these libraries may have their own system prerequisites.

Libraries

The following libraries are linked to by GEOS:

Name

Version

Enable option

Path variable

Description

Adiak

0.2.0

ENABLE_CALIPER

ADIAK_DIR

Library for collecting metadata from HPC application runs, and distributing that metadata to subscriber tools.

Caliper

2.4.0

ENABLE_CALIPER

CALIPER_DIR

Instrumentation and performance profiling library.

conduit

0.5.0

mandatory

CONDUIT_DIR

Simplified Data Exchange for HPC Simulations.

CHAI

2.2.2

mandatory

CHAI_DIR

Copy-hiding array abstraction to automatically migrate data between memory spaces.

RAJA

0.12.1

mandatory

RAJA_DIR

Collection of C++ software abstractions that enable architecture portability for HPC applications.

hdf5

1.10.5

mandatory

HDF5_DIR

High-performance data management and storage suite.

mathpresso

2015-12-15

ENABLE_MATHPRESSO

MATHPRESSO_DIR

Mathematical Expression Parser and JIT Compiler.

pugixml

1.8.0

mandatory

PUGIXML_DIR

Light-weight, simple and fast XML parser for C++ with XPath support.

parmetis

4.0.3

mandatory (with MPI)

PARMETIS_DIR

Parallel Graph Partitioning library. Should be built with 64-bit idx_t type.

suitesparse

5.8.1

ENABLE_SUITESPARSE

SUITESPARSE_DIR

A suite of sparse matrix software.

superlu_dist

0f6efc3

ENABLE_SUPERLU_DIST

SUPERLU_DIST_DIR

General purpose library for the direct solution of large, sparse, nonsymmetric systems of linear equations.

hypre

2186a8f

ENABLE_HYPRE

HYPRE_DIR

Library of high performance preconditioners and solvers for large sparse linear systems on massively parallel computers.

PETSc

3.13.0

ENABLE_PETSC

PETSC_DIR

Suite of data structures and routines for the scalable (parallel) solution of scientific applications.

Trilinos

12.18.1

ENABLE_TRILINOS

TRILINOS_DIR

Collection of reusable scientific software libraries, known in particular for linear solvers.

silo

4.10.3

mandatory

SILO_DIR

A Mesh and Field I/O Library and Scientific Database.

VTK

9.0.0-rc3

ENABLE_VTK

VTK_DIR

Open source software for manipulating and displaying scientific data.

Tools

The following tools are used as part of the build process to support GEOS development:

Name

Version

Enable option

Path variable

Description

doxygen

1.8.20

ENABLE_DOXYGEN

DOXYGEN_EXECUTABLE

De facto standard tool for generating documentation from annotated C++ sources.

sphinx

1.8.5

ENABLE_SPHINX

SPHINX_EXECUTABLE

A tool that makes it easy to create intelligent and beautiful documentation.

uncrustify

401a409

ENABLE_UNCRUSTIFY

UNCRUSTIFY_EXECUTABLE

A source code beautifier for C, C++, C#, ObjectiveC, D, Java, Pawn and VALA.

Some other dependencies (GoogleTest, GoogleBenchmark) are provided through BLT build system which is embedded in GEOS source. No actions are needed to build them.

If you would like to create a Docker image with all dependencies, take a look at Dockerfiles that are used in our CI process.

Building bundled dependencies

To simplify the process of building TPLs, we provide a git repository thirdPartyLibs. It contains source copies of exact TPL versions required and is updated periodically. It also contains a CMake script for building all TPLs in a single command.

The recommended steps to build TPLs are:

  • Create a host-config file that sets all system-specific CMake variables (compiler and library paths, configuration flags, etc.) Take a look at host-config examples.

  • Configure via config-build.py script:

    cd thirdPartyLibs
    python scripts/config-build.py --hostconfig=/path/to/host-config.cmake --buildtype=Release --installpath=/path/to/install/dir -DNUM_PROC=8
    

    where

    • --buildpath or -bp is the build directory (by default, created under current).

    • --installpath or -ip is the installation directory(wraps CMAKE_INSTALL_PREFIX).

    • --buildtype or -bt is a wrapper to the CMAKE_BUILD_TYPE option.

    • --hostconfig or -hc is a path to host-config file.

    • all other command-line options are passed to CMake.

  • Run the build:

    cd <buildpath>
    make
    

    Warning

    Do not provide -j argument to make here, since the top-level make only launches sub-project builds. Instead use -DNUM_PROC option above, which is passed to each sub-project’s make command.

You may also run the CMake configure step manually instead of relying on config-build.py. The full TPL build may take anywhere between 15 minutes and 2 hours, depending on your machine, number of threads and libraries enabled.

Note

An exception from the above pattern, sphinx is currently not a part of the TPL bundle and must be installed with your Python or package manager.

Note

PETSc build currently downloads pt-scotch from the internet. If you do not have access to internet, modify the ./configure step of petsc in CMakeLists.txt and change the --download-ptscotch option accordingly. pt-scotch also relies on bison and flex.

Installing dependencies individually

You may also install each individual TPL separately, either manually or through a package manager. This is a more difficult route, since you are responsible for configuring dependencies in a compatible manner. Again, we strongly recommend using the exact versions listed above, to avoid possible build problems.

You may look at our TPL CMake script to see how we configure TPL builds.