123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- # 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 [
- "accelerate_sparse.cc",
- "array_utils.cc",
- "block_evaluate_preparer.cc",
- "block_jacobi_preconditioner.cc",
- "block_jacobian_writer.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",
- "context.cc",
- "context_impl.cc",
- "coordinate_descent_minimizer.cc",
- "corrector.cc",
- "cost_function.cc",
- "covariance.cc",
- "covariance_impl.cc",
- "dense_cholesky.cc",
- "dense_normal_cholesky_solver.cc",
- "dense_qr.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",
- "evaluation_callback.cc",
- "evaluator.cc",
- "file.cc",
- "first_order_function.cc",
- "float_suitesparse.cc",
- "function_sample.cc",
- "gradient_checker.cc",
- "gradient_checking_cost_function.cc",
- "gradient_problem.cc",
- "gradient_problem_solver.cc",
- "implicit_schur_complement.cc",
- "inner_product_computer.cc",
- "is_close.cc",
- "iteration_callback.cc",
- "iterative_refiner.cc",
- "iterative_schur_complement_solver.cc",
- "levenberg_marquardt_strategy.cc",
- "line_search.cc",
- "line_search_direction.cc",
- "line_search_minimizer.cc",
- "line_search_preprocessor.cc",
- "linear_least_squares_problems.cc",
- "linear_operator.cc",
- "linear_solver.cc",
- "loss_function.cc",
- "low_rank_inverse_hessian.cc",
- "manifold.cc",
- "minimizer.cc",
- "normal_prior.cc",
- "parallel_for.cc",
- "parallel_invoke.cc",
- "parallel_utils.cc",
- "parameter_block_ordering.cc",
- "partitioned_matrix_view.cc",
- "polynomial.cc",
- "power_series_expansion_preconditioner.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",
- "stringprintf.cc",
- "subset_preconditioner.cc",
- "suitesparse.cc",
- "thread_pool.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",
- ]]
- # 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,
- restrict_schur_specializations=False):
- # 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'
- # The fixed-size Schur eliminator template instantiations incur a large
- # binary size penalty, and are slow to compile, so support disabling them.
- schur_eliminator_copts = []
- if restrict_schur_specializations:
- schur_eliminator_copts.append("-DCERES_RESTRICT_SCHUR_SPECIALIZATION")
- schur_sources = [
- "internal/ceres/generated/schur_eliminator_d_d_d.cc",
- "internal/ceres/generated/partitioned_matrix_view_d_d_d.cc",
- ]
- else:
- schur_sources = native.glob(["internal/ceres/generated/*.cc"])
- native.cc_library(
- name = name,
- # Internal sources, options, and dependencies.
- srcs = CERES_SRCS + schur_sources + 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 and export, since the
- # Bazel-based build does not generate a
- # config.h/export.h. This is fine, since Bazel properly
- # handles propagating -D defines to dependent targets.
- native.glob([
- "config/ceres/internal/config.h",
- "config/ceres/internal/export.h",
- ]),
- copts = [
- "-I" + internal,
- "-Wunused-parameter",
- "-Wno-sign-compare",
- ] + schur_eliminator_copts,
- # 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.
- # https://github.com/ceres-solver/ceres-solver/issues/396
- defines = [
- "CERES_EXPORT=",
- "CERES_NO_ACCELERATE_SPARSE",
- "CERES_NO_CHOLMOD_PARTITION",
- "CERES_NO_CUDA",
- "CERES_NO_EIGEN_METIS",
- "CERES_NO_EXPORT=",
- "CERES_NO_LAPACK",
- "CERES_NO_SUITESPARSE",
- "CERES_USE_EIGEN_SPARSE",
- ],
- includes = [
- "config",
- "include",
- ],
- visibility = ["//visibility:public"],
- deps = [
- "@com_gitlab_libeigen_eigen//:eigen",
- "@com_github_google_glog//:glog",
- ],
- )
|