Browse Source

new build system

Former-commit-id: 2c98a1b9183cbe5265dddab01ed08eff05a49b28
Daniele Panozzo 10 years ago
parent
commit
3047eb4d6f

+ 220 - 0
CMakeLists.txt

@@ -0,0 +1,220 @@
+cmake_minimum_required(VERSION 2.6)
+project(libigl)
+
+#SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../)
+SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/tutorial/cmake)
+find_package(EIGEN REQUIRED)
+
+
+## Check for GLFW
+find_package(GLFW QUIET)
+if (GLFW_FOUND)
+  include_directories( ${GLFW_INCLUDE_DIR})
+endif(GLFW_FOUND)
+
+find_package(OpenGL QUIET)
+
+## Check for Anttweakbar
+find_package(ANTTWEAKBAR QUIET)
+if (ANTTWEAKBAR_FOUND)
+  include_directories( ${ANT_TWEAK_BAR_INCLUDE_DIR})
+endif(ANTTWEAKBAR_FOUND)
+
+
+## Check for CoMiSo, if not available skip the examples that depends on it
+find_package(LIBCOMISO QUIET)
+
+## Check for MATLAB, if not available skip the examples that depends on it
+find_package(MATLAB QUIET)
+if (MATLAB_FOUND)
+  include_directories( ${MATLAB_INCLUDE_DIR})
+endif(MATLAB_FOUND)
+
+## Check for EMBREE, if not available skip the examples that depends on it
+find_package(EMBREE QUIET)
+if (EMBREE_FOUND)
+  include_directories( ${EMBREE_INCLUDE_DIR})
+endif(EMBREE_FOUND)
+
+## Check for CGAL, if not available skip the examples that depends on it
+find_package(CGAL QUIET)
+
+## Check for mosek
+find_package(MOSEK QUIET)
+if(NOT MOSEK_FOUND)
+  add_definitions(-DIGL_NO_MOSEK)
+endif(NOT MOSEK_FOUND)
+
+## Check for CORK
+find_package(CORK QUIET)
+if (NOT CORK_FOUND)
+  add_definitions(-DIGL_NO_CORK)
+else(NOT CORK_FOUND)
+  include_directories( ${CORK_INCLUDE_DIR})
+endif(NOT CORK_FOUND)
+
+## Check for LIM
+find_package(LIM QUIET)
+if(LIM_FOUND)
+  include_directories( ${LIM_INCLUDE_DIR})
+endif(LIM_FOUND)
+
+## Check for SVD3X3
+find_package(SVD3X3 QUIET)
+if(SVD3X3_FOUND)
+  include_directories( ${SVD3X3_INCLUDE_DIR})
+endif(SVD3X3_FOUND)
+
+## Check for TETGEN
+find_package(TETGEN QUIET)
+if(TETGEN_FOUND)
+  include_directories( ${TETGEN_INCLUDE_DIR})
+endif(TETGEN_FOUND)
+
+## Check for TRIANGLE
+find_package(TRIANGLE QUIET)
+if(TRIANGLE_FOUND)
+  include_directories( ${TRIANGLE_INCLUDE_DIR})
+endif(TRIANGLE_FOUND)
+
+## Check for TINYXML2
+find_package(TINYXML2 QUIET)
+if(TINYXML2_FOUND)
+  include_directories( ${TINYXML2_INCLUDE_DIR})
+endif(TINYXML2_FOUND)
+
+
+## Use openMP if available
+find_package(OpenMP)
+if (OPENMP_FOUND AND NOT WIN32)
+  set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+  set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+endif()
+
+#### Libigl requires a modern C++ compiler that supports c++11
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+
+#### Compile the core library that depends only on EIGEN ####
+include_directories( ${EIGEN_INCLUDE_DIR})
+include_directories( ${PROJECT_SOURCE_DIR}/include/)
+
+add_definitions(-DIGL_STATIC_LIBRARY)
+
+file(GLOB SOURCES
+  "${PROJECT_SOURCE_DIR}/include/igl/*.cpp"
+)
+
+### HACKS TO CLEAN
+list(REMOVE_ITEM SOURCES ${ui} ${PROJECT_SOURCE_DIR}/include/igl/cocoa_key_to_anttweakbar_key.cpp)
+list(REMOVE_ITEM SOURCES ${ui} ${PROJECT_SOURCE_DIR}/include/igl/ReAntTweakBar.cpp)
+
+add_library(igl STATIC ${SOURCES})
+
+#### Compile the BBW part
+
+file(GLOB SOURCES_BBW
+  "${PROJECT_SOURCE_DIR}/include/igl/bbw/*.cpp"
+)
+
+add_library(iglbbw STATIC ${SOURCES_BBW})
+
+#### Compile the mosek part (untested)
+if (MOSEK_FOUND)
+  file(GLOB SOURCES_MOSEK
+    "${PROJECT_SOURCE_DIR}/include/igl/mosek/*.cpp"
+  )
+
+add_library(iglmosek STATIC ${SOURCES_MOSEK})
+endif (MOSEK_FOUND)
+
+#### Compile the cgal part
+if (CGAL_FOUND)
+  file(GLOB SOURCES_CGAL
+    "${PROJECT_SOURCE_DIR}/include/igl/cgal/*.cpp"
+  )
+
+add_library(iglcgal STATIC ${SOURCES_CGAL})
+endif (CGAL_FOUND)
+
+#### Compile the boolean part
+if (NOT CORK_FOUND)
+  add_definitions(-DIGL_NO_CORK)
+endif(NOT CORK_FOUND)
+
+file(GLOB SOURCES_BOOLEAN
+  "${PROJECT_SOURCE_DIR}/include/igl/boolean/*.cpp"
+)
+
+add_library(iglboolean STATIC ${SOURCES_BOOLEAN})
+
+#### Compile the embree part
+if (EMBREE_FOUND)
+  file(GLOB SOURCES_EMBREE
+    "${PROJECT_SOURCE_DIR}/include/igl/embree/*.cpp"
+  )
+
+  add_library(iglembree STATIC ${SOURCES_EMBREE})
+endif (EMBREE_FOUND)
+
+#### Compile the lim part
+if (LIM_FOUND)
+  file(GLOB SOURCES_LIM
+    "${PROJECT_SOURCE_DIR}/include/igl/lim/*.cpp"
+  )
+
+  add_library(igllim STATIC ${SOURCES_LIM})
+endif (LIM_FOUND)
+
+#### Compile the matlab part
+if (MATLAB_FOUND)
+  file(GLOB SOURCES_MATLAB
+    "${PROJECT_SOURCE_DIR}/include/igl/matlab/*.cpp"
+  )
+
+  add_library(iglmatlab STATIC ${SOURCES_MATLAB})
+endif (MATLAB_FOUND)
+
+#### Compile the svd3x3 part
+if (SVD3X3_FOUND)
+  file(GLOB SOURCES_SVD3X3
+    "${PROJECT_SOURCE_DIR}/include/igl/svd3x3/*.cpp"
+  )
+
+  add_library(iglsvd3x3 STATIC ${SOURCES_SVD3X3})
+endif (SVD3X3_FOUND)
+
+#### Compile the tetgen part
+if (TETGEN_FOUND)
+  file(GLOB SOURCES_TETGEN
+    "${PROJECT_SOURCE_DIR}/include/igl/tetgen/*.cpp"
+  )
+
+  add_library(igltetgen STATIC ${SOURCES_TETGEN})
+endif (TETGEN_FOUND)
+
+#### Compile the triangle part
+if (TRIANGLE_FOUND)
+  file(GLOB SOURCES_TRIANGLE
+    "${PROJECT_SOURCE_DIR}/include/igl/triangle/*.cpp"
+  )
+
+  add_library(igltriangle STATIC ${SOURCES_TRIANGLE})
+endif (TRIANGLE_FOUND)
+
+#### Compile the xml part
+if (TINYXML2_FOUND)
+  file(GLOB SOURCES_XML
+    "${PROJECT_SOURCE_DIR}/include/igl/xml/*.cpp"
+  )
+
+  add_library(iglxml STATIC ${SOURCES_XML})
+endif (TINYXML2_FOUND)
+
+#### Compile the viewer
+if (GLFW_FOUND AND ANTTWEAKBAR_FOUND)
+  file(GLOB SOURCES_XML
+    "${PROJECT_SOURCE_DIR}/include/igl/viewer/*.cpp"
+  )
+
+  add_library(iglviewer STATIC ${SOURCES_XML})
+endif (GLFW_FOUND AND ANTTWEAKBAR_FOUND)

+ 16 - 1
tutorial/cmake/FindANTTWEAKBAR.cmake

@@ -18,6 +18,7 @@ IF (WIN32)
       PATHS
 		${PROJECT_SOURCE_DIR}/../../external/AntTweakBar/include
 		${PROJECT_SOURCE_DIR}/../external/AntTweakBar/include
+		${PROJECT_SOURCE_DIR}/external/AntTweakBar/include
 		$ENV{ANT_TWEAK_BAR_ROOT}/include
 		DOC "The directory where AntTweakBar.h resides")
 
@@ -25,6 +26,7 @@ IF (WIN32)
         PATHS
 		${PROJECT_SOURCE_DIR}/../../external/AntTweakBar/lib
 		${PROJECT_SOURCE_DIR}/../external/AntTweakBar/lib
+		${PROJECT_SOURCE_DIR}/external/AntTweakBar/lib
                 $ENV{ANT_TWEAK_BAR_ROOT}/lib
                 DOC "The AntTweakBar library")
 ELSE (WIN32)
@@ -34,6 +36,7 @@ FIND_PATH(ANT_TWEAK_BAR_INCLUDE_DIR AntTweakBar.h
 	    ${LIBIGL_INCLUDE_DIR}/../external/AntTweakBar/include/
       ${PROJECT_SOURCE_DIR}/../../external/AntTweakBar/include/
       ${PROJECT_SOURCE_DIR}/../external/AntTweakBar/include/
+			${PROJECT_SOURCE_DIR}/external/AntTweakBar/include/
       /usr/local/include
       /usr/X11/include
       /usr/include
@@ -44,6 +47,7 @@ FIND_LIBRARY( ANT_TWEAK_BAR_LIBRARY AntTweakBar
 		${LIBIGL_INCLUDE_DIR}/../external/AntTweakBar/lib
     ${PROJECT_SOURCE_DIR}/../../external/AntTweakBar/lib
     ${PROJECT_SOURCE_DIR}/../external/AntTweakBar/lib
+		${PROJECT_SOURCE_DIR}/external/AntTweakBar/lib
     /usr/local
     /usr/X11
     /usr
@@ -57,6 +61,13 @@ FIND_LIBRARY( ANT_TWEAK_BAR_LIBRARY AntTweakBar
 
 ENDIF (WIN32)
 
+
+SET(ANTTWEAKBAR_FOUND "NO")
+IF (ANT_TWEAK_BAR_INCLUDE_DIR AND ANT_TWEAK_BAR_LIBRARY)
+	SET(ANTTWEAKBAR_FOUND "YES")
+ENDIF (ANT_TWEAK_BAR_INCLUDE_DIR AND ANT_TWEAK_BAR_LIBRARY)
+
+
 set(ANT_TWEAK_BAR_INCLUDE_DIR ${ANT_TWEAK_BAR_INCLUDE_DIR} ${ANT_TWEAK_BAR_INCLUDE_DIR}/../src/)
 
 # message(FATAL_ERROR ${ANT_TWEAK_BAR_LIBRARY})
@@ -64,5 +75,9 @@ set(ANT_TWEAK_BAR_INCLUDE_DIR ${ANT_TWEAK_BAR_INCLUDE_DIR} ${ANT_TWEAK_BAR_INCLU
 if(ANT_TWEAK_BAR_INCLUDE_DIR AND ANT_TWEAK_BAR_LIBRARY)
 	message(STATUS "Found ANTTWEAKBAR: ${ANT_TWEAK_BAR_INCLUDE_DIR}")
 else(ANT_TWEAK_BAR_INCLUDE_DIR AND ANT_TWEAK_BAR_LIBRARY)
-	message(FATAL_ERROR "could NOT find ANTTWEAKBAR")
+	if (NOT ANTTWEAKBAR_FIND_QUIETLY)
+		message(FATAL_ERROR "could NOT find ANTTWEAKBAR")
+	endif (NOT ANTTWEAKBAR_FIND_QUIETLY)
+
+
 endif(ANT_TWEAK_BAR_INCLUDE_DIR AND ANT_TWEAK_BAR_LIBRARY)

+ 52 - 0
tutorial/cmake/FindCORK.cmake

@@ -0,0 +1,52 @@
+#
+# Try to find CORK library and include path.
+# Once done this will define
+#
+# CORK_FOUND
+# CORK_INCLUDE_DIR
+# CORK_LIBRARIES
+#
+
+if(NOT CORK_FOUND)
+
+FIND_PATH(CORK_INCLUDE_DIR cork.h
+  PATHS
+    ${PROJECT_SOURCE_DIR}/../../external/cork/include
+    ${PROJECT_SOURCE_DIR}/../external/cork/include
+    ${PROJECT_SOURCE_DIR}/external/cork/include
+    /usr/local/include
+    /usr/X11/include
+    /usr/include
+    /opt/local/include
+    NO_DEFAULT_PATH
+    )
+
+FIND_LIBRARY( CORK_LIBRARIES NAMES cork
+  PATHS
+    ${PROJECT_SOURCE_DIR}/../../external/cork/lib/
+    ${PROJECT_SOURCE_DIR}/../external/cork/lib/
+    ${PROJECT_SOURCE_DIR}/external/cork/lib/
+    /usr/local
+    /usr/X11
+    /usr
+    PATH_SUFFIXES
+    a
+    lib64
+    lib
+    NO_DEFAULT_PATH
+)
+
+SET(CORK_FOUND "NO")
+IF (CORK_INCLUDE_DIR AND CORK_LIBRARIES)
+	SET(CORK_FOUND "YES")
+ENDIF (CORK_INCLUDE_DIR AND CORK_LIBRARIES)
+
+if(CORK_FOUND)
+  message(STATUS "Found CORK: ${CORK_INCLUDE_DIR}")
+else(CORK_FOUND)
+  if (NOT CORK_FIND_QUIETLY)
+    message(FATAL_ERROR "could NOT find CORK")
+  endif (NOT CORK_FIND_QUIETLY)
+endif(CORK_FOUND)
+
+endif(NOT CORK_FOUND)

+ 6 - 1
tutorial/cmake/FindGLFW.cmake

@@ -13,6 +13,7 @@ FIND_PATH(GLFW_INCLUDE_DIR GLFW/glfw3.h
   PATHS
     ${PROJECT_SOURCE_DIR}/../../external/glfw/include
     ${PROJECT_SOURCE_DIR}/../external/glfw/include
+    ${PROJECT_SOURCE_DIR}/external/glfw/include
     /usr/local/include
     /usr/X11/include
     /usr/include
@@ -24,8 +25,10 @@ FIND_LIBRARY( GLFW_LIBRARIES NAMES glfw glfw3
   PATHS
     ${PROJECT_SOURCE_DIR}/../../external/glfw/src
     ${PROJECT_SOURCE_DIR}/../external/glfw/src
+    ${PROJECT_SOURCE_DIR}/external/glfw/src
     ${PROJECT_SOURCE_DIR}/../../external/glfw/lib/x64
     ${PROJECT_SOURCE_DIR}/../external/glfw/lib/x64
+    ${PROJECT_SOURCE_DIR}/external/glfw/lib/x64
     /usr/local
     /usr/X11
     /usr
@@ -44,7 +47,9 @@ ENDIF (GLFW_INCLUDE_DIR AND GLFW_LIBRARIES)
 if(GLFW_FOUND)
   message(STATUS "Found GLFW: ${GLFW_INCLUDE_DIR}")
 else(GLFW_FOUND)
-  message(FATAL_ERROR "could NOT find GLFW")
+  if (NOT GLFW_FIND_QUIETLY)
+    message(FATAL_ERROR "could NOT find GLFW")
+  endif (NOT GLFW_FIND_QUIETLY)
 endif(GLFW_FOUND)
 
 endif(NOT GLFW_FOUND)

+ 7 - 0
tutorial/cmake/FindLIM.cmake

@@ -35,10 +35,17 @@ set(
   ${LIM_INCLUDE_DIR}/Poisson_LIMSolver2D.cpp
   )
 
+SET(LIM_FOUND "NO")
+IF (LIM_INCLUDE_DIR)
+	SET(LIM_FOUND "YES")
+ENDIF (LIM_INCLUDE_DIR)
+
 if(LIM_INCLUDE_DIR)
    message(STATUS "Found LIM: ${LIM_INCLUDE_DIR}")
 else(LIM_INCLUDE_DIR)
+  if (NOT LIM_FIND_QUIETLY)
    message(FATAL_ERROR "could NOT find LIM")
+ endif(NOT LIM_FIND_QUIETLY)
 endif(LIM_INCLUDE_DIR)
 
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DANSI_DECLARATORS")

+ 28 - 0
tutorial/cmake/FindSVD3X3.cmake

@@ -0,0 +1,28 @@
+# - Try to find the SVD3X3 library
+# Once done this will define
+#
+#  SVD3X3_FOUND - system has SVD3X3
+#  SVD3X3_INCLUDE_DIR - the SVD3X3 include directory
+
+FIND_PATH(SVD3X3_INCLUDE_DIR Singular_Value_Decomposition_Givens_QR_Factorization_Kernel.hpp
+   /usr/include
+   /usr/local/include
+   ${PROJECT_SOURCE_DIR}/../libigl/external/Singular_Value_Decomposition/
+   ${PROJECT_SOURCE_DIR}/../../external/Singular_Value_Decomposition/
+   NO_DEFAULT_PATH
+)
+
+SET(SVD3X3_FOUND "NO")
+IF (SVD3X3_INCLUDE_DIR)
+	SET(SVD3X3_FOUND "YES")
+ENDIF (SVD3X3_INCLUDE_DIR)
+
+if(SVD3X3_INCLUDE_DIR)
+   message(STATUS "Found SVD3X3: ${SVD3X3_INCLUDE_DIR}")
+else(SVD3X3_INCLUDE_DIR)
+  if (NOT SVD3X3_FIND_QUIETLY)
+   message(FATAL_ERROR "could NOT find SVD3X3")
+ endif(NOT SVD3X3_FIND_QUIETLY)
+endif(SVD3X3_INCLUDE_DIR)
+
+MARK_AS_ADVANCED(SVD3X3_INCLUDE_DIR SVD3X3_LIBRARIES)

+ 8 - 1
tutorial/cmake/FindTETGEN.cmake

@@ -15,10 +15,17 @@ FIND_PATH(TETGEN_INCLUDE_DIR tetgen.h
 
 set(TETGEN_SOURCES ${TETGEN_INCLUDE_DIR}/tetgen.cxx ${TETGEN_INCLUDE_DIR}/predicates.cxx)
 
+SET(TETGEN_FOUND "NO")
+IF (TETGEN_INCLUDE_DIR)
+	SET(TETGEN_FOUND "YES")
+ENDIF (TETGEN_INCLUDE_DIR)
+
 if(TETGEN_INCLUDE_DIR)
    message(STATUS "Found TETGEN: ${TETGEN_INCLUDE_DIR}")
 else(TETGEN_INCLUDE_DIR)
-   message(FATAL_ERROR "could NOT find TETGEN")
+  if (NOT TETGEN_FIND_QUIETLY)
+    message(FATAL_ERROR "could NOT find TETGEN")
+  endif (NOT TETGEN_FIND_QUIETLY)
 endif(TETGEN_INCLUDE_DIR)
 
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTETLIBRARY")

+ 9 - 1
tutorial/cmake/FindTINYXML2.cmake

@@ -10,14 +10,22 @@ FIND_PATH(TINYXML2_INCLUDE_DIR tinyxml2.h
    /usr/local/include
    ${PROJECT_SOURCE_DIR}/../libigl/external/tinyxml2/
    ${PROJECT_SOURCE_DIR}/../../external/tinyxml2/
+   ${PROJECT_SOURCE_DIR}/external/tinyxml2/
 )
 
+SET(TINYXML2_FOUND "NO")
+IF (TINYXML2_INCLUDE_DIR)
+	SET(TINYXML2_FOUND "YES")
+ENDIF (TINYXML2_INCLUDE_DIR)
+
 set(TINYXML2_SOURCES ${TINYXML2_INCLUDE_DIR}/tinyxml2.cpp)
 
 if(TINYXML2_INCLUDE_DIR)
    message(STATUS "Found TINYXML2: ${TINYXML2_INCLUDE_DIR}")
 else(TINYXML2_INCLUDE_DIR)
-   message(FATAL_ERROR "could NOT find TINYXML2")
+  if (NOT TINYXML2_FIND_QUIETLY)
+    message(FATAL_ERROR "could NOT find TINYXML2")
+  endif (NOT TINYXML2_FIND_QUIETLY)
 endif(TINYXML2_INCLUDE_DIR)
 
 MARK_AS_ADVANCED(TINYXML2_INCLUDE_DIR TINYXML2_LIBRARIES TINYXML2_SOURCES)

+ 8 - 1
tutorial/cmake/FindTRIANGLE.cmake

@@ -19,10 +19,17 @@ FIND_PATH(TRIANGLE_INCLUDE_DIR triangle.h
 
 set(TRIANGLE_SOURCES ${TRIANGLE_INCLUDE_DIR}/triangle.c)
 
+SET(TRIANGLE_FOUND "NO")
+IF (TRIANGLE_INCLUDE_DIR)
+	SET(TRIANGLE_FOUND "YES")
+ENDIF (TRIANGLE_INCLUDE_DIR)
+
 if(TRIANGLE_INCLUDE_DIR)
    message(STATUS "Found TRIANGLE: ${TRIANGLE_INCLUDE_DIR}")
 else(TRIANGLE_INCLUDE_DIR)
-   message(FATAL_ERROR "could NOT find TRIANGLE")
+  if (NOT TRIANGLE_FIND_QUIETLY)
+    message(FATAL_ERROR "could NOT find TRIANGLE")
+  endif(NOT TRIANGLE_FIND_QUIETLY)
 endif(TRIANGLE_INCLUDE_DIR)
 
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTRILIBRARY -DANSI_DECLARATORS")