CMakeLists.txt 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
  2. SET(CMAKE_LEGACY_CYGWIN_WIN32 0)
  3. PROJECT(g2o)
  4. SET(g2o_C_FLAGS)
  5. SET(g2o_CXX_FLAGS)
  6. # default built type
  7. if(NOT CMAKE_BUILD_TYPE)
  8. set(CMAKE_BUILD_TYPE Release)
  9. endif()
  10. MESSAGE(STATUS "BUILD TYPE:" ${CMAKE_BUILD_TYPE})
  11. SET (G2O_LIB_TYPE SHARED)
  12. # There seems to be an issue with MSVC8
  13. # see http://eigen.tuxfamily.org/bz/show_bug.cgi?id=83
  14. if(MSVC90)
  15. add_definitions(-DEIGEN_DONT_ALIGN_STATICALLY=1)
  16. message(STATUS "Disabling memory alignment for MSVC8")
  17. endif(MSVC90)
  18. # Set the output directory for the build executables and libraries
  19. IF(WIN32)
  20. SET(g2o_LIBRARY_OUTPUT_DIRECTORY ${g2o_SOURCE_DIR}/bin CACHE PATH "Target for the libraries")
  21. ELSE(WIN32)
  22. SET(g2o_LIBRARY_OUTPUT_DIRECTORY ${g2o_SOURCE_DIR}/lib CACHE PATH "Target for the libraries")
  23. ENDIF(WIN32)
  24. SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${g2o_LIBRARY_OUTPUT_DIRECTORY})
  25. SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${g2o_LIBRARY_OUTPUT_DIRECTORY})
  26. SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${g2o_RUNTIME_OUTPUT_DIRECTORY})
  27. # Set search directory for looking for our custom CMake scripts to
  28. # look for SuiteSparse, QGLViewer, and Eigen3.
  29. LIST(APPEND CMAKE_MODULE_PATH ${g2o_SOURCE_DIR}/cmake_modules)
  30. # Detect OS and define macros appropriately
  31. IF(UNIX)
  32. ADD_DEFINITIONS(-DUNIX)
  33. MESSAGE(STATUS "Compiling on Unix")
  34. ENDIF(UNIX)
  35. # Eigen library parallelise itself, though, presumably due to performance issues
  36. # OPENMP is experimental. We experienced some slowdown with it
  37. FIND_PACKAGE(OpenMP)
  38. SET(G2O_USE_OPENMP OFF CACHE BOOL "Build g2o with OpenMP support (EXPERIMENTAL)")
  39. IF(OPENMP_FOUND AND G2O_USE_OPENMP)
  40. SET (G2O_OPENMP 1)
  41. SET(g2o_C_FLAGS "${g2o_C_FLAGS} ${OpenMP_C_FLAGS}")
  42. SET(g2o_CXX_FLAGS "${g2o_CXX_FLAGS} -DEIGEN_DONT_PARALLELIZE ${OpenMP_CXX_FLAGS}")
  43. MESSAGE(STATUS "Compiling with OpenMP support")
  44. ENDIF(OPENMP_FOUND AND G2O_USE_OPENMP)
  45. # Compiler specific options for gcc
  46. SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -march=native")
  47. SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -march=native")
  48. # SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
  49. # SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
  50. # activate warnings !!!
  51. SET(g2o_C_FLAGS "${g2o_C_FLAGS} -Wall -W")
  52. SET(g2o_CXX_FLAGS "${g2o_CXX_FLAGS} -Wall -W")
  53. # specifying compiler flags
  54. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${g2o_CXX_FLAGS}")
  55. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${g2o_C_FLAGS}")
  56. # Find Eigen3
  57. SET(EIGEN3_INCLUDE_DIR ${G2O_EIGEN3_INCLUDE})
  58. FIND_PACKAGE(Eigen3 3.1.0 REQUIRED)
  59. IF(EIGEN3_FOUND)
  60. SET(G2O_EIGEN3_INCLUDE ${EIGEN3_INCLUDE_DIR} CACHE PATH "Directory of Eigen3")
  61. ELSE(EIGEN3_FOUND)
  62. SET(G2O_EIGEN3_INCLUDE "" CACHE PATH "Directory of Eigen3")
  63. ENDIF(EIGEN3_FOUND)
  64. # Generate config.h
  65. SET(G2O_CXX_COMPILER "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER}")
  66. configure_file(config.h.in ${g2o_SOURCE_DIR}/config.h)
  67. # Set up the top-level include directories
  68. INCLUDE_DIRECTORIES(
  69. ${g2o_SOURCE_DIR}/core
  70. ${g2o_SOURCE_DIR}/types
  71. ${g2o_SOURCE_DIR}/stuff
  72. ${G2O_EIGEN3_INCLUDE})
  73. # Include the subdirectories
  74. ADD_LIBRARY(g2o ${G2O_LIB_TYPE}
  75. #types
  76. g2o/types/types_sba.h
  77. g2o/types/types_six_dof_expmap.h
  78. g2o/types/types_sba.cpp
  79. g2o/types/types_six_dof_expmap.cpp
  80. g2o/types/types_seven_dof_expmap.cpp
  81. g2o/types/types_seven_dof_expmap.h
  82. g2o/types/se3quat.h
  83. g2o/types/se3_ops.h
  84. g2o/types/se3_ops.hpp
  85. #core
  86. g2o/core/base_edge.h
  87. g2o/core/base_binary_edge.h
  88. g2o/core/hyper_graph_action.cpp
  89. g2o/core/base_binary_edge.hpp
  90. g2o/core/hyper_graph_action.h
  91. g2o/core/base_multi_edge.h
  92. g2o/core/hyper_graph.cpp
  93. g2o/core/base_multi_edge.hpp
  94. g2o/core/hyper_graph.h
  95. g2o/core/base_unary_edge.h
  96. g2o/core/linear_solver.h
  97. g2o/core/base_unary_edge.hpp
  98. g2o/core/marginal_covariance_cholesky.cpp
  99. g2o/core/base_vertex.h
  100. g2o/core/marginal_covariance_cholesky.h
  101. g2o/core/base_vertex.hpp
  102. g2o/core/matrix_structure.cpp
  103. g2o/core/batch_stats.cpp
  104. g2o/core/matrix_structure.h
  105. g2o/core/batch_stats.h
  106. g2o/core/openmp_mutex.h
  107. g2o/core/block_solver.h
  108. g2o/core/block_solver.hpp
  109. g2o/core/parameter.cpp
  110. g2o/core/parameter.h
  111. g2o/core/cache.cpp
  112. g2o/core/cache.h
  113. g2o/core/optimizable_graph.cpp
  114. g2o/core/optimizable_graph.h
  115. g2o/core/solver.cpp
  116. g2o/core/solver.h
  117. g2o/core/creators.h
  118. g2o/core/optimization_algorithm_factory.cpp
  119. g2o/core/estimate_propagator.cpp
  120. g2o/core/optimization_algorithm_factory.h
  121. g2o/core/estimate_propagator.h
  122. g2o/core/factory.cpp
  123. g2o/core/optimization_algorithm_property.h
  124. g2o/core/factory.h
  125. g2o/core/sparse_block_matrix.h
  126. g2o/core/sparse_optimizer.cpp
  127. g2o/core/sparse_block_matrix.hpp
  128. g2o/core/sparse_optimizer.h
  129. g2o/core/hyper_dijkstra.cpp
  130. g2o/core/hyper_dijkstra.h
  131. g2o/core/parameter_container.cpp
  132. g2o/core/parameter_container.h
  133. g2o/core/optimization_algorithm.cpp
  134. g2o/core/optimization_algorithm.h
  135. g2o/core/optimization_algorithm_with_hessian.cpp
  136. g2o/core/optimization_algorithm_with_hessian.h
  137. g2o/core/optimization_algorithm_levenberg.cpp
  138. g2o/core/optimization_algorithm_levenberg.h
  139. g2o/core/optimization_algorithm_gauss_newton.cpp
  140. g2o/core/optimization_algorithm_gauss_newton.h
  141. g2o/core/jacobian_workspace.cpp
  142. g2o/core/jacobian_workspace.h
  143. g2o/core/robust_kernel.cpp
  144. g2o/core/robust_kernel.h
  145. g2o/core/robust_kernel_factory.cpp
  146. g2o/core/robust_kernel_factory.h
  147. g2o/core/robust_kernel_impl.cpp
  148. g2o/core/robust_kernel_impl.h
  149. #stuff
  150. g2o/stuff/string_tools.h
  151. g2o/stuff/color_macros.h
  152. g2o/stuff/macros.h
  153. g2o/stuff/timeutil.cpp
  154. g2o/stuff/misc.h
  155. g2o/stuff/timeutil.h
  156. g2o/stuff/os_specific.c
  157. g2o/stuff/os_specific.h
  158. g2o/stuff/string_tools.cpp
  159. g2o/stuff/property.cpp
  160. g2o/stuff/property.h
  161. )