CMakeLists.txt 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. cmake_minimum_required(VERSION 2.6)
  2. project(libigl)
  3. SET(CMAKE_SKIP_RULE_DEPENDENCY 1)
  4. # SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../../lib)
  5. SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../tutorial/cmake)
  6. find_package(EIGEN REQUIRED)
  7. add_definitions(-DIGL_STATIC_LIBRARY)
  8. option(LIBIGL_VIEWER_WITH_NANOGUI "Enable nanogui " OFF)
  9. #option(LIBIGL_NO_OPENGL "Disable OpenGL2 legacy features in main library" ON)
  10. #option(LIBIGL_OPENGL_4 "Enable OpenGL4 features in optional libraries" ON)
  11. #
  12. #if(LIBIGL_NO_OPENGL)
  13. # add_definitions(-DIGL_NO_OPENGL)
  14. #endif(LIBIGL_NO_OPENGL)
  15. #if(LIBIGL_OPENGL_4)
  16. # add_definitions(-DIGL_OPENGL_4)
  17. #endif(LIBIGL_OPENGL_4)
  18. ## Check for GLFW
  19. find_package(GLFWH QUIET)
  20. if (GLFW_FOUND)
  21. include_directories( ${GLFW_INCLUDE_DIR})
  22. else (GLFW_FOUND)
  23. message(STATUS "GLFW not found.")
  24. endif(GLFW_FOUND)
  25. ## Check for GLEW
  26. find_package(GLEW QUIET)
  27. if (GLEW_FOUND)
  28. include_directories( ${GLEW_INCLUDE_DIR})
  29. else (GLEW_FOUND)
  30. message(STATUS "GLEW not found.")
  31. endif(GLEW_FOUND)
  32. find_package(OpenGL QUIET)
  33. ## Check for Anttweakbar
  34. find_package(ANTTWEAKBAR QUIET)
  35. if (ANTTWEAKBAR_FOUND)
  36. include_directories( ${ANT_TWEAK_BAR_INCLUDE_DIR})
  37. else (ANTTWEAKBAR_FOUND)
  38. message(STATUS "AntTweakBar not found.")
  39. endif(ANTTWEAKBAR_FOUND)
  40. ## Check for NANOGUI
  41. if(LIBIGL_VIEWER_WITH_NANOGUI)
  42. find_package(NANOGUIH QUIET)
  43. #message(FATAL_ERROR "nanogui not found. ${NANOGUI_INCLUDE_DIRS}")
  44. if (NANOGUI_FOUND)
  45. include_directories( ${NANOGUI_INCLUDE_DIRS})
  46. else (NANOGUI_FOUND)
  47. message(STATUS "nanogui not found.")
  48. endif(NANOGUI_FOUND)
  49. endif()
  50. ## Check for Boost
  51. find_package(BOOST QUIET)
  52. if (Boost_FOUND)
  53. include_directories( ${BOOST_INCLUDE_DIR})
  54. endif(Boost_FOUND)
  55. ## Check for CoMiSo, if not available skip the examples that depends on it
  56. find_package(LIBCOMISOH QUIET)
  57. if (LIBCOMISO_FOUND)
  58. include_directories( ${LIBCOMISO_INCLUDE_DIRS})
  59. endif(LIBCOMISO_FOUND)
  60. ## Check for MATLAB, if not available skip the examples that depends on it
  61. find_package(MATLAB QUIET)
  62. if (MATLAB_FOUND)
  63. include_directories( ${MATLAB_INCLUDE_DIR})
  64. else (MATLAB_FOUND)
  65. message(STATUS "MATLAB not found.")
  66. endif(MATLAB_FOUND)
  67. ## Check for EMBREE, if not available skip the examples that depends on it
  68. find_package(EMBREEH QUIET)
  69. if (EMBREE_FOUND)
  70. include_directories( ${EMBREE_INCLUDE_DIR})
  71. else (EMBREE_FOUND)
  72. message(STATUS "Embree not found.")
  73. endif(EMBREE_FOUND)
  74. ## Check for CGAL, if not available skip the examples that depends on it
  75. find_package(CGAL QUIET)
  76. ## Check for mosek
  77. find_package(MOSEK QUIET)
  78. if(MOSEK_FOUND)
  79. include_directories(${MOSEK_INCLUDE_DIR})
  80. else(MOSEK_FOUND)
  81. add_definitions(-DIGL_NO_MOSEK)
  82. endif(MOSEK_FOUND)
  83. ## Check for CORK
  84. find_package(CORK QUIET)
  85. if (NOT CORK_FOUND)
  86. add_definitions(-DIGL_NO_CORK)
  87. else(NOT CORK_FOUND)
  88. include_directories( ${CORK_INCLUDE_DIR})
  89. endif(NOT CORK_FOUND)
  90. ## Check for LIM
  91. find_package(LIM QUIET)
  92. if(LIM_FOUND)
  93. include_directories( ${LIM_INCLUDE_DIR})
  94. endif(LIM_FOUND)
  95. ## Check for PNG
  96. find_package(PNG QUIET)
  97. if(PNG_FOUND)
  98. include_directories( ${PNG_INCLUDE_DIR})
  99. else(PNG_FOUND)
  100. message(STATUS "PNG not found")
  101. endif(PNG_FOUND)
  102. ## Check for TETGEN
  103. find_package(TETGEN QUIET)
  104. if(TETGEN_FOUND)
  105. include_directories( ${TETGEN_INCLUDE_DIR})
  106. else(TETGEN_FOUND)
  107. message(STATUS "Tetgen not found.")
  108. endif(TETGEN_FOUND)
  109. ## Check for TRIANGLE
  110. find_package(TRIANGLE QUIET)
  111. if(TRIANGLE_FOUND)
  112. include_directories( ${TRIANGLE_INCLUDE_DIR})
  113. endif(TRIANGLE_FOUND)
  114. ## Check for TINYXML2
  115. find_package(TINYXML2 QUIET)
  116. if(TINYXML2_FOUND)
  117. include_directories( ${TINYXML2_INCLUDE_DIR})
  118. endif(TINYXML2_FOUND)
  119. ## Check for COMISO
  120. find_package(COMISO QUIET)
  121. if(COMISO_FOUND)
  122. include_directories( ${COMISO_INCLUDE_DIR})
  123. endif(COMISO_FOUND)
  124. ## Use openMP if available
  125. find_package(OpenMP)
  126. if (OPENMP_FOUND AND NOT WIN32)
  127. set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
  128. set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
  129. endif()
  130. ## Check for YIMG
  131. find_package(YIMG QUIET)
  132. if(YIMG_FOUND)
  133. include_directories( ${YIMG_INCLUDE_DIR})
  134. else(YIMG_FOUND)
  135. message(STATUS "YIMG not found")
  136. endif(YIMG_FOUND)
  137. IF(MSVC)
  138. ### Enable parallel compilation for Visual Studio
  139. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
  140. ELSE(MSVC)
  141. #### Libigl requires a modern C++ compiler that supports c++11
  142. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  143. ENDIF(MSVC)
  144. #### Compile the core library that depends only on EIGEN ####
  145. include_directories( ${EIGEN_INCLUDE_DIR})
  146. include_directories( ${PROJECT_SOURCE_DIR}/../include/)
  147. file(GLOB SOURCES
  148. "${PROJECT_SOURCE_DIR}/../include/igl/*.cpp"
  149. "${PROJECT_SOURCE_DIR}/../include/igl/copyleft/*.cpp"
  150. )
  151. add_library(igl STATIC ${SOURCES})
  152. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "igl")
  153. #### Compile the AntTweakBar part
  154. if (ANTTWEAKBAR_FOUND)
  155. file(GLOB SOURCES_ANTTWEAKBAR
  156. "${PROJECT_SOURCE_DIR}/../include/igl/anttweakbar/*.cpp"
  157. )
  158. add_library(iglanttweakbar STATIC ${SOURCES_ANTTWEAKBAR})
  159. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglanttweakbar")
  160. endif (ANTTWEAKBAR_FOUND)
  161. #### Compile the BBW part
  162. file(GLOB SOURCES_BBW
  163. "${PROJECT_SOURCE_DIR}/../include/igl/bbw/*.cpp"
  164. )
  165. add_library(iglbbw STATIC ${SOURCES_BBW})
  166. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglbbw")
  167. #### Compile the boolean and cgal parts
  168. if (CGAL_FOUND)
  169. #### Compile the boolean part
  170. if (NOT CORK_FOUND)
  171. add_definitions(-DIGL_NO_CORK)
  172. endif(NOT CORK_FOUND)
  173. file(GLOB SOURCES_BOOLEAN
  174. "${PROJECT_SOURCE_DIR}/../include/igl/copyleft/boolean/*.cpp"
  175. )
  176. add_library(iglboolean STATIC ${SOURCES_BOOLEAN})
  177. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglboolean")
  178. #### Compile the cgal part
  179. file(GLOB SOURCES_CGAL
  180. "${PROJECT_SOURCE_DIR}/../include/igl/copyleft/cgal/*.cpp"
  181. )
  182. add_library(iglcgal STATIC ${SOURCES_CGAL})
  183. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglcgal")
  184. endif (CGAL_FOUND)
  185. #### Compile the comiso part
  186. if (LIBCOMISO_FOUND)
  187. file(GLOB SOURCES_COMISO
  188. "${PROJECT_SOURCE_DIR}/../include/igl/comiso/*.cpp"
  189. )
  190. add_library(iglcomiso STATIC ${SOURCES_COMISO})
  191. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglcomiso")
  192. endif (LIBCOMISO_FOUND)
  193. #### Compile the embree part
  194. if (EMBREE_FOUND)
  195. file(GLOB SOURCES_EMBREE
  196. "${PROJECT_SOURCE_DIR}/../include/igl/embree/*.cpp"
  197. )
  198. add_library(iglembree STATIC ${SOURCES_EMBREE})
  199. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglembree")
  200. endif (EMBREE_FOUND)
  201. #### Compile the lim part
  202. if (LIM_FOUND)
  203. file(GLOB SOURCES_LIM
  204. "${PROJECT_SOURCE_DIR}/../include/igl/lim/*.cpp"
  205. )
  206. add_library(igllim STATIC ${SOURCES_LIM})
  207. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "igllim")
  208. endif (LIM_FOUND)
  209. #### Compile the matlab part
  210. if (MATLAB_FOUND)
  211. file(GLOB SOURCES_MATLAB
  212. "${PROJECT_SOURCE_DIR}/../include/igl/matlab/*.cpp"
  213. )
  214. add_library(iglmatlab STATIC ${SOURCES_MATLAB})
  215. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglmatlab")
  216. endif (MATLAB_FOUND)
  217. #### Compile the mosek part
  218. if (MOSEK_FOUND)
  219. file(GLOB SOURCES_MOSEK
  220. "${PROJECT_SOURCE_DIR}/../include/igl/mosek/*.cpp"
  221. )
  222. add_library(iglmosek STATIC ${SOURCES_MOSEK})
  223. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglmosek")
  224. endif (MOSEK_FOUND)
  225. #### Compile the opengl parts
  226. if (OPENGL_FOUND)
  227. file(GLOB SOURCES_OPENGL2
  228. "${PROJECT_SOURCE_DIR}/../include/igl/opengl2/*.cpp"
  229. )
  230. add_library(iglopengl2 STATIC ${SOURCES_OPENGL2})
  231. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglopengl2")
  232. file(GLOB SOURCES_OPENGL
  233. "${PROJECT_SOURCE_DIR}/../include/igl/opengl/*.cpp"
  234. )
  235. add_library(iglopengl STATIC ${SOURCES_OPENGL})
  236. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglopengl")
  237. endif (OPENGL_FOUND)
  238. #### Compile the png part
  239. if (PNG_FOUND AND YIMG_FOUND AND OPENGL_FOUND)
  240. file(GLOB SOURCES_PNG
  241. "${PROJECT_SOURCE_DIR}/../include/igl/png/*.cpp"
  242. )
  243. add_library(iglpng STATIC ${SOURCES_PNG})
  244. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglpng")
  245. endif (PNG_FOUND AND YIMG_FOUND AND OPENGL_FOUND)
  246. #### Compile the tetgen part
  247. if (TETGEN_FOUND)
  248. file(GLOB SOURCES_TETGEN
  249. "${PROJECT_SOURCE_DIR}/../include/igl/copyleft/tetgen/*.cpp"
  250. )
  251. add_library(igltetgen STATIC ${SOURCES_TETGEN})
  252. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "igltetgen")
  253. endif (TETGEN_FOUND)
  254. #### Compile the triangle part
  255. if (TRIANGLE_FOUND)
  256. file(GLOB SOURCES_TRIANGLE
  257. "${PROJECT_SOURCE_DIR}/../include/igl/triangle/*.cpp"
  258. )
  259. add_library(igltriangle STATIC ${SOURCES_TRIANGLE})
  260. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "igltriangle")
  261. endif (TRIANGLE_FOUND)
  262. #### Compile the viewer
  263. if(LIBIGL_VIEWER_WITH_NANOGUI)
  264. if (NANOGUI_FOUND)
  265. add_definitions(-DIGL_VIEWER_WITH_NANOGUI)
  266. endif (NANOGUI_FOUND)
  267. endif()
  268. file(GLOB SOURCES_VIEWER
  269. "${PROJECT_SOURCE_DIR}/../include/igl/viewer/*.cpp"
  270. )
  271. add_library(iglviewer STATIC ${SOURCES_VIEWER})
  272. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglviewer")
  273. #### Compile the xml part
  274. if (TINYXML2_FOUND)
  275. file(GLOB SOURCES_XML
  276. "${PROJECT_SOURCE_DIR}/../include/igl/xml/*.cpp"
  277. )
  278. add_library(iglxml STATIC ${SOURCES_XML})
  279. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} "iglxml")
  280. endif (TINYXML2_FOUND)
  281. # Pass the list of compiled libraries to the parent if there is one
  282. if(NOT ${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})
  283. set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} PARENT_SCOPE)
  284. endif (NOT ${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})