2015-03-12 17:00:56 -04:00
#Pre-requisites: Look for csparse
2022-01-02 23:30:55 -05:00
MESSAGE ( STATUS "RTAB-Map's cmake g2o find module used for convenience (for older g2o versions)" )
2021-05-23 17:21:12 -04:00
FIND_PATH ( CSPARSE_INCLUDE_DIR NAMES cs.h PATH_SUFFIXES suitesparse csparse EXTERNAL/suitesparse EXTERNAL/csparse g2o/EXTERNAL/suitesparse g2o/EXTERNAL/csparse
2016-01-14 17:07:01 -05:00
P A T H S " C : \ \ P r o g r a m F i l e s \ \ g 2 o \ \ i n c l u d e \ \ E X T E R N A L " )
FIND_LIBRARY ( CSPARSE_LIBRARY NAMES cxsparse g2o_ext_csparse
P A T H S " C : \ \ P r o g r a m F i l e s \ \ g 2 o \ \ l i b " )
2015-03-12 17:00:56 -04:00
include ( FindPackageHandleStandardArgs )
find_package_handle_standard_args ( CSPARSE DEFAULT_MSG CSPARSE_INCLUDE_DIR CSPARSE_LIBRARY )
2016-03-15 12:22:28 -04:00
# chmold dependency
FIND_PATH ( CHOLMOD_INCLUDE_DIR NAMES cholmod.h PATH_SUFFIXES suitesparse ufsparse
P A T H S $ E N V { C H O L M O D D I R } $ { I N C L U D E _ I N S T A L L _ D I R } )
FIND_LIBRARY ( CHOLMOD_LIB cholmod )
2015-03-12 17:00:56 -04:00
# G2O: Find the header files
2016-01-14 17:07:01 -05:00
FIND_PATH ( G2O_INCLUDE_DIR g2o/core/base_vertex.h
P A T H S " C : \ \ P r o g r a m F i l e s \ \ g 2 o \ \ i n c l u d e " )
2015-03-12 17:00:56 -04:00
2018-02-03 15:43:32 -05:00
FIND_FILE ( G2O_CONFIG_FILE g2o/config.h
P A T H S $ { G 2 O _ I N C L U D E _ D I R }
N O _ D E F A U L T _ P A T H )
2022-01-03 15:37:06 -05:00
FIND_FILE ( G2O_FACTORY_FILE g2o/core/factory.h
P A T H S $ { G 2 O _ I N C L U D E _ D I R }
N O _ D E F A U L T _ P A T H )
2025-10-13 22:54:35 -07:00
FIND_FILE ( G2O_SBA_UTILS_FILE g2o/types/sba/sba_utils.h
P A T H S $ { G 2 O _ I N C L U D E _ D I R }
N O _ D E F A U L T _ P A T H )
2018-02-03 15:43:32 -05:00
#ifdef G2O_NUMBER_FORMAT_STR
#define G2O_CPP11 // we assume that if G2O_NUMBER_FORMAT_STR is defined, this is the new g2o code with c++11 interface
#endif
2015-03-12 17:00:56 -04:00
# Macro to unify finding both the debug and release versions of the
2016-11-30 14:25:01 -05:00
# libraries; this is adapted from the rtabmap config
2015-03-12 17:00:56 -04:00
MACRO ( FIND_G2O_LIBRARY MYLIBRARY MYLIBRARYNAME )
FIND_LIBRARY ( "${MYLIBRARY}_DEBUG"
N A M E S " g 2 o _ $ { M Y L I B R A R Y N A M E } _ d "
2016-01-14 17:07:01 -05:00
P A T H S " C : \ \ P r o g r a m F i l e s \ \ g 2 o \ \ l i b " )
2015-03-12 17:00:56 -04:00
FIND_LIBRARY ( ${ MYLIBRARY }
N A M E S " g 2 o _ $ { M Y L I B R A R Y N A M E } "
2016-01-14 17:07:01 -05:00
P A T H S " C : \ \ P r o g r a m F i l e s \ \ g 2 o \ \ l i b " )
2015-03-12 17:00:56 -04:00
2016-11-30 14:25:01 -05:00
IF ( ${ MYLIBRARY } _DEBUG AND ${ MYLIBRARY } )
SET ( ${ MYLIBRARY }
d e b u g $ { $ { M Y L I B R A R Y } _ D E B U G }
o p t i m i z e d $ { $ { M Y L I B R A R Y } }
)
ELSEIF ( ${ MYLIBRARY } _DEBUG )
SET ( ${ MYLIBRARY } ${ ${MYLIBRARY } _DEBUG} )
ENDIF ( )
2015-03-12 17:00:56 -04:00
ENDMACRO ( FIND_G2O_LIBRARY LIBRARY LIBRARYNAME )
# Find the core elements
FIND_G2O_LIBRARY ( G2O_STUFF_LIBRARY stuff )
FIND_G2O_LIBRARY ( G2O_CORE_LIBRARY core )
# Find the CLI library
FIND_G2O_LIBRARY ( G2O_CLI_LIBRARY cli )
# 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" )
2022-01-03 15:37:06 -05:00
IF ( G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_CONFIG_FILE AND G2O_FACTORY_FILE AND G2O_SOLVERS_FOUND )
2016-02-15 19:35:24 -05:00
SET ( G2O_INCLUDE_DIRS ${ G2O_INCLUDE_DIR } )
2015-03-12 17:00:56 -04:00
SET ( G2O_LIBRARIES
2015-09-02 17:51:43 -04:00
$ { G 2 O _ C O R E _ L I B R A R Y }
2015-03-12 17:00:56 -04:00
$ { G 2 O _ T Y P E S _ S L A M 2 D }
2016-02-15 19:35:24 -05:00
$ { G 2 O _ T Y P E S _ S L A M 3 D }
2016-03-28 18:19:17 -04:00
$ { G 2 O _ T Y P E S _ S B A }
2016-02-15 19:35:24 -05:00
$ { G 2 O _ S T U F F _ L I B R A R Y } )
2026-05-10 20:04:30 -07:00
IF ( CSPARSE_FOUND AND G2O_SOLVER_CSPARSE AND G2O_SOLVER_CSPARSE_EXTENSION )
2016-02-15 19:35:24 -05:00
SET ( G2O_INCLUDE_DIRS
$ { G 2 O _ I N C L U D E _ D I R S }
$ { C S P A R S E _ I N C L U D E _ D I R } )
SET ( G2O_LIBRARIES
$ { G 2 O _ L I B R A R I E S }
2026-05-10 20:04:30 -07:00
$ { G 2 O _ S O L V E R _ C S P A R S E }
$ { G 2 O _ S O L V E R _ C S P A R S E _ E X T E N S I O N }
$ { C S P A R S E _ L I B R A R Y } )
ENDIF ( CSPARSE_FOUND AND G2O_SOLVER_CSPARSE AND G2O_SOLVER_CSPARSE_EXTENSION )
2016-02-15 19:35:24 -05:00
2016-03-15 12:22:28 -04:00
IF ( G2O_SOLVER_CHOLMOD )
SET ( G2O_INCLUDE_DIRS
$ { G 2 O _ I N C L U D E _ D I R S }
$ { C H O L M O D _ I N C L U D E _ D I R } )
SET ( G2O_LIBRARIES
$ { G 2 O _ L I B R A R I E S }
$ { G 2 O _ S O L V E R _ C H O L M O D }
$ { C H O L M O D _ L I B } )
ENDIF ( G2O_SOLVER_CHOLMOD )
2025-10-13 22:54:35 -07:00
FILE ( READ ${ G2O_FACTORY_FILE } TMPTXT )
STRING ( FIND "${TMPTXT}" "shared_ptr" matchres )
2018-02-03 15:43:32 -05:00
IF ( ${ matchres } EQUAL -1 )
2025-10-13 22:54:35 -07:00
FILE ( READ ${ G2O_CONFIG_FILE } TMPTXT )
STRING ( FIND "${TMPTXT}" "G2O_NUMBER_FORMAT_STR" matchres )
2022-01-03 15:37:06 -05:00
IF ( ${ matchres } EQUAL -1 )
2025-10-13 22:54:35 -07:00
MESSAGE ( STATUS "Old g2o version detected with c++03 interface (config file: ${G2O_CONFIG_FILE})." )
SET ( G2O_CPP11 0 )
ELSE ( )
MESSAGE ( WARNING "Latest g2o version detected with c++11 interface (config file: ${G2O_CONFIG_FILE}). Make sure g2o is built with \" -DBUILD_WITH_MARCH_NATIVE=OFF\ " to avoid segmentation faults caused by Eigen." )
2022-01-03 15:37:06 -05:00
MESSAGE ( STATUS "Old g2o factory version detected without shared ptr (factory file: ${G2O_FACTORY_FILE})." )
SET ( G2O_CPP11 2 )
ENDIF ( )
2025-10-13 22:54:35 -07:00
ELSE ( )
MESSAGE ( WARNING "Latest g2o version detected with c++11 interface (config file: ${G2O_CONFIG_FILE}). Make sure g2o is built with \" -DBUILD_WITH_MARCH_NATIVE=OFF\ " to avoid segmentation faults caused by Eigen." )
MESSAGE ( STATUS "Latest g2o factory version detected with shared ptr (factory file: ${G2O_FACTORY_FILE})." )
SET ( G2O_CPP11 1 )
ENDIF ( )
IF ( G2O_SBA_UTILS_FILE )
SET ( G2O_WITH_SBA_UTILS 1 )
ELSE ( )
SET ( G2O_WITH_SBA_UTILS 0 )
2018-02-03 15:43:32 -05:00
ENDIF ( )
2015-03-12 17:00:56 -04:00
SET ( G2O_FOUND "YES" )
2022-01-03 15:37:06 -05:00
ENDIF ( G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_CONFIG_FILE AND G2O_FACTORY_FILE AND G2O_SOLVERS_FOUND )