Generating config.h file in CMake with quaternion mode flag, dataset paths. Also added CMake option to use system-installed Eigen, which works by generating a global eigen include file containing the corresponding include paths.

release/4.3a0
Richard Roberts 2013-04-25 15:57:15 +00:00
parent 5f3238634d
commit eeef9eab32
49 changed files with 542 additions and 457 deletions

View File

@ -83,12 +83,6 @@ if (NOT GTSAM_BUILD_SHARED_LIBRARY AND NOT GTSAM_BUILD_STATIC_LIBRARY)
message(FATAL_ERROR "Both shared and static version of GTSAM library disabled - need to choose at least one!")
endif()
# Add the Quaternion Build Flag if requested
if (GTSAM_USE_QUATERNIONS)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DGTSAM_DEFAULT_QUATERNIONS")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTSAM_DEFAULT_QUATERNIONS")
endif(GTSAM_USE_QUATERNIONS)
# Flags to determine whether tests and examples are build during 'make install'
# Note that these remove the targets from the 'all'
option(GTSAM_DISABLE_TESTS_ON_INSTALL "Disables building tests during install" ON)
@ -141,6 +135,7 @@ include_directories(
gtsam/3rdparty/UFconfig
gtsam/3rdparty/CCOLAMD/Include
${CMAKE_SOURCE_DIR}
${CMAKE_BINARY_DIR} # So we can include generated config header files
CppUnitLite
${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIRS})

View File

@ -2,16 +2,39 @@
install(FILES CCOLAMD/Include/ccolamd.h DESTINATION include/gtsam/3rdparty/CCOLAMD)
install(FILES UFconfig/UFconfig.h DESTINATION include/gtsam/3rdparty/UFconfig)
# install Eigen - only the headers
install(DIRECTORY Eigen/Eigen
DESTINATION include/gtsam/3rdparty/Eigen
FILES_MATCHING PATTERN "*.h")
file(GLOB eigen_dir_headers_all "Eigen/Eigen/*")
# Option for using system Eigen or GTSAM-bundled Eigen
option(GTSAM_USE_SYSTEM_EIGEN "Find and use system-installed Eigen. If 'off', use the one bundled with GTSAM" OFF)
# ensure that Eigen folders without extensions get added
foreach(eigen_dir ${eigen_dir_headers_all})
get_filename_component(filename ${eigen_dir} NAME)
if (NOT ((${filename} MATCHES "CMakeLists.txt") OR (${filename} MATCHES "src") OR (${filename} MATCHES ".svn")))
install(FILES Eigen/Eigen/${filename} DESTINATION include/gtsam/3rdparty/Eigen/Eigen)
endif()
endforeach(eigen_dir)
# Switch for using system Eigen or GTSAM-bundled Eigen
if(GTSAM_USE_SYSTEM_EIGEN)
# Use generic Eigen include paths e.g. <Eigen/Core>
set(GTSAM_EIGEN_INCLUDE_PREFIX "")
find_package(Eigen3 REQUIRED)
include_directories(EIGEN3_INCLUDE_DIR)
else()
# Use bundled Eigen include paths e.g. <gtsam/3rdparty/Eigen/Eigen/Core>
set(GTSAM_EIGEN_INCLUDE_PREFIX "gtsam/3rdparty/Eigen/")
# Clear any variables set by FindEigen3
if(EIGEN3_INCLUDE_DIR)
set(EIGEN3_INCLUDE_DIR NOTFOUND)
endif()
# install Eigen - only the headers in our 3rdparty directory
install(DIRECTORY Eigen/Eigen
DESTINATION include/gtsam/3rdparty/Eigen
FILES_MATCHING PATTERN "*.h")
file(GLOB eigen_dir_headers_all "Eigen/Eigen/*")
# ensure that Eigen folders without extensions get added
foreach(eigen_dir ${eigen_dir_headers_all})
get_filename_component(filename ${eigen_dir} NAME)
if (NOT ((${filename} MATCHES "CMakeLists.txt") OR (${filename} MATCHES "src") OR (${filename} MATCHES ".svn")))
install(FILES Eigen/Eigen/${filename} DESTINATION include/gtsam/3rdparty/Eigen/Eigen)
endif()
endforeach(eigen_dir)
endif()
# Write Eigen include file with the paths for either the system Eigen or the GTSAM-bundled Eigen
configure_file(gtsam_eigen_includes.h.in gtsam_eigen_includes.h)

View File

@ -0,0 +1,24 @@
/* ----------------------------------------------------------------------------
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
* Atlanta, Georgia 30332-0415
* All Rights Reserved
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
* See LICENSE for the license information
* -------------------------------------------------------------------------- */
/**
* @file gtsam_eigen_includes.h
* @brief File to include the Eigen headers that we use - generated by CMake
* @author Richard Roberts
*/
#pragma once
#include <@GTSAM_EIGEN_INCLUDE_PREFIX@Eigen/Dense>
#include <@GTSAM_EIGEN_INCLUDE_PREFIX@Eigen/QR>
#include <@GTSAM_EIGEN_INCLUDE_PREFIX@Eigen/LU>
#include <@GTSAM_EIGEN_INCLUDE_PREFIX@Eigen/SVD>
#include <@GTSAM_EIGEN_INCLUDE_PREFIX@Eigen/Geometry>

View File

@ -129,6 +129,9 @@ set_property(SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/slam/dataset.cpp"
"SOURCE_TREE_DATASET_DIR=\"${CMAKE_SOURCE_DIR}/examples/Data\""
"INSTALLED_DATASET_DIR=\"${GTSAM_TOOLBOX_INSTALL_PATH}/gtsam_examples/Data\"")
# Generate config file
configure_file(config.h.in config.h)
# Create the matlab toolbox for the gtsam library
if (GTSAM_INSTALL_MATLAB_TOOLBOX)
# Set up codegen

View File

@ -23,7 +23,7 @@
#include <set>
#include <boost/shared_ptr.hpp>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
namespace gtsam {

View File

@ -17,7 +17,7 @@
#pragma once
#include <gtsam/base/dllexport.h>
#include <gtsam/dllexport.h>
#include <gtsam/base/DerivedValue.h>
#include <gtsam/base/Lie.h>

View File

@ -15,15 +15,12 @@
* @author Christian Potthast
*/
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/Matrix.h>
#include <gtsam/base/timing.h>
#include <gtsam/base/Vector.h>
#include <gtsam/base/FastList.h>
#include <gtsam/3rdparty/Eigen/Eigen/Dense>
#include <gtsam/3rdparty/Eigen/Eigen/SVD>
#include <boost/foreach.hpp>
#include <boost/tuple/tuple.hpp>

View File

@ -23,7 +23,6 @@
#pragma once
#include <gtsam/base/Vector.h>
#include <gtsam/3rdparty/Eigen/Eigen/QR>
#include <boost/format.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/math/special_functions/fpclassify.hpp>

View File

@ -22,7 +22,7 @@
#include <iostream>
#include <boost/foreach.hpp>
#include <boost/optional.hpp>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/Testable.h>
namespace gtsam {

View File

@ -29,7 +29,6 @@
#include <cstdio>
#include <gtsam/base/Vector.h>
#include <gtsam/base/types.h>
//#ifdef WIN32
//#include <Windows.h>

View File

@ -23,8 +23,8 @@
#include <list>
#include <vector>
#include <iostream>
#include <gtsam/base/types.h>
#include <gtsam/3rdparty/Eigen/Eigen/Dense>
#include <gtsam/global_includes.h>
#include <gtsam/3rdparty/gtsam_eigen_includes.h>
namespace gtsam {

View File

@ -20,9 +20,6 @@
#include <gtsam/base/cholesky.h>
#include <gtsam/base/timing.h>
#include <gtsam/3rdparty/Eigen/Eigen/Core>
#include <gtsam/3rdparty/Eigen/Eigen/Dense>
#include <boost/format.hpp>
#include <cmath>

View File

@ -17,7 +17,7 @@
*/
#include <gtsam/base/FastMap.h>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <string>

View File

@ -21,7 +21,7 @@
#include <boost/shared_ptr.hpp>
#include <boost/weak_ptr.hpp>
#include <boost/version.hpp>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/FastMap.h>
// Automatically use the new Boost timers if version is recent enough.

View File

@ -19,7 +19,7 @@
#pragma once
#include <gtsam/base/dllexport.h>
#include <gtsam/dllexport.h>
#include <cstddef>

27
gtsam/config.h.in Normal file
View File

@ -0,0 +1,27 @@
/* ----------------------------------------------------------------------------
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
* Atlanta, Georgia 30332-0415
* All Rights Reserved
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
* See LICENSE for the license information
* -------------------------------------------------------------------------- */
/**
* @file config.h
* @brief Settings and paths configured with CMake
* @author Richard Roberts
*/
#pragma once
// Paths to example datasets distributed with GTSAM
namespace gtsam {
static const char* SourceTreeDatasetDir = "@CMAKE_SOURCE_DIR@/examples/Data";
static const char* InstalledDatasetDir = "@GTSAM_TOOLBOX_INSTALL_PATH@/gtsam_examples/Data";
}
// Whether GTSAM is compiled to use quaternions for Rot3 (otherwise uses rotation matrices)
#cmakedefine GTSAM_USE_QUATERNIONS

View File

@ -18,7 +18,7 @@
#pragma once
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <map>
#include <string>

View File

@ -19,7 +19,6 @@
#include <gtsam/discrete/AlgebraicDecisionTree.h>
#include <gtsam/discrete/DiscreteKey.h>
#include <gtsam/base/types.h>
#include <gtsam/inference/Permutation.h>
#include <boost/shared_ptr.hpp>

View File

@ -21,9 +21,11 @@
#pragma once
#include <gtsam/config.h> // Get GTSAM_USE_QUATERNIONS macro
// You can override the default coordinate mode using this flag
#ifndef ROT3_DEFAULT_COORDINATES_MODE
#ifdef GTSAM_DEFAULT_QUATERNIONS
#ifdef GTSAM_USE_QUATERNIONS
// Exponential map is very cheap for quaternions
#define ROT3_DEFAULT_COORDINATES_MODE Rot3::EXPMAP
#else
@ -35,7 +37,6 @@
#include <gtsam/base/DerivedValue.h>
#include <gtsam/base/Matrix.h>
#include <gtsam/geometry/Point3.h>
#include <gtsam/3rdparty/Eigen/Eigen/Geometry>
namespace gtsam {
@ -46,7 +47,7 @@ namespace gtsam {
/**
* @brief A 3D rotation represented as a rotation matrix if the preprocessor
* symbol GTSAM_DEFAULT_QUATERNIONS is not defined, or as a quaternion if it
* symbol GTSAM_USE_QUATERNIONS is not defined, or as a quaternion if it
* is defined.
* @addtogroup geometry
* \nosubgrouping
@ -56,7 +57,7 @@ namespace gtsam {
static const size_t dimension = 3;
private:
#ifdef GTSAM_DEFAULT_QUATERNIONS
#ifdef GTSAM_USE_QUATERNIONS
/** Internal Eigen Quaternion */
Quaternion quaternion_;
#else
@ -222,18 +223,18 @@ namespace gtsam {
* exponential map, but this can be expensive to compute. The following Enum is used
* to indicate which method should be used. The default
* is determined by ROT3_DEFAULT_COORDINATES_MODE, which may be set at compile time,
* and itself defaults to Rot3::CAYLEY, or if GTSAM_DEFAULT_QUATERNIONS is defined,
* and itself defaults to Rot3::CAYLEY, or if GTSAM_USE_QUATERNIONS is defined,
* to Rot3::EXPMAP.
*/
enum CoordinatesMode {
EXPMAP, ///< Use the Lie group exponential map to retract
#ifndef GTSAM_DEFAULT_QUATERNIONS
#ifndef GTSAM_USE_QUATERNIONS
CAYLEY, ///< Retract and localCoordinates using the Cayley transform.
SLOW_CAYLEY ///< Slow matrix implementation of Cayley transform (for tests only).
#endif
};
#ifndef GTSAM_DEFAULT_QUATERNIONS
#ifndef GTSAM_USE_QUATERNIONS
/// Retraction from R^3 to Rot3 manifold using the Cayley transform
Rot3 retractCayley(const Vector& omega) const;
#endif
@ -362,7 +363,7 @@ namespace gtsam {
{
ar & boost::serialization::make_nvp("Rot3",
boost::serialization::base_object<Value>(*this));
#ifndef GTSAM_DEFAULT_QUATERNIONS
#ifndef GTSAM_USE_QUATERNIONS
ar & boost::serialization::make_nvp("rot11", rot_(0,0));
ar & boost::serialization::make_nvp("rot12", rot_(0,1));
ar & boost::serialization::make_nvp("rot13", rot_(0,2));

View File

@ -18,7 +18,9 @@
* @author Richard Roberts
*/
#ifndef GTSAM_DEFAULT_QUATERNIONS
#include <gtsam/config.h> // Get GTSAM_USE_QUATERNIONS macro
#ifndef GTSAM_USE_QUATERNIONS
#include <gtsam/geometry/Rot3.h>
#include <boost/math/constants/constants.hpp>

View File

@ -15,7 +15,9 @@
* @author Richard Roberts
*/
#ifdef GTSAM_DEFAULT_QUATERNIONS
#include <gtsam/config.h> // Get GTSAM_USE_QUATERNIONS macro
#ifdef GTSAM_USE_QUATERNIONS
#include <boost/math/constants/constants.hpp>
#include <gtsam/geometry/Rot3.h>

View File

@ -26,7 +26,7 @@
#include <CppUnitLite/TestHarness.h>
#ifndef GTSAM_DEFAULT_QUATERNIONS
#ifndef GTSAM_USE_QUATERNIONS
using namespace std;
using namespace gtsam;

View File

@ -23,7 +23,7 @@
#include <gtsam/geometry/Point3.h>
#include <gtsam/geometry/Rot3.h>
#ifdef GTSAM_DEFAULT_QUATERNIONS
#ifdef GTSAM_USE_QUATERNIONS
using namespace gtsam;

23
gtsam/global_includes.h Normal file
View File

@ -0,0 +1,23 @@
/* ----------------------------------------------------------------------------
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
* Atlanta, Georgia 30332-0415
* All Rights Reserved
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
* See LICENSE for the license information
* -------------------------------------------------------------------------- */
/**
* @file global_includes.h
* @brief Included from all GTSAM files
* @author Richard Roberts
* @addtogroup base
*/
#pragma once
#include <gtsam/config.h> // Configuration from CMake
#include <gtsam/base/types.h> // Basic types, constants, and compatibility functions
// types.h includes dllexport.h, which contains macros for dllspec tags for Windows DLLs

View File

@ -25,7 +25,7 @@
#include <boost/assign/list_inserter.hpp>
#include <boost/lexical_cast.hpp>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/FastList.h>
#include <gtsam/inference/Permutation.h>

View File

@ -27,7 +27,7 @@
#include <boost/make_shared.hpp>
#include <boost/lexical_cast.hpp>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/FastList.h>
#include <gtsam/inference/FactorGraph.h>
#include <gtsam/inference/BayesNet.h>

View File

@ -21,7 +21,7 @@
#include <boost/make_shared.hpp>
#include <boost/weak_ptr.hpp>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/inference/FactorGraph.h>
#include <gtsam/inference/BayesNet.h>

View File

@ -27,7 +27,7 @@
#include <boost/weak_ptr.hpp>
#include <boost/lexical_cast.hpp>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
namespace gtsam {

View File

@ -27,7 +27,7 @@
#include <boost/foreach.hpp>
#include <boost/function/function1.hpp>
#include <boost/lexical_cast.hpp>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/FastMap.h>
namespace gtsam {

View File

@ -18,7 +18,7 @@
#pragma once
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/Testable.h>
#include <boost/function.hpp>

View File

@ -17,7 +17,7 @@
#pragma once
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/inference/Conditional.h>
#include <gtsam/inference/IndexFactor.h>
#include <gtsam/inference/Permutation.h>

View File

@ -23,7 +23,7 @@
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/FastMap.h>
namespace gtsam {

View File

@ -17,7 +17,7 @@
#pragma once
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/inference/FactorGraph.h>
#include <gtsam/inference/IndexFactor.h>

View File

@ -23,7 +23,7 @@
#include <boost/foreach.hpp>
#include <gtsam/base/FastList.h>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/timing.h>
namespace gtsam {

View File

@ -18,7 +18,7 @@
#pragma once
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/FastMap.h>
#include <iostream>

View File

@ -20,7 +20,7 @@
#pragma once
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/linear/GaussianConditional.h>
#include <gtsam/inference/BayesNet.h>

View File

@ -21,7 +21,7 @@
#include <boost/utility.hpp>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/blockMatrices.h>
#include <gtsam/inference/IndexConditional.h>
#include <gtsam/linear/VectorValues.h>

View File

@ -15,7 +15,6 @@
* @author Michael Kaess
*/
#include <gtsam/3rdparty/Eigen/Eigen/Dense>
#include <gtsam/linear/GaussianISAM.h>
#include <gtsam/linear/GaussianBayesTree.h>

View File

@ -15,7 +15,6 @@
* @date Oct 21, 2010
*/
#include <gtsam/3rdparty/Eigen/Eigen/Dense>
#include <gtsam/linear/GaussianMultifrontalSolver.h>
namespace gtsam {

View File

@ -15,7 +15,6 @@
* @date Oct 19, 2010
*/
#include <gtsam/3rdparty/Eigen/Eigen/Dense>
#include <gtsam/base/timing.h>
#include <gtsam/linear/GaussianSequentialSolver.h>

View File

@ -22,7 +22,7 @@
#include <gtsam/linear/NoiseModel.h>
#include <gtsam/inference/FactorGraph.h>
#include <gtsam/base/blockMatrices.h>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <boost/tuple/tuple.hpp>

View File

@ -18,7 +18,7 @@
#pragma once
#include <gtsam/base/Vector.h>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <boost/format.hpp>
#include <boost/lexical_cast.hpp>

View File

@ -17,7 +17,7 @@
*/
#pragma once
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <boost/lexical_cast.hpp>
#include <exception>

View File

@ -20,7 +20,7 @@
#include <boost/function.hpp>
#include <string>
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam/base/FastVector.h>
#include <gtsam/base/FastList.h>
#include <gtsam/base/FastSet.h>

View File

@ -16,7 +16,6 @@
* @date May 14, 2012
*/
#include <gtsam/3rdparty/Eigen/Eigen/Dense>
#include <gtsam/base/timing.h>
#include <gtsam/linear/GaussianSequentialSolver.h>
#include <gtsam/linear/GaussianMultifrontalSolver.h>

View File

@ -40,8 +40,8 @@ namespace gtsam {
string findExampleDataFile(const string& name) {
// Search source tree and installed location
vector<string> rootsToSearch;
rootsToSearch.push_back(SOURCE_TREE_DATASET_DIR); // Defined by CMake, see gtsam/gtsam/CMakeLists.txt
rootsToSearch.push_back(INSTALLED_DATASET_DIR); // Defined by CMake, see gtsam/gtsam/CMakeLists.txt
rootsToSearch.push_back(SourceTreeDatasetDir); // Defined by CMake, see gtsam/gtsam/CMakeLists.txt
rootsToSearch.push_back(InstalledDatasetDir); // Defined by CMake, see gtsam/gtsam/CMakeLists.txt
// Search for filename as given, and with .graph and .txt extensions
vector<string> namesToSearch;

View File

@ -17,7 +17,7 @@
* @date June 14, 2012
*/
#include <gtsam/base/types.h>
#include <gtsam/global_includes.h>
#include <gtsam_unstable/base/dllexport.h>
#include <string>

View File

@ -3,8 +3,6 @@
* @author Alex Cunningham
*/
#include <gtsam/3rdparty/Eigen/Eigen/LU>
#include <gtsam/base/numericalDerivative.h>
#include <gtsam/base/Vector.h>
#include <gtsam/base/Lie-inl.h>