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 |
|
libigl |
Geometry functions and predicates |
MPL-2.0 |
|
oneTBB |
Multithreading |
Apache-2.0 |
|
Tight-Inclusion |
Provably conservative CCD |
MIT |
|
SimpleBVH |
Simple bounding volume hierarchy data structure |
MIT |
|
Scalable-CCD |
Scalable (GPU) CCD |
Apache-2.0 |
|
spdlog |
Logger |
MIT |
Optional Dependencies¶
Additionally, IPC Toolkit may optionally use the following libraries:
Name |
Purpose |
License |
Link |
Enabled |
CMake Option |
---|---|---|---|---|---|
Pybind11 |
Python bindings |
BSD-3-Clause |
✅ |
|
|
robin-map |
Faster hashing |
MIT |
✅ |
|
|
Abseil |
Hashing utilities |
Apache-2.0 |
✅ |
|
|
filib |
Interval arithmetic for nonlinear trajectories/CCD |
LGPL-2.1 |
✅ |
|
|
rational-cpp |
Rational arithmetic used for exact intersection checks (requires GMP to be installed at a system level) |
MIT |
⬜ |
|
|
Etienne Vouga’s Collision Detection Library |
Inexact CCD (included for comparison with the original IPC library) |
??? |
⬜ |
|
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 |
|
finite-diff |
Finite-difference comparisons |
|
Nlohmann JSON |
Loading test data from JSON files |