Dependencies

The IPC Toolkit depends on a handful of third-party libraries, which are used to provide various functionality.

All required dependencies are downloaded through CMake depending on the build options, and are built automatically when you build the IPC Toolkit. You do not need to install them separately.

These dependencies are all permissively licensed, and we list them here to give due credit!

Name

Purpose

License

Link

Eigen

Linear algebra

MPL-2.0

eigen.tuxfamily.org

libigl

Geometry functions and predicates

MPL-2.0

libigl.github.io

oneTBB

Multithreading

Apache-2.0

github.com/oneapi-src/oneTBB

Tight-Inclusion

Provably conservative CCD

MIT

github.com/Continuous-Collision-Detection/Tight-Inclusion

SimpleBVH

Simple bounding volume hierarchy data structure

MIT

github.com/geometryprocessing/SimpleBVH

Scalable-CCD

Scalable (GPU) CCD

Apache-2.0

github.com/Continuous-Collision-Detection/Scalable-CCD

spdlog

Logger

MIT

github.com/gabime/spdlog

Optional Dependencies

Additionally, IPC Toolkit may optionally use the following libraries:

Name

Purpose

License

Link

Enabled

CMake Option

Pybind11

Python bindings

BSD-3-Clause

github.com/pybind/pybind11

IPC_TOOLKIT_BUILD_PYTHON

robin-map

Faster hashing

MIT

github.com/Tessil/robin-map

IPC_TOOLKIT_WITH_ROBIN_MAP

Abseil

Hashing utilities

Apache-2.0

abseil.io

IPC_TOOLKIT_WITH_ABSEIL

filib

Interval arithmetic for nonlinear trajectories/CCD

LGPL-2.1

github.com/zfergus/filib

IPC_TOOLKIT_WITH_FILIB

rational-cpp

Rational arithmetic used for exact intersection checks (requires GMP to be installed at a system level)

MIT

github.io/zfergus/rational-cpp

IPC_TOOLKIT_WITH_RATIONAL_INTERSECTION

Etienne Vouga’s Collision Detection Library

Inexact CCD (included for comparison with the original IPC library)

???

github.com/evouga/collisiondetection

IPC_TOOLKIT_WITH_INEXACT_CCD

Some of these libraries are enabled by default, and some are not. You can enable or disable them by passing the appropriate CMake option when you configure the IPC Toolkit build.

Warning

filib is licensed under LGPL-2.1 and as such it is required to be dynamically linked. Doing so automatically is a challenge, so by default we use static linkage. Enabling dynaic linkage requires copying the .so/.dylib/.dll file to the binary directory or system path. To enable this, set the CMake option FILIB_BUILD_SHARED_LIBS to ON and add this CMake code to copy the shared libaray object to the binary directory:

# Copy shared lib to the output directory
add_custom_command(
    TARGET ${MY_EXE_TARGET} POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_RUNTIME_DLLS:${MY_EXE_TARGET}> $<TARGET_FILE_DIR:${MY_EXE_TARGET}>
    COMMAND_EXPAND_LISTS
)

where ${MY_EXE_TARGET} is the name of your executable target. If you know a better way to handle this, please let us know!

If you would rather avoid LGPL code entirely, you can disable filib by setting IPC_TOOLKIT_WITH_FILIB to OFF. With this option disabled, CMake will not download or use any of filib’s code.

Unit Test Dependencies

Name

Purpose

Link

Catch2

Testing framework

github.com/catchorg/Catch2

finite-diff

Finite-difference comparisons

github.com/zfergus/finite-diff

Nlohmann JSON

Loading test data from JSON files

github.com/nlohmann/json