diff --git a/cmake_modules/FindG2O.cmake b/cmake_modules/FindG2O.cmake index b2670d3..3baff28 100644 --- a/cmake_modules/FindG2O.cmake +++ b/cmake_modules/FindG2O.cmake @@ -1,97 +1,114 @@ -# Locate the g2o libraries -# A general framework for graph optimization. -# -# This module defines -# G2O_FOUND, if false, do not try to link against g2o -# G2O_LIBRARIES, path to the libg2o -# G2O_INCLUDE_DIR, where to find the g2o header files -# -# Niko Suenderhauf -# Adapted by Felix Endres +# Find the header files -IF(UNIX) +FIND_PATH(G2O_INCLUDE_DIR g2o/core/base_vertex.h + ${G2O_ROOT}/include + $ENV{G2O_ROOT}/include + $ENV{G2O_ROOT} + /usr/local/include + /usr/include + /opt/local/include + /sw/local/include + /sw/include + NO_DEFAULT_PATH + ) - #IF(G2O_INCLUDE_DIR AND G2O_LIBRARIES) - # in cache already - # SET(G2O_FIND_QUIETLY TRUE) - #ENDIF(G2O_INCLUDE_DIR AND G2O_LIBRARIES) +# Macro to unify finding both the debug and release versions of the +# libraries; this is adapted from the OpenSceneGraph FIND_LIBRARY +# macro. - MESSAGE(STATUS "Searching for g2o ...") - FIND_PATH(G2O_INCLUDE_DIR - NAMES core math_groups types - PATHS /usr/local /usr - PATH_SUFFIXES include/g2o include) +MACRO(FIND_G2O_LIBRARY MYLIBRARY MYLIBRARYNAME) - IF (G2O_INCLUDE_DIR) - MESSAGE(STATUS "Found g2o headers in: ${G2O_INCLUDE_DIR}") - ENDIF (G2O_INCLUDE_DIR) + FIND_LIBRARY("${MYLIBRARY}_DEBUG" + NAMES "g2o_${MYLIBRARYNAME}_d" + PATHS + ${G2O_ROOT}/lib/Debug + ${G2O_ROOT}/lib + $ENV{G2O_ROOT}/lib/Debug + $ENV{G2O_ROOT}/lib + NO_DEFAULT_PATH + ) - FIND_LIBRARY(G2O_CORE_LIB - NAMES g2o_core g2o_core_rd - PATHS /usr/local /usr ${CMAKE_PREFIX_PATH} - PATH_SUFFIXES lib) - FIND_LIBRARY(G2O_STUFF_LIB - NAMES g2o_stuff g2o_stuff_rd - PATHS /usr/local /usr ${CMAKE_PREFIX_PATH} - PATH_SUFFIXES lib) - FIND_LIBRARY(G2O_TYPES_SLAM2D_LIB - NAMES g2o_types_slam2d g2o_types_slam2d_rd - PATHS /usr/local /usr ${CMAKE_PREFIX_PATH} - PATH_SUFFIXES lib) - FIND_LIBRARY(G2O_TYPES_SLAM3D_LIB - NAMES g2o_types_slam3d g2o_types_slam3d_rd - PATHS /usr/local /usr ${CMAKE_PREFIX_PATH} - PATH_SUFFIXES lib) - FIND_LIBRARY(G2O_SOLVER_CHOLMOD_LIB - NAMES g2o_solver_cholmod g2o_solver_cholmod_rd - PATHS /usr/local /usr ${CMAKE_PREFIX_PATH} - PATH_SUFFIXES lib) - FIND_LIBRARY(G2O_SOLVER_PCG_LIB - NAMES g2o_solver_pcg g2o_solver_pcg_rd - PATHS /usr/local /usr ${CMAKE_PREFIX_PATH} - PATH_SUFFIXES lib) - FIND_LIBRARY(G2O_SOLVER_CSPARSE_LIB - NAMES g2o_solver_csparse g2o_solver_csparse_rd - PATHS /usr/local /usr - PATH_SUFFIXES lib) - FIND_LIBRARY(G2O_INCREMENTAL_LIB - NAMES g2o_incremental g2o_incremental_rd - PATHS /usr/local /usr ${CMAKE_PREFIX_PATH} - PATH_SUFFIXES lib) - FIND_LIBRARY(G2O_CSPARSE_EXTENSION_LIB - NAMES g2o_csparse_extension g2o_csparse_extension_rd - PATHS /usr/local /usr ${CMAKE_PREFIX_PATH} - PATH_SUFFIXES lib) + FIND_LIBRARY("${MYLIBRARY}_DEBUG" + NAMES "g2o_${MYLIBRARYNAME}_d" + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/lib + /usr/local/lib64 + /usr/lib + /usr/lib64 + /opt/local/lib + /sw/local/lib + /sw/lib + ) + + FIND_LIBRARY(${MYLIBRARY} + NAMES "g2o_${MYLIBRARYNAME}" + PATHS + ${G2O_ROOT}/lib/Release + ${G2O_ROOT}/lib + $ENV{G2O_ROOT}/lib/Release + $ENV{G2O_ROOT}/lib + NO_DEFAULT_PATH + ) - SET(G2O_LIBRARIES ${G2O_CSPARSE_EXTENSION_LIB} - ${G2O_CORE_LIB} - ${G2O_STUFF_LIB} - ${G2O_TYPES_SLAM2D_LIB} - ${G2O_TYPES_SLAM3D_LIB} - ${G2O_SOLVER_CHOLMOD_LIB} - ${G2O_SOLVER_PCG_LIB} - ${G2O_SOLVER_CSPARSE_LIB} - ${G2O_INCREMENTAL_LIB} - ) + FIND_LIBRARY(${MYLIBRARY} + NAMES "g2o_${MYLIBRARYNAME}" + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/lib + /usr/local/lib64 + /usr/lib + /usr/lib64 + /opt/local/lib + /sw/local/lib + /sw/lib + ) + + IF(NOT ${MYLIBRARY}_DEBUG) + IF(MYLIBRARY) + SET(${MYLIBRARY}_DEBUG ${MYLIBRARY}) + ENDIF(MYLIBRARY) + ENDIF( NOT ${MYLIBRARY}_DEBUG) + +ENDMACRO(FIND_G2O_LIBRARY LIBRARY LIBRARYNAME) - IF(G2O_LIBRARIES AND G2O_INCLUDE_DIR) - SET(G2O_FOUND "YES") - IF(NOT G2O_FIND_QUIETLY) - MESSAGE(STATUS "Found libg2o: ${G2O_LIBRARIES}") - ENDIF(NOT G2O_FIND_QUIETLY) - ELSE(G2O_LIBRARIES AND G2O_INCLUDE_DIR) - IF(NOT G2O_LIBRARIES) - IF(G2O_FIND_REQUIRED) - message(FATAL_ERROR "Could not find libg2o!") - ENDIF(G2O_FIND_REQUIRED) - ENDIF(NOT G2O_LIBRARIES) +# Find the core elements +FIND_G2O_LIBRARY(G2O_STUFF_LIBRARY stuff) +FIND_G2O_LIBRARY(G2O_CORE_LIBRARY core) - IF(NOT G2O_INCLUDE_DIR) - IF(G2O_FIND_REQUIRED) - message(FATAL_ERROR "Could not find g2o include directory!") - ENDIF(G2O_FIND_REQUIRED) - ENDIF(NOT G2O_INCLUDE_DIR) - ENDIF(G2O_LIBRARIES AND G2O_INCLUDE_DIR) +# Find the CLI library +FIND_G2O_LIBRARY(G2O_CLI_LIBRARY cli) -ENDIF(UNIX) +# Find the pluggable solvers +FIND_G2O_LIBRARY(G2O_SOLVER_CHOLMOD solver_cholmod) +FIND_G2O_LIBRARY(G2O_SOLVER_CSPARSE solver_csparse) +FIND_G2O_LIBRARY(G2O_SOLVER_CSPARSE_EXTENSION csparse_extension) +FIND_G2O_LIBRARY(G2O_SOLVER_DENSE solver_dense) +FIND_G2O_LIBRARY(G2O_SOLVER_PCG solver_pcg) +FIND_G2O_LIBRARY(G2O_SOLVER_SLAM2D_LINEAR solver_slam2d_linear) +FIND_G2O_LIBRARY(G2O_SOLVER_STRUCTURE_ONLY solver_structure_only) +FIND_G2O_LIBRARY(G2O_SOLVER_EIGEN solver_eigen) +# Find the predefined types +FIND_G2O_LIBRARY(G2O_TYPES_DATA types_data) +FIND_G2O_LIBRARY(G2O_TYPES_ICP types_icp) +FIND_G2O_LIBRARY(G2O_TYPES_SBA types_sba) +FIND_G2O_LIBRARY(G2O_TYPES_SCLAM2D types_sclam2d) +FIND_G2O_LIBRARY(G2O_TYPES_SIM3 types_sim3) +FIND_G2O_LIBRARY(G2O_TYPES_SLAM2D types_slam2d) +FIND_G2O_LIBRARY(G2O_TYPES_SLAM3D types_slam3d) + +# G2O solvers declared found if we found at least one solver +SET(G2O_SOLVERS_FOUND "NO") +IF(G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER_PCG OR G2O_SOLVER_SLAM2D_LINEAR OR G2O_SOLVER_STRUCTURE_ONLY OR G2O_SOLVER_EIGEN) + SET(G2O_SOLVERS_FOUND "YES") +ENDIF(G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER_PCG OR G2O_SOLVER_SLAM2D_LINEAR OR G2O_SOLVER_STRUCTURE_ONLY OR G2O_SOLVER_EIGEN) + +# G2O itself declared found if we found the core libraries and at least one solver +SET(G2O_FOUND "NO") +IF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND) + SET(G2O_FOUND "YES") + SET(G2O_LIBRARIES ${G2O_STUFF_LIBRARY} ${G2O_CORE_LIBRARY} ${G2O_SOLVER_CHOLMOD} ${G2O_SOLVER_CSPARSE} ${G2O_SOLVER_DENSE} ${G2O_SOLVER_PCG} ${G2O_SOLVER_SLAM2D_LINEAR} ${G2O_SOLVER_STRUCTURE_ONLY} ${G2O_SOLVER_EIGEN} ${G2O_SOLVER_CSPARSE} ${G2O_SOLVER_CSPARSE_EXTENSION}) +ENDIF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND)