This makes citations accessible directly on Github and allows users to
automatically generate citations in APA and BibTeX format.
Change-Id: Ic5eb3857c92d93a6afafba06a5009da5db2b3c60
Compiling jet_test using the /std:c++17 switch triggers a C3198 compile
error in <numeric>. Moving #pragma below all the includes, allows to
workaround the issue.
Additionally, locally ensure the floating-point model is always
/fp:precise to be able to access the floating-point environment in
jet_test.
Change-Id: Ia5b3a3dac13baf46546ac1d0d304fc05512f8816
If SuiteSparse is found, an unhelpful message "Found SuiteSparse: TRUE
..." is printed. Instead, report the found include directory and version
information which was previously not shown due to unset
SuiteSparse_FOUND variable.
Change-Id: Ib43fb99934f34e6007110007d2cd4a8fbd841aa2
pair_hash.h uses std::size_t and std::hash but does not include the
corresponding headers <cstddef> and <functional>.
Change-Id: I194a5c76e8f50b1574e1359f616351581033c576
* Use generator expression instead of CMAKE_RUNTIME_OUTPUT_DIRECTORY
to get the path of compiled CUDA test targets when running
cuda-memcheck tests.
* Only add cuda-memcheck targets if testing is enabled.
Change-Id: Idea498dd9008b7e5075d4af9775f9f43716e22f1
covariance.h was using SUITE_SPARSE even when SUITESPARSE
was disabled because it did not have config.h included in it
so it did not see that CERES_NO_SUITESPARSE was defined.
Add more config.h includes to files that are using these
configuration macros.
Change-Id: I6b1d2c2bd9e559de40a6332cd6be85ad4da3377b
A recent change introduced some uses of `IN_LIST` in
FindSuiteSparse.cmake, but this is only introduced in cmake 3.3 and
breaks downstream projects that set cmake_minimum_required() to anything
lower.
This commit locally sets CMP0057, which enables the `IN_LIST` operator
and fixes the build for these projects.
Primarily motivated by colmap, which sets cmake_minimum_required(3.0)
and is currently broken: https://github.com/colmap/colmap/issues/1451
Change-Id: I9580c86f56248611326a932b8650b9048fb0ff14
In the case, necessary properties of import targets cannot be set (i.e.,
either because the include directory or the library was found), do not
define import target to begin with.
Change-Id: Id216cd692a8ec240a20f65b174f196ddaa306c2b
Overriding export gflags export macros breaks glog in shared Ceres
solver builds. Threfore, always compile gtest as a static library to
avoid the need of overriding the export macros.
Change-Id: Ibc9a04a771085caa8f02c81745ce626643df8450
These changes allow the use of a SuiteSparse CMake package from
https://github.com/sergiud/SuiteSparse that allows native compilation of
SuiteSparse using CMake on a variety of platforms Packages generated
using official SuiteSparse makefiles can still be used without
modifications. The find module remains agnostic to specific CMake
package implementation.
CMake packages have the advantage that they are self-contained and
relocatable. The latter is particularly useful in cross-compilation
scenarios.
Fixes#728
Change-Id: I089d5c6f87c05b1530a5ab9a36dff2fcbe82d13d
In many cases, manifolds stored in ProductManifold have a default
constructor which can simplify ProductManifold initialization even
further. Allow default construction of ProductManifold in this case.
Change-Id: I29b2612870c02232556688019a77049709684a55
* Fix workspace type in CUDADenseQR and CUDADenseCholesky --
Workspace sizes are in terms of number of elements, not bytes.
* Add cuda-memcheck tests to catch such CUDA memory errors in
the future.
Change-Id: I3dd0f0947daba9e4c6cd0216bef81d694547d505
Since the number of manifolds used to initialize ProductManifold and
their types are known at compile-time, it is possible to avoid storing
pointers to the base class as required by a homogeneous, currently
dynamically sized container. Instead, we can use std::tuple<> as a
heterogenous container with the number of elements fixed at compile-time
that allows us to store the concrete manifold realizations.
The advantage of this approach is that we can bypass the vtable when
iterating over each manifold within ProductManifold. The indirection is
invoked only once while accessing the ProductManifoldImpl members.
Additionally, potential dynamic memory allocations by a std::vector can
be completely avoided. This makes the ProductManifold implementation
more efficient both in memory and runtime.
Change-Id: Ic71b0c175ab726f8992e9703f7666bca477baf19
Previously they were defined in manifold.h but their implementations
were in the internal directory and to prevent circular dependencies
the implementation headers were pushed to the bottom of manifold.h
This started out as one header and has become progressively worse
as more manifolds are templated.
This change moves the two manifolds into their own headers which
also contain their implementations.
Change-Id: I671da0279a47cd2ff1f52c69a1d159426f55bd80
This brings it in line with other manifolds like SphereManifold
and LineManifold, where the user has the choice to specify the size
of the manifold at compile time or runtime.
Most of the time the size is known at compile time so this will
speed up the common case.
Change-Id: I0c7ff8b7a9a64a81203eb11afc074874e208815a
Disable the definition of `min`/`max` macros by defining `NOMINMAX`
and prevent macro substitution in the public interface.
Also, quiet floating-point comparisons are defined as template functions
by the MSVC STL which causes compilation errors due to ambiguities in
resolving the template parameter types.
Fixes#668Fixes#716Fixes#718
Change-Id: I5fe7832a6a3a7ad0421a2557527528c34b88e9c7
Remove logic invoked based on obsolete variable definitions. Use new
(explicit) target_link_libraries syntax to link binaries against
dependencies. Do not rely on prior knowledge about the compiler for
specifying flags and system libraries but instead directly test their
presence to be more robust.
Change-Id: I76e0d10fae6eba4b343048e4404f0a9b08c7cb6c
Also refactor the logic for generating ba tests a bit
breaking it into dense, sparse and iterative tests.
Change-Id: I6b33e3b047ef900b12907bd150febe4744779b7a
Current language standard selection mechanism is quite convoluted and
the logic for propagating a specific C++ language standard (which cannot
be fully enforced anyway) is unnecessarily complicated. Instead
communicate the minimum required C++ standard and let CMake handle the
requirement. This allows the compiler and consumers to use newer
language revisions if available. The language standard used to compile
Ceres solver can still be set via `CMAKE_CXX_STANDARD`.
Move to CMake 3.10 which is supported by Ubuntu 18.04 LTS and simplify
the corresponding language features request.
Change-Id: Ib1f95e2bc5f06bf1275a62565d303eb0f114d127
1. Add CUDA initialization and cleanup management to the
ContextImpl object. The ContextImpl is now solely responsible
for managing CUDA-related resources.
2. All CUDA dense solvers now use lazy CUDA initialization
via the ContextImpl object.
Change-Id: Ief456860c72e462367ee997d389c19e2bff50baf