123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- # 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.
- #
- # Author: mierle@gmail.com (Keir Mierle)
- #
- # These are Bazel rules to build Ceres. It's currently in Alpha state, and does
- # not support parameterization around threading choice or sparse backends.
- load("//:bazel/ceres.bzl", "ceres_library")
- ceres_library(
- name = "ceres",
- restrict_schur_specializations = False,
- )
- cc_library(
- name = "test_util",
- srcs = ["internal/ceres/" + x for x in [
- "evaluator_test_utils.cc",
- "numeric_diff_test_utils.cc",
- "test_util.cc",
- "gmock_gtest_all.cc",
- "gmock_main.cc",
- "gmock/gmock.h",
- "gmock/mock-log.h",
- "gtest/gtest.h",
- ]],
- hdrs = [
- "internal/ceres/gmock/gmock.h",
- "internal/ceres/gmock/mock-log.h",
- "internal/ceres/gtest/gtest.h",
- ],
- copts = [
- "-Wno-sign-compare",
- "-DCERES_TEST_SRCDIR_SUFFIX=\\\"data/\\\"",
- ],
- includes = [
- "internal",
- "internal/ceres",
- ],
- deps = [
- "//:ceres",
- "@com_github_gflags_gflags//:gflags",
- ],
- )
- CERES_TESTS = [
- "array_utils",
- "autodiff_cost_function",
- "autodiff_manifold",
- "autodiff",
- "block_jacobi_preconditioner",
- "block_random_access_dense_matrix",
- "block_random_access_diagonal_matrix",
- "block_random_access_sparse_matrix",
- "block_sparse_matrix",
- "canonical_views_clustering",
- "c_api",
- "compressed_col_sparse_matrix_utils",
- "compressed_row_sparse_matrix",
- "concurrent_queue",
- "conditioned_cost_function",
- "conjugate_gradients_solver",
- "corrector",
- "cost_function_to_functor",
- "covariance",
- "cubic_interpolation",
- "dense_cholesky",
- "dense_linear_solver",
- "dense_sparse_matrix",
- "detect_structure",
- "dogleg_strategy",
- "dynamic_autodiff_cost_function",
- "dynamic_compressed_row_sparse_matrix",
- "dynamic_numeric_diff_cost_function",
- "dynamic_sparse_normal_cholesky_solver",
- "dynamic_sparsity",
- "evaluation_callback",
- "evaluator",
- "gradient_checker",
- "gradient_checking_cost_function",
- "gradient_problem_solver",
- "gradient_problem",
- "graph_algorithms",
- "graph",
- "householder_vector",
- "implicit_schur_complement",
- "inner_product_computer",
- "invert_psd_matrix",
- "is_close",
- "iterative_refiner",
- "iterative_schur_complement_solver",
- "jet",
- "levenberg_marquardt_strategy",
- "line_search_minimizer",
- "line_search_preprocessor",
- "loss_function",
- "minimizer",
- "normal_prior",
- "numeric_diff_cost_function",
- "ordered_groups",
- "parallel_for",
- "parallel_utils",
- "parameter_block_ordering",
- "parameter_block",
- "partitioned_matrix_view",
- "polynomial",
- "problem",
- "program",
- "reorder_program",
- "residual_block",
- "residual_block_utils",
- "rotation",
- "schur_complement_solver",
- "schur_eliminator",
- "single_linkage_clustering",
- "small_blas",
- "solver",
- "sparse_cholesky",
- "sparse_normal_cholesky_solver",
- "subset_preconditioner",
- "system",
- "thread_pool",
- "tiny_solver_autodiff_function",
- "tiny_solver_cost_function_adapter",
- "tiny_solver",
- "triplet_sparse_matrix",
- "trust_region_minimizer",
- "trust_region_preprocessor",
- "visibility_based_preconditioner",
- "visibility",
- ]
- TEST_COPTS = [
- # Needed to silence GFlags complaints.
- "-Wno-sign-compare",
- # These two warnings don't work well in conjunction with GMock, and
- # trigger incorrectly on parts of rotation_test. For now, disable them,
- # but in the future disable these warnings only for rotation_test.
- # TODO(keir): When the tests are macro-ified, apply these selectively.
- "-Wno-address",
- ]
- TEST_DEPS = [
- "//:ceres",
- "//:test_util",
- "@com_gitlab_libeigen_eigen//:eigen",
- "@com_github_gflags_gflags//:gflags",
- ]
- # Instantiate all the tests with a template.
- [cc_test(
- name = test_name + "_test",
- timeout = "short",
- srcs = ["internal/ceres/" + test_name + "_test.cc"],
- copts = TEST_COPTS,
- deps = TEST_DEPS,
- ) for test_name in CERES_TESTS]
- # Instantiate all the bundle adjustment tests. These are separate to
- # parallelize the execution of the tests; otherwise the tests take a long time.
- #
- # Note: While it is possible to run the Python script to generate the .cc files
- # as part of the build, it introduces an undesirable build-time Python
- # dependency that we'd prefer to avoid.
- [cc_test(
- name = test_filename.split("/")[-1][:-3], # Remove .cc.
- timeout = "long",
- srcs = [test_filename],
- copts = TEST_COPTS,
- # This is the data set that is bundled for the testing.
- data = [":data/problem-16-22106-pre.txt"],
- deps = TEST_DEPS,
- ) for test_filename in glob([
- "internal/ceres/generated_bundle_adjustment_tests/*_test.cc",
- ])]
- # Build the benchmarks.
- [cc_binary(
- name = benchmark_name,
- srcs = ["internal/ceres/" + benchmark_name + ".cc"],
- copts = TEST_COPTS,
- deps = TEST_DEPS + ["@com_github_google_benchmark//:benchmark"],
- ) for benchmark_name in [
- "small_blas_gemm_benchmark",
- "small_blas_gemv_benchmark",
- ]]
|