mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-29 16:40:38 +08:00
Simplify symbol export
Currently, the logic for exporting symbols is rather complicated: when tests are enabled internal symbols are exported in addition to the public symbols. Such logic causes several problems. (1) Test binaries link against a Ceres build that is different from the final release since fewer optimizations are applied if more symbols are exported. (2) Also, some toolchains hide symbols by default breaking the existing logic eventually causing linker errors. Since internal symbols are not intended to be used outside of the project, we can compile them into object files and use exactly the same binary code both for the final build and the tests without relying on conditionals. By default, all symbols are now hidden unless annotated as public. Internal symbols are explicitly marked as not being exported in case users chose not to hide symbols by default. Change-Id: I589dd10be2f6f438508783cf99d141af0120057b
This commit is contained in:
+4
-10
@@ -501,12 +501,6 @@ endif()
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
message("-- Building Ceres as a shared library.")
|
||||
# The CERES_BUILDING_SHARED_LIBRARY compile definition is NOT stored in
|
||||
# CERES_COMPILE_OPTIONS as it must only be defined when Ceres is compiled
|
||||
# not when it is used as it controls the CERES_EXPORT macro which provides
|
||||
# symbol import/export support.
|
||||
add_definitions(-DCERES_BUILDING_SHARED_LIBRARY)
|
||||
list(APPEND CERES_COMPILE_OPTIONS CERES_USING_SHARED_LIBRARY)
|
||||
else (BUILD_SHARED_LIBS)
|
||||
message("-- Building Ceres as a static library.")
|
||||
endif (BUILD_SHARED_LIBS)
|
||||
@@ -672,7 +666,7 @@ add_compile_options(
|
||||
list(REMOVE_DUPLICATES CERES_COMPILE_OPTIONS)
|
||||
include(CreateCeresConfig)
|
||||
create_ceres_config("${CERES_COMPILE_OPTIONS}"
|
||||
${Ceres_BINARY_DIR}/config/ceres/internal)
|
||||
${Ceres_BINARY_DIR}/include/ceres/internal)
|
||||
|
||||
add_subdirectory(internal/ceres)
|
||||
|
||||
@@ -707,9 +701,9 @@ file(GLOB CERES_PUBLIC_INTERNAL_HDRS ${Ceres_SOURCE_DIR}/include/ceres/internal/
|
||||
install(FILES ${CERES_PUBLIC_INTERNAL_HDRS} DESTINATION include/ceres/internal)
|
||||
|
||||
# Also setup installation of Ceres config.h configured with the current
|
||||
# build options into the installed headers directory.
|
||||
install(FILES ${Ceres_BINARY_DIR}/config/ceres/internal/config.h
|
||||
DESTINATION include/ceres/internal)
|
||||
# build options and export.h into the installed headers directory.
|
||||
install(DIRECTORY ${Ceres_BINARY_DIR}/include/
|
||||
DESTINATION include)
|
||||
|
||||
if (MINIGLOG)
|
||||
# Install miniglog header if being used as logging #includes appear in
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Ceres Solver - A fast non-linear least squares minimizer
|
||||
# Copyright 2015 Google Inc. All rights reserved.
|
||||
# Copyright 2022 Google Inc. All rights reserved.
|
||||
# http://ceres-solver.org/
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
|
||||
+35
-4
@@ -1,5 +1,5 @@
|
||||
// Ceres Solver - A fast non-linear least squares minimizer
|
||||
// Copyright 2015 Google Inc. All rights reserved.
|
||||
// Copyright 2022 Google Inc. All rights reserved.
|
||||
// http://ceres-solver.org/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
@@ -81,12 +81,43 @@
|
||||
// If defined Ceres was compiled with modern C++ multithreading.
|
||||
@CERES_USE_CXX_THREADS@
|
||||
|
||||
// If defined, Ceres was built as a shared library.
|
||||
@CERES_USING_SHARED_LIBRARY@
|
||||
|
||||
// If defined, Ceres was compiled with a version MSVC >= 2005 which
|
||||
// deprecated the standard POSIX names for bessel functions, replacing them
|
||||
// with underscore prefixed versions (e.g. j0() -> _j0()).
|
||||
@CERES_MSVC_USE_UNDERSCORE_PREFIXED_BESSEL_FUNCTIONS@
|
||||
|
||||
#if defined(CERES_USE_OPENMP)
|
||||
#if defined(CERES_USE_CXX_THREADS) || defined(CERES_NO_THREADS)
|
||||
#error CERES_USE_OPENMP is mutually exclusive to CERES_USE_CXX_THREADS and CERES_NO_THREADS
|
||||
#endif
|
||||
#elif defined(CERES_USE_CXX_THREADS)
|
||||
#if defined(CERES_USE_OPENMP) || defined(CERES_NO_THREADS)
|
||||
#error CERES_USE_CXX_THREADS is mutually exclusive to CERES_USE_OPENMP, CERES_USE_CXX_THREADS and CERES_NO_THREADS
|
||||
#endif
|
||||
#elif defined(CERES_NO_THREADS)
|
||||
#if defined(CERES_USE_OPENMP) || defined(CERES_USE_CXX_THREADS)
|
||||
#error CERES_NO_THREADS is mutually exclusive to CERES_USE_OPENMP and CERES_USE_CXX_THREADS
|
||||
#endif
|
||||
#else
|
||||
# error One of CERES_USE_OPENMP, CERES_USE_CXX_THREADS or CERES_NO_THREADS must be defined.
|
||||
#endif
|
||||
|
||||
// CERES_NO_SPARSE should be automatically defined by config.h if Ceres was
|
||||
// compiled without any sparse back-end. Verify that it has not subsequently
|
||||
// been inconsistently redefined.
|
||||
#if defined(CERES_NO_SPARSE)
|
||||
#if !defined(CERES_NO_SUITESPARSE)
|
||||
#error CERES_NO_SPARSE requires CERES_NO_SUITESPARSE.
|
||||
#endif
|
||||
#if !defined(CERES_NO_CXSPARSE)
|
||||
#error CERES_NO_SPARSE requires CERES_NO_CXSPARSE
|
||||
#endif
|
||||
#if !defined(CERES_NO_ACCELERATE_SPARSE)
|
||||
#error CERES_NO_SPARSE requires CERES_NO_ACCELERATE_SPARSE
|
||||
#endif
|
||||
#if defined(CERES_USE_EIGEN_SPARSE)
|
||||
#error CERES_NO_SPARSE requires !CERES_USE_EIGEN_SPARSE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // CERES_PUBLIC_INTERNAL_CONFIG_H_
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
#define CERES_PUBLIC_C_API_H_
|
||||
|
||||
// clang-format off
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
// clang-format on
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#ifndef CERES_PUBLIC_CONTEXT_H_
|
||||
#define CERES_PUBLIC_CONTEXT_H_
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace ceres {
|
||||
// Problems, either serially or in parallel. When using it with multiple
|
||||
// Problems at the same time, they may end up contending for resources
|
||||
// (e.g. threads) managed by the Context.
|
||||
class CERES_EXPORT_INTERNAL Context {
|
||||
class CERES_NO_EXPORT Context {
|
||||
public:
|
||||
Context();
|
||||
Context(const Context&) = delete;
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
|
||||
@@ -94,9 +94,9 @@
|
||||
|
||||
#include "ceres/cost_function.h"
|
||||
#include "ceres/dynamic_cost_function_to_functor.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/internal/fixed_array.h"
|
||||
#include "ceres/internal/parameter_dims.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/types.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/types.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#define CERES_PUBLIC_CUBIC_INTERPOLATION_H_
|
||||
|
||||
#include "Eigen/Core"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#define CERES_PUBLIC_DYNAMIC_COST_FUNCTION_H_
|
||||
|
||||
#include "ceres/cost_function.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -52,4 +53,6 @@ class CERES_EXPORT DynamicCostFunction : public CostFunction {
|
||||
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_PUBLIC_DYNAMIC_COST_FUNCTION_H_
|
||||
|
||||
@@ -37,8 +37,9 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/dynamic_cost_function.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/internal/fixed_array.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -101,7 +102,7 @@ namespace ceres {
|
||||
// private:
|
||||
// DynamicCostFunctionToFunctor intrinsic_projection_;
|
||||
// };
|
||||
class DynamicCostFunctionToFunctor {
|
||||
class CERES_EXPORT DynamicCostFunctionToFunctor {
|
||||
public:
|
||||
// Takes ownership of cost_function.
|
||||
explicit DynamicCostFunctionToFunctor(CostFunction* cost_function)
|
||||
@@ -188,4 +189,6 @@ class DynamicCostFunctionToFunctor {
|
||||
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_PUBLIC_DYNAMIC_COST_FUNCTION_TO_FUNCTOR_H_
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#ifndef CERES_PUBLIC_EVALUATION_CALLBACK_H_
|
||||
#define CERES_PUBLIC_EVALUATION_CALLBACK_H_
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#ifndef CERES_PUBLIC_FIRST_ORDER_FUNCTION_H_
|
||||
#define CERES_PUBLIC_FIRST_ORDER_FUNCTION_H_
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
|
||||
@@ -40,7 +40,9 @@
|
||||
|
||||
#include "ceres/cost_function.h"
|
||||
#include "ceres/dynamic_numeric_diff_cost_function.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/eigen.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/internal/fixed_array.h"
|
||||
#include "ceres/local_parameterization.h"
|
||||
#include "ceres/manifold.h"
|
||||
@@ -182,4 +184,6 @@ class CERES_EXPORT GradientChecker {
|
||||
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_PUBLIC_GRADIENT_CHECKER_H_
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/first_order_function.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/local_parameterization.h"
|
||||
#include "ceres/manifold.h"
|
||||
|
||||
@@ -179,4 +180,6 @@ class CERES_EXPORT GradientProblem {
|
||||
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_PUBLIC_GRADIENT_PROBLEM_H_
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/iteration_callback.h"
|
||||
#include "ceres/types.h"
|
||||
|
||||
@@ -140,9 +140,8 @@
|
||||
#ifndef CERES_PUBLIC_INTERNAL_AUTODIFF_H_
|
||||
#define CERES_PUBLIC_INTERNAL_AUTODIFF_H_
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include <array>
|
||||
#include <cstddef>
|
||||
#include <utility>
|
||||
|
||||
#include "ceres/internal/array_selector.h"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Ceres Solver - A fast non-linear least squares minimizer
|
||||
// Copyright 2015 Google Inc. All rights reserved.
|
||||
// Copyright 2022 Google Inc. All rights reserved.
|
||||
// http://ceres-solver.org/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
@@ -31,43 +31,6 @@
|
||||
#ifndef CERES_PUBLIC_INTERNAL_PORT_H_
|
||||
#define CERES_PUBLIC_INTERNAL_PORT_H_
|
||||
|
||||
// This file needs to compile as c code.
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#if defined(CERES_USE_OPENMP)
|
||||
#if defined(CERES_USE_CXX_THREADS) || defined(CERES_NO_THREADS)
|
||||
#error CERES_USE_OPENMP is mutually exclusive to CERES_USE_CXX_THREADS and CERES_NO_THREADS
|
||||
#endif
|
||||
#elif defined(CERES_USE_CXX_THREADS)
|
||||
#if defined(CERES_USE_OPENMP) || defined(CERES_NO_THREADS)
|
||||
#error CERES_USE_CXX_THREADS is mutually exclusive to CERES_USE_OPENMP, CERES_USE_CXX_THREADS and CERES_NO_THREADS
|
||||
#endif
|
||||
#elif defined(CERES_NO_THREADS)
|
||||
#if defined(CERES_USE_OPENMP) || defined(CERES_USE_CXX_THREADS)
|
||||
#error CERES_NO_THREADS is mutually exclusive to CERES_USE_OPENMP and CERES_USE_CXX_THREADS
|
||||
#endif
|
||||
#else
|
||||
# error One of CERES_USE_OPENMP, CERES_USE_CXX_THREADS or CERES_NO_THREADS must be defined.
|
||||
#endif
|
||||
|
||||
// CERES_NO_SPARSE should be automatically defined by config.h if Ceres was
|
||||
// compiled without any sparse back-end. Verify that it has not subsequently
|
||||
// been inconsistently redefined.
|
||||
#if defined(CERES_NO_SPARSE)
|
||||
#if !defined(CERES_NO_SUITESPARSE)
|
||||
#error CERES_NO_SPARSE requires CERES_NO_SUITESPARSE.
|
||||
#endif
|
||||
#if !defined(CERES_NO_CXSPARSE)
|
||||
#error CERES_NO_SPARSE requires CERES_NO_CXSPARSE
|
||||
#endif
|
||||
#if !defined(CERES_NO_ACCELERATE_SPARSE)
|
||||
#error CERES_NO_SPARSE requires CERES_NO_ACCELERATE_SPARSE
|
||||
#endif
|
||||
#if defined(CERES_USE_EIGEN_SPARSE)
|
||||
#error CERES_NO_SPARSE requires !CERES_USE_EIGEN_SPARSE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// A macro to mark a function/variable/class as deprecated.
|
||||
// We use compiler specific attributes rather than the c++
|
||||
// attribute because they do not mix well with each other.
|
||||
@@ -77,46 +40,7 @@
|
||||
#define CERES_DEPRECATED_WITH_MSG(message) __attribute__((deprecated(message)))
|
||||
#else
|
||||
// In the worst case fall back to c++ attribute.
|
||||
#define CERES_DEPRECATED(message) [[deprecated(message)]]
|
||||
#endif
|
||||
|
||||
// A macro to signal which functions and classes are exported when
|
||||
// building a shared library.
|
||||
#if defined(_MSC_VER)
|
||||
#define CERES_API_SHARED_IMPORT __declspec(dllimport)
|
||||
#define CERES_API_SHARED_EXPORT __declspec(dllexport)
|
||||
#elif defined(__GNUC__)
|
||||
#define CERES_API_SHARED_IMPORT __attribute__((visibility("default")))
|
||||
#define CERES_API_SHARED_EXPORT __attribute__((visibility("default")))
|
||||
#else
|
||||
#define CERES_API_SHARED_IMPORT
|
||||
#define CERES_API_SHARED_EXPORT
|
||||
#endif
|
||||
|
||||
// CERES_BUILDING_SHARED_LIBRARY is only defined locally when Ceres itself is
|
||||
// compiled as a shared library, it is never exported to users. In order that
|
||||
// we do not have to configure config.h separately when building Ceres as either
|
||||
// a static or dynamic library, we define both CERES_USING_SHARED_LIBRARY and
|
||||
// CERES_BUILDING_SHARED_LIBRARY when building as a shared library.
|
||||
#if defined(CERES_USING_SHARED_LIBRARY)
|
||||
#if defined(CERES_BUILDING_SHARED_LIBRARY)
|
||||
// Compiling Ceres itself as a shared library.
|
||||
#define CERES_EXPORT CERES_API_SHARED_EXPORT
|
||||
#else
|
||||
// Using Ceres as a shared library.
|
||||
#define CERES_EXPORT CERES_API_SHARED_IMPORT
|
||||
#endif
|
||||
#else
|
||||
// Ceres was compiled as a static library, export everything.
|
||||
#define CERES_EXPORT
|
||||
#endif
|
||||
|
||||
// Unit tests reach in and test internal functionality so we need a way to make
|
||||
// those symbols visible
|
||||
#ifdef CERES_EXPORT_INTERNAL_SYMBOLS
|
||||
#define CERES_EXPORT_INTERNAL CERES_EXPORT
|
||||
#else
|
||||
#define CERES_EXPORT_INTERNAL
|
||||
#define CERES_DEPRECATED_WITH_MSG(message) [[deprecated(message)]]
|
||||
#endif
|
||||
|
||||
#ifndef CERES_GET_FLAG
|
||||
|
||||
@@ -33,8 +33,7 @@
|
||||
#ifndef CERES_PUBLIC_INTERNAL_VARIADIC_EVALUATE_H_
|
||||
#define CERES_PUBLIC_INTERNAL_VARIADIC_EVALUATE_H_
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include <cstddef>
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#define CERES_PUBLIC_ITERATION_CALLBACK_H_
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/types.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/internal/port.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -366,6 +367,8 @@ class CERES_DEPRECATED_WITH_MSG("Use ProductManifold instead.")
|
||||
|
||||
// clang-format off
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
// clang-format on
|
||||
|
||||
#include "ceres/internal/line_parameterization.h"
|
||||
|
||||
#endif // CERES_PUBLIC_LOCAL_PARAMETERIZATION_H_
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/types.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/types.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
#ifndef CERES_PUBLIC_NUMERIC_DIFF_OPTIONS_H_
|
||||
#define CERES_PUBLIC_NUMERIC_DIFF_OPTIONS_H_
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -70,4 +71,6 @@ struct CERES_EXPORT NumericDiffOptions {
|
||||
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_PUBLIC_NUMERIC_DIFF_OPTIONS_H_
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
|
||||
#include "ceres/context.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/types.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
@@ -38,8 +38,9 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/crs_matrix.h"
|
||||
#include "ceres/internal/config.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/iteration_callback.h"
|
||||
#include "ceres/ordered_groups.h"
|
||||
#include "ceres/problem.h"
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
|
||||
+190
-186
@@ -1,5 +1,5 @@
|
||||
# Ceres Solver - A fast non-linear least squares minimizer
|
||||
# Copyright 2015 Google Inc. All rights reserved.
|
||||
# Copyright 2022 Google Inc. All rights reserved.
|
||||
# http://ceres-solver.org/
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -28,6 +28,17 @@
|
||||
#
|
||||
# Author: keir@google.com (Keir Mierle)
|
||||
|
||||
# Always build position-independent code (PIC), even when building Ceres as a
|
||||
# static library so that shared libraries can link against it, not just
|
||||
# executables (PIC does not apply on Windows). Global variable can be overridden
|
||||
# by the user whereas target properties can be not.
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
# Set the default symbol visibility to hidden to unify the behavior among
|
||||
# the various compilers and to get smaller binaries
|
||||
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
||||
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
||||
|
||||
# Avoid 'xxx.cc has no symbols' warnings from source files which are 'empty'
|
||||
# when their enclosing #ifdefs are disabled.
|
||||
if (CERES_THREADING_MODEL STREQUAL "CXX_THREADS")
|
||||
@@ -42,114 +53,20 @@ elseif (CERES_THREADING_MODEL STREQUAL "NO_THREADS")
|
||||
set(CERES_PARALLEL_FOR_SRC parallel_for_nothreads.cc)
|
||||
endif()
|
||||
|
||||
set(CERES_INTERNAL_SRC
|
||||
${CERES_PARALLEL_FOR_SRC}
|
||||
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
|
||||
# Source files that contain public symbols and live in the ceres namespaces.
|
||||
# Such symbols are expected to be marked with CERES_EXPORT and the files below
|
||||
# sorted in lexicographical order.
|
||||
set(CERES_EXPORTED_SRCS
|
||||
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
|
||||
context.cc
|
||||
context_impl.cc
|
||||
coordinate_descent_minimizer.cc
|
||||
corrector.cc
|
||||
cost_function.cc
|
||||
covariance.cc
|
||||
covariance_impl.cc
|
||||
cxsparse.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_cxsparse.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
|
||||
local_parameterization.cc
|
||||
loss_function.cc
|
||||
low_rank_inverse_hessian.cc
|
||||
manifold.cc
|
||||
minimizer.cc
|
||||
normal_prior.cc
|
||||
parallel_utils.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
|
||||
stringprintf.cc
|
||||
subset_preconditioner.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.cc
|
||||
visibility_based_preconditioner.cc
|
||||
wall_time.cc
|
||||
)
|
||||
|
||||
# Also depend on the header files so that they appear in IDEs.
|
||||
@@ -165,6 +82,7 @@ endif()
|
||||
# Depend also on public headers so they appear in IDEs.
|
||||
file(GLOB CERES_PUBLIC_HDRS ${Ceres_SOURCE_DIR}/include/ceres/*.h)
|
||||
file(GLOB CERES_PUBLIC_INTERNAL_HDRS ${Ceres_SOURCE_DIR}/include/ceres/internal/*.h)
|
||||
file(GLOB CERES_PUBLIC_INTERNAL_HDRS ${Ceres_BINARY_DIR}/include/ceres/internal/*.h)
|
||||
|
||||
# Include the specialized schur solvers.
|
||||
if (SCHUR_SPECIALIZATIONS)
|
||||
@@ -233,12 +151,116 @@ if (LAPACK_FOUND)
|
||||
list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${LAPACK_LIBRARIES})
|
||||
endif ()
|
||||
|
||||
# Source files that contain private symbols and live in the ceres::internal
|
||||
# namespace. The corresponding symbols (classes, functions, etc.) are expected
|
||||
# to be marked with CERES_NO_EXPORT and the files below sorted in
|
||||
# lexicographical order.
|
||||
add_library(ceres_internal OBJECT
|
||||
${CERES_INTERNAL_SCHUR_FILES}
|
||||
${CERES_PARALLEL_FOR_SRC}
|
||||
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
|
||||
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
|
||||
context.cc
|
||||
context_impl.cc
|
||||
coordinate_descent_minimizer.cc
|
||||
corrector.cc
|
||||
cost_function.cc
|
||||
covariance.cc
|
||||
covariance_impl.cc
|
||||
cxsparse.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_cxsparse.cc
|
||||
float_suitesparse.cc
|
||||
function_sample.cc
|
||||
gradient_checking_cost_function.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
|
||||
low_rank_inverse_hessian.cc
|
||||
minimizer.cc
|
||||
parallel_utils.cc
|
||||
parameter_block_ordering.cc
|
||||
partitioned_matrix_view.cc
|
||||
polynomial.cc
|
||||
preconditioner.cc
|
||||
preprocessor.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_utils.cc
|
||||
sparse_cholesky.cc
|
||||
sparse_matrix.cc
|
||||
sparse_normal_cholesky_solver.cc
|
||||
stringprintf.cc
|
||||
subset_preconditioner.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
|
||||
visibility.cc
|
||||
visibility_based_preconditioner.cc
|
||||
wall_time.cc
|
||||
)
|
||||
|
||||
set(CERES_LIBRARY_SOURCE
|
||||
${CERES_INTERNAL_SRC}
|
||||
${CERES_EXPORTED_SRCS}
|
||||
${CERES_INTERNAL_HDRS}
|
||||
${CERES_PUBLIC_HDRS}
|
||||
${CERES_PUBLIC_INTERNAL_HDRS}
|
||||
${CERES_INTERNAL_SCHUR_FILES})
|
||||
${CERES_PUBLIC_INTERNAL_HDRS})
|
||||
|
||||
# Primarily for Android, but optionally for others, compile the minimal
|
||||
# glog implementation into Ceres.
|
||||
@@ -256,28 +278,40 @@ if (CHECK_CXX_FLAG_Wno_missing_declarations)
|
||||
APPEND_STRING PROPERTY COMPILE_FLAGS "-Wno-missing-declarations")
|
||||
endif()
|
||||
|
||||
add_library(ceres ${CERES_LIBRARY_SOURCE})
|
||||
set_target_properties(ceres PROPERTIES
|
||||
VERSION ${CERES_VERSION}
|
||||
SOVERSION ${CERES_VERSION_MAJOR})
|
||||
add_library(ceres $<TARGET_OBJECTS:ceres_internal> ${CERES_LIBRARY_SOURCE})
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
set_target_properties(ceres PROPERTIES
|
||||
# Set the default symbol visibility to hidden to unify the behavior among
|
||||
# the various compilers and to get smaller binaries
|
||||
C_VISIBILITY_PRESET hidden
|
||||
CXX_VISIBILITY_PRESET hidden)
|
||||
if(BUILD_SHARED_LIBS)
|
||||
# While building shared libraries, we additionally require a static variant to
|
||||
# be able to access internal symbols which are not intended for general use.
|
||||
# Therefore, create a static library from object files and apply all the
|
||||
# compiler options from the main library to the static one.
|
||||
add_library(ceres_static STATIC $<TARGET_OBJECTS:ceres_internal> ${CERES_LIBRARY_SOURCE})
|
||||
target_include_directories(ceres_static PUBLIC $<TARGET_PROPERTY:ceres,INCLUDE_DIRECTORIES>)
|
||||
target_compile_definitions(ceres_static PUBLIC $<TARGET_PROPERTY:ceres,COMPILE_DEFINITIONS>)
|
||||
target_compile_options(ceres_static PUBLIC $<TARGET_PROPERTY:ceres,COMPILE_OPTIONS>)
|
||||
target_link_libraries(ceres_static
|
||||
INTERFACE $<TARGET_PROPERTY:ceres,INTERFACE_LINK_LIBRARIES>
|
||||
PRIVATE ${CERES_LIBRARY_PRIVATE_DEPENDENCIES})
|
||||
# CERES_STATIC_DEFINE is generated by the GenerateExportHeader CMake module
|
||||
# used to autogerate export.h. The macro should not be renamed without
|
||||
# updating the corresponding generate_export_header invocation.
|
||||
target_compile_definitions(ceres_static PRIVATE CERES_STATIC_DEFINE)
|
||||
else()
|
||||
# In a static library build, not additional access layer is necessary as all
|
||||
# symbols are visible.
|
||||
add_library(ceres_static ALIAS ceres)
|
||||
endif()
|
||||
|
||||
# When building as a shared libarary with testing enabled, we need to export
|
||||
# internal symbols needed by the unit tests
|
||||
if (BUILD_TESTING)
|
||||
target_compile_definitions(ceres
|
||||
PUBLIC
|
||||
CERES_EXPORT_INTERNAL_SYMBOLS
|
||||
)
|
||||
endif()
|
||||
# Create a local alias target that matches the expected installed target.
|
||||
add_library(Ceres::ceres ALIAS ceres)
|
||||
|
||||
# Apply all compiler options from the main Ceres target. Compiler options should
|
||||
# be generally defined on the main target referenced by the ceres_target CMake
|
||||
# variable.
|
||||
target_include_directories(ceres_internal PUBLIC $<TARGET_PROPERTY:ceres,INCLUDE_DIRECTORIES>)
|
||||
target_compile_definitions(ceres_internal PUBLIC $<TARGET_PROPERTY:ceres,COMPILE_DEFINITIONS>)
|
||||
target_compile_options(ceres_internal PUBLIC $<TARGET_PROPERTY:ceres,COMPILE_OPTIONS>)
|
||||
target_compile_definitions(ceres_internal PRIVATE ceres_EXPORTS)
|
||||
|
||||
# The ability to specify a minimum language version via cxx_std_[11,14,17]
|
||||
# requires CMake >= 3.8. Prior to that we have to specify the compiler features
|
||||
@@ -291,31 +325,13 @@ else()
|
||||
endif()
|
||||
target_compile_features(ceres PUBLIC ${REQUIRED_PUBLIC_CXX_FEATURES})
|
||||
|
||||
include(AppendTargetProperty)
|
||||
# Always build position-independent code (PIC), even when building Ceres as a
|
||||
# static library so that shared libraries can link against it, not just
|
||||
# executables (PIC does not apply on Windows).
|
||||
if (NOT WIN32 AND NOT BUILD_SHARED_LIBS)
|
||||
# Use set_target_properties() not append_target_property() here as
|
||||
# POSITION_INDEPENDENT_CODE is a binary ON/OFF switch.
|
||||
set_target_properties(ceres PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
set_target_properties(ceres PROPERTIES
|
||||
VERSION ${CERES_VERSION}
|
||||
SOVERSION 3)
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
# When building a shared library, mark all external libraries as
|
||||
# PRIVATE so they don't show up as a dependency.
|
||||
target_link_libraries(ceres
|
||||
PUBLIC ${CERES_LIBRARY_PUBLIC_DEPENDENCIES}
|
||||
PRIVATE ${CERES_LIBRARY_PRIVATE_DEPENDENCIES})
|
||||
else (BUILD_SHARED_LIBS)
|
||||
# When building a static library, all external libraries are
|
||||
# PUBLIC(default) since the user needs to link to them.
|
||||
# They will be listed in CeresTargets.cmake.
|
||||
set(CERES_LIBRARY_DEPENDENCIES
|
||||
${CERES_LIBRARY_PUBLIC_DEPENDENCIES}
|
||||
${CERES_LIBRARY_PRIVATE_DEPENDENCIES})
|
||||
target_link_libraries(ceres PUBLIC ${CERES_LIBRARY_DEPENDENCIES})
|
||||
endif (BUILD_SHARED_LIBS)
|
||||
target_link_libraries(ceres
|
||||
PUBLIC ${CERES_LIBRARY_PUBLIC_DEPENDENCIES}
|
||||
PRIVATE ${CERES_LIBRARY_PRIVATE_DEPENDENCIES})
|
||||
|
||||
# Add the Ceres headers to its target.
|
||||
#
|
||||
@@ -324,16 +340,15 @@ endif (BUILD_SHARED_LIBS)
|
||||
# that if the user has an installed version of Ceres in the same location as one
|
||||
# of the dependencies (e.g. /usr/local) that we find the config.h we just
|
||||
# configured, not the (older) installed config.h.
|
||||
target_include_directories(ceres BEFORE PUBLIC
|
||||
$<BUILD_INTERFACE:${Ceres_BINARY_DIR}/config>)
|
||||
target_include_directories(ceres PRIVATE ${Ceres_SOURCE_DIR}/internal)
|
||||
target_include_directories(ceres PUBLIC
|
||||
$<BUILD_INTERFACE:${Ceres_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include>)
|
||||
target_include_directories(ceres
|
||||
BEFORE PUBLIC $<BUILD_INTERFACE:${Ceres_BINARY_DIR}/include>
|
||||
PRIVATE ${Ceres_SOURCE_DIR}/internal
|
||||
PUBLIC $<BUILD_INTERFACE:${Ceres_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include>)
|
||||
|
||||
# Eigen SparseQR generates various compiler warnings related to unused and
|
||||
# uninitialised local variables. To avoid having to individually suppress these
|
||||
# warnings around the #include statments for Eigen headers across all GCC/Clang
|
||||
# warnings around the #include statements for Eigen headers across all GCC/Clang
|
||||
# versions, we tell CMake to treat Eigen headers as system headers. This
|
||||
# results in all compiler warnings from them being suppressed.
|
||||
target_link_libraries(ceres PUBLIC Eigen3::Eigen)
|
||||
@@ -381,13 +396,13 @@ endif()
|
||||
# Add include locations for optional dependencies to the Ceres target without
|
||||
# duplication.
|
||||
list(REMOVE_DUPLICATES CERES_LIBRARY_PRIVATE_DEPENDENCIES_INCLUDE_DIRS)
|
||||
foreach(INC_DIR ${CERES_LIBRARY_PRIVATE_DEPENDENCIES_INCLUDE_DIRS})
|
||||
target_include_directories(ceres PRIVATE ${INC_DIR})
|
||||
endforeach()
|
||||
target_include_directories(ceres PRIVATE ${CERES_LIBRARY_PRIVATE_DEPENDENCIES_INCLUDE_DIRS})
|
||||
list(REMOVE_DUPLICATES CERES_LIBRARY_PUBLIC_DEPENDENCIES_INCLUDE_DIRS)
|
||||
foreach(INC_DIR ${CERES_LIBRARY_PUBLIC_DEPENDENCIES_INCLUDE_DIRS})
|
||||
target_include_directories(ceres PUBLIC ${INC_DIR})
|
||||
endforeach()
|
||||
target_include_directories(ceres PUBLIC ${CERES_LIBRARY_PUBLIC_DEPENDENCIES_INCLUDE_DIRS})
|
||||
|
||||
# Generate an export header for annotating symbols visibility
|
||||
include(GenerateExportHeader)
|
||||
generate_export_header(ceres EXPORT_FILE_NAME ${Ceres_BINARY_DIR}/include/ceres/internal/export.h)
|
||||
|
||||
install(TARGETS ceres
|
||||
EXPORT CeresExport
|
||||
@@ -395,33 +410,29 @@ install(TARGETS ceres
|
||||
LIBRARY DESTINATION lib${LIB_SUFFIX}
|
||||
ARCHIVE DESTINATION lib${LIB_SUFFIX})
|
||||
|
||||
# Create a local alias target that matches the expected installed target.
|
||||
add_library(Ceres::ceres ALIAS ceres)
|
||||
if (BUILD_TESTING OR benchmark_FOUND)
|
||||
add_library(test_util STATIC
|
||||
evaluator_test_utils.cc
|
||||
numeric_diff_test_utils.cc
|
||||
test_util.cc)
|
||||
|
||||
target_include_directories(test_util PUBLIC ${Ceres_SOURCE_DIR}/internal)
|
||||
target_link_libraries (test_util PUBLIC ceres_static)
|
||||
endif (BUILD_TESTING OR benchmark_FOUND)
|
||||
|
||||
if (BUILD_TESTING AND GFLAGS)
|
||||
include(AppendTargetProperty)
|
||||
|
||||
add_library(gtest gmock_gtest_all.cc gmock_main.cc)
|
||||
target_include_directories(gtest PUBLIC ${Ceres_SOURCE_DIR}/internal/ceres)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
# Define gtest-specific shared library flags for compilation.
|
||||
append_target_property(gtest COMPILE_DEFINITIONS
|
||||
GTEST_CREATE_SHARED_LIBRARY)
|
||||
endif()
|
||||
set_target_properties (gtest PROPERTIES CXX_VISIBILITY_PRESET default)
|
||||
|
||||
add_library(test_util
|
||||
evaluator_test_utils.cc
|
||||
numeric_diff_test_utils.cc
|
||||
test_util.cc)
|
||||
target_include_directories(test_util PUBLIC ${Ceres_SOURCE_DIR}/internal)
|
||||
|
||||
if (MINIGLOG)
|
||||
# When using miniglog, it is compiled into Ceres, thus Ceres becomes
|
||||
# the library against which other libraries should link for logging.
|
||||
target_link_libraries(gtest PUBLIC gflags Ceres::ceres)
|
||||
target_link_libraries(test_util PUBLIC Ceres::ceres gtest)
|
||||
else (MINIGLOG)
|
||||
target_link_libraries(gtest PUBLIC gflags ${GLOG_LIBRARIES})
|
||||
target_link_libraries(test_util PUBLIC Ceres::ceres gtest ${GLOG_LIBRARIES})
|
||||
endif (MINIGLOG)
|
||||
target_include_directories(gtest PRIVATE ${Ceres_SOURCE_DIR}/internal/ceres)
|
||||
target_link_libraries(gtest PRIVATE Ceres::ceres)
|
||||
|
||||
macro (CERES_TEST NAME)
|
||||
add_executable(${NAME}_test ${NAME}_test.cc)
|
||||
@@ -430,12 +441,9 @@ if (BUILD_TESTING AND GFLAGS)
|
||||
# may be referenced without the 'ceres' path prefix and all private
|
||||
# dependencies that may be directly referenced.
|
||||
target_include_directories(${NAME}_test
|
||||
PUBLIC ${CMAKE_CURRENT_LIST_DIR}
|
||||
${Ceres_SOURCE_DIR}/internal/ceres
|
||||
${CERES_LIBRARY_PRIVATE_DEPENDENCIES_INCLUDE_DIRS})
|
||||
|
||||
|
||||
target_link_libraries(${NAME}_test PUBLIC test_util Ceres::ceres gtest)
|
||||
PRIVATE ${Ceres_SOURCE_DIR}/internal/ceres
|
||||
${CERES_LIBRARY_PRIVATE_DEPENDENCIES_INCLUDE_DIRS})
|
||||
target_link_libraries(${NAME}_test PRIVATE gtest test_util ceres_static)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
# Define gtest-specific shared library flags for linking.
|
||||
append_target_property(${NAME}_test COMPILE_DEFINITIONS
|
||||
@@ -549,11 +557,7 @@ if (BUILD_TESTING AND GFLAGS)
|
||||
endif (BUILD_TESTING AND GFLAGS)
|
||||
|
||||
macro(add_dependencies_to_benchmark BENCHMARK_TARGET)
|
||||
target_link_libraries(${BENCHMARK_TARGET} PUBLIC Ceres::ceres benchmark::benchmark)
|
||||
target_include_directories(${BENCHMARK_TARGET} PUBLIC
|
||||
${Ceres_SOURCE_DIR}/internal
|
||||
${Ceres_SOURCE_DIR}/internal/ceres
|
||||
${CERES_LIBRARY_PRIVATE_DEPENDENCIES_INCLUDE_DIRS})
|
||||
target_link_libraries(${BENCHMARK_TARGET} PRIVATE benchmark::benchmark test_util)
|
||||
endmacro()
|
||||
|
||||
if (BUILD_BENCHMARKS)
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
// Author: alexs.mac@gmail.com (Alex Stewart)
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_NO_ACCELERATE_SPARSE
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#define CERES_INTERNAL_ACCELERATE_SPARSE_H_
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_NO_ACCELERATE_SPARSE
|
||||
|
||||
|
||||
@@ -45,29 +45,30 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
|
||||
// Fill the array x with an impossible value that the user code is
|
||||
// never expected to compute.
|
||||
CERES_EXPORT_INTERNAL void InvalidateArray(int size, double* x);
|
||||
CERES_NO_EXPORT void InvalidateArray(int size, double* x);
|
||||
|
||||
// Check if all the entries of the array x are valid, i.e. all the
|
||||
// values in the array should be finite and none of them should be
|
||||
// equal to the "impossible" value used by InvalidateArray.
|
||||
CERES_EXPORT_INTERNAL bool IsArrayValid(int size, const double* x);
|
||||
CERES_NO_EXPORT bool IsArrayValid(int size, const double* x);
|
||||
|
||||
// If the array contains an invalid value, return the index for it,
|
||||
// otherwise return size.
|
||||
CERES_EXPORT_INTERNAL int FindInvalidValue(const int size, const double* x);
|
||||
CERES_NO_EXPORT int FindInvalidValue(const int size, const double* x);
|
||||
|
||||
// Utility routine to print an array of doubles to a string. If the
|
||||
// array pointer is nullptr, it is treated as an array of zeros.
|
||||
CERES_EXPORT_INTERNAL void AppendArrayToString(const int size,
|
||||
const double* x,
|
||||
std::string* result);
|
||||
CERES_NO_EXPORT void AppendArrayToString(const int size,
|
||||
const double* x,
|
||||
std::string* result);
|
||||
|
||||
// This routine takes an array of integer values, sorts and uniques
|
||||
// them and then maps each value in the array to its position in the
|
||||
@@ -82,9 +83,11 @@ CERES_EXPORT_INTERNAL void AppendArrayToString(const int size,
|
||||
// gets mapped to
|
||||
//
|
||||
// [1 0 2 3 0 1 3]
|
||||
CERES_EXPORT_INTERNAL void MapValuesToContiguousRange(int size, int* array);
|
||||
CERES_NO_EXPORT void MapValuesToContiguousRange(int size, int* array);
|
||||
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_ARRAY_UTILS_H_
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#ifndef CERES_INTERNAL_BLOCK_EVALUATE_PREPARER_H_
|
||||
#define CERES_INTERNAL_BLOCK_EVALUATE_PREPARER_H_
|
||||
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/scratch_evaluate_preparer.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -44,7 +45,7 @@ namespace internal {
|
||||
class ResidualBlock;
|
||||
class SparseMatrix;
|
||||
|
||||
class BlockEvaluatePreparer {
|
||||
class CERES_NO_EXPORT BlockEvaluatePreparer {
|
||||
public:
|
||||
// Using Init() instead of a constructor allows for allocating this structure
|
||||
// with new[]. This is because C++ doesn't allow passing arguments to objects
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/block_random_access_diagonal_matrix.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/preconditioner.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -53,7 +54,7 @@ struct CompressedRowBlockStructure;
|
||||
// update the matrix by running Update(A, D). The values of the matrix A are
|
||||
// inspected to construct the preconditioner. The vector D is applied as the
|
||||
// D^TD diagonal term.
|
||||
class CERES_EXPORT_INTERNAL BlockJacobiPreconditioner
|
||||
class CERES_NO_EXPORT BlockJacobiPreconditioner
|
||||
: public BlockSparseMatrixPreconditioner {
|
||||
public:
|
||||
// A must remain valid while the BlockJacobiPreconditioner is.
|
||||
@@ -78,4 +79,6 @@ class CERES_EXPORT_INTERNAL BlockJacobiPreconditioner
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_BLOCK_JACOBI_PRECONDITIONER_H_
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include "ceres/block_evaluate_preparer.h"
|
||||
#include "ceres/block_sparse_matrix.h"
|
||||
#include "ceres/internal/eigen.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/parameter_block.h"
|
||||
#include "ceres/program.h"
|
||||
#include "ceres/residual_block.h"
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/evaluator.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
@@ -52,7 +52,7 @@ class Program;
|
||||
class SparseMatrix;
|
||||
|
||||
// TODO(sameeragarwal): This class needs documemtation.
|
||||
class BlockJacobianWriter {
|
||||
class CERES_NO_EXPORT BlockJacobianWriter {
|
||||
public:
|
||||
BlockJacobianWriter(const Evaluator::Options& options, Program* program);
|
||||
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/block_random_access_matrix.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
@@ -50,7 +51,7 @@ namespace internal {
|
||||
// pair.
|
||||
//
|
||||
// ReturnCell is a nop.
|
||||
class CERES_EXPORT_INTERNAL BlockRandomAccessDenseMatrix
|
||||
class CERES_NO_EXPORT BlockRandomAccessDenseMatrix
|
||||
: public BlockRandomAccessMatrix {
|
||||
public:
|
||||
// blocks is a vector of block sizes. The resulting matrix has
|
||||
@@ -94,4 +95,6 @@ class CERES_EXPORT_INTERNAL BlockRandomAccessDenseMatrix
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_BLOCK_RANDOM_ACCESS_DENSE_MATRIX_H_
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "Eigen/Dense"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/stl_util.h"
|
||||
#include "ceres/triplet_sparse_matrix.h"
|
||||
#include "ceres/types.h"
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/block_random_access_matrix.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/triplet_sparse_matrix.h"
|
||||
#include "ceres/types.h"
|
||||
|
||||
@@ -46,7 +47,7 @@ namespace internal {
|
||||
|
||||
// A thread safe block diagonal matrix implementation of
|
||||
// BlockRandomAccessMatrix.
|
||||
class CERES_EXPORT_INTERNAL BlockRandomAccessDiagonalMatrix
|
||||
class CERES_NO_EXPORT BlockRandomAccessDiagonalMatrix
|
||||
: public BlockRandomAccessMatrix {
|
||||
public:
|
||||
// blocks is an array of block sizes.
|
||||
@@ -98,4 +99,6 @@ class CERES_EXPORT_INTERNAL BlockRandomAccessDiagonalMatrix
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_BLOCK_RANDOM_ACCESS_DIAGONAL_MATRIX_H_
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
#include <mutex>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
@@ -85,7 +85,7 @@ namespace internal {
|
||||
|
||||
// Structure to carry a pointer to the array containing a cell and the
|
||||
// mutex guarding it.
|
||||
struct CellInfo {
|
||||
struct CERES_NO_EXPORT CellInfo {
|
||||
CellInfo() : values(nullptr) {}
|
||||
explicit CellInfo(double* values) : values(values) {}
|
||||
|
||||
@@ -93,7 +93,7 @@ struct CellInfo {
|
||||
std::mutex m;
|
||||
};
|
||||
|
||||
class CERES_EXPORT_INTERNAL BlockRandomAccessMatrix {
|
||||
class CERES_NO_EXPORT BlockRandomAccessMatrix {
|
||||
public:
|
||||
virtual ~BlockRandomAccessMatrix();
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/triplet_sparse_matrix.h"
|
||||
#include "ceres/types.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/block_random_access_matrix.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/small_blas.h"
|
||||
#include "ceres/triplet_sparse_matrix.h"
|
||||
#include "ceres/types.h"
|
||||
@@ -51,7 +52,7 @@ namespace internal {
|
||||
// BlockRandomAccessMatrix. Internally a TripletSparseMatrix is used
|
||||
// for doing the actual storage. This class augments this matrix with
|
||||
// an unordered_map that allows random read/write access.
|
||||
class CERES_EXPORT_INTERNAL BlockRandomAccessSparseMatrix
|
||||
class CERES_NO_EXPORT BlockRandomAccessSparseMatrix
|
||||
: public BlockRandomAccessMatrix {
|
||||
public:
|
||||
// blocks is an array of block sizes. block_pairs is a set of
|
||||
@@ -127,4 +128,6 @@ class CERES_EXPORT_INTERNAL BlockRandomAccessSparseMatrix
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_BLOCK_RANDOM_ACCESS_SPARSE_MATRIX_H_
|
||||
|
||||
@@ -37,8 +37,9 @@
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/block_structure.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/eigen.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/sparse_matrix.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -54,7 +55,7 @@ class TripletSparseMatrix;
|
||||
//
|
||||
// internal/ceres/block_structure.h
|
||||
//
|
||||
class CERES_EXPORT_INTERNAL BlockSparseMatrix : public SparseMatrix {
|
||||
class CERES_NO_EXPORT BlockSparseMatrix : public SparseMatrix {
|
||||
public:
|
||||
// Construct a block sparse matrix with a fully initialized
|
||||
// CompressedRowBlockStructure objected. The matrix takes over
|
||||
@@ -138,7 +139,7 @@ class CERES_EXPORT_INTERNAL BlockSparseMatrix : public SparseMatrix {
|
||||
//
|
||||
// BlockSparseDataMatrix a struct that carries these two bits of
|
||||
// information
|
||||
class BlockSparseMatrixData {
|
||||
class CERES_NO_EXPORT BlockSparseMatrixData {
|
||||
public:
|
||||
BlockSparseMatrixData(const BlockSparseMatrix& m)
|
||||
: block_structure_(m.block_structure()), values_(m.values()){};
|
||||
@@ -160,4 +161,6 @@ class BlockSparseMatrixData {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_BLOCK_SPARSE_MATRIX_H_
|
||||
|
||||
@@ -41,14 +41,14 @@
|
||||
#include <cstdint>
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
|
||||
typedef int32_t BlockSize;
|
||||
|
||||
struct Block {
|
||||
struct CERES_NO_EXPORT Block {
|
||||
Block() : size(-1), position(-1) {}
|
||||
Block(int size_, int position_) : size(size_), position(position_) {}
|
||||
|
||||
@@ -56,7 +56,7 @@ struct Block {
|
||||
int position; // Position along the row/column.
|
||||
};
|
||||
|
||||
struct Cell {
|
||||
struct CERES_NO_EXPORT Cell {
|
||||
Cell() : block_id(-1), position(-1) {}
|
||||
Cell(int block_id_, int position_)
|
||||
: block_id(block_id_), position(position_) {}
|
||||
@@ -68,9 +68,9 @@ struct Cell {
|
||||
};
|
||||
|
||||
// Order cell by their block_id;
|
||||
bool CellLessThan(const Cell& lhs, const Cell& rhs);
|
||||
CERES_NO_EXPORT bool CellLessThan(const Cell& lhs, const Cell& rhs);
|
||||
|
||||
struct CompressedList {
|
||||
struct CERES_NO_EXPORT CompressedList {
|
||||
CompressedList() = default;
|
||||
|
||||
// Construct a CompressedList with the cells containing num_cells
|
||||
@@ -83,12 +83,12 @@ struct CompressedList {
|
||||
typedef CompressedList CompressedRow;
|
||||
typedef CompressedList CompressedColumn;
|
||||
|
||||
struct CompressedRowBlockStructure {
|
||||
struct CERES_NO_EXPORT CompressedRowBlockStructure {
|
||||
std::vector<Block> cols;
|
||||
std::vector<CompressedRow> rows;
|
||||
};
|
||||
|
||||
struct CompressedColumnBlockStructure {
|
||||
struct CERES_NO_EXPORT CompressedColumnBlockStructure {
|
||||
std::vector<Block> rows;
|
||||
std::vector<CompressedColumn> cols;
|
||||
};
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "ceres/autodiff_cost_function.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/ordered_groups.h"
|
||||
#include "ceres/problem.h"
|
||||
#include "ceres/rotation.h"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Ceres Solver - A fast non-linear least squares minimizer
|
||||
// Copyright 2015 Google Inc. All rights reserved.
|
||||
// Copyright 2022 Google Inc. All rights reserved.
|
||||
// http://ceres-solver.org/
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
@@ -65,7 +65,7 @@ void ceres_free_problem(ceres_problem_t* problem) {
|
||||
|
||||
// This cost function wraps a C-level function pointer from the user, to bridge
|
||||
// between C and C++.
|
||||
class CallbackCostFunction : public ceres::CostFunction {
|
||||
class CERES_NO_EXPORT CallbackCostFunction : public ceres::CostFunction {
|
||||
public:
|
||||
CallbackCostFunction(ceres_cost_function_t cost_function,
|
||||
void* user_data,
|
||||
@@ -79,8 +79,6 @@ class CallbackCostFunction : public ceres::CostFunction {
|
||||
}
|
||||
}
|
||||
|
||||
~CallbackCostFunction() override = default;
|
||||
|
||||
bool Evaluate(double const* const* parameters,
|
||||
double* residuals,
|
||||
double** jacobians) const final {
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/iteration_callback.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -43,7 +43,7 @@ class Program;
|
||||
|
||||
// Callback for updating the externally visible state of parameter
|
||||
// blocks.
|
||||
class StateUpdatingCallback : public IterationCallback {
|
||||
class CERES_NO_EXPORT StateUpdatingCallback : public IterationCallback {
|
||||
public:
|
||||
StateUpdatingCallback(Program* program, double* parameters);
|
||||
~StateUpdatingCallback() override;
|
||||
@@ -56,7 +56,8 @@ class StateUpdatingCallback : public IterationCallback {
|
||||
|
||||
// Callback for updating the externally visible state of the
|
||||
// parameters vector for GradientProblemSolver.
|
||||
class GradientProblemSolverStateUpdatingCallback : public IterationCallback {
|
||||
class CERES_NO_EXPORT GradientProblemSolverStateUpdatingCallback
|
||||
: public IterationCallback {
|
||||
public:
|
||||
GradientProblemSolverStateUpdatingCallback(int num_parameters,
|
||||
const double* internal_parameters,
|
||||
@@ -72,7 +73,7 @@ class GradientProblemSolverStateUpdatingCallback : public IterationCallback {
|
||||
|
||||
// Callback for logging the state of the minimizer to STDERR or
|
||||
// STDOUT depending on the user's preferences and logging level.
|
||||
class LoggingCallback : public IterationCallback {
|
||||
class CERES_NO_EXPORT LoggingCallback : public IterationCallback {
|
||||
public:
|
||||
LoggingCallback(MinimizerType minimizer_type, bool log_to_stdout);
|
||||
~LoggingCallback() override;
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <unordered_set>
|
||||
|
||||
#include "ceres/graph.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/map_util.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
@@ -46,7 +47,7 @@ using std::vector;
|
||||
typedef std::unordered_map<int, int> IntMap;
|
||||
typedef std::unordered_set<int> IntSet;
|
||||
|
||||
class CanonicalViewsClustering {
|
||||
class CERES_NO_EXPORT CanonicalViewsClustering {
|
||||
public:
|
||||
|
||||
// Compute the canonical views clustering of the vertices of the
|
||||
|
||||
@@ -45,7 +45,8 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/graph.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
@@ -95,13 +96,13 @@ struct CanonicalViewsClusteringOptions;
|
||||
// It is possible depending on the configuration of the clustering
|
||||
// algorithm that some of the vertices may not be assigned to any
|
||||
// cluster. In this case they are assigned to a cluster with id = -1;
|
||||
CERES_EXPORT_INTERNAL void ComputeCanonicalViewsClustering(
|
||||
CERES_NO_EXPORT void ComputeCanonicalViewsClustering(
|
||||
const CanonicalViewsClusteringOptions& options,
|
||||
const WeightedGraph<int>& graph,
|
||||
std::vector<int>* centers,
|
||||
std::unordered_map<int, int>* membership);
|
||||
|
||||
struct CERES_EXPORT_INTERNAL CanonicalViewsClusteringOptions {
|
||||
struct CERES_NO_EXPORT CanonicalViewsClusteringOptions {
|
||||
// The minimum number of canonical views to compute.
|
||||
int min_views = 3;
|
||||
|
||||
@@ -122,4 +123,6 @@ struct CERES_EXPORT_INTERNAL CanonicalViewsClusteringOptions {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_CANONICAL_VIEWS_CLUSTERING_H_
|
||||
|
||||
@@ -34,7 +34,9 @@
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/eigen.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/linear_operator.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -78,7 +80,7 @@ class SparseMatrix;
|
||||
// and z = A^T b
|
||||
//
|
||||
// Note: This class is not thread safe, since it uses some temporary storage.
|
||||
class CgnrLinearOperator : public LinearOperator {
|
||||
class CERES_NO_EXPORT CgnrLinearOperator : public LinearOperator {
|
||||
public:
|
||||
CgnrLinearOperator(const LinearOperator& A, const double* D)
|
||||
: A_(A), D_(D), z_(new double[A.num_rows()]) {}
|
||||
@@ -116,4 +118,6 @@ class CgnrLinearOperator : public LinearOperator {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_CGNR_LINEAR_OPERATOR_H_
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/linear_solver.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -49,7 +50,7 @@ class BlockJacobiPreconditioner;
|
||||
//
|
||||
// as required for solving for x in the least squares sense. Currently only
|
||||
// block diagonal preconditioning is supported.
|
||||
class CgnrSolver : public BlockSparseMatrixSolver {
|
||||
class CERES_NO_EXPORT CgnrSolver : public BlockSparseMatrixSolver {
|
||||
public:
|
||||
explicit CgnrSolver(const LinearSolver::Options& options);
|
||||
CgnrSolver(const CgnrSolver&) = delete;
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -33,7 +33,8 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
@@ -48,7 +49,7 @@ namespace internal {
|
||||
// and column block j, then it is expected that A contains at least
|
||||
// one non-zero entry corresponding to the top left entry of c_ij,
|
||||
// as that entry is used to detect the presence of a non-zero c_ij.
|
||||
CERES_EXPORT_INTERNAL void CompressedColumnScalarMatrixToBlockMatrix(
|
||||
CERES_NO_EXPORT void CompressedColumnScalarMatrixToBlockMatrix(
|
||||
const int* scalar_rows,
|
||||
const int* scalar_cols,
|
||||
const std::vector<int>& row_blocks,
|
||||
@@ -59,7 +60,7 @@ CERES_EXPORT_INTERNAL void CompressedColumnScalarMatrixToBlockMatrix(
|
||||
// Given a set of blocks and a permutation of these blocks, compute
|
||||
// the corresponding "scalar" ordering, where the scalar ordering of
|
||||
// size sum(blocks).
|
||||
CERES_EXPORT_INTERNAL void BlockOrderingToScalarOrdering(
|
||||
CERES_NO_EXPORT void BlockOrderingToScalarOrdering(
|
||||
const std::vector<int>& blocks,
|
||||
const std::vector<int>& block_ordering,
|
||||
std::vector<int>* scalar_ordering);
|
||||
@@ -142,4 +143,6 @@ void SolveRTRWithSparseRHS(IntegerType num_cols,
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_COMPRESSED_COL_SPARSE_MATRIX_UTILS_H_
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#include <numeric>
|
||||
|
||||
#include "Eigen/SparseCore"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/triplet_sparse_matrix.h"
|
||||
#include "glog/logging.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/evaluator.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/scratch_evaluate_preparer.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -47,7 +48,7 @@ class CompressedRowSparseMatrix;
|
||||
class Program;
|
||||
class SparseMatrix;
|
||||
|
||||
class CompressedRowJacobianWriter {
|
||||
class CERES_NO_EXPORT CompressedRowJacobianWriter {
|
||||
public:
|
||||
CompressedRowJacobianWriter(Evaluator::Options /* ignored */,
|
||||
Program* program)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/crs_matrix.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/random.h"
|
||||
#include "ceres/triplet_sparse_matrix.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/sparse_matrix.h"
|
||||
#include "ceres/types.h"
|
||||
#include "glog/logging.h"
|
||||
@@ -47,7 +48,7 @@ namespace internal {
|
||||
|
||||
class TripletSparseMatrix;
|
||||
|
||||
class CERES_EXPORT_INTERNAL CompressedRowSparseMatrix : public SparseMatrix {
|
||||
class CERES_NO_EXPORT CompressedRowSparseMatrix : public SparseMatrix {
|
||||
public:
|
||||
enum StorageType {
|
||||
UNSYMMETRIC,
|
||||
@@ -219,4 +220,6 @@ class CERES_EXPORT_INTERNAL CompressedRowSparseMatrix : public SparseMatrix {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_COMPRESSED_ROW_SPARSE_MATRIX_H_
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
// Author: vitus@google.com (Michael Vitus)
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifdef CERES_USE_CXX_THREADS
|
||||
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
#ifndef CERES_INTERNAL_CONJUGATE_GRADIENTS_SOLVER_H_
|
||||
#define CERES_INTERNAL_CONJUGATE_GRADIENTS_SOLVER_H_
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/linear_solver.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -55,7 +56,7 @@ class LinearOperator;
|
||||
// For more details see the documentation for
|
||||
// LinearSolver::PerSolveOptions::r_tolerance and
|
||||
// LinearSolver::PerSolveOptions::q_tolerance in linear_solver.h.
|
||||
class CERES_EXPORT_INTERNAL ConjugateGradientsSolver : public LinearSolver {
|
||||
class CERES_NO_EXPORT ConjugateGradientsSolver : public LinearSolver {
|
||||
public:
|
||||
explicit ConjugateGradientsSolver(const LinearSolver::Options& options);
|
||||
Summary Solve(LinearOperator* A,
|
||||
@@ -70,4 +71,6 @@ class CERES_EXPORT_INTERNAL ConjugateGradientsSolver : public LinearSolver {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_CONJUGATE_GRADIENTS_SOLVER_H_
|
||||
|
||||
@@ -33,10 +33,12 @@
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
// clang-format off
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
// clanf-format on
|
||||
|
||||
#include "ceres/context.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
#ifdef CERES_USE_CXX_THREADS
|
||||
#include "ceres/thread_pool.h"
|
||||
@@ -45,7 +47,7 @@
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
|
||||
class CERES_EXPORT_INTERNAL ContextImpl : public Context {
|
||||
class CERES_NO_EXPORT ContextImpl : public Context {
|
||||
public:
|
||||
ContextImpl();
|
||||
ContextImpl(const ContextImpl&) = delete;
|
||||
@@ -65,4 +67,6 @@ class CERES_EXPORT_INTERNAL ContextImpl : public Context {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_CONTEXT_IMPL_H_
|
||||
|
||||
@@ -56,7 +56,7 @@ class LinearSolver;
|
||||
//
|
||||
// The minimizer assumes that none of the parameter blocks in the
|
||||
// program are constant.
|
||||
class CoordinateDescentMinimizer : public Minimizer {
|
||||
class CERES_NO_EXPORT CoordinateDescentMinimizer : public Minimizer {
|
||||
public:
|
||||
explicit CoordinateDescentMinimizer(ContextImpl* context);
|
||||
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
#ifndef CERES_INTERNAL_CORRECTOR_H_
|
||||
#define CERES_INTERNAL_CORRECTOR_H_
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
@@ -48,7 +49,7 @@ namespace internal {
|
||||
// gauss newton approximation and then take its square root to get the
|
||||
// corresponding corrections to the residual and jacobian. For the
|
||||
// full expressions see Eq. 10 and 11 in BANS by Triggs et al.
|
||||
class CERES_EXPORT_INTERNAL Corrector {
|
||||
class CERES_NO_EXPORT Corrector {
|
||||
public:
|
||||
// The constructor takes the squared norm, the value, the first and
|
||||
// second derivatives of the LossFunction. It precalculates some of
|
||||
@@ -89,4 +90,6 @@ class CERES_EXPORT_INTERNAL Corrector {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_CORRECTOR_H_
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/covariance.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/problem_impl.h"
|
||||
#include "ceres/suitesparse.h"
|
||||
|
||||
@@ -47,7 +48,7 @@ namespace internal {
|
||||
|
||||
class CompressedRowSparseMatrix;
|
||||
|
||||
class CERES_EXPORT_INTERNAL CovarianceImpl {
|
||||
class CERES_NO_EXPORT CovarianceImpl {
|
||||
public:
|
||||
explicit CovarianceImpl(const Covariance::Options& options);
|
||||
~CovarianceImpl();
|
||||
@@ -98,4 +99,6 @@ class CERES_EXPORT_INTERNAL CovarianceImpl {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_COVARIANCE_IMPL_H_
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
// Author: strandmark@google.com (Petter Strandmark)
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_NO_CXSPARSE
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#define CERES_INTERNAL_CXSPARSE_H_
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_NO_CXSPARSE
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/linear_solver.h"
|
||||
#include "ceres/sparse_cholesky.h"
|
||||
#include "cs.h"
|
||||
@@ -54,7 +55,7 @@ class TripletSparseMatrix;
|
||||
// factorization with a known symbolic factorization. This features does not
|
||||
// explicitly exist in CXSparse. The methods in the class are nonstatic because
|
||||
// the class manages internal scratch space.
|
||||
class CXSparse {
|
||||
class CERES_NO_EXPORT CXSparse {
|
||||
public:
|
||||
CXSparse();
|
||||
~CXSparse();
|
||||
@@ -138,7 +139,7 @@ class CXSparse {
|
||||
|
||||
// An implementation of SparseCholesky interface using the CXSparse
|
||||
// library.
|
||||
class CXSparseCholesky : public SparseCholesky {
|
||||
class CERES_NO_EXPORT CXSparseCholesky : public SparseCholesky {
|
||||
public:
|
||||
// Factory
|
||||
static std::unique_ptr<SparseCholesky> Create(OrderingType ordering_type);
|
||||
@@ -166,6 +167,8 @@ class CXSparseCholesky : public SparseCholesky {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#else
|
||||
|
||||
typedef void cs_dis;
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
// clang-format off
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
// clang-format on
|
||||
|
||||
#include <memory>
|
||||
@@ -54,7 +54,7 @@ namespace internal {
|
||||
// An interface that abstracts away the internal details of various dense linear
|
||||
// algebra libraries and offers a simple API for solving dense symmetric
|
||||
// positive definite linear systems using a Cholesky factorization.
|
||||
class CERES_EXPORT_INTERNAL DenseCholesky {
|
||||
class CERES_NO_EXPORT DenseCholesky {
|
||||
public:
|
||||
static std::unique_ptr<DenseCholesky> Create(
|
||||
const LinearSolver::Options& options);
|
||||
@@ -100,7 +100,7 @@ class CERES_EXPORT_INTERNAL DenseCholesky {
|
||||
std::string* message);
|
||||
};
|
||||
|
||||
class CERES_EXPORT_INTERNAL EigenDenseCholesky : public DenseCholesky {
|
||||
class CERES_NO_EXPORT EigenDenseCholesky : public DenseCholesky {
|
||||
public:
|
||||
|
||||
LinearSolverTerminationType Factorize(int num_cols,
|
||||
@@ -116,7 +116,7 @@ class CERES_EXPORT_INTERNAL EigenDenseCholesky : public DenseCholesky {
|
||||
};
|
||||
|
||||
#ifndef CERES_NO_LAPACK
|
||||
class CERES_EXPORT_INTERNAL LAPACKDenseCholesky : public DenseCholesky {
|
||||
class CERES_NO_EXPORT LAPACKDenseCholesky : public DenseCholesky {
|
||||
public:
|
||||
|
||||
LinearSolverTerminationType Factorize(int num_cols,
|
||||
@@ -136,7 +136,7 @@ class CERES_EXPORT_INTERNAL LAPACKDenseCholesky : public DenseCholesky {
|
||||
#ifndef CERES_NO_CUDA
|
||||
// Implementation of DenseCholesky using the cuSolver library v.11.0 or older,
|
||||
// using the legacy cuSolverDn interface.
|
||||
class CERES_EXPORT_INTERNAL CUDADenseCholesky32Bit : public DenseCholesky {
|
||||
class CERES_NO_EXPORT CUDADenseCholesky32Bit : public DenseCholesky {
|
||||
public:
|
||||
static std::unique_ptr<CUDADenseCholesky32Bit> Create(
|
||||
const LinearSolver::Options& options);
|
||||
@@ -181,7 +181,7 @@ class CERES_EXPORT_INTERNAL CUDADenseCholesky32Bit : public DenseCholesky {
|
||||
|
||||
// Implementation of DenseCholesky using the cuSolver library v.11.1 or newer,
|
||||
// using the 64-bit cuSolverDn interface.
|
||||
class CERES_EXPORT_INTERNAL CUDADenseCholesky64Bit : public DenseCholesky {
|
||||
class CERES_NO_EXPORT CUDADenseCholesky64Bit : public DenseCholesky {
|
||||
public:
|
||||
static std::unique_ptr<CUDADenseCholesky64Bit> Create(
|
||||
const LinearSolver::Options& options);
|
||||
|
||||
@@ -37,7 +37,9 @@
|
||||
|
||||
#include "ceres/casts.h"
|
||||
#include "ceres/dense_sparse_matrix.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/eigen.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/parameter_block.h"
|
||||
#include "ceres/program.h"
|
||||
#include "ceres/residual_block.h"
|
||||
@@ -46,7 +48,7 @@
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
|
||||
class DenseJacobianWriter {
|
||||
class CERES_NO_EXPORT DenseJacobianWriter {
|
||||
public:
|
||||
DenseJacobianWriter(Evaluator::Options /* ignored */, Program* program)
|
||||
: program_(program) {}
|
||||
@@ -104,4 +106,6 @@ class DenseJacobianWriter {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_DENSE_JACOBIAN_WRITER_H_
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/dense_cholesky.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/linear_solver.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -76,7 +78,8 @@ class DenseSparseMatrix;
|
||||
// library. This solver always returns a solution, it is the user's
|
||||
// responsibility to judge if the solution is good enough for their
|
||||
// purposes.
|
||||
class DenseNormalCholeskySolver : public DenseSparseMatrixSolver {
|
||||
class CERES_NO_EXPORT DenseNormalCholeskySolver
|
||||
: public DenseSparseMatrixSolver {
|
||||
public:
|
||||
explicit DenseNormalCholeskySolver(const LinearSolver::Options& options);
|
||||
|
||||
@@ -94,4 +97,6 @@ class DenseNormalCholeskySolver : public DenseSparseMatrixSolver {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_DENSE_NORMAL_CHOLESKY_SOLVER_H_
|
||||
|
||||
@@ -33,14 +33,16 @@
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
// clang-format off
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
// clang-format on
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "Eigen/Dense"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/eigen.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/linear_solver.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
@@ -50,7 +52,7 @@ namespace internal {
|
||||
// An interface that abstracts away the internal details of various dense linear
|
||||
// algebra libraries and offers a simple API for solving dense linear systems
|
||||
// using a QR factorization.
|
||||
class CERES_EXPORT_INTERNAL DenseQR {
|
||||
class CERES_NO_EXPORT DenseQR {
|
||||
public:
|
||||
static std::unique_ptr<DenseQR> Create(const LinearSolver::Options& options);
|
||||
|
||||
@@ -96,7 +98,7 @@ class CERES_EXPORT_INTERNAL DenseQR {
|
||||
std::string* message);
|
||||
};
|
||||
|
||||
class CERES_EXPORT_INTERNAL EigenDenseQR : public DenseQR {
|
||||
class CERES_NO_EXPORT EigenDenseQR : public DenseQR {
|
||||
public:
|
||||
|
||||
LinearSolverTerminationType Factorize(int num_rows,
|
||||
@@ -113,7 +115,7 @@ class CERES_EXPORT_INTERNAL EigenDenseQR : public DenseQR {
|
||||
};
|
||||
|
||||
#ifndef CERES_NO_LAPACK
|
||||
class CERES_EXPORT_INTERNAL LAPACKDenseQR : public DenseQR {
|
||||
class CERES_NO_EXPORT LAPACKDenseQR : public DenseQR {
|
||||
public:
|
||||
|
||||
LinearSolverTerminationType Factorize(int num_rows,
|
||||
@@ -138,4 +140,6 @@ class CERES_EXPORT_INTERNAL LAPACKDenseQR : public DenseQR {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_DENSE_QR_H_
|
||||
|
||||
@@ -35,8 +35,9 @@
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/dense_qr.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/eigen.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/linear_solver.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -82,7 +83,7 @@ class DenseSparseMatrix;
|
||||
// library. This solver always returns a solution, it is the user's
|
||||
// responsibility to judge if the solution is good enough for their
|
||||
// purposes.
|
||||
class CERES_EXPORT_INTERNAL DenseQRSolver : public DenseSparseMatrixSolver {
|
||||
class CERES_NO_EXPORT DenseQRSolver : public DenseSparseMatrixSolver {
|
||||
public:
|
||||
explicit DenseQRSolver(const LinearSolver::Options& options);
|
||||
|
||||
@@ -114,4 +115,6 @@ class CERES_EXPORT_INTERNAL DenseQRSolver : public DenseSparseMatrixSolver {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_DENSE_QR_SOLVER_H_
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
#include <algorithm>
|
||||
|
||||
#include "ceres/internal/eigen.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/triplet_sparse_matrix.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
|
||||
@@ -33,8 +33,9 @@
|
||||
#ifndef CERES_INTERNAL_DENSE_SPARSE_MATRIX_H_
|
||||
#define CERES_INTERNAL_DENSE_SPARSE_MATRIX_H_
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/eigen.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/sparse_matrix.h"
|
||||
#include "ceres/types.h"
|
||||
|
||||
@@ -43,7 +44,7 @@ namespace internal {
|
||||
|
||||
class TripletSparseMatrix;
|
||||
|
||||
class CERES_EXPORT_INTERNAL DenseSparseMatrix : public SparseMatrix {
|
||||
class CERES_NO_EXPORT DenseSparseMatrix : public SparseMatrix {
|
||||
public:
|
||||
// Build a matrix with the same content as the TripletSparseMatrix
|
||||
// m. This assumes that m does not have any repeated entries.
|
||||
@@ -76,4 +77,6 @@ class CERES_EXPORT_INTERNAL DenseSparseMatrix : public SparseMatrix {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_DENSE_SPARSE_MATRIX_H_
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
#define CERES_INTERNAL_DETECT_STRUCTURE_H_
|
||||
|
||||
#include "ceres/block_structure.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
@@ -56,13 +57,15 @@ namespace internal {
|
||||
// Note: The structure of rows without any e-blocks has no effect on
|
||||
// the values returned by this function. It is entirely possible that
|
||||
// the f_block_size and row_blocks_size is not constant in such rows.
|
||||
void CERES_EXPORT DetectStructure(const CompressedRowBlockStructure& bs,
|
||||
const int num_eliminate_blocks,
|
||||
int* row_block_size,
|
||||
int* e_block_size,
|
||||
int* f_block_size);
|
||||
void CERES_NO_EXPORT DetectStructure(const CompressedRowBlockStructure& bs,
|
||||
const int num_eliminate_blocks,
|
||||
int* row_block_size,
|
||||
int* e_block_size,
|
||||
int* f_block_size);
|
||||
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_DETECT_STRUCTURE_H_
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
#ifndef CERES_INTERNAL_DOGLEG_STRATEGY_H_
|
||||
#define CERES_INTERNAL_DOGLEG_STRATEGY_H_
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/linear_solver.h"
|
||||
#include "ceres/trust_region_strategy.h"
|
||||
|
||||
@@ -53,7 +54,7 @@ namespace internal {
|
||||
// DoglegStrategy follows the approach by Shultz, Schnabel, Byrd.
|
||||
// This finds the exact optimum over the two-dimensional subspace
|
||||
// spanned by the two Dogleg vectors.
|
||||
class CERES_EXPORT_INTERNAL DoglegStrategy : public TrustRegionStrategy {
|
||||
class CERES_NO_EXPORT DoglegStrategy : public TrustRegionStrategy {
|
||||
public:
|
||||
explicit DoglegStrategy(const TrustRegionStrategy::Options& options);
|
||||
|
||||
@@ -161,4 +162,6 @@ class CERES_EXPORT_INTERNAL DoglegStrategy : public TrustRegionStrategy {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_DOGLEG_STRATEGY_H_
|
||||
|
||||
@@ -33,11 +33,12 @@
|
||||
|
||||
#include "ceres/casts.h"
|
||||
#include "ceres/dynamic_compressed_row_sparse_matrix.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
|
||||
struct DynamicCompressedRowJacobianFinalizer {
|
||||
struct CERES_NO_EXPORT DynamicCompressedRowJacobianFinalizer {
|
||||
void operator()(SparseMatrix* base_jacobian, int num_parameters) {
|
||||
DynamicCompressedRowSparseMatrix* jacobian =
|
||||
down_cast<DynamicCompressedRowSparseMatrix*>(base_jacobian);
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/evaluator.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/scratch_evaluate_preparer.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -45,7 +46,7 @@ namespace internal {
|
||||
class Program;
|
||||
class SparseMatrix;
|
||||
|
||||
class DynamicCompressedRowJacobianWriter {
|
||||
class CERES_NO_EXPORT DynamicCompressedRowJacobianWriter {
|
||||
public:
|
||||
DynamicCompressedRowJacobianWriter(Evaluator::Options /* ignored */,
|
||||
Program* program)
|
||||
|
||||
@@ -44,12 +44,13 @@
|
||||
#include <vector>
|
||||
|
||||
#include "ceres/compressed_row_sparse_matrix.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
|
||||
class CERES_EXPORT_INTERNAL DynamicCompressedRowSparseMatrix
|
||||
class CERES_NO_EXPORT DynamicCompressedRowSparseMatrix
|
||||
: public CompressedRowSparseMatrix {
|
||||
public:
|
||||
// Set the number of rows and columns for the underlyig
|
||||
@@ -100,4 +101,6 @@ class CERES_EXPORT_INTERNAL DynamicCompressedRowSparseMatrix
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_DYNAMIC_COMPRESSED_ROW_SPARSE_MATRIX_H_
|
||||
|
||||
@@ -36,9 +36,10 @@
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
// clang-format off
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
// clang-format on
|
||||
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/linear_solver.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -53,7 +54,7 @@ class CompressedRowSparseMatrix;
|
||||
//
|
||||
// TODO(alex): Add support for Accelerate sparse solvers:
|
||||
// https://github.com/ceres-solver/ceres-solver/issues/397
|
||||
class DynamicSparseNormalCholeskySolver
|
||||
class CERES_NO_EXPORT DynamicSparseNormalCholeskySolver
|
||||
: public CompressedRowSparseMatrixSolver {
|
||||
public:
|
||||
explicit DynamicSparseNormalCholeskySolver(
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#define CERES_INTERNAL_EIGENSPARSE_H_
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifdef CERES_USE_EIGEN_SPARSE
|
||||
|
||||
@@ -42,13 +42,14 @@
|
||||
#include <string>
|
||||
|
||||
#include "Eigen/SparseCore"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/linear_solver.h"
|
||||
#include "ceres/sparse_cholesky.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
|
||||
class EigenSparseCholesky : public SparseCholesky {
|
||||
class CERES_NO_EXPORT EigenSparseCholesky : public SparseCholesky {
|
||||
public:
|
||||
// Factory
|
||||
static std::unique_ptr<SparseCholesky> Create(
|
||||
@@ -66,7 +67,7 @@ class EigenSparseCholesky : public SparseCholesky {
|
||||
|
||||
// Even though the input is double precision linear system, this class
|
||||
// solves it by computing a single precision Cholesky factorization.
|
||||
class FloatEigenSparseCholesky : public SparseCholesky {
|
||||
class CERES_NO_EXPORT FloatEigenSparseCholesky : public SparseCholesky {
|
||||
public:
|
||||
// Factory
|
||||
static std::unique_ptr<SparseCholesky> Create(
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
#include "ceres/dense_jacobian_writer.h"
|
||||
#include "ceres/dynamic_compressed_row_finalizer.h"
|
||||
#include "ceres/dynamic_compressed_row_jacobian_writer.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/program_evaluator.h"
|
||||
#include "ceres/scratch_evaluate_preparer.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
|
||||
#include "ceres/context_impl.h"
|
||||
#include "ceres/execution_summary.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/types.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -56,7 +57,7 @@ class SparseMatrix;
|
||||
// function that is useful for an optimizer that wants to minimize the least
|
||||
// squares objective. This insulates the optimizer from issues like Jacobian
|
||||
// storage, manifolds, etc.
|
||||
class CERES_EXPORT_INTERNAL Evaluator {
|
||||
class CERES_NO_EXPORT Evaluator {
|
||||
public:
|
||||
virtual ~Evaluator();
|
||||
|
||||
@@ -166,4 +167,6 @@ class CERES_EXPORT_INTERNAL Evaluator {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_EVALUATOR_H_
|
||||
|
||||
@@ -31,13 +31,13 @@
|
||||
//
|
||||
// Test utils used for evaluation testing.
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
|
||||
// Fixed sized struct for storing an evaluation.
|
||||
struct ExpectedEvaluation {
|
||||
struct CERES_NO_EXPORT ExpectedEvaluation {
|
||||
int num_rows;
|
||||
int num_cols;
|
||||
double cost;
|
||||
@@ -47,16 +47,16 @@ struct ExpectedEvaluation {
|
||||
};
|
||||
|
||||
// Compare two evaluations.
|
||||
CERES_EXPORT_INTERNAL void CompareEvaluations(int expected_num_rows,
|
||||
int expected_num_cols,
|
||||
double expected_cost,
|
||||
const double* expected_residuals,
|
||||
const double* expected_gradient,
|
||||
const double* expected_jacobian,
|
||||
const double actual_cost,
|
||||
const double* actual_residuals,
|
||||
const double* actual_gradient,
|
||||
const double* actual_jacobian);
|
||||
CERES_NO_EXPORT void CompareEvaluations(int expected_num_rows,
|
||||
int expected_num_cols,
|
||||
double expected_cost,
|
||||
const double* expected_residuals,
|
||||
const double* expected_gradient,
|
||||
const double* expected_jacobian,
|
||||
const double actual_cost,
|
||||
const double* actual_residuals,
|
||||
const double* actual_gradient,
|
||||
const double* actual_jacobian);
|
||||
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/wall_time.h"
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -35,21 +35,26 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
|
||||
CERES_NO_EXPORT
|
||||
void WriteStringToFileOrDie(const std::string& data,
|
||||
const std::string& filename);
|
||||
CERES_NO_EXPORT
|
||||
void ReadFileToStringOrDie(const std::string& filename, std::string* data);
|
||||
|
||||
// Join two path components, adding a slash if necessary. If basename is an
|
||||
// absolute path then JoinPath ignores dirname and simply returns basename.
|
||||
CERES_EXPORT_INTERNAL std::string JoinPath(const std::string& dirname,
|
||||
const std::string& basename);
|
||||
CERES_NO_EXPORT
|
||||
std::string JoinPath(const std::string& dirname, const std::string& basename);
|
||||
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_FILE_H_
|
||||
|
||||
@@ -32,12 +32,13 @@
|
||||
#define CERES_INTERNAL_FLOAT_CXSPARSE_H_
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#if !defined(CERES_NO_CXSPARSE)
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/sparse_cholesky.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -45,7 +46,7 @@ namespace internal {
|
||||
|
||||
// Fake implementation of a single precision Sparse Cholesky using
|
||||
// CXSparse.
|
||||
class FloatCXSparseCholesky : public SparseCholesky {
|
||||
class CERES_NO_EXPORT FloatCXSparseCholesky : public SparseCholesky {
|
||||
public:
|
||||
static std::unique_ptr<SparseCholesky> Create(OrderingType ordering_type);
|
||||
};
|
||||
|
||||
@@ -33,11 +33,12 @@
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
// clang-format off
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
// clang-format on
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "ceres/internal/export.h"
|
||||
#include "ceres/sparse_cholesky.h"
|
||||
|
||||
#if !defined(CERES_NO_SUITESPARSE)
|
||||
@@ -47,7 +48,7 @@ namespace internal {
|
||||
|
||||
// Fake implementation of a single precision Sparse Cholesky using
|
||||
// SuiteSparse.
|
||||
class FloatSuiteSparseCholesky : public SparseCholesky {
|
||||
class CERES_NO_EXPORT FloatSuiteSparseCholesky : public SparseCholesky {
|
||||
public:
|
||||
static std::unique_ptr<SparseCholesky> Create(OrderingType ordering_type);
|
||||
};
|
||||
|
||||
@@ -33,8 +33,9 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "ceres/internal/disable_warnings.h"
|
||||
#include "ceres/internal/eigen.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/export.h"
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
@@ -47,7 +48,7 @@ namespace internal {
|
||||
// line/direction. FunctionSample contains the information in two
|
||||
// ways. Information in the ambient space and information along the
|
||||
// direction of search.
|
||||
struct CERES_EXPORT_INTERNAL FunctionSample {
|
||||
struct CERES_NO_EXPORT FunctionSample {
|
||||
FunctionSample();
|
||||
FunctionSample(double x, double value);
|
||||
FunctionSample(double x, double value, double gradient);
|
||||
@@ -90,4 +91,6 @@ struct CERES_EXPORT_INTERNAL FunctionSample {
|
||||
} // namespace internal
|
||||
} // namespace ceres
|
||||
|
||||
#include "ceres/internal/reenable_warnings.h"
|
||||
|
||||
#endif // CERES_INTERNAL_FUNCTION_SAMPLE_H_
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
// This file is generated using generate_template_specializations.py.
|
||||
|
||||
// This include must come before any #ifndef check on Ceres compile options.
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/config.h"
|
||||
|
||||
#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user