blob: 432346fced9c61665380ca6d25dac60c2e289068 [file] [log] [blame]
Keir Mierle8ebb0732012-04-30 23:09:08 -07001# Ceres Solver - A fast non-linear least squares minimizer
2# Copyright 2010, 2011, 2012 Google Inc. All rights reserved.
3# http://code.google.com/p/ceres-solver/
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions are met:
7#
8# * Redistributions of source code must retain the above copyright notice,
9# this list of conditions and the following disclaimer.
10# * Redistributions in binary form must reproduce the above copyright notice,
11# this list of conditions and the following disclaimer in the documentation
12# and/or other materials provided with the distribution.
13# * Neither the name of Google Inc. nor the names of its contributors may be
14# used to endorse or promote products derived from this software without
15# specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27# POSSIBILITY OF SUCH DAMAGE.
28#
29# Author: keir@google.com (Keir Mierle)
30
31SET(CERES_INTERNAL_SRC
Sameer Agarwal1fdc5202012-05-12 07:29:10 -070032 array_utils.cc
Keir Mierle8ebb0732012-04-30 23:09:08 -070033 block_evaluate_preparer.cc
Keir Mierlee2a6cdc2012-05-07 06:39:56 -070034 block_jacobi_preconditioner.cc
Keir Mierle8ebb0732012-04-30 23:09:08 -070035 block_jacobian_writer.cc
36 block_random_access_dense_matrix.cc
37 block_random_access_matrix.cc
38 block_random_access_sparse_matrix.cc
39 block_sparse_matrix.cc
40 block_structure.cc
41 canonical_views_clustering.cc
Keir Mierlef7898fb2012-05-05 20:55:08 -070042 cgnr_solver.cc
Keir Mierle8ebb0732012-04-30 23:09:08 -070043 compressed_row_jacobian_writer.cc
44 compressed_row_sparse_matrix.cc
45 conditioned_cost_function.cc
46 conjugate_gradients_solver.cc
47 corrector.cc
48 dense_qr_solver.cc
49 dense_sparse_matrix.cc
50 detect_structure.cc
51 evaluator.cc
52 file.cc
53 gradient_checking_cost_function.cc
54 implicit_schur_complement.cc
55 iterative_schur_complement_solver.cc
Sameer Agarwalaa9a83c2012-05-29 17:40:17 -070056 levenberg_marquardt_strategy.cc
Keir Mierle8ebb0732012-04-30 23:09:08 -070057 linear_least_squares_problems.cc
58 linear_operator.cc
59 linear_solver.cc
60 local_parameterization.cc
61 loss_function.cc
62 normal_prior.cc
63 partitioned_matrix_view.cc
64 problem.cc
65 problem_impl.cc
66 program.cc
67 residual_block.cc
68 residual_block_utils.cc
69 runtime_numeric_diff_cost_function.cc
70 schur_complement_solver.cc
71 schur_eliminator.cc
72 schur_ordering.cc
73 scratch_evaluate_preparer.cc
74 solver.cc
75 solver_impl.cc
76 sparse_matrix.cc
77 sparse_normal_cholesky_solver.cc
78 split.cc
79 stringprintf.cc
80 suitesparse.cc
Sameer Agarwalaa9a83c2012-05-29 17:40:17 -070081 trust_region_minimizer.cc
82 trust_region_strategy.cc
Keir Mierle8ebb0732012-04-30 23:09:08 -070083 triplet_sparse_matrix.cc
84 types.cc
85 visibility_based_preconditioner.cc
86 visibility.cc
87)
88
Sameer Agarwald1146902012-05-30 01:40:22 -070089If (${PROTOBUF_FOUND})
Keir Mierle8ebb0732012-04-30 23:09:08 -070090 PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS matrix.proto)
Sameer Agarwald1146902012-05-30 01:40:22 -070091ENDIF (${PROTOBUF_FOUND})
Keir Mierle8ebb0732012-04-30 23:09:08 -070092
93# Also depend on the header files so that they appear in IDEs.
94FILE(GLOB CERES_INTERNAL_HDRS *.h)
95
96# Include the specialized schur solvers.
Sameer Agarwald1146902012-05-30 01:40:22 -070097IF (${SCHUR_SPECIALIZATIONS})
Keir Mierle8ebb0732012-04-30 23:09:08 -070098 FILE(GLOB CERES_INTERNAL_SCHUR_FILES generated/*.cc)
Sameer Agarwald1146902012-05-30 01:40:22 -070099ELSE (${SCHUR_SPECIALIZATIONS})
Keir Mierle8ebb0732012-04-30 23:09:08 -0700100 # Only the fully dynamic solver.
101 FILE(GLOB CERES_INTERNAL_SCHUR_FILES generated/schur_eliminator_d_d_d.cc)
Sameer Agarwald1146902012-05-30 01:40:22 -0700102ENDIF (${SCHUR_SPECIALIZATIONS})
Keir Mierle8ebb0732012-04-30 23:09:08 -0700103
104ADD_LIBRARY(ceres
105 ${PROTO_SRCS}
106 ${PROTO_HDRS}
107 ${CERES_INTERNAL_SRC}
108 ${CERES_INTERNAL_HDRS}
109 ${CERES_INTERNAL_SCHUR_FILES})
110
Sameer Agarwaldaa98242012-05-11 11:26:38 -0700111SET(CERES_LIBRARY_DEPENDENCIES ${GLOG_LIB})
Keir Mierle8ebb0732012-04-30 23:09:08 -0700112
Sameer Agarwald1146902012-05-30 01:40:22 -0700113IF (${GFLAGS})
Sameer Agarwaldaa98242012-05-11 11:26:38 -0700114 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${GFLAGS_LIB})
Sameer Agarwald1146902012-05-30 01:40:22 -0700115ENDIF (${GFLAGS})
Keir Mierle8ebb0732012-04-30 23:09:08 -0700116
Sameer Agarwald1146902012-05-30 01:40:22 -0700117IF (${SUITESPARSE_FOUND})
Sameer Agarwaldaa98242012-05-11 11:26:38 -0700118 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CHOLMOD_LIB})
Sameer Agarwalfcfd6772012-05-20 22:38:35 -0700119 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CCOLAMD_LIB})
Sameer Agarwaldaa98242012-05-11 11:26:38 -0700120 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CAMD_LIB})
121 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${COLAMD_LIB})
122 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${AMD_LIB})
123
124 IF (EXISTS ${METIS_LIB})
125 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${METIS_LIB})
126 ENDIF (EXISTS ${METIS_LIB})
127
128 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${LAPACK_LIB})
129
130 IF (EXISTS ${BLAS_LIB})
131 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${BLAS_LIB})
132 ENDIF (EXISTS ${BLAS_LIB})
Sameer Agarwald1146902012-05-30 01:40:22 -0700133ENDIF (${SUITESPARSE_FOUND})
Keir Mierle92d5ab52012-05-01 18:33:08 -0700134
Sameer Agarwald1146902012-05-30 01:40:22 -0700135IF (${CXSPARSE_FOUND})
Sameer Agarwalb0518732012-05-29 00:27:57 -0700136 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CXSPARSE_LIB})
Sameer Agarwald1146902012-05-30 01:40:22 -0700137ENDIF (${CXSPARSE_FOUND})
Sameer Agarwalb0518732012-05-29 00:27:57 -0700138
Sameer Agarwald1146902012-05-30 01:40:22 -0700139IF (${OPENMP_FOUND})
Sameer Agarwaldaa98242012-05-11 11:26:38 -0700140 LIST(APPEND CERES_LIBRARY_DEPENDENCIES gomp)
Sameer Agarwald1146902012-05-30 01:40:22 -0700141ENDIF (${OPENMP_FOUND})
Keir Mierle8ebb0732012-04-30 23:09:08 -0700142
Sameer Agarwald1146902012-05-30 01:40:22 -0700143IF (${PROTOBUF_FOUND})
Sameer Agarwaldaa98242012-05-11 11:26:38 -0700144 LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${PROTOBUF_LIBRARY})
Sameer Agarwald1146902012-05-30 01:40:22 -0700145ENDIF (${PROTOBUF_FOUND})
Keir Mierle8ebb0732012-04-30 23:09:08 -0700146
147TARGET_LINK_LIBRARIES(ceres ${CERES_LIBRARY_DEPENDENCIES})
148
Sameer Agarwald1146902012-05-30 01:40:22 -0700149IF (${BUILD_TESTING})
Keir Mierle8ebb0732012-04-30 23:09:08 -0700150 ADD_LIBRARY(gtest gmock_gtest_all.cc gmock_main.cc)
151 ADD_LIBRARY(test_util test_util.cc)
152 TARGET_LINK_LIBRARIES(gtest ${GFLAGS_LIB} ${GLOG_LIB})
153
154 MACRO (CERES_TEST NAME)
155 ADD_EXECUTABLE(${NAME}_test ${NAME}_test.cc)
156 TARGET_LINK_LIBRARIES(${NAME}_test test_util ceres gtest)
157 ADD_TEST(${NAME}_test
158 ${NAME}_test
159 --test_srcdir
160 ${CMAKE_SOURCE_DIR}/data)
161 ENDMACRO (CERES_TEST)
162
Sameer Agarwal1fdc5202012-05-12 07:29:10 -0700163 CERES_TEST(array_utils)
Keir Mierle8ebb0732012-04-30 23:09:08 -0700164 CERES_TEST(autodiff)
165 CERES_TEST(autodiff_cost_function)
166 CERES_TEST(block_random_access_dense_matrix)
167 CERES_TEST(block_random_access_sparse_matrix)
168 CERES_TEST(block_sparse_matrix)
169 CERES_TEST(canonical_views_clustering)
170 CERES_TEST(compressed_row_sparse_matrix)
171 CERES_TEST(conditioned_cost_function)
172 CERES_TEST(corrector)
173 CERES_TEST(dense_sparse_matrix)
174 CERES_TEST(evaluator)
175 CERES_TEST(gradient_checking_cost_function)
176 CERES_TEST(graph)
177 CERES_TEST(graph_algorithms)
178 CERES_TEST(implicit_schur_complement)
179 CERES_TEST(iterative_schur_complement_solver)
180 CERES_TEST(jet)
Sameer Agarwalaa9a83c2012-05-29 17:40:17 -0700181 CERES_TEST(levenberg_marquardt_strategy)
Keir Mierle8ebb0732012-04-30 23:09:08 -0700182 CERES_TEST(local_parameterization)
183 CERES_TEST(loss_function)
184 CERES_TEST(normal_prior)
185 CERES_TEST(numeric_diff_cost_function)
186 CERES_TEST(parameter_block)
187 CERES_TEST(partitioned_matrix_view)
188 CERES_TEST(problem)
189 CERES_TEST(residual_block)
190 CERES_TEST(residual_block_utils)
191 CERES_TEST(rotation)
192 CERES_TEST(runtime_numeric_diff_cost_function)
193 CERES_TEST(schur_complement_solver)
Sameer Agarwaldaa98242012-05-11 11:26:38 -0700194 IF (GFLAGS)
195 CERES_TEST(schur_eliminator)
196 ENDIF (GFLAGS)
Keir Mierle8ebb0732012-04-30 23:09:08 -0700197 CERES_TEST(schur_ordering)
198 CERES_TEST(solver_impl)
Sameer Agarwal7a3c43b2012-06-05 23:10:59 -0700199 CERES_TEST(suitesparse)
Keir Mierle8ebb0732012-04-30 23:09:08 -0700200 CERES_TEST(symmetric_linear_solver)
Keir Mierle8ebb0732012-04-30 23:09:08 -0700201 CERES_TEST(triplet_sparse_matrix)
Sameer Agarwalaa9a83c2012-05-29 17:40:17 -0700202 CERES_TEST(trust_region_minimizer)
Keir Mierle8ebb0732012-04-30 23:09:08 -0700203 CERES_TEST(unsymmetric_linear_solver)
204 CERES_TEST(visibility)
Sameer Agarwaldaa98242012-05-11 11:26:38 -0700205 IF (GFLAGS)
206 CERES_TEST(visibility_based_preconditioner)
207 ENDIF (GFLAGS)
Sameer Agarwalb0518732012-05-29 00:27:57 -0700208
209 # Large end to end test for the entire solver.
Sameer Agarwald1146902012-05-30 01:40:22 -0700210 IF (${GFLAGS})
Sameer Agarwalb0518732012-05-29 00:27:57 -0700211 CERES_TEST(system)
Sameer Agarwald1146902012-05-30 01:40:22 -0700212 ENDIF (${GFLAGS})
213ENDIF (${BUILD_TESTING})