|  | @@ -0,0 +1,228 @@
 | 
	
		
			
				|  |  | +# Ceres Solver - A fast non-linear least squares minimizer
 | 
	
		
			
				|  |  | +# Copyright 2018 Google Inc. All rights reserved.
 | 
	
		
			
				|  |  | +# http://ceres-solver.org/
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# Redistribution and use in source and binary forms, with or without
 | 
	
		
			
				|  |  | +# modification, are permitted provided that the following conditions are met:
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# * Redistributions of source code must retain the above copyright notice,
 | 
	
		
			
				|  |  | +#   this list of conditions and the following disclaimer.
 | 
	
		
			
				|  |  | +# * Redistributions in binary form must reproduce the above copyright notice,
 | 
	
		
			
				|  |  | +#   this list of conditions and the following disclaimer in the documentation
 | 
	
		
			
				|  |  | +#   and/or other materials provided with the distribution.
 | 
	
		
			
				|  |  | +# * Neither the name of Google Inc. nor the names of its contributors may be
 | 
	
		
			
				|  |  | +#   used to endorse or promote products derived from this software without
 | 
	
		
			
				|  |  | +#   specific prior written permission.
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
	
		
			
				|  |  | +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
	
		
			
				|  |  | +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
	
		
			
				|  |  | +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 | 
	
		
			
				|  |  | +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
	
		
			
				|  |  | +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
	
		
			
				|  |  | +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
	
		
			
				|  |  | +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
	
		
			
				|  |  | +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
	
		
			
				|  |  | +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
	
		
			
				|  |  | +# POSSIBILITY OF SUCH DAMAGE.
 | 
	
		
			
				|  |  | +#
 | 
	
		
			
				|  |  | +# Support for building Ceres Solver with a specific configuration.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +CERES_SRCS = ["internal/ceres/" + filename for filename in [
 | 
	
		
			
				|  |  | +    "array_utils.cc",
 | 
	
		
			
				|  |  | +    "blas.cc",
 | 
	
		
			
				|  |  | +    "block_evaluate_preparer.cc",
 | 
	
		
			
				|  |  | +    "block_jacobian_writer.cc",
 | 
	
		
			
				|  |  | +    "block_jacobi_preconditioner.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",
 | 
	
		
			
				|  |  | +    "block_structure.cc",
 | 
	
		
			
				|  |  | +    "c_api.cc",
 | 
	
		
			
				|  |  | +    "callbacks.cc",
 | 
	
		
			
				|  |  | +    "canonical_views_clustering.cc",
 | 
	
		
			
				|  |  | +    "cgnr_solver.cc",
 | 
	
		
			
				|  |  | +    "compressed_col_sparse_matrix_utils.cc",
 | 
	
		
			
				|  |  | +    "compressed_row_jacobian_writer.cc",
 | 
	
		
			
				|  |  | +    "compressed_row_sparse_matrix.cc",
 | 
	
		
			
				|  |  | +    "conditioned_cost_function.cc",
 | 
	
		
			
				|  |  | +    "conjugate_gradients_solver.cc",
 | 
	
		
			
				|  |  | +    "coordinate_descent_minimizer.cc",
 | 
	
		
			
				|  |  | +    "corrector.cc",
 | 
	
		
			
				|  |  | +    "covariance.cc",
 | 
	
		
			
				|  |  | +    "covariance_impl.cc",
 | 
	
		
			
				|  |  | +    "dense_normal_cholesky_solver.cc",
 | 
	
		
			
				|  |  | +    "dense_qr_solver.cc",
 | 
	
		
			
				|  |  | +    "dense_sparse_matrix.cc",
 | 
	
		
			
				|  |  | +    "detect_structure.cc",
 | 
	
		
			
				|  |  | +    "dogleg_strategy.cc",
 | 
	
		
			
				|  |  | +    "dynamic_compressed_row_jacobian_writer.cc",
 | 
	
		
			
				|  |  | +    "dynamic_compressed_row_sparse_matrix.cc",
 | 
	
		
			
				|  |  | +    "dynamic_sparse_normal_cholesky_solver.cc",
 | 
	
		
			
				|  |  | +    "eigensparse.cc",
 | 
	
		
			
				|  |  | +    "evaluator.cc",
 | 
	
		
			
				|  |  | +    "file.cc",
 | 
	
		
			
				|  |  | +    "function_sample.cc",
 | 
	
		
			
				|  |  | +    "gradient_checker.cc",
 | 
	
		
			
				|  |  | +    "gradient_checking_cost_function.cc",
 | 
	
		
			
				|  |  | +    "gradient_problem.cc",
 | 
	
		
			
				|  |  | +    "gradient_problem_solver.cc",
 | 
	
		
			
				|  |  | +    "is_close.cc",
 | 
	
		
			
				|  |  | +    "implicit_schur_complement.cc",
 | 
	
		
			
				|  |  | +    "inner_product_computer.cc",
 | 
	
		
			
				|  |  | +    "iterative_schur_complement_solver.cc",
 | 
	
		
			
				|  |  | +    "lapack.cc",
 | 
	
		
			
				|  |  | +    "levenberg_marquardt_strategy.cc",
 | 
	
		
			
				|  |  | +    "line_search.cc",
 | 
	
		
			
				|  |  | +    "line_search_direction.cc",
 | 
	
		
			
				|  |  | +    "line_search_minimizer.cc",
 | 
	
		
			
				|  |  | +    "linear_least_squares_problems.cc",
 | 
	
		
			
				|  |  | +    "linear_operator.cc",
 | 
	
		
			
				|  |  | +    "line_search_preprocessor.cc",
 | 
	
		
			
				|  |  | +    "linear_solver.cc",
 | 
	
		
			
				|  |  | +    "local_parameterization.cc",
 | 
	
		
			
				|  |  | +    "loss_function.cc",
 | 
	
		
			
				|  |  | +    "low_rank_inverse_hessian.cc",
 | 
	
		
			
				|  |  | +    "minimizer.cc",
 | 
	
		
			
				|  |  | +    "normal_prior.cc",
 | 
	
		
			
				|  |  | +    "parameter_block_ordering.cc",
 | 
	
		
			
				|  |  | +    "partitioned_matrix_view.cc",
 | 
	
		
			
				|  |  | +    "polynomial.cc",
 | 
	
		
			
				|  |  | +    "preconditioner.cc",
 | 
	
		
			
				|  |  | +    "preprocessor.cc",
 | 
	
		
			
				|  |  | +    "problem.cc",
 | 
	
		
			
				|  |  | +    "problem_impl.cc",
 | 
	
		
			
				|  |  | +    "program.cc",
 | 
	
		
			
				|  |  | +    "reorder_program.cc",
 | 
	
		
			
				|  |  | +    "residual_block.cc",
 | 
	
		
			
				|  |  | +    "residual_block_utils.cc",
 | 
	
		
			
				|  |  | +    "schur_complement_solver.cc",
 | 
	
		
			
				|  |  | +    "schur_eliminator.cc",
 | 
	
		
			
				|  |  | +    "schur_jacobi_preconditioner.cc",
 | 
	
		
			
				|  |  | +    "schur_templates.cc",
 | 
	
		
			
				|  |  | +    "scratch_evaluate_preparer.cc",
 | 
	
		
			
				|  |  | +    "single_linkage_clustering.cc",
 | 
	
		
			
				|  |  | +    "solver.cc",
 | 
	
		
			
				|  |  | +    "solver_utils.cc",
 | 
	
		
			
				|  |  | +    "sparse_cholesky.cc",
 | 
	
		
			
				|  |  | +    "sparse_matrix.cc",
 | 
	
		
			
				|  |  | +    "sparse_normal_cholesky_solver.cc",
 | 
	
		
			
				|  |  | +    "split.cc",
 | 
	
		
			
				|  |  | +    "stringprintf.cc",
 | 
	
		
			
				|  |  | +    "suitesparse.cc",
 | 
	
		
			
				|  |  | +    "thread_token_provider.cc",
 | 
	
		
			
				|  |  | +    "triplet_sparse_matrix.cc",
 | 
	
		
			
				|  |  | +    "trust_region_minimizer.cc",
 | 
	
		
			
				|  |  | +    "trust_region_preprocessor.cc",
 | 
	
		
			
				|  |  | +    "trust_region_step_evaluator.cc",
 | 
	
		
			
				|  |  | +    "trust_region_strategy.cc",
 | 
	
		
			
				|  |  | +    "types.cc",
 | 
	
		
			
				|  |  | +    "visibility_based_preconditioner.cc",
 | 
	
		
			
				|  |  | +    "visibility.cc",
 | 
	
		
			
				|  |  | +    "wall_time.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_d_d_d.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_2_2.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_2_3.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_2_4.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_2_d.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_3_3.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_3_4.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_3_6.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_3_9.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_3_d.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_4_3.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_4_4.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_4_6.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_4_8.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_4_9.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_4_d.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_2_d_d.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_4_4_2.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_4_4_3.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_4_4_4.cc",
 | 
	
		
			
				|  |  | +    "generated/schur_eliminator_4_4_d.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_d_d_d.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_2_2.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_2_3.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_2_4.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_2_d.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_3_3.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_3_4.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_3_6.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_3_9.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_3_d.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_4_3.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_4_4.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_4_6.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_4_8.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_4_9.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_4_d.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_2_d_d.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_4_4_2.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_4_4_3.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_4_4_4.cc",
 | 
	
		
			
				|  |  | +    "generated/partitioned_matrix_view_4_4_d.cc",
 | 
	
		
			
				|  |  | +]]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# TODO(rodrigoq): add support to configure Ceres into various permutations,
 | 
	
		
			
				|  |  | +# like SuiteSparse or not, threading or not, glog or not, and so on.
 | 
	
		
			
				|  |  | +# See https://github.com/ceres-solver/ceres-solver/issues/335.
 | 
	
		
			
				|  |  | +def ceres_library(name):
 | 
	
		
			
				|  |  | +    # The path to internal/ depends on whether Ceres is the main workspace or
 | 
	
		
			
				|  |  | +    # an external repository.
 | 
	
		
			
				|  |  | +    if native.repository_name() != '@':
 | 
	
		
			
				|  |  | +        internal = 'external/%s/internal' % native.repository_name().lstrip('@')
 | 
	
		
			
				|  |  | +    else:
 | 
	
		
			
				|  |  | +        internal = 'internal'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    native.cc_library(
 | 
	
		
			
				|  |  | +        name = name,
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        # Internal sources, options, and dependencies.
 | 
	
		
			
				|  |  | +        srcs = CERES_SRCS + native.glob([
 | 
	
		
			
				|  |  | +            "include/ceres/internal/*.h",
 | 
	
		
			
				|  |  | +        ]) + native.glob([
 | 
	
		
			
				|  |  | +            "internal/ceres/*.h",
 | 
	
		
			
				|  |  | +        ]),
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        # These headers are made available to other targets.
 | 
	
		
			
				|  |  | +        hdrs =
 | 
	
		
			
				|  |  | +            native.glob(["include/ceres/*.h"]) + native.glob([
 | 
	
		
			
				|  |  | +                "include/ceres/internal/*.h",
 | 
	
		
			
				|  |  | +            ]) +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            # This is an empty config, since the Bazel-based build does not
 | 
	
		
			
				|  |  | +            # generate a config.h from config.h.in. This is fine, since Bazel
 | 
	
		
			
				|  |  | +            # properly handles propagating -D defines to dependent targets.
 | 
	
		
			
				|  |  | +            native.glob([
 | 
	
		
			
				|  |  | +                "config/ceres/internal/config.h",
 | 
	
		
			
				|  |  | +            ]),
 | 
	
		
			
				|  |  | +        copts = [
 | 
	
		
			
				|  |  | +            "-I" + internal,
 | 
	
		
			
				|  |  | +            "-Wno-sign-compare",
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        # These include directories and defines are propagated to other targets
 | 
	
		
			
				|  |  | +        # depending on Ceres.
 | 
	
		
			
				|  |  | +        # TODO(keir): These defines are placeholders for now to facilitate getting
 | 
	
		
			
				|  |  | +        # started with a Bazel build. However, these should become configurable as
 | 
	
		
			
				|  |  | +        # part of a Skylark Ceres target macro.
 | 
	
		
			
				|  |  | +        defines = [
 | 
	
		
			
				|  |  | +            "CERES_NO_SUITESPARSE",
 | 
	
		
			
				|  |  | +            "CERES_NO_CXSPARSE",
 | 
	
		
			
				|  |  | +            "CERES_NO_THREADS",
 | 
	
		
			
				|  |  | +            "CERES_NO_LAPACK",
 | 
	
		
			
				|  |  | +            "CERES_STD_UNORDERED_MAP",
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +        includes = [
 | 
	
		
			
				|  |  | +            "config",
 | 
	
		
			
				|  |  | +            "include",
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +        visibility = ["//visibility:public"],
 | 
	
		
			
				|  |  | +        deps = [
 | 
	
		
			
				|  |  | +            "@com_github_eigen_eigen//:eigen",
 | 
	
		
			
				|  |  | +            "@com_github_google_glog//:glog",
 | 
	
		
			
				|  |  | +        ],
 | 
	
		
			
				|  |  | +    )
 |