Skip to content

External Dependencies

The external/ directory contains external libraries which are either difficult to obtain, difficult to compile or patched for libigl.


Install ispc and tbb for example (brew install ispc tbb), then

mkdir build
cd build
cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DCMAKE_BUILD_TYPE=Release ..


double precision bug fixes:

tinyxml2.h line 1286 add function:

void SetAttribute( const char* name, float value ) {
    XMLAttribute* a = FindOrCreateAttribute( name );
    a->SetAttribute( value );

tinyxml2.cpp line 434 replace with:

TIXML_SNPRINTF( buffer, bufferSize, "%.15e", v );


CGAL can be built as a CMake external project thanks to the CMakeLists.txt provided in this folder. While this is mainly intended as a convenience for Windows users, and CI builds on AppVeyor, this should work on Linux/macOS as well. To build CGAL and Boost with the provided CMake script, build this folder as you would compile any CMake project (use CMake GUI and MSVC on Windows):

mkdir build
cd build
cmake ..
make -j4

Once this is done, just build the libigl tutorials, and it should properly detect CGAL and Boost.


This library extra contains functions for computing Bounded Biharmonic Weights, can be used with and without the mosek extra via the IGL_NO_MOSEK macro.


This library extra contains functions for computing mesh-mesh booleans, depending on CGAL and optionally Cork.


This library extra utilizes embree’s efficient ray tracing queries.


This library extra provides support for reading and writing .mat workspace files, interfacing with Matlab at run time and compiling mex functions.


This library extra utilizes mosek’s efficient interior-point solver for quadratic programs.


This library extra uses libpng and YImage to read and write .png files.


This library extra provides a simplified wrapper to the tetgen 3d tetrahedral meshing library.


This library extra provides a simplified wrapper to the triangle 2d triangle meshing library.


This library extra utilizes tinyxml2 to read and write serialized classes containing Eigen matrices and other standard simple data-structures.


  • OpenGL (disable with LIBIGL_WITH_OPENGL set to OFF)
    • OpenGL >= 4 (enable with IGL_OPENGL_4)
  • GLEW Windows and Linux
  • OpenMP
  • libpng libiglpng extra only
  • Mosek libiglmosek extra only
  • Matlab libiglmatlab extra only
  • boost libiglboost, libiglcgal extra only
  • SSE/AVX libiglsvd3x3 extra only
  • CGAL libiglcgal extra only
    • boost
    • gmp
    • mpfr
  • CoMiSo libcomiso extra only

Optional (included in external/)

  • TetGen libigltetgen extra only
  • Embree libiglembree extra only
  • tinyxml2 libiglxml extra only
  • glfw libviewer extra only
  • LIM liblim extra only