Build Docs https://codecov.io/github/ipc-sim/ipc-toolkit/graph/badge.svg?token=9BR6GPKRY8 License


The easiest way to add the toolkit to an existing CMake project is to download it through CMake. CMake provides functionality for doing this called FetchContent (requires CMake ≥ 3.14). We use this same process to download all external dependencies.

For example,

    GIT_REPOSITORY https://github.com/ipc-sim/ipc-toolkit.git

where IPC_TOOLKIT_GIT_TAG is set to the version of the toolkit you want to use. This will download and add the toolkit to CMake. The toolkit can then be linked against using

# Link against the IPC Toolkit
target_link_libraries(${PROJECT_NAME} PUBLIC ipc::toolkit)

where PROJECT_NAME is the name of your library/binary.


If your IPC_TOOLKIT_GIT_TAG is a tag (e.g. v1.1.1), then you can use the FetchContent_Declare argument GIT_SHALLOW TRUE to download only a single commit. Otherwise, you should use the default GIT_SHALLOW FALSE.


All required dependencies are downloaded through CMake depending on the build options.

The following libraries are used in this project:


  • robin-map: faster hash set/map than std::unordered_set/std::unordered_map

    • Enable by using the CMake option IPC_TOOLKIT_WITH_ROBIN_MAP

    • Enabled by default

  • Abseil: hashing utilities

    • Enable by using the CMake option IPC_TOOLKIT_WITH_ABSEIL

    • Enabled by default

  • filib: interval arithmetic for nonlinear trajectories/CCD

    • Enable by using the CMake option IPC_TOOLKIT_WITH_FILIB

    • Enabled by default

  • rational-cpp: rational arithmetic used for exact intersection checks

    • Enable by using the CMake option IPC_TOOLKIT_WITH_RATIONAL_INTERSECTION

    • Requires GMP to be installed at a system level

  • Etienne Vouga’s Collision Detection Library: inexact CCD

    • Included for comparison with the original IPC library

    • Enable by disabling the CMake option IPC_TOOLKIT_WITH_CORRECT_CCD

    • Replaces the default Tight-Inclusion CCD


See the tutorial for a quick introduction to the toolkit, or the documentation for a full reference.

Unit Tests

We provide unit tests to ensure the correctness of our algorithmic pieces. To enable the unit tests use the CMake option IPC_TOOLKIT_BUILD_UNIT_TESTS.


The following are downloaded when unit tests are enabled (IPC_TOOLKIT_BUILD_TESTS)

Last update: Nov 12, 2023