diff options
Diffstat (limited to 'internal/ceres/CMakeLists.txt')
-rw-r--r-- | internal/ceres/CMakeLists.txt | 121 |
1 files changed, 64 insertions, 57 deletions
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt index 610e816..4d4f873 100644 --- a/internal/ceres/CMakeLists.txt +++ b/internal/ceres/CMakeLists.txt @@ -34,8 +34,8 @@ SET(CERES_INTERNAL_SRC block_evaluate_preparer.cc block_jacobi_preconditioner.cc block_jacobian_writer.cc - block_random_access_crs_matrix.cc block_random_access_dense_matrix.cc + block_random_access_diagonal_matrix.cc block_random_access_matrix.cc block_random_access_sparse_matrix.cc block_sparse_matrix.cc @@ -43,6 +43,7 @@ SET(CERES_INTERNAL_SRC c_api.cc canonical_views_clustering.cc cgnr_solver.cc + callbacks.cc compressed_col_sparse_matrix_utils.cc compressed_row_jacobian_writer.cc compressed_row_sparse_matrix.cc @@ -58,6 +59,8 @@ SET(CERES_INTERNAL_SRC dense_sparse_matrix.cc detect_structure.cc dogleg_strategy.cc + dynamic_compressed_row_jacobian_writer.cc + dynamic_compressed_row_sparse_matrix.cc evaluator.cc file.cc gradient_checking_cost_function.cc @@ -84,13 +87,14 @@ SET(CERES_INTERNAL_SRC problem.cc problem_impl.cc program.cc + reorder_program.cc residual_block.cc residual_block_utils.cc - runtime_numeric_diff_cost_function.cc schur_complement_solver.cc schur_eliminator.cc schur_jacobi_preconditioner.cc scratch_evaluate_preparer.cc + single_linkage_clustering.cc solver.cc solver_impl.cc sparse_matrix.cc @@ -98,6 +102,7 @@ SET(CERES_INTERNAL_SRC split.cc stringprintf.cc suitesparse.cc + summary_utils.cc triplet_sparse_matrix.cc trust_region_minimizer.cc trust_region_strategy.cc @@ -128,62 +133,31 @@ IF (SCHUR_SPECIALIZATIONS) FILE(GLOB CERES_INTERNAL_SCHUR_FILES generated/*.cc) ELSE (SCHUR_SPECIALIZATIONS) # Only the fully dynamic solver. The build is much faster this way. - FILE(GLOB CERES_INTERNAL_SCHUR_FILES generated/schur_eliminator_d_d_d.cc) + FILE(GLOB CERES_INTERNAL_SCHUR_FILES generated/*_d_d_d.cc) ENDIF (SCHUR_SPECIALIZATIONS) -# For Android, use the internal Glog implementation. -IF (MINIGLOG) - ADD_LIBRARY(miniglog STATIC miniglog/glog/logging.cc) - INSTALL(TARGETS miniglog - EXPORT CeresExport - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib${LIB_SUFFIX} - ARCHIVE DESTINATION lib${LIB_SUFFIX}) -ENDIF (MINIGLOG) - -SET(CERES_LIBRARY_DEPENDENCIES ${GLOG_LIB}) - -IF (GFLAGS) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${GFLAGS_LIB}) -ENDIF (GFLAGS) - -IF (SUITESPARSE_FOUND) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${SUITESPARSEQR_LIB}) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CHOLMOD_LIB}) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CCOLAMD_LIB}) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CAMD_LIB}) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${COLAMD_LIB}) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${AMD_LIB}) - IF (EXISTS ${SUITESPARSE_CONFIG_LIB}) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${SUITESPARSE_CONFIG_LIB}) - ENDIF (EXISTS ${SUITESPARSE_CONFIG_LIB}) - - IF (EXISTS ${METIS_LIB}) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${METIS_LIB}) - ENDIF (EXISTS ${METIS_LIB}) +# Build the list of dependencies for Ceres based on the current configuration. +IF (NOT MINIGLOG AND GLOG_FOUND) + LIST(APPEND CERES_LIBRARY_PUBLIC_DEPENDENCIES ${GLOG_LIBRARIES}) +ENDIF (NOT MINIGLOG AND GLOG_FOUND) - IF (TBB_FOUND) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${TBB_LIB}) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${TBB_MALLOC_LIB}) - ENDIF (TBB_FOUND) -ENDIF (SUITESPARSE_FOUND) +IF (SUITESPARSE AND SUITESPARSE_FOUND) + LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${SUITESPARSE_LIBRARIES}) +ENDIF (SUITESPARSE AND SUITESPARSE_FOUND) -IF (CXSPARSE_FOUND) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CXSPARSE_LIB}) -ENDIF (CXSPARSE_FOUND) +IF (CXSPARSE AND CXSPARSE_FOUND) + LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${CXSPARSE_LIBRARIES}) +ENDIF (CXSPARSE AND CXSPARSE_FOUND) -IF (BLAS_AND_LAPACK_FOUND) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${LAPACK_LIBRARIES}) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${BLAS_LIBRARIES}) -ENDIF (BLAS_AND_LAPACK_FOUND) - -IF (CXSPARSE_FOUND) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CXSPARSE_LIB}) -ENDIF (CXSPARSE_FOUND) +IF (BLAS_FOUND AND LAPACK_FOUND) + LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${LAPACK_LIBRARIES}) + LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${BLAS_LIBRARIES}) +ENDIF (BLAS_FOUND AND LAPACK_FOUND) IF (OPENMP_FOUND) IF (NOT MSVC) - LIST(APPEND CERES_LIBRARY_DEPENDENCIES gomp) + LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES gomp) + LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${CMAKE_THREAD_LIBS_INIT}) ENDIF (NOT MSVC) ENDIF (OPENMP_FOUND) @@ -192,12 +166,33 @@ SET(CERES_LIBRARY_SOURCE ${CERES_INTERNAL_HDRS} ${CERES_INTERNAL_SCHUR_FILES}) +# Primarily for Android, but optionally for others, compile the minimal +# glog implementation into Ceres. +IF (MINIGLOG) + LIST(APPEND CERES_LIBRARY_SOURCE miniglog/glog/logging.cc) +ENDIF (MINIGLOG) + ADD_LIBRARY(ceres ${CERES_LIBRARY_SOURCE}) SET_TARGET_PROPERTIES(ceres PROPERTIES VERSION ${CERES_VERSION} SOVERSION ${CERES_VERSION_MAJOR} ) -TARGET_LINK_LIBRARIES(ceres ${CERES_LIBRARY_DEPENDENCIES}) + +IF (BUILD_SHARED_LIBS) + # When building a shared library, mark all external libraries as + # PRIVATE so they don't show up as a dependency. + TARGET_LINK_LIBRARIES(ceres + LINK_PUBLIC ${CERES_LIBRARY_PUBLIC_DEPENDENCIES} + LINK_PRIVATE ${CERES_LIBRARY_PRIVATE_DEPENDENCIES}) +ELSE (BUILD_SHARED_LIBS) + # When building a static library, all external libraries are + # PUBLIC(default) since the user needs to link to them. + # They will be listed in CeresTargets.cmake. + SET(CERES_LIBRARY_DEPENDENCIES + ${CERES_LIBRARY_PUBLIC_DEPENDENCIES} + ${CERES_LIBRARY_PRIVATE_DEPENDENCIES}) + TARGET_LINK_LIBRARIES(ceres ${CERES_LIBRARY_DEPENDENCIES}) +ENDIF (BUILD_SHARED_LIBS) INSTALL(TARGETS ceres EXPORT CeresExport @@ -212,8 +207,15 @@ IF (BUILD_TESTING AND GFLAGS) numeric_diff_test_utils.cc test_util.cc) - TARGET_LINK_LIBRARIES(gtest ${GFLAGS_LIB} ${GLOG_LIB}) - TARGET_LINK_LIBRARIES(test_util ceres gtest ${GLOG_LIB}) + IF (MINIGLOG) + # When using miniglog, it is compiled into Ceres, thus Ceres becomes + # the library against which other libraries should link for logging. + TARGET_LINK_LIBRARIES(gtest ${GFLAGS_LIBRARIES} ceres) + TARGET_LINK_LIBRARIES(test_util ceres gtest) + ELSE (MINIGLOG) + TARGET_LINK_LIBRARIES(gtest ${GFLAGS_LIBRARIES} ${GLOG_LIBRARIES}) + TARGET_LINK_LIBRARIES(test_util ceres gtest ${GLOG_LIBRARIES}) + ENDIF (MINIGLOG) MACRO (CERES_TEST NAME) ADD_EXECUTABLE(${NAME}_test ${NAME}_test.cc) @@ -228,8 +230,8 @@ IF (BUILD_TESTING AND GFLAGS) CERES_TEST(autodiff) CERES_TEST(autodiff_cost_function) CERES_TEST(autodiff_local_parameterization) - CERES_TEST(block_random_access_crs_matrix) CERES_TEST(block_random_access_dense_matrix) + CERES_TEST(block_random_access_diagonal_matrix) CERES_TEST(block_random_access_sparse_matrix) CERES_TEST(block_sparse_matrix) CERES_TEST(c_api) @@ -241,6 +243,8 @@ IF (BUILD_TESTING AND GFLAGS) CERES_TEST(covariance) CERES_TEST(dense_sparse_matrix) CERES_TEST(dynamic_autodiff_cost_function) + CERES_TEST(dynamic_compressed_row_sparse_matrix) + CERES_TEST(dynamic_numeric_diff_cost_function) CERES_TEST(evaluator) CERES_TEST(gradient_checker) CERES_TEST(gradient_checking_cost_function) @@ -264,20 +268,23 @@ IF (BUILD_TESTING AND GFLAGS) CERES_TEST(partitioned_matrix_view) CERES_TEST(polynomial) CERES_TEST(problem) + CERES_TEST(program) + CERES_TEST(reorder_program) CERES_TEST(residual_block) CERES_TEST(residual_block_utils) CERES_TEST(rotation) - CERES_TEST(runtime_numeric_diff_cost_function) CERES_TEST(schur_complement_solver) CERES_TEST(schur_eliminator) + CERES_TEST(single_linkage_clustering) CERES_TEST(small_blas) + CERES_TEST(solver) CERES_TEST(solver_impl) # TODO(sameeragarwal): This test should ultimately be made # independent of SuiteSparse. - IF (SUITESPARSE_FOUND) + IF (SUITESPARSE AND SUITESPARSE_FOUND) CERES_TEST(compressed_col_sparse_matrix_utils) - ENDIF (SUITESPARSE_FOUND) + ENDIF (SUITESPARSE AND SUITESPARSE_FOUND) CERES_TEST(symmetric_linear_solver) CERES_TEST(triplet_sparse_matrix) |