182 lines
5.8 KiB
CMake
182 lines
5.8 KiB
CMake
cmake_minimum_required(VERSION 3.5)
|
|
if (POLICY CMP0082)
|
|
cmake_policy(SET CMP0082 NEW) # install from sub-directories immediately
|
|
endif()
|
|
if (POLICY CMP0102)
|
|
cmake_policy(SET CMP0102 NEW) # set policy on advanced variables and cmake cache
|
|
endif()
|
|
if (POLICY CMP0156)
|
|
cmake_policy(SET CMP0156 NEW) # new linker strategies
|
|
endif()
|
|
if (POLICY CMP0167)
|
|
cmake_policy(SET CMP0167 OLD) # Don't complain about boost
|
|
endif()
|
|
|
|
# allow parent project to override options
|
|
if (POLICY CMP0077)
|
|
cmake_policy(SET CMP0077 NEW)
|
|
endif(POLICY CMP0077)
|
|
|
|
|
|
# Set the version number for the library
|
|
set (GTSAM_VERSION_MAJOR 4)
|
|
set (GTSAM_VERSION_MINOR 3)
|
|
set (GTSAM_VERSION_PATCH 0)
|
|
set (GTSAM_PRERELEASE_VERSION "a0")
|
|
math (EXPR GTSAM_VERSION_NUMERIC "10000 * ${GTSAM_VERSION_MAJOR} + 100 * ${GTSAM_VERSION_MINOR} + ${GTSAM_VERSION_PATCH}")
|
|
|
|
if ("${GTSAM_PRERELEASE_VERSION}" STREQUAL "")
|
|
set (GTSAM_VERSION_STRING "${GTSAM_VERSION_MAJOR}.${GTSAM_VERSION_MINOR}.${GTSAM_VERSION_PATCH}")
|
|
else()
|
|
set (GTSAM_VERSION_STRING "${GTSAM_VERSION_MAJOR}.${GTSAM_VERSION_MINOR}${GTSAM_PRERELEASE_VERSION}")
|
|
endif()
|
|
|
|
project(GTSAM
|
|
LANGUAGES CXX C
|
|
VERSION "${GTSAM_VERSION_MAJOR}.${GTSAM_VERSION_MINOR}.${GTSAM_VERSION_PATCH}")
|
|
|
|
set (CMAKE_PROJECT_VERSION_MAJOR ${GTSAM_VERSION_MAJOR})
|
|
set (CMAKE_PROJECT_VERSION_MINOR ${GTSAM_VERSION_MINOR})
|
|
set (CMAKE_PROJECT_VERSION_PATCH ${GTSAM_VERSION_PATCH})
|
|
|
|
###############################################################################
|
|
# Gather information, perform checks, set defaults
|
|
|
|
if(MSVC)
|
|
set(MSVC_LINKER_FLAGS "/FORCE:MULTIPLE")
|
|
set(CMAKE_EXE_LINKER_FLAGS ${MSVC_LINKER_FLAGS})
|
|
set(CMAKE_MODULE_LINKER_FLAGS ${MSVC_LINKER_FLAGS})
|
|
set(CMAKE_SHARED_LINKER_FLAGS ${MSVC_LINKER_FLAGS})
|
|
set(CMAKE_STATIC_LINKER_FLAGS ${MSVC_LINKER_FLAGS})
|
|
endif()
|
|
|
|
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
include(GtsamMakeConfigFile)
|
|
include(GNUInstallDirs)
|
|
|
|
# guard against in-source builds
|
|
if(${GTSAM_SOURCE_DIR} STREQUAL ${GTSAM_BINARY_DIR})
|
|
message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ")
|
|
endif()
|
|
|
|
include(cmake/HandleGeneralOptions.cmake) # CMake build options
|
|
|
|
# Load build type flags and default to Debug mode
|
|
include(GtsamBuildTypes)
|
|
|
|
# Use macros for creating tests/timing scripts
|
|
include(GtsamTesting)
|
|
include(GtsamPrinting)
|
|
|
|
############### Decide on BOOST ######################################
|
|
# Enable or disable serialization with GTSAM_ENABLE_BOOST_SERIALIZATION
|
|
option(GTSAM_ENABLE_BOOST_SERIALIZATION "Enable Boost serialization" ON)
|
|
if(GTSAM_ENABLE_BOOST_SERIALIZATION)
|
|
add_definitions(-DGTSAM_ENABLE_BOOST_SERIALIZATION)
|
|
endif()
|
|
|
|
option(GTSAM_USE_BOOST_FEATURES "Enable Features that use Boost" ON)
|
|
if(GTSAM_USE_BOOST_FEATURES)
|
|
add_definitions(-DGTSAM_USE_BOOST_FEATURES)
|
|
endif()
|
|
|
|
if(GTSAM_ENABLE_BOOST_SERIALIZATION OR GTSAM_USE_BOOST_FEATURES)
|
|
include(cmake/HandleBoost.cmake)
|
|
endif()
|
|
######################################################################
|
|
|
|
# Other Libraries:
|
|
include(cmake/HandleCCache.cmake) # ccache
|
|
include(cmake/HandleCPack.cmake) # CPack
|
|
include(cmake/HandleEigen.cmake) # Eigen3
|
|
include(cmake/HandleMetis.cmake) # metis
|
|
include(cmake/HandleCephes.cmake) # cephes
|
|
include(cmake/HandleMKL.cmake) # MKL
|
|
include(cmake/HandleOpenMP.cmake) # OpenMP
|
|
include(cmake/HandlePerfTools.cmake) # Google perftools
|
|
include(cmake/HandlePython.cmake) # Python options and commands
|
|
include(cmake/HandleTBB.cmake) # TBB
|
|
include(cmake/HandleUninstall.cmake) # for "make uninstall"
|
|
|
|
include(cmake/HandleAllocators.cmake) # Must be after tbb, pertools
|
|
|
|
include(cmake/HandleGlobalBuildFlags.cmake) # Build flags
|
|
|
|
###############################################################################
|
|
# Add components
|
|
|
|
# Build CppUnitLite
|
|
add_subdirectory(CppUnitLite)
|
|
|
|
# Build GTSAM library
|
|
add_subdirectory(gtsam)
|
|
|
|
# Build Tests
|
|
add_subdirectory(tests)
|
|
|
|
# Build examples
|
|
add_subdirectory(examples)
|
|
|
|
# Build timing
|
|
add_subdirectory(timing)
|
|
|
|
# Build gtsam_unstable
|
|
if (GTSAM_BUILD_UNSTABLE)
|
|
add_subdirectory(gtsam_unstable)
|
|
endif()
|
|
|
|
# This is the new wrapper
|
|
if(GTSAM_BUILD_PYTHON OR GTSAM_INSTALL_MATLAB_TOOLBOX)
|
|
# Need to set this for the wrap package so we don't use the default value.
|
|
set(WRAP_PYTHON_VERSION ${GTSAM_PYTHON_VERSION}
|
|
CACHE STRING "The Python version to use for wrapping")
|
|
# Set the include directory for matlab.h
|
|
set(GTWRAP_INCLUDE_NAME "wrap")
|
|
|
|
# Copy matlab.h to the correct folder.
|
|
configure_file(${PROJECT_SOURCE_DIR}/wrap/matlab.h
|
|
${PROJECT_BINARY_DIR}/wrap/matlab.h COPYONLY)
|
|
|
|
add_subdirectory(wrap)
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/wrap/cmake")
|
|
endif()
|
|
|
|
# Python toolbox
|
|
if(GTSAM_BUILD_PYTHON)
|
|
add_subdirectory(python)
|
|
endif()
|
|
|
|
# Matlab toolbox
|
|
if(GTSAM_INSTALL_MATLAB_TOOLBOX)
|
|
add_subdirectory(matlab)
|
|
endif()
|
|
|
|
# Install config and export files
|
|
GtsamMakeConfigFile(GTSAM "${CMAKE_CURRENT_SOURCE_DIR}/gtsam_extra.cmake.in")
|
|
export(TARGETS ${GTSAM_EXPORTED_TARGETS} FILE GTSAM-exports.cmake)
|
|
|
|
if (GTSAM_BUILD_UNSTABLE)
|
|
GtsamMakeConfigFile(GTSAM_UNSTABLE "${CMAKE_CURRENT_SOURCE_DIR}/gtsam_extra.cmake.in")
|
|
export(TARGETS ${GTSAM_UNSTABLE_EXPORTED_TARGETS} FILE GTSAM_UNSTABLE-exports.cmake)
|
|
endif()
|
|
|
|
# Check for doxygen availability - optional dependency
|
|
find_package(Doxygen)
|
|
|
|
# Doxygen documentation - enabling options in subfolder
|
|
if (DOXYGEN_FOUND)
|
|
add_subdirectory(doc)
|
|
endif()
|
|
|
|
# CMake Tools
|
|
add_subdirectory(cmake)
|
|
|
|
# Print configuration variables
|
|
include(cmake/HandlePrintConfiguration.cmake)
|
|
|
|
# Print warnings at the end
|
|
include(cmake/HandleFinalChecks.cmake)
|
|
|
|
# Include CPack *after* all flags
|
|
include(CPack)
|