From b63e31340fcdcb7ff1ec3f18fd84c0ae070fdd4c Mon Sep 17 00:00:00 2001 From: Teseo Schneider Date: Sun, 14 Oct 2018 22:33:37 -0400 Subject: [PATCH] added download of data and cleaned up cmake --- .gitignore | 2 + CMakeLists.txt | 15 +- cmake/LibiglDownloadExternal.cmake | 54 +++++ optional/CMakeLists.txt | 22 -- optional/index.html | 373 ----------------------------- tutorial/CMakeLists.txt | 5 + tutorial/images/710_SCAF.png | Bin 167471 -> 0 bytes 7 files changed, 75 insertions(+), 396 deletions(-) delete mode 100644 optional/CMakeLists.txt delete mode 100644 optional/index.html delete mode 100644 tutorial/images/710_SCAF.png diff --git a/.gitignore b/.gitignore index 8044c4cf0..236e1dd0f 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,8 @@ external/embree/bin external/embree/doc/html/* external/embree/doc/latex/* external/gmp +external/cgal +external/cork external/mpfr external/boost external/.cache diff --git a/CMakeLists.txt b/CMakeLists.txt index 31a124144..6078b3523 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,16 @@ cmake_minimum_required(VERSION 3.1) +project(libigl) + +# These ensure that lib*.a are placed in the directory where `cmake +# ../optional/` was issued. +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + +### conditionally compile certain modules depending on libraries found on the system +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake) + +### Adding libIGL: choose the path to your local copy libIGL +include(libigl) + -include(${CMAKE_CURRENT_LIST_DIR}/optional/CMakeLists.txt) diff --git a/cmake/LibiglDownloadExternal.cmake b/cmake/LibiglDownloadExternal.cmake index e03d9fef3..1317c2aa4 100644 --- a/cmake/LibiglDownloadExternal.cmake +++ b/cmake/LibiglDownloadExternal.cmake @@ -12,6 +12,18 @@ function(igl_download_project name) ) endfunction() + +# Shortcut function +function(igl_download_data folder name) + download_project( + PROJ ${name} + SOURCE_DIR ${folder}/data + DOWNLOAD_DIR ${folder}/.cache/data + QUIET + ${ARGN} + ) +endfunction() + ################################################################################ ## CGAL @@ -107,3 +119,45 @@ function(igl_download_triangle) ) endfunction() + +## Google test +function(igl_download_googletest) + igl_download_project(googletest + GIT_REPOSITORY https://github.com/google/googletest + GIT_TAG v1.8.1 + ) +endfunction() + + + +################################################################################ + + +## Test data +function(igl_download_test_data) + set(IGL_TEST_DATA ${LIBIGL_EXTERNAL}/../tests/data) + + download_project( + PROJ test_data + SOURCE_DIR ${IGL_TEST_DATA} + DOWNLOAD_DIR ${LIBIGL_EXTERNAL}/.cache/test_data + QUIET + GIT_REPOSITORY https://github.com/libigl/libigl-tests-data + GIT_TAG bdb158c9695d5932bb6fc1cde078d8210bb13436 + ) +endfunction() + + +## Tutorial data +function(igl_download_tutorial_data) + set(IGL_TUTORIAL_DATA ${LIBIGL_EXTERNAL}/../tutorial/data) + download_project( + PROJ tutorial_data + SOURCE_DIR ${IGL_TUTORIAL_DATA} + DOWNLOAD_DIR ${LIBIGL_EXTERNAL}/.cache/tutorial_data + QUIET + GIT_REPOSITORY https://github.com/libigl/libigl-tutorial-data + GIT_TAG 5c6a1ea809c043d71e5595775709c15325a7158c + ) +endfunction() + diff --git a/optional/CMakeLists.txt b/optional/CMakeLists.txt deleted file mode 100644 index dee14414c..000000000 --- a/optional/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.1) -project(libigl) - -set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../shared/cmake") -# These ensure that lib*.a are placed in the directory where `cmake -# ../optional/` was issued. -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) - -### conditionally compile certain modules depending on libraries found on the system -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/../shared/cmake) -find_package(CGAL QUIET COMPONENTS Core) -find_package(MATLAB QUIET) -find_package(MOSEK) - -### libIGL options: choose between header only and compiled static library -option(LIBIGL_USE_STATIC_LIBRARY "Use LibIGL as static library" ON) - -### Adding libIGL: choose the path to your local copy libIGL -include(libigl) - diff --git a/optional/index.html b/optional/index.html deleted file mode 100644 index 51b7168e1..000000000 --- a/optional/index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - libigl - - - - - - -

Compiling libigl as a static library

- -
-

Warning: compiling libigl as a static library is considerably more difficult -than using it as a header-only library (see ../README.md instead). Do -it only if you are experienced with C++, cmake and make, and you want to -improve your compilation times.

-
- -

Libigl is developed most often on Mac OS X, though has current users in Linux -and Windows.

- -

Linux/Mac OS X/Cygwin

- -

Libigl may also be compiled to a static library. This is advantageous when -building a project with libigl, since when used as an header-only library can -slow down compile times.

- -

To build the entire libigl library producing at least libigl/lib/libigl.a and -possible other (automatically detected) extras, e.g. libigl/lib/libiglcgal.a -from this current directory: issue:

- -
mkdir -p ../lib
-cd ../lib
-cmake -DCMAKE_BUILD_TYPE=Release ../optional
-make
-
- -

Warnings

- -

You should expect to see a few linker warnings of the form:

- -
/opt/local/bin/ranlib: file: libigl.a(*.cpp.o) has no symbols
-
- -

These are (admittedly unpopular) functions that have never been used by us -statically so we haven’t explicit instantiations (yet).

- -

External

- -

Finally there are a number of external libraries that we include in -./external/ because they are either difficult to obtain or they have been -patched for easier use with libigl. Please see the respective readmes in those -directories or build the tutorial using cmake, which will recursively build all -dependencies.

- -
Installing Embree 2.0
- -

To build the embree library and executables on Mac OS X issue:

- -
cd external/embree
-mkdir build
-cd build
-cmake ..
-# Or using a different compiler
-#cmake .. -DCMAKE_C_COMPILER=/opt/local/bin/gcc -DCMAKE_CXX_COMPILER=/opt/local/bin/g++
-make
-# Could also install embree to your root, but libigl examples don't expect
-# this
-#sudo make install
-
- -

Extras

- -

bbw

- -

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.

- -

boolean

- -

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

- -

cgal

- -

This library extra utilizes CGAL’s efficient and exact intersection and -proximity queries.

- -

embree

- -

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

- -

matlab

- -

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

- -

mosek

- -

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

- -

png

- -

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

- -

tetgen

- -

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

- -

Triangle

- -

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

- -

viewer

- -

This library extra utilizes glfw and glew to open an opengl context and launch -a simple mesh viewer.

- -

xml

- -

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

- -

Development

- -

Further documentation for developers is listed in -style_guidelines.html.

- -

License

- -

See LICENSE.txt

- -

Zipping

- -

Zip this directory without .git litter and binaries using:

- -
git archive -prefix=libigl/ -o libigl.zip master
-
- -

Explicit instantiations of templated functions

- -

Special care must be taken by the developers of each function and -class in the libigl library that uses C++ templates. If this function -is intended to be compiled into the statically linked libigl library -then function is only compiled for each explicitly instantiated -declaration. These should be added at the bottom of the corresponding -.cpp file surrounded by a

- -
#ifdef IGL_STATIC_LIBRARY
-
- -

Of course, a developer may not know ahead of time which -instantiations should be explicitly included in the igl static lib. -One way to find out is to add one explicit instantiation for each -call in one’s own project. This only ever needs to be done once for -each template.

- -

The process is somewhat mechanical using a linker with reasonable error -output.

- -

Supposed for example we have compiled the igl static lib, including the -cat.h and cat.cpp functions, without any explicit instantiation. Say -using the makefile in the libigl directory:

- -
cd $LIBIGL
-make
-
- -

Now if we try to compile a project and link against it we may get -an error like:

- -
Undefined symbols for architecture x86_64:
-"Eigen::Matrix<int, -1, -1, 0, -1, -1> igl::cat<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(int, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&)", referenced from:
-uniform_sample(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, int, double, Eigen::Matrix<double, -1, -1, 0, -1, -1>&)in Skinning.o
-"Eigen::SparseMatrix<double, 0, int> igl::cat<Eigen::SparseMatrix<double, 0, int> >(int, Eigen::SparseMatrix<double, 0, int> const&, Eigen::SparseMatrix<double, 0, int> const&)", referenced from:
-covariance_scatter_matrix(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, ArapEnergy, Eigen::SparseMatrix<double, 0, int>&)in arap_dof.o
-arap_rhs(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, ArapEnergy, Eigen::SparseMatrix<double, 0, int>&)in arap_dof.o
-
- -

This looks like a mess, but luckily we don’t really need to read it -all. Just copy the first part in quotes

- -
Eigen::Matrix<int, -1, -1, 0, -1, -1> igl::cat<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(int, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&)
-
- -

, then append it -to the list of explicit template instantiations at the end of -cat.cpp after the word -template and followed by a semi-colon. -Like this:

- -
#ifdef IGL_STATIC_LIBRARY
-// Explicit template instantiation
-template Eigen::Matrix<int, -1, -1, 0, -1, -1> igl::cat<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(int, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&);
-#endif
-
- -

Then you must recompile the IGL static library.

- -
cd $LIBIGL
-make
-
- -

And try to compile your project again, potentially repeating this -process until no more symbols are undefined.

- -

It may be useful to check that you code compiles with -no errors first using the headers-only version to be sure that all errors are from missing template -instantiations.

- -

If you’re using make then the following command will -reveal each missing symbol on its own line:

- -
make 2>&1 | grep "referenced from" | sed -e "s/, referenced from.*//"
-
- -

Alternatively you can use the autoexplicit.sh function -which (for well organized .h/.cpp pairs in libigl) automatically -create explicit instantiations from your compiler’s error messages. -Repeat this process until convergence:

- -
cd /to/your/project
-make 2>$LIBIGL/make.err
-cd $LIBIGL
-cat make.err | ./autoexplicit.sh
-make clean
-make
-
- -

Benefits of static library

- - - -

Drawbacks of static library

- - - -

Compressed .h/.cpp pair

- -

Calling the script:

- -
scripts/compress.sh igl.h igl.cpp
-
- -

will create a single header igl.h and a single cpp file igl.cpp.

- -

Alternatively, you can also compress everything into a single header file:

- -
scripts/compress.sh igl.h
-
- -

Benefits of compressed .h/.cpp pair

- - - -

Drawbacks of compressed .h/.cpp pair

- - - -

Here’s a tiny test example using igl.h and igl.cpp. Save the following in test.cpp:

- -
#include <igl.h>
-#include <Eigen/Core>
-
-int main(int argc, char * argv[])
-{
-Eigen::MatrixXd V;
-Eigen::MatrixXi F;
-return (argc>=2 && igl::read_triangle_mesh(argv[1],V,F)?0:1);
-}
-
- -

Then compile igl.cpp with:

- -
g++ -o igl.o -c igl.cpp -I/opt/local/include/eigen3 -DIGL_NO_OPENGL -DIGL_NO_ANTTWEAKBAR
-
- -

Notice that we’re using -DIGL_NO_OPENGL -DIGL_NO_ANTTWEAKBAR to disable any libigl dependencies on OpenGL and AntTweakBar.

- -

Now compile test.cpp with:

- -
g++ -g -I/opt/local/include/eigen3/ -I/usr/local/igl/libigl/ -L/usr/local/igl/libigl/ -ligl -DIGL_NO_OPENGL -DIGL_NO_ANTTWEAKBAR -o test
-
- -

Try running it with:

- -
./test path/to/mesh.obj
-
- -

The following bash one-liner will find all source files that contain the string OpenGL but don’t contain and IGL_NO_OPENGL guard:

- -
grep OpenGL `grep -L IGL_NO_OPENGL include/igl/*`
-
- -

Optional

- - - -

Optional (included in external/)

- - - - - - diff --git a/tutorial/CMakeLists.txt b/tutorial/CMakeLists.txt index 4a17adea4..f3ceb0eae 100644 --- a/tutorial/CMakeLists.txt +++ b/tutorial/CMakeLists.txt @@ -20,9 +20,14 @@ option(LIBIGL_WITH_MATLAB "Use Matlab" "${MATLAB_FOUND}") option(LIBIGL_WITH_MOSEK "Use MOSEK" "${MOSEK_FOUND}") ### End + + ### Adding libIGL: choose the path to your local copy libIGL include(libigl) +### Download data +igl_download_tutorial_data() + ### Output directories if(MSVC) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}) diff --git a/tutorial/images/710_SCAF.png b/tutorial/images/710_SCAF.png deleted file mode 100644 index 0d5f21bca3dff436750d4e1500fad9344c6f36c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167471 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