mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-29 08:34:37 +08:00
Create ceres_library() and use to provide :ceres
This doesn't add any configurability to ceres_library() yet, but it does correctly determine the include path for use with -I, allowing this to be used as a dependency from other workspaces. Change-Id: I223b6e63c2ea82ab7f552337f78fffd54f20b0e0
This commit is contained in:
+228
@@ -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",
|
||||
],
|
||||
)
|
||||
Reference in New Issue
Block a user