aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt324
1 files changed, 139 insertions, 185 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index db5acba..b89d55a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -83,59 +83,95 @@ SET(CERES_ABI_VERSION 1.7.0)
ENABLE_TESTING()
-OPTION(BUILD_TESTING
- "Enable tests"
+OPTION(MINIGLOG "Use a stripped down version of glog" OFF)
+OPTION(GFLAGS "Enable Google Flags." ON)
+# Template specializations for the Schur complement based solvers. If
+# compile time, binary size or compiler performance is an issue, you
+# may consider disabling this.
+OPTION(SCHUR_SPECIALIZATIONS "Enable fixed-size schur specializations." ON)
+OPTION(CUSTOM_BLAS
+ "Use handcoded BLAS routines (usually faster) instead of Eigen."
ON)
-
-OPTION(BUILD_ANDROID
- "Build for Android. Use build_android.sh instead of setting this."
+# Multithreading using OpenMP
+OPTION(OPENMP "Enable threaded solving in Ceres (requires OpenMP)" ON)
+# TODO(sameeragarwal): Replace this with a positive option instead?
+OPTION(DISABLE_TR1
+ "Don't use TR1. This replaces some hash tables with sets. Slower."
OFF)
+# Line search minimizer is useful for large scale problems or when
+# sparse linear algebra libraries are not available. If compile time,
+# binary size or compiler performance is an issue, consider disabling
+# this.
+OPTION(LINE_SEARCH_MINIMIZER "Enable the line search minimizer." ON)
+OPTION(BUILD_TESTING "Enable tests" ON)
+OPTION(BUILD_DOCUMENTATION "Build User's Guide (html)" OFF)
+OPTION(BUILD_EXAMPLES "Build examples" ON)
-OPTION(BUILD_SHARED
- "Build a dynamically linkable version of Ceres Solver."
- ON)
+# Default locations to search for on various platforms.
-# To get a more static build, try the following line on Mac and Linux:
-# SET(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
+# Libraries
+LIST(APPEND CMAKE_LIBRARY_PATH /opt/local/lib)
+LIST(APPEND CMAKE_LIBRARY_PATH /opt/local/lib/ufsparse) # Mac OS X
+LIST(APPEND CMAKE_LIBRARY_PATH /usr/lib)
+LIST(APPEND CMAKE_LIBRARY_PATH /usr/lib/atlas)
+LIST(APPEND CMAKE_LIBRARY_PATH /usr/lib/suitesparse) # Ubuntu
+LIST(APPEND CMAKE_LIBRARY_PATH /usr/lib64/atlas)
+LIST(APPEND CMAKE_LIBRARY_PATH /usr/local/homebrew/lib) # Mac OS X
+LIST(APPEND CMAKE_LIBRARY_PATH /usr/local/lib)
+LIST(APPEND CMAKE_LIBRARY_PATH /usr/local/lib/suitesparse)
+
+# Headers
+LIST(APPEND CMAKE_INCLUDE_PATH /opt/local/include)
+LIST(APPEND CMAKE_INCLUDE_PATH /opt/local/include/ufsparse) # Mac OS X
+LIST(APPEND CMAKE_INCLUDE_PATH /opt/local/var/macports/software/eigen3/opt/local/include/eigen3) # Mac OS X
+LIST(APPEND CMAKE_INCLUDE_PATH /usr/include)
+LIST(APPEND CMAKE_INCLUDE_PATH /usr/include/eigen3) # Ubuntu 10.04's default location.
+LIST(APPEND CMAKE_INCLUDE_PATH /usr/include/suitesparse) # Ubuntu
+LIST(APPEND CMAKE_INCLUDE_PATH /usr/local/homebrew/include) # Mac OS X
+LIST(APPEND CMAKE_INCLUDE_PATH /usr/local/homebrew/include/eigen3) # Mac OS X
+LIST(APPEND CMAKE_INCLUDE_PATH /usr/local/include)
+LIST(APPEND CMAKE_INCLUDE_PATH /usr/local/include/eigen3)
+LIST(APPEND CMAKE_INCLUDE_PATH /usr/local/include/suitesparse)
-# Default locations to search for on various platforms.
-LIST(APPEND SEARCH_LIBS /usr/lib)
-LIST(APPEND SEARCH_LIBS /usr/local/lib)
-LIST(APPEND SEARCH_LIBS /usr/local/homebrew/lib) # Mac OS X
-LIST(APPEND SEARCH_LIBS /opt/local/lib)
-
-LIST(APPEND SEARCH_HEADERS /usr/include)
-LIST(APPEND SEARCH_HEADERS /usr/local/include)
-LIST(APPEND SEARCH_HEADERS /usr/local/homebrew/include) # Mac OS X
-LIST(APPEND SEARCH_HEADERS /opt/local/include)
-
-# Locations to search for Eigen
-SET(EIGEN_SEARCH_HEADERS ${SEARCH_HEADERS})
-LIST(APPEND EIGEN_SEARCH_HEADERS /usr/include/eigen3) # Ubuntu 10.04's default location.
-LIST(APPEND EIGEN_SEARCH_HEADERS /usr/local/include/eigen3)
-LIST(APPEND EIGEN_SEARCH_HEADERS /usr/local/homebrew/include/eigen3) # Mac OS X
-LIST(APPEND EIGEN_SEARCH_HEADERS /opt/local/var/macports/software/eigen3/opt/local/include/eigen3) # Mac OS X
-
-# Locations to search for SuiteSparse
-SET(SUITESPARSE_SEARCH_LIBS ${SEARCH_LIBS})
-LIST(APPEND SUITESPARSE_SEARCH_LIBS /usr/lib/suitesparse) # Ubuntu
-LIST(APPEND SUITESPARSE_SEARCH_LIBS /usr/local/lib/suitesparse)
-LIST(APPEND SUITESPARSE_SEARCH_LIBS /opt/local/lib/ufsparse) # Mac OS X
-
-SET(SUITESPARSE_SEARCH_HEADERS ${SEARCH_HEADERS})
-LIST(APPEND SUITESPARSE_SEARCH_HEADERS /usr/include/suitesparse) # Ubuntu
-LIST(APPEND SUITESPARSE_SEARCH_HEADERS /usr/local/include/suitesparse)
-LIST(APPEND SUITESPARSE_SEARCH_HEADERS /opt/local/include/ufsparse) # Mac OS X
-
-SET(CXSPARSE_SEARCH_LIBS ${SEARCH_LIBS})
-SET(CXSPARSE_SEARCH_HEADERS ${SEARCH_HEADERS})
-LIST(APPEND CXSPARSE_SEARCH_HEADERS /usr/include/suitesparse) # Ubuntu
+# Eigen
+FIND_PATH(EIGEN_INCLUDE NAMES Eigen/Core)
+IF (NOT EXISTS ${EIGEN_INCLUDE})
+ MESSAGE(FATAL_ERROR "Can't find Eigen. Try passing -DEIGEN_INCLUDE=...")
+ELSE (NOT EXISTS ${EIGEN_INCLUDE})
+ MESSAGE("-- Found Eigen 3.x: ${EIGEN_INCLUDE}")
+ENDIF (NOT EXISTS ${EIGEN_INCLUDE})
+
+SET(BLAS_AND_LAPACK_FOUND TRUE)
+IF ((NOT DEFINED LAPACK) OR (DEFINED LAPACK AND LAPACK))
+ FIND_PACKAGE(LAPACK)
+ IF (LAPACK_FOUND)
+ MESSAGE("-- Found LAPACK library: ${LAPACK_LIBRARIES}")
+ ELSE (LAPACK_FOUND)
+ MESSAGE("-- Did not find LAPACK library")
+ SET(BLAS_AND_LAPACK_FOUND FALSE)
+ ENDIF (LAPACK_FOUND)
+
+ FIND_PACKAGE(BLAS)
+ IF (BLAS_FOUND)
+ MESSAGE("-- Found BLAS library: ${BLAS_LIBRARIES}")
+ ELSE (BLAS_FOUND)
+ MESSAGE("-- Did not find BLAS library")
+ SET(BLAS_AND_BLAS_FOUND FALSE)
+ ENDIF (BLAS_FOUND)
+
+ELSE ((NOT DEFINED LAPACK) OR (DEFINED LAPACK AND LAPACK))
+ SET(BLAS_AND_LAPACK_FOUND FALSE)
+ENDIF ((NOT DEFINED LAPACK) OR (DEFINED LAPACK AND LAPACK))
+
+IF (NOT BLAS_AND_LAPACK_FOUND)
+ ADD_DEFINITIONS(-DCERES_NO_LAPACK)
+ENDIF (NOT BLAS_AND_LAPACK_FOUND)
IF ((NOT DEFINED SUITESPARSE) OR (DEFINED SUITESPARSE AND SUITESPARSE))
# Check for SuiteSparse dependencies
SET(AMD_FOUND TRUE)
-FIND_LIBRARY(AMD_LIB NAMES amd PATHS ${SUITESPARSE_SEARCH_LIBS})
+FIND_LIBRARY(AMD_LIB NAMES amd)
IF (EXISTS ${AMD_LIB})
MESSAGE("-- Found AMD library: ${AMD_LIB}")
ELSE (EXISTS ${AMD_LIB})
@@ -143,7 +179,7 @@ ELSE (EXISTS ${AMD_LIB})
SET(AMD_FOUND FALSE)
ENDIF (EXISTS ${AMD_LIB})
-FIND_PATH(AMD_INCLUDE NAMES amd.h PATHS ${SUITESPARSE_SEARCH_HEADERS})
+FIND_PATH(AMD_INCLUDE NAMES amd.h)
IF (EXISTS ${AMD_INCLUDE})
MESSAGE("-- Found AMD header in: ${AMD_INCLUDE}")
ELSE (EXISTS ${AMD_INCLUDE})
@@ -152,7 +188,7 @@ ELSE (EXISTS ${AMD_INCLUDE})
ENDIF (EXISTS ${AMD_INCLUDE})
SET(CAMD_FOUND TRUE)
-FIND_LIBRARY(CAMD_LIB NAMES camd PATHS ${SUITESPARSE_SEARCH_LIBS})
+FIND_LIBRARY(CAMD_LIB NAMES camd)
IF (EXISTS ${CAMD_LIB})
MESSAGE("-- Found CAMD library: ${CAMD_LIB}")
ELSE (EXISTS ${CAMD_LIB})
@@ -160,7 +196,7 @@ ELSE (EXISTS ${CAMD_LIB})
SET(CAMD_FOUND FALSE)
ENDIF (EXISTS ${CAMD_LIB})
-FIND_PATH(CAMD_INCLUDE NAMES camd.h PATHS ${SUITESPARSE_SEARCH_HEADERS})
+FIND_PATH(CAMD_INCLUDE NAMES camd.h)
IF (EXISTS ${CAMD_INCLUDE})
MESSAGE("-- Found CAMD header in: ${CAMD_INCLUDE}")
ELSE (EXISTS ${CAMD_INCLUDE})
@@ -169,7 +205,7 @@ ELSE (EXISTS ${CAMD_INCLUDE})
ENDIF (EXISTS ${CAMD_INCLUDE})
SET(COLAMD_FOUND TRUE)
-FIND_LIBRARY(COLAMD_LIB NAMES colamd PATHS ${SUITESPARSE_SEARCH_LIBS})
+FIND_LIBRARY(COLAMD_LIB NAMES colamd)
IF (EXISTS ${COLAMD_LIB})
MESSAGE("-- Found COLAMD library: ${COLAMD_LIB}")
ELSE (EXISTS ${COLAMD_LIB})
@@ -177,7 +213,7 @@ ELSE (EXISTS ${COLAMD_LIB})
SET(COLAMD_FOUND FALSE)
ENDIF (EXISTS ${COLAMD_LIB})
-FIND_PATH(COLAMD_INCLUDE NAMES colamd.h PATHS ${SUITESPARSE_SEARCH_HEADERS})
+FIND_PATH(COLAMD_INCLUDE NAMES colamd.h)
IF (EXISTS ${COLAMD_INCLUDE})
MESSAGE("-- Found COLAMD header in: ${COLAMD_INCLUDE}")
ELSE (EXISTS ${COLAMD_INCLUDE})
@@ -186,7 +222,7 @@ ELSE (EXISTS ${COLAMD_INCLUDE})
ENDIF (EXISTS ${COLAMD_INCLUDE})
SET(CCOLAMD_FOUND TRUE)
-FIND_LIBRARY(CCOLAMD_LIB NAMES ccolamd PATHS ${SUITESPARSE_SEARCH_LIBS})
+FIND_LIBRARY(CCOLAMD_LIB NAMES ccolamd)
IF (EXISTS ${CCOLAMD_LIB})
MESSAGE("-- Found CCOLAMD library: ${CCOLAMD_LIB}")
ELSE (EXISTS ${CCOLAMD_LIB})
@@ -194,7 +230,7 @@ ELSE (EXISTS ${CCOLAMD_LIB})
SET(CCOLAMD_FOUND FALSE)
ENDIF (EXISTS ${CCOLAMD_LIB})
-FIND_PATH(CCOLAMD_INCLUDE NAMES ccolamd.h PATHS ${SUITESPARSE_SEARCH_HEADERS})
+FIND_PATH(CCOLAMD_INCLUDE NAMES ccolamd.h)
IF (EXISTS ${CCOLAMD_INCLUDE})
MESSAGE("-- Found CCOLAMD header in: ${CCOLAMD_INCLUDE}")
ELSE (EXISTS ${CCOLAMD_INCLUDE})
@@ -203,7 +239,7 @@ ELSE (EXISTS ${CCOLAMD_INCLUDE})
ENDIF (EXISTS ${CCOLAMD_INCLUDE})
SET(CHOLMOD_FOUND TRUE)
-FIND_LIBRARY(CHOLMOD_LIB NAMES cholmod PATHS ${SUITESPARSE_SEARCH_LIBS})
+FIND_LIBRARY(CHOLMOD_LIB NAMES cholmod)
IF (EXISTS ${CHOLMOD_LIB})
MESSAGE("-- Found CHOLMOD library: ${CHOLMOD_LIB}")
ELSE (EXISTS ${CHOLMOD_LIB})
@@ -211,7 +247,7 @@ ELSE (EXISTS ${CHOLMOD_LIB})
SET(CHOLMOD_FOUND FALSE)
ENDIF (EXISTS ${CHOLMOD_LIB})
-FIND_PATH(CHOLMOD_INCLUDE NAMES cholmod.h PATHS ${SUITESPARSE_SEARCH_HEADERS})
+FIND_PATH(CHOLMOD_INCLUDE NAMES cholmod.h)
IF (EXISTS ${CHOLMOD_INCLUDE})
MESSAGE("-- Found CHOLMOD header in: ${CHOLMOD_INCLUDE}")
ELSE (EXISTS ${CHOLMOD_INCLUDE})
@@ -220,7 +256,7 @@ ELSE (EXISTS ${CHOLMOD_INCLUDE})
ENDIF (EXISTS ${CHOLMOD_INCLUDE})
SET(SUITESPARSEQR_FOUND TRUE)
-FIND_LIBRARY(SUITESPARSEQR_LIB NAMES spqr PATHS ${SUITESPARSE_SEARCH_LIBS})
+FIND_LIBRARY(SUITESPARSEQR_LIB NAMES spqr)
IF (EXISTS ${SUITESPARSEQR_LIB})
MESSAGE("-- Found SUITESPARSEQR library: ${SUITESPARSEQR_LIB}")
ELSE (EXISTS ${SUITESPARSEQR_LIB})
@@ -228,7 +264,7 @@ ELSE (EXISTS ${SUITESPARSEQR_LIB})
SET(SUITESPARSEQR_FOUND FALSE)
ENDIF (EXISTS ${SUITESPARSEQR_LIB})
-FIND_PATH(SUITESPARSEQR_INCLUDE NAMES SuiteSparseQR.hpp PATHS ${SUITESPARSE_SEARCH_HEADERS})
+FIND_PATH(SUITESPARSEQR_INCLUDE NAMES SuiteSparseQR.hpp)
IF (EXISTS ${SUITESPARSEQR_INCLUDE})
MESSAGE("-- Found SUITESPARSEQR header in: ${SUITESPARSEQR_INCLUDE}")
ELSE (EXISTS ${SUITESPARSEQR_INCLUDE})
@@ -241,18 +277,14 @@ ENDIF (EXISTS ${SUITESPARSEQR_INCLUDE})
SET(SUITESPARSE_CONFIG_FOUND TRUE)
SET(UFCONFIG_FOUND TRUE)
-FIND_LIBRARY(SUITESPARSE_CONFIG_LIB
- NAMES suitesparseconfig
- PATHS ${SUITESPARSE_SEARCH_LIBS})
+FIND_LIBRARY(SUITESPARSE_CONFIG_LIB NAMES suitesparseconfig)
IF (EXISTS ${SUITESPARSE_CONFIG_LIB})
MESSAGE("-- Found SuiteSparse_config library: ${SUITESPARSE_CONFIG_LIB}")
ELSE (EXISTS ${SUITESPARSE_CONFIG_LIB})
MESSAGE("-- Did not find SuiteSparse_config library")
ENDIF (EXISTS ${SUITESPARSE_CONFIG_LIB})
-FIND_PATH(SUITESPARSE_CONFIG_INCLUDE
- NAMES SuiteSparse_config.h
- PATHS ${SUITESPARSE_SEARCH_HEADERS})
+FIND_PATH(SUITESPARSE_CONFIG_INCLUDE NAMES SuiteSparse_config.h)
IF (EXISTS ${SUITESPARSE_CONFIG_INCLUDE})
MESSAGE("-- Found SuiteSparse_config header in: ${SUITESPARSE_CONFIG_INCLUDE}")
SET(UFCONFIG_FOUND FALSE)
@@ -260,20 +292,20 @@ ELSE (EXISTS ${SUITESPARSE_CONFIG_INCLUDE})
MESSAGE("-- Did not find SuiteSparse_config header")
ENDIF (EXISTS ${SUITESPARSE_CONFIG_INCLUDE})
-IF (NOT EXISTS ${SUITESPARSE_CONFIG_LIB} OR NOT EXISTS ${SUITESPARSE_CONFIG_INCLUDE})
+IF (NOT EXISTS ${SUITESPARSE_CONFIG_LIB} OR
+ NOT EXISTS ${SUITESPARSE_CONFIG_INCLUDE})
SET(SUITESPARSE_CONFIG_FOUND FALSE)
- FIND_PATH(UFCONFIG_INCLUDE
- NAMES UFconfig.h
- PATHS ${SUITESPARSE_SEARCH_HEADERS})
+ FIND_PATH(UFCONFIG_INCLUDE NAMES UFconfig.h)
IF (EXISTS ${UFCONFIG_INCLUDE})
MESSAGE("-- Found UFconfig header in: ${UFCONFIG_INCLUDE}")
ELSE (EXISTS ${UFCONFIG_INCLUDE})
MESSAGE("-- Did not find UFconfig header")
SET(UFCONFIG_FOUND FALSE)
ENDIF (EXISTS ${UFCONFIG_INCLUDE})
-ENDIF (NOT EXISTS ${SUITESPARSE_CONFIG_LIB} OR NOT EXISTS ${SUITESPARSE_CONFIG_INCLUDE})
+ENDIF (NOT EXISTS ${SUITESPARSE_CONFIG_LIB} OR
+ NOT EXISTS ${SUITESPARSE_CONFIG_INCLUDE})
-FIND_LIBRARY(METIS_LIB NAMES metis PATHS ${SUITESPARSE_SEARCH_LIBS})
+FIND_LIBRARY(METIS_LIB NAMES metis)
IF (EXISTS ${METIS_LIB})
MESSAGE("-- Found METIS library: ${METIS_LIB}")
ELSE (EXISTS ${METIS_LIB})
@@ -282,7 +314,7 @@ ENDIF (EXISTS ${METIS_LIB})
# SuiteSparseQR may be compiled with Intel Threading Building Blocks.
SET(TBB_FOUND TRUE)
-FIND_LIBRARY(TBB_LIB NAMES tbb PATHS ${SEARCH_LIBS})
+FIND_LIBRARY(TBB_LIB NAMES tbb)
IF (EXISTS ${TBB_LIB})
MESSAGE("-- Found TBB library: ${TBB_LIB}")
ELSE (EXISTS ${TBB_LIB})
@@ -290,7 +322,7 @@ ELSE (EXISTS ${TBB_LIB})
SET(TBB_FOUND FALSE)
ENDIF (EXISTS ${TBB_LIB})
-FIND_LIBRARY(TBB_MALLOC_LIB NAMES tbbmalloc PATHS ${SEARCH_LIBS})
+FIND_LIBRARY(TBB_MALLOC_LIB NAMES tbbmalloc)
IF (EXISTS ${TBB_MALLOC_LIB})
MESSAGE("-- Found TBB Malloc library: ${TBB_MALLOC_LIB}")
ELSE (EXISTS ${TBB_MALLOC_LIB})
@@ -298,32 +330,8 @@ ELSE (EXISTS ${TBB_MALLOC_LIB})
SET(TBB_FOUND FALSE)
ENDIF (EXISTS ${TBB_MALLOC_LIB})
-SET(BLAS_AND_LAPACK_FOUND TRUE)
-IF (APPLE)
- # Mac OS X has LAPACK/BLAS bundled in a framework called
- # "vecLib". Search for that instead of for the normal "lapack"
- # library.
- FIND_LIBRARY(LAPACK_LIB NAMES vecLib)
-ELSE (APPLE)
- FIND_LIBRARY(BLAS_LIB NAMES blas)
- IF (EXISTS ${BLAS_LIB})
- MESSAGE("-- Found BLAS library: ${BLAS_LIB}")
- ELSE (EXISTS ${BLAS_LIB})
- MESSAGE("-- Did not find BLAS library")
- SET(BLAS_AND_LAPACK_FOUND FALSE)
- ENDIF (EXISTS ${BLAS_LIB})
- FIND_LIBRARY(LAPACK_LIB NAMES lapack)
-ENDIF (APPLE)
-
-IF (EXISTS ${LAPACK_LIB})
- MESSAGE("-- Found LAPACK library: ${LAPACK_LIB}")
-ELSE (EXISTS ${LAPACK_LIB})
- SET(BLAS_AND_LAPACK_FOUND FALSE)
- MESSAGE("-- Did not find LAPACK library")
-ENDIF (EXISTS ${LAPACK_LIB})
-
-# We don't use SET(SUITESPARSE_FOUND ${AMD_FOUND} ...) in order to
-# be able to check whether SuiteSparse is available withou expanding
+# We don't use SET(SUITESPARSE_FOUND ${AMD_FOUND} ...) in order to be
+# able to check whether SuiteSparse is available without expanding
# SUITESPARSE_FOUND with ${}. This means further checks could be:
#
# IF (SUITESPARSE_FOUND)
@@ -373,7 +381,7 @@ ENDIF (DEFINED SUITESPARSE)
IF ((NOT DEFINED CXSPARSE) OR (DEFINED CXSPARSE AND CXSPARSE))
SET(CXSPARSE_FOUND ON)
-FIND_LIBRARY(CXSPARSE_LIB NAMES cxsparse PATHS ${CXSPARSE_SEARCH_LIBS})
+FIND_LIBRARY(CXSPARSE_LIB NAMES cxsparse)
IF (EXISTS ${CXSPARSE_LIB})
MESSAGE("-- Found CXSparse library in: ${CXSPARSE_LIB}")
ELSE (EXISTS ${CXSPARSE_LIB})
@@ -381,7 +389,7 @@ ELSE (EXISTS ${CXSPARSE_LIB})
SET(CXSPARSE_FOUND FALSE)
ENDIF (EXISTS ${CXSPARSE_LIB})
-FIND_PATH(CXSPARSE_INCLUDE NAMES cs.h PATHS ${CXSPARSE_SEARCH_HEADERS})
+FIND_PATH(CXSPARSE_INCLUDE NAMES cs.h)
IF (EXISTS ${CXSPARSE_INCLUDE})
MESSAGE("-- Found CXSparse header in: ${CXSPARSE_INCLUDE}")
ELSE (EXISTS ${CXSPARSE_INCLUDE})
@@ -409,20 +417,15 @@ ELSE (DEFINED CXSPARSE)
ENDIF (CXSPARSE_FOUND)
ENDIF (DEFINED CXSPARSE)
-# Google Flags
-OPTION(GFLAGS
- "Enable Google Flags."
- ON)
-
IF (GFLAGS)
- FIND_LIBRARY(GFLAGS_LIB NAMES gflags PATHS ${SEARCH_LIBS})
+ FIND_LIBRARY(GFLAGS_LIB NAMES gflags)
IF (NOT EXISTS ${GFLAGS_LIB})
MESSAGE(FATAL_ERROR
"Can't find Google Flags. Please specify: "
"-DGFLAGS_LIB=...")
ENDIF (NOT EXISTS ${GFLAGS_LIB})
MESSAGE("-- Found Google Flags library: ${GFLAGS_LIB}")
- FIND_PATH(GFLAGS_INCLUDE NAMES gflags/gflags.h PATHS ${SEARCH_HEADERS})
+ FIND_PATH(GFLAGS_INCLUDE NAMES gflags/gflags.h)
IF (NOT EXISTS ${GFLAGS_INCLUDE})
MESSAGE(FATAL_ERROR
"Can't find Google Flags. Please specify: "
@@ -434,77 +437,44 @@ ELSE (GFLAGS)
ADD_DEFINITIONS(-DCERES_NO_GFLAGS)
ENDIF (GFLAGS)
-# Google Logging
-IF (NOT BUILD_ANDROID)
- FIND_LIBRARY(GLOG_LIB NAMES glog PATHS ${SEARCH_LIBS})
- IF (NOT EXISTS ${GLOG_LIB})
- MESSAGE(FATAL_ERROR
- "Can't find Google Log. Please specify: "
- "-DGLOG_LIB=...")
- ENDIF (NOT EXISTS ${GLOG_LIB})
- MESSAGE("-- Found Google Log library: ${GLOG_LIB}")
-
- FIND_PATH(GLOG_INCLUDE NAMES glog/logging.h PATHS ${SEARCH_HEADERS})
- IF (NOT EXISTS ${GLOG_INCLUDE})
- MESSAGE(FATAL_ERROR
- "Can't find Google Log. Please specify: "
- "-DGLOG_INCLUDE=...")
- ENDIF (NOT EXISTS ${GLOG_INCLUDE})
- MESSAGE("-- Found Google Log header in: ${GLOG_INCLUDE}")
-ELSE (NOT BUILD_ANDROID)
+IF (MINIGLOG)
SET(GLOG_LIB miniglog)
- MESSAGE("-- Using minimal Glog substitute for Android (library): ${GLOG_LIB}")
+ MESSAGE("-- Using minimal Glog substitute (library): ${GLOG_LIB}")
SET(GLOG_INCLUDE internal/ceres/miniglog)
- MESSAGE("-- Using minimal Glog substitute for Android (include): ${GLOG_INCLUDE}")
-ENDIF (NOT BUILD_ANDROID)
-
-# Eigen
-FIND_PATH(EIGEN_INCLUDE NAMES Eigen/Core PATHS ${EIGEN_SEARCH_HEADERS})
-IF (NOT EXISTS ${EIGEN_INCLUDE})
- MESSAGE(FATAL_ERROR "Can't find Eigen. Try passing -DEIGEN_INCLUDE=...")
-ELSE (NOT EXISTS ${EIGEN_INCLUDE})
- MESSAGE("-- Found Eigen 3.x: ${EIGEN_INCLUDE}")
-ENDIF (NOT EXISTS ${EIGEN_INCLUDE})
+ MESSAGE("-- Using minimal Glog substitute (include): ${GLOG_INCLUDE}")
+ELSE (MINIGLOG)
+ FIND_LIBRARY(GLOG_LIB NAMES glog)
+ IF (EXISTS ${GLOG_LIB})
+ MESSAGE("-- Found Google Log library: ${GLOG_LIB}")
+ ELSE (EXISTS ${GLOG_LIB})
+ MESSAGE(FATAL_ERROR
+ "Can't find Google Log. Please specify: -DGLOG_LIB=...")
+ ENDIF (EXISTS ${GLOG_LIB})
-# Template specializations for the Schur complement based solvers. If
-# compile time, binary size or compiler performance is an issue, you
-# may consider disabling this.
-OPTION(SCHUR_SPECIALIZATIONS
- "Enable fixed-size schur specializations."
- ON)
+ FIND_PATH(GLOG_INCLUDE NAMES glog/logging.h)
+ IF (EXISTS ${GLOG_INCLUDE})
+ MESSAGE("-- Found Google Log header in: ${GLOG_INCLUDE}")
+ ELSE (EXISTS ${GLOG_INCLUDE})
+ MESSAGE(FATAL_ERROR
+ "Can't find Google Log. Please specify: -DGLOG_INCLUDE=...")
+ ENDIF (EXISTS ${GLOG_INCLUDE})
+ENDIF (MINIGLOG)
IF (NOT SCHUR_SPECIALIZATIONS)
ADD_DEFINITIONS(-DCERES_RESTRICT_SCHUR_SPECIALIZATION)
MESSAGE("-- Disabling Schur specializations (faster compiles)")
ENDIF (NOT SCHUR_SPECIALIZATIONS)
-# Line search minimizer is useful for large scale problems or when
-# sparse linear algebra libraries are not available. If compile time,
-# binary size or compiler performance is an issue, consider disabling
-# this.
-OPTION(LINE_SEARCH_MINIMIZER
- "Enable the line search minimizer."
- ON)
-
IF (NOT LINE_SEARCH_MINIMIZER)
ADD_DEFINITIONS(-DCERES_NO_LINE_SEARCH_MINIMIZER)
MESSAGE("-- Disabling line search minimizer")
ENDIF (NOT LINE_SEARCH_MINIMIZER)
-OPTION(CUSTOM_BLAS
- "Use handcoded BLAS routines (usually faster) instead of Eigen."
- ON)
-
IF (NOT CUSTOM_BLAS)
ADD_DEFINITIONS(-DCERES_NO_CUSTOM_BLAS)
MESSAGE("-- Disabling custom blas")
ENDIF (NOT CUSTOM_BLAS)
-# Multithreading using OpenMP
-OPTION(OPENMP
- "Enable threaded solving in Ceres (requires OpenMP)"
- ON)
-
IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
SET(OPENMP_FOUND FALSE)
ELSE (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
@@ -533,17 +503,6 @@ ELSE (OPENMP_FOUND)
ADD_DEFINITIONS(-DCERES_NO_THREADS)
ENDIF (OPENMP_FOUND)
-# Disable threads in mutex.h. Someday, after there is OpenMP support in
-# Android, this can get removed. Also turn on a workaround for an NDK bug.
-IF (BUILD_ANDROID)
- ADD_DEFINITIONS(-DCERES_NO_THREADS)
- ADD_DEFINITIONS(-DCERES_WORK_AROUND_ANDROID_NDK_COMPILER_BUG)
-ENDIF (BUILD_ANDROID)
-
-OPTION(DISABLE_TR1
- "Don't use TR1. This replaces some hash tables with sets. Slower."
- OFF)
-
IF (DISABLE_TR1)
MESSAGE("-- Replacing unordered_map/set with map/set (warning: slower!)")
ADD_DEFINITIONS(-DCERES_NO_TR1)
@@ -637,19 +596,20 @@ SET (CERES_CXX_FLAGS)
IF (CMAKE_BUILD_TYPE STREQUAL "Release")
IF (CMAKE_COMPILER_IS_GNUCXX)
- IF (BUILD_ANDROID)
- # TODO(keir): Figure out what flags should go here to make an optimized
- # native ARM binary for Android.
- ELSE (BUILD_ANDROID)
- # Linux
- IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
- SET (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -march=native -mtune=native")
- ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux")
- # Mac OS X
- IF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
- SET (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -fast -msse3")
- ENDIF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
- ENDIF (BUILD_ANDROID)
+ # Linux
+ IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
+ SET (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -march=native -mtune=native")
+ ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux")
+ # Mac OS X
+ IF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ SET (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -msse3")
+ # Use of -fast only applicable for Apple's GCC
+ # Assume this is being used if GCC version < 4.3 on OSX
+ EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
+ IF (GCC_VERSION VERSION_LESS 4.3)
+ SET (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -fast")
+ ENDIF (GCC_VERSION VERSION_LESS 4.3)
+ ENDIF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
ENDIF (CMAKE_COMPILER_IS_GNUCXX)
IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# Use of -O4 requires use of gold linker & LLVM-gold plugin, which might
@@ -717,10 +677,6 @@ ENDIF ()
ADD_SUBDIRECTORY(internal/ceres)
-OPTION(BUILD_DOCUMENTATION
- "Build User's Guide (html)"
- OFF)
-
IF (BUILD_DOCUMENTATION)
MESSAGE("-- Documentation building is enabled")
@@ -732,8 +688,6 @@ IF (BUILD_DOCUMENTATION)
ADD_SUBDIRECTORY(docs)
ENDIF (BUILD_DOCUMENTATION)
-OPTION(BUILD_EXAMPLES "Build examples" ON)
-
IF (BUILD_EXAMPLES)
MESSAGE("-- Build the examples.")
ADD_SUBDIRECTORY(examples)