diff --git a/CMakeLists.txt b/CMakeLists.txt index d95966971..9e1760473 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,8 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # -# Author: keir@google.com (Keir Mierle) +# Authors: keir@google.com (Keir Mierle) +# alexs.mac@gmail.com (Alex Stewart) CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0) CMAKE_POLICY(VERSION 2.8) @@ -179,6 +180,8 @@ MACRO(HANDLE_LEGACY_LIBRARY_DEPENDENCY_HINT ENDIF (DEFINED ${LEGACY_VAR}) ENDMACRO(HANDLE_LEGACY_LIBRARY_DEPENDENCY_HINT) +UNSET(CERES_COMPILE_OPTIONS) + # Eigen. HANDLE_LEGACY_INCLUDE_DEPENDENCY_HINT(EIGEN_INCLUDE EIGEN_INCLUDE_DIR_HINTS) FIND_PACKAGE(Eigen REQUIRED) @@ -207,11 +210,11 @@ IF (LAPACK) # when updating it to disable use of LAPACK. GET_PROPERTY(HELP_STRING CACHE LAPACK PROPERTY HELPSTRING) SET(LAPACK OFF CACHE BOOL "${HELP_STRING}" FORCE) - ADD_DEFINITIONS(-DCERES_NO_LAPACK) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_LAPACK) ENDIF (NOT (LAPACK_FOUND AND BLAS_FOUND)) ELSE (LAPACK) MESSAGE("-- Building without LAPACK.") - ADD_DEFINITIONS(-DCERES_NO_LAPACK) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_LAPACK) ENDIF (LAPACK) # SuiteSparse. @@ -262,11 +265,11 @@ IF (SUITESPARSE) # when updating it to disable use of SuiteSparse. GET_PROPERTY(HELP_STRING CACHE SUITESPARSE PROPERTY HELPSTRING) SET(SUITESPARSE OFF CACHE BOOL "${HELP_STRING}" FORCE) - ADD_DEFINITIONS(-DCERES_NO_SUITESPARSE) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_SUITESPARSE) ENDIF (SUITESPARSE_FOUND) ELSE (SUITESPARSE) MESSAGE("-- Building without SuiteSparse.") - ADD_DEFINITIONS(-DCERES_NO_SUITESPARSE) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_SUITESPARSE) ENDIF (SUITESPARSE) # CXSparse. @@ -285,11 +288,11 @@ IF (CXSPARSE) # when updating it to disable use of CXSparse. GET_PROPERTY(HELP_STRING CACHE CXSPARSE PROPERTY HELPSTRING) SET(CXSPARSE OFF CACHE BOOL "${HELP_STRING}" FORCE) - ADD_DEFINITIONS(-DCERES_NO_CXSPARSE) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_CXSPARSE) ENDIF (CXSPARSE_FOUND) ELSE (CXSPARSE) MESSAGE("-- Building without CXSparse.") - ADD_DEFINITIONS(-DCERES_NO_CXSPARSE) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_CXSPARSE) # Mark as advanced (remove from default GUI view) the CXSparse search # variables in case user enabled CXSPARSE, FindCXSparse did not find it, so # made search variables visible in GUI for user to set, but then user disables @@ -314,11 +317,9 @@ IF (GFLAGS) # when updating it to disable use of gflags. GET_PROPERTY(HELP_STRING CACHE GFLAGS PROPERTY HELPSTRING) SET(GFLAGS OFF CACHE BOOL "${HELP_STRING}" FORCE) - ADD_DEFINITIONS(-DCERES_NO_GFLAGS) ENDIF (GFLAGS_FOUND) ELSE (GFLAGS) MESSAGE("-- Google Flags disabled; no tests or tools will be built!") - ADD_DEFINITIONS(-DCERES_NO_GFLAGS) # Mark as advanced (remove from default GUI view) the gflags search # variables in case user enabled GFLAGS, FindGflags did not find it, so # made search variables visible in GUI for user to set, but then user disables @@ -357,12 +358,12 @@ ELSE (MINIGLOG) ENDIF (MINIGLOG) IF (NOT SCHUR_SPECIALIZATIONS) - ADD_DEFINITIONS(-DCERES_RESTRICT_SCHUR_SPECIALIZATION) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_RESTRICT_SCHUR_SPECIALIZATION) MESSAGE("-- Disabling Schur specializations (faster compiles)") ENDIF (NOT SCHUR_SPECIALIZATIONS) IF (NOT CUSTOM_BLAS) - ADD_DEFINITIONS(-DCERES_NO_CUSTOM_BLAS) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_CUSTOM_BLAS) MESSAGE("-- Disabling custom blas") ENDIF (NOT CUSTOM_BLAS) @@ -374,20 +375,20 @@ IF (OPENMP) GET_PROPERTY(HELP_STRING CACHE OPENMP PROPERTY HELPSTRING) SET(OPENMP OFF CACHE BOOL "${HELP_STRING}" FORCE) MESSAGE("-- Compiler is Clang, disabling OpenMP.") - ADD_DEFINITIONS(-DCERES_NO_THREADS) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS) ELSE (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") # Find quietly s/t as we can continue without OpenMP if it is not found. FIND_PACKAGE(OpenMP QUIET) IF (OPENMP_FOUND) MESSAGE("-- Building with OpenMP.") - ADD_DEFINITIONS(-DCERES_USE_OPENMP) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_USE_OPENMP) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") IF (UNIX) # At least on Linux, we need pthreads to be enabled for mutex to # compile. This may not work on Windows or Android. FIND_PACKAGE(Threads REQUIRED) - ADD_DEFINITIONS(-DCERES_HAVE_PTHREAD) - ADD_DEFINITIONS(-DCERES_HAVE_RWLOCK) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_PTHREAD) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_RWLOCK) ENDIF (UNIX) ELSE (OPENMP_FOUND) MESSAGE("-- Failed to find OpenMP, disabling.") @@ -395,12 +396,12 @@ IF (OPENMP) # when updating it to disable use of OPENMP. GET_PROPERTY(HELP_STRING CACHE OPENMP PROPERTY HELPSTRING) SET(OPENMP OFF CACHE BOOL "${HELP_STRING}" FORCE) - ADD_DEFINITIONS(-DCERES_NO_THREADS) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS) ENDIF (OPENMP_FOUND) ENDIF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") ELSE (OPENMP) MESSAGE("-- Building without OpenMP (disabling multithreading).") - ADD_DEFINITIONS(-DCERES_NO_THREADS) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS) ENDIF (OPENMP) INCLUDE(CheckIncludeFileCXX) @@ -420,7 +421,7 @@ IF (HAVE_STD_UNORDERED_MAP_HEADER) }" HAVE_UNORDERED_MAP_IN_STD_NAMESPACE) IF (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE) - ADD_DEFINITIONS(-DCERES_STD_UNORDERED_MAP) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_STD_UNORDERED_MAP) MESSAGE("-- Found unordered_map/set in std namespace.") ELSE (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE) CHECK_CXX_SOURCE_COMPILES("#include @@ -430,24 +431,24 @@ IF (HAVE_STD_UNORDERED_MAP_HEADER) }" HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE) IF (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE) - ADD_DEFINITIONS(-DCERES_STD_UNORDERED_MAP_IN_TR1_NAMESPACE) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_STD_UNORDERED_MAP_IN_TR1_NAMESPACE) MESSAGE("-- Found unordered_map/set in std::tr1 namespace.") ELSE (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE) MESSAGE("-- Found but cannot find either std::unordered_map " "or std::tr1::unordered_map.") MESSAGE("-- Replacing unordered_map/set with map/set (warning: slower!)") - ADD_DEFINITIONS(-DCERES_NO_UNORDERED_MAP) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_UNORDERED_MAP) ENDIF (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE) ENDIF (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE) ELSE (HAVE_STD_UNORDERED_MAP_HEADER) CHECK_INCLUDE_FILE_CXX("tr1/unordered_map" HAVE_TR1_UNORDERED_MAP_HEADER) IF (HAVE_TR1_UNORDERED_MAP_HEADER) - ADD_DEFINITIONS(-DCERES_TR1_UNORDERED_MAP) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_TR1_UNORDERED_MAP) MESSAGE("-- Found tr1/unordered_map/set in std::tr1 namespace.") ELSE (HAVE_TR1_UNORDERED_MAP_HEADE) MESSAGE("-- Unable to find or . ") MESSAGE("-- Replacing unordered_map/set with map/set (warning: slower!)") - ADD_DEFINITIONS(-DCERES_NO_UNORDERED_MAP) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_UNORDERED_MAP) ENDIF (HAVE_TR1_UNORDERED_MAP_HEADER) ENDIF (HAVE_STD_UNORDERED_MAP_HEADER) @@ -455,10 +456,10 @@ INCLUDE(FindSharedPtr) FIND_SHARED_PTR() IF (SHARED_PTR_FOUND) IF (SHARED_PTR_TR1_MEMORY_HEADER) - ADD_DEFINITIONS(-DCERES_TR1_MEMORY_HEADER) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_TR1_MEMORY_HEADER) ENDIF (SHARED_PTR_TR1_MEMORY_HEADER) IF (SHARED_PTR_TR1_NAMESPACE) - ADD_DEFINITIONS(-DCERES_TR1_SHARED_PTR) + LIST(APPEND CERES_COMPILE_OPTIONS CERES_TR1_SHARED_PTR) ENDIF (SHARED_PTR_TR1_NAMESPACE) ELSE (SHARED_PTR_FOUND) MESSAGE(FATAL_ERROR "Unable to find shared_ptr.") @@ -485,7 +486,12 @@ ENDIF (GFLAGS) 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 + # dllimport/export support in MSVC. 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) @@ -647,22 +653,12 @@ IF (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") CLANG_VERSION VERSION_LESS 4.2) ENDIF (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") -# Get the complete list of any added compile definitions so that we can -# export them. Currently we export all Ceres compile definitions to users -# of Ceres via FindPackage() except CERES_BUILDING_SHARED_LIBRARY (if present) -# which controls the behaviour of the CERES_EXPORT macro for MSVC, which -# we substitute for CERES_USING_SHARED_LIBRARY, which is what users of -# Ceres should call in MSVC. -GET_DIRECTORY_PROPERTY(CERES_INTERFACE_COMPILE_DEFINITIONS - DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS) -# Substitute CERES_BUILDING_SHARED_LIBRARY with CERES_USING_SHARED_LIBRARY -# if building Ceres as a shared library. -IF (BUILD_SHARED_LIBS) - LIST(REMOVE_ITEM CERES_INTERFACE_COMPILE_DEFINITIONS - CERES_BUILDING_SHARED_LIBRARY) - LIST(APPEND CERES_INTERFACE_COMPILE_DEFINITIONS - CERES_USING_SHARED_LIBRARY) -ENDIF() +# Configure the Ceres config.h compile options header using the current +# compile options and put the configured header into the Ceres source tree. +LIST(REMOVE_DUPLICATES CERES_COMPILE_OPTIONS) +INCLUDE(CreateCeresConfig) +CREATE_CERES_CONFIG("${CERES_COMPILE_OPTIONS}" + ${CMAKE_SOURCE_DIR}/include/ceres/internal) ADD_SUBDIRECTORY(internal/ceres) diff --git a/cmake/CeresConfig.cmake.in b/cmake/CeresConfig.cmake.in index 5550fd0f8..0e13d9e09 100644 --- a/cmake/CeresConfig.cmake.in +++ b/cmake/CeresConfig.cmake.in @@ -57,17 +57,6 @@ # dependencies that were disabled when Ceres was # compiled. # -# CERES_INTERFACE_COMPILE_DEFINITIONS: List of compile definitions -# which should be used when -# compiling a target that uses Ceres -# Note that these variables will NOT -# have a -D prefix appended. -# -# IMPORTANT: The contents of CERES_INTERFACE_COMPILE_DEFINITIONS will -# be AUTOMATICALLY added for you, either via the CMake -# function target_compile_definitions() in CMake >= 2.8.11, -# or via a call to add_definitions() in CMake < 2.8.11. -# # The following variables are also defined for legacy compatibility # only. Any new code should not use them as they do not conform to # the standard CMake FindPackage naming conventions. @@ -84,7 +73,6 @@ MACRO(CERES_REPORT_NOT_FOUND REASON_MSG) SET(CERES_FOUND FALSE) UNSET(CERES_INCLUDE_DIRS) UNSET(CERES_LIBRARIES) - UNSET(CERES_INTERFACE_COMPILE_DEFINITIONS) # Reset the CMake module path to its state when this script was called. SET(CMAKE_MODULE_PATH ${CALLERS_CMAKE_MODULE_PATH}) @@ -209,24 +197,6 @@ ENDIF (NOT TARGET ceres AND NOT Ceres_BINARY_DIR) # Set the expected XX_LIBRARIES variable for FindPackage(). SET(CERES_LIBRARIES ceres) -# If Ceres was compiled with CMake < 2.8.11, we were not able to use -# the new (in 2.8.11) target_compile_definitions() function to append -# the required compile definitions to use when compiling a target that -# uses Ceres to the Ceres library target. As such, we need to use -# add_definitions() to ensure that they will be present. This is a -# blunt instrument, as it will add the Ceres definitions to _all_ -# targets declared from this point on in the caller's project. -# Hoever, without requiring the user to explicitly set the flags -# themselves, this is the only way in CMake versions < 2.8.11. -SET (CERES_COMPILED_CMAKE_VERSION @CMAKE_VERSION@) -SET (CERES_INTERFACE_COMPILE_DEFINITIONS @CERES_INTERFACE_COMPILE_DEFINITIONS@) -IF (CERES_COMPILED_CMAKE_VERSION VERSION_LESS 2.8.11) - # The definitions will have been stripped of -D, add it back. - FOREACH(DEF ${CERES_INTERFACE_COMPILE_DEFINITIONS}) - ADD_DEFINITIONS("-D${DEF}") - ENDFOREACH() -ENDIF() - # Set legacy include directories variable for backwards compatibility. SET(CERES_INCLUDES ${CERES_INCLUDE_DIRS}) diff --git a/cmake/CreateCeresConfig.cmake b/cmake/CreateCeresConfig.cmake new file mode 100644 index 000000000..43f4d17a0 --- /dev/null +++ b/cmake/CreateCeresConfig.cmake @@ -0,0 +1,110 @@ +# Ceres Solver - A fast non-linear least squares minimizer +# Copyright 2014 Google Inc. All rights reserved. +# http://code.google.com/p/ceres-solver/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of Google Inc. nor the names of its contributors may be +# used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# Author: alexs.mac@gmail.com (Alex Stewart) + +# This must take place outside of CONFIGURE_CERES_CONFIG() in order that +# we can determine where *this* file is, and thus the relative path to +# config.h.in. Inside of CONFIGURE_CERES_CONFIG(), CMAKE_CURRENT_LIST_DIR +# refers to the caller of CONFIGURE_CERES_CONFIG(), not this file. +SET(CERES_CONFIG_IN_FILE "${CMAKE_CURRENT_LIST_DIR}/config.h.in") + +# CreateCeresConfig.cmake - Create the config.h for Ceres. +# +# This function configures the Ceres config.h file based on the current +# compile options and copies it into the specified location. It should be +# called before Ceres is built so that the correct config.h is used when +# Ceres is compiled. +# +# INPUTS: +# CURRENT_CERES_COMPILE_OPTIONS: List of currently enabled Ceres compile +# options. These are compared against the +# full list of valid options, which are read +# from config.h.in. Any options present +# which are not part of the valid set will +# invoke an error. Any valid option present +# will be enabled in the resulting config.h, +# all other options will be disabled. +# +# CERES_CONFIG_OUTPUT_DIRECTORY: Path to output directory in which to save +# the configured config.h. Typically this +# will be /include/ceres/internal. + +FUNCTION(CREATE_CERES_CONFIG CURRENT_CERES_COMPILE_OPTIONS CERES_CONFIG_OUTPUT_DIRECTORY) + # Verify that the specified output directory is valid. + IF (NOT (EXISTS "${CERES_CONFIG_OUTPUT_DIRECTORY}" AND + IS_DIRECTORY "${CERES_CONFIG_OUTPUT_DIRECTORY}")) + MESSAGE(FATAL_ERROR "Ceres Bug: Specified CERES_CONFIG_OUTPUT_DIRECTORY: " + "${CERES_CONFIG_OUTPUT_DIRECTORY} does not exist, or is not a directory.") + ENDIF() + + # Read all possible configurable compile options from config.h.in, this avoids + # us having to hard-code in this file what the valid options are. + FILE(READ ${CERES_CONFIG_IN_FILE} CERES_CONFIG_IN_CONTENTS) + STRING(REGEX MATCHALL "@[^@ $]+@" + ALL_CONFIGURABLE_CERES_OPTIONS "${CERES_CONFIG_IN_CONTENTS}") + # Removing @ symbols at beginning and end of each option. + STRING(REPLACE "@" "" + ALL_CONFIGURABLE_CERES_OPTIONS "${ALL_CONFIGURABLE_CERES_OPTIONS}") + + # Ensure that there are no repetitions in the current compile options. + LIST(REMOVE_DUPLICATES CURRENT_CERES_COMPILE_OPTIONS) + + FOREACH (CERES_OPTION ${ALL_CONFIGURABLE_CERES_OPTIONS}) + # Try and find the option in the list of current compile options, if it + # is present, then the option is enabled, otherwise it is disabled. + LIST(FIND CURRENT_CERES_COMPILE_OPTIONS ${CERES_OPTION} OPTION_ENABLED) + + # list(FIND ..) returns -1 if the element was not in the list, but CMake + # interprets if (VAR) to be true if VAR is any non-zero number, even + # negative ones, hence we have to explicitly check for >= 0. + IF (OPTION_ENABLED GREATER -1) + MESSAGE(STATUS "Enabling ${CERES_OPTION} in Ceres config.h") + SET(${CERES_OPTION} "#define ${CERES_OPTION}") + + # Remove the item from the list of current options so that we can identify + # any options that were in CURRENT_CERES_COMPILE_OPTIONS, but not in + # ALL_CONFIGURABLE_CERES_OPTIONS (which is an error). + LIST(REMOVE_ITEM CURRENT_CERES_COMPILE_OPTIONS ${CERES_OPTION}) + ELSE() + SET(${CERES_OPTION} "// #define ${CERES_OPTION}") + ENDIF() + ENDFOREACH() + + # CURRENT_CERES_COMPILE_OPTIONS should now be an empty list, any elements + # remaining were not present in ALL_CONFIGURABLE_CERES_OPTIONS read from + # config.h.in. + IF (CURRENT_CERES_COMPILE_OPTIONS) + MESSAGE(FATAL_ERROR "Ceres Bug: CURRENT_CERES_COMPILE_OPTIONS contained " + "the following options which were not present in config.h.in: " + "${CURRENT_CERES_COMPILE_OPTIONS}") + ENDIF() + + CONFIGURE_FILE(${CERES_CONFIG_IN_FILE} + "${CERES_CONFIG_OUTPUT_DIRECTORY}/config.h" @ONLY) +ENDFUNCTION() diff --git a/cmake/config.h.in b/cmake/config.h.in new file mode 100644 index 000000000..49319dd27 --- /dev/null +++ b/cmake/config.h.in @@ -0,0 +1,89 @@ +// Ceres Solver - A fast non-linear least squares minimizer +// Copyright 2014 Google Inc. All rights reserved. +// http://code.google.com/p/ceres-solver/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of Google Inc. nor the names of its contributors may be +// used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +// Author: alexs.mac@gmail.com (Alex Stewart) + +// Configuration options for Ceres. +// +// Do not edit this file, it was automatically configured by CMake when +// Ceres was compiled with the relevant configuration for the machine +// on which Ceres was compiled. +// +// Ceres Developers: All options should have the same name as their mapped +// CMake options, in the preconfigured version of this file +// all options should be enclosed in '@'. + +#ifndef CERES_PUBLIC_INTERNAL_CONFIG_H_ +#define CERES_PUBLIC_INTERNAL_CONFIG_H_ + +// If defined, Ceres was compiled without LAPACK. +@CERES_NO_LAPACK@ + +// If defined, Ceres was compiled without SuiteSparse. +@CERES_NO_SUITESPARSE@ + +// If defined, Ceres was compiled without CXSparse. +@CERES_NO_CXSPARSE@ + +// If defined, Ceres was compiled without Schur specializations. +@CERES_RESTRICT_SCHUR_SPECIALIZATION@ + +// If defined, Ceres was compiled to use Eigen instead of hardcoded BLAS +// routines. +@CERES_NO_CUSTOM_BLAS@ + +// If defined, Ceres was compiled without multithreading support. +@CERES_NO_THREADS@ +// If defined Ceres was compiled with OpenMP multithreading support. +@CERES_USE_OPENMP@ +// Additionally defined on *nix if Ceres was compiled with OpenMP support, +// as in this case pthreads is also required. +@CERES_HAVE_PTHREAD@ +@CERES_HAVE_RWLOCK@ + +// Which version of unordered map was used when Ceres was compiled. Exactly +// one of these will be defined for any given build. +@CERES_STD_UNORDERED_MAP@ +@CERES_STD_UNORDERED_MAP_IN_TR1_NAMESPACE@ +@CERES_TR1_UNORDERED_MAP@ +@CERES_NO_UNORDERED_MAP@ + +// If defined Ceres was compiled for Android with noalias() removed from +// matrix-matrix multiplies to work around a bug in the Android NDK. +@CERES_WORK_AROUND_ANDROID_NDK_COMPILER_BUG@ + +// If defined, the memory header is in , otherwise . +@CERES_TR1_MEMORY_HEADER@ + +// If defined shared_ptr is in std::tr1 namespace, otherwise std. +@CERES_TR1_SHARED_PTR@ + +// If defined, Ceres was built as a shared library. +@CERES_USING_SHARED_LIBRARY@ + +#endif // CERES_PUBLIC_INTERNAL_CONFIG_H_ diff --git a/docs/source/building.rst b/docs/source/building.rst index 14ff68ec1..5b6846ec8 100644 --- a/docs/source/building.rst +++ b/docs/source/building.rst @@ -310,9 +310,6 @@ Notes: #. The default build is Debug; consider switching it to release mode. #. Currently ``system_test`` is not working properly. -#. If you build Ceres as a DLL with Visual Studio (BUILD_SHARED_LIBS), - you have to compile your own code with the flag - CERES_USING_SHARED_LIBRARY. #. CMake puts the resulting test binaries in ``ceres-bin/examples/Debug`` by default. #. The solvers supported on Windows are ``DENSE_QR``, ``DENSE_SCHUR``, diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index eda929b32..dff6ef0c6 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -28,8 +28,11 @@ # # Author: keir@google.com (Keir Mierle) +# Only Ceres itself should be compiled with CERES_BUILDING_SHARED_LIBRARY +# defined, any users of Ceres will have CERES_USING_SHARED_LIBRARY defined +# for them in Ceres' config.h if appropriate. IF (BUILD_SHARED_LIBS) - ADD_DEFINITIONS(-DCERES_USING_SHARED_LIBRARY) + REMOVE_DEFINITIONS(-DCERES_BUILDING_SHARED_LIBRARY) ENDIF() ADD_EXECUTABLE(helloworld helloworld.cc) diff --git a/include/ceres/internal/config.h b/include/ceres/internal/config.h new file mode 100644 index 000000000..c9d2c16e8 --- /dev/null +++ b/include/ceres/internal/config.h @@ -0,0 +1,45 @@ +// Ceres Solver - A fast non-linear least squares minimizer +// Copyright 2014 Google Inc. All rights reserved. +// http://code.google.com/p/ceres-solver/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of Google Inc. nor the names of its contributors may be +// used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +// Author: alexs.mac@gmail.com (Alex Stewart) + +// Default (empty) configuration options for Ceres. +// +// IMPORTANT: Most users of Ceres will not use this file, when compiling Ceres +// with CMake, CMake will configure a new config.h with the currently +// selected Ceres compile options and copy it into the source +// directory before compilation. However, for some users of Ceres +// who compile without CMake, this file ensures that Ceres will +// compile, with the user either specifying manually the Ceres +// compile options, or passing them directly through the compiler. + +#ifndef CERES_PUBLIC_INTERNAL_CONFIG_H_ +#define CERES_PUBLIC_INTERNAL_CONFIG_H_ + + +#endif // CERES_PUBLIC_INTERNAL_CONFIG_H_ diff --git a/include/ceres/internal/port.h b/include/ceres/internal/port.h index 7bcb1a74f..e38eb713a 100644 --- a/include/ceres/internal/port.h +++ b/include/ceres/internal/port.h @@ -36,6 +36,8 @@ #include +#include "ceres/internal/config.h" + #if defined(CERES_TR1_MEMORY_HEADER) #include #else @@ -64,12 +66,21 @@ using std::shared_ptr; #endif // __cplusplus -// A macro to signal wich functions and classes are exported when -// bulding a DLL with MSC. -#if defined(_MSC_VER) && defined(CERES_USING_SHARED_LIBRARY) -# define CERES_EXPORT __declspec(dllimport) -#elif defined(_MSC_VER) && defined(CERES_BUILDING_SHARED_LIBRARY) +// A macro to signal which functions and classes are exported when +// building a DLL with MSVC. +// +// Note that the ordering here is important, CERES_BUILDING_SHARED_LIBRARY +// is only defined locally when Ceres is compiled, it is never exported to +// users. However, in order that we do not have to configure config.h +// separately for building vs installing, if we are using MSVC and building +// a shared library, then both CERES_BUILDING_SHARED_LIBRARY and +// CERES_USING_SHARED_LIBRARY will be defined when Ceres is compiled. +// Hence it is important that the check for CERES_BUILDING_SHARED_LIBRARY +// happens first. +#if defined(_MSC_VER) && defined(CERES_BUILDING_SHARED_LIBRARY) # define CERES_EXPORT __declspec(dllexport) +#elif defined(_MSC_VER) && defined(CERES_USING_SHARED_LIBRARY) +# define CERES_EXPORT __declspec(dllimport) #else # define CERES_EXPORT #endif diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt index f0775479e..9475b2157 100644 --- a/internal/ceres/CMakeLists.txt +++ b/internal/ceres/CMakeLists.txt @@ -177,21 +177,6 @@ SET_TARGET_PROPERTIES(ceres PROPERTIES SOVERSION ${CERES_VERSION_MAJOR} ) -# If we are using CMake >= 2.8.11, make use of the target_compile_definitions() -# function to append the compile definitions to the exported ceres target, thus -# any library that finds Ceres via CMake, then adds Ceres to one of its own -# targets will be compiled with the Ceres compile definitions defined. This -# is important for any defines that appear in the installed Ceres header files -# e.g those related to shared_ptr. -# -# If we are using CMake < 2.8.11, then we will have added an add_definitions() -# call in the CeresConfig.cmake file, which whilst achieving a similar effect, -# is more of a blunt instrument, as the Ceres definitions will also be added -# to targets in the users project that do not use Ceres. -IF (CMAKE_VERSION VERSION_EQUAL 2.8.11 OR - CMAKE_VERSION VERSION_GREATER 2.8.11) - TARGET_COMPILE_DEFINITIONS(ceres INTERFACE ${CERES_INTERFACE_COMPILE_DEFINITIONS}) -ENDIF() TARGET_LINK_LIBRARIES(ceres ${CERES_LIBRARY_DEPENDENCIES}) INSTALL(TARGETS ceres diff --git a/internal/ceres/blas.cc b/internal/ceres/blas.cc index f79b1ebfa..b919e13c4 100644 --- a/internal/ceres/blas.cc +++ b/internal/ceres/blas.cc @@ -29,6 +29,7 @@ // Author: sameeragarwal@google.com (Sameer Agarwal) #include "ceres/blas.h" +#include "ceres/internal/port.h" #include "glog/logging.h" extern "C" void dsyrk_(char* uplo, diff --git a/internal/ceres/canonical_views_clustering.cc b/internal/ceres/canonical_views_clustering.cc index 044d4381b..2f032e658 100644 --- a/internal/ceres/canonical_views_clustering.cc +++ b/internal/ceres/canonical_views_clustering.cc @@ -29,6 +29,9 @@ // Author: David Gallup (dgallup@google.com) // Sameer Agarwal (sameeragarwal@google.com) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include "ceres/canonical_views_clustering.h" diff --git a/internal/ceres/canonical_views_clustering.h b/internal/ceres/canonical_views_clustering.h index 06d80c89e..1b4c4ee05 100644 --- a/internal/ceres/canonical_views_clustering.h +++ b/internal/ceres/canonical_views_clustering.h @@ -41,6 +41,9 @@ #ifndef CERES_INTERNAL_CANONICAL_VIEWS_CLUSTERING_H_ #define CERES_INTERNAL_CANONICAL_VIEWS_CLUSTERING_H_ +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include diff --git a/internal/ceres/canonical_views_clustering_test.cc b/internal/ceres/canonical_views_clustering_test.cc index f4f9e2deb..f86084a69 100644 --- a/internal/ceres/canonical_views_clustering_test.cc +++ b/internal/ceres/canonical_views_clustering_test.cc @@ -29,6 +29,9 @@ // Author: Sameer Agarwal (sameeragarwal@google.com) // David Gallup (dgallup@google.com) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include "ceres/canonical_views_clustering.h" diff --git a/internal/ceres/collections_port.h b/internal/ceres/collections_port.h index e37be528e..3f976b9fb 100644 --- a/internal/ceres/collections_port.h +++ b/internal/ceres/collections_port.h @@ -33,6 +33,8 @@ #ifndef CERES_INTERNAL_COLLECTIONS_PORT_H_ #define CERES_INTERNAL_COLLECTIONS_PORT_H_ +#include "ceres/internal/port.h" + #if defined(CERES_NO_UNORDERED_MAP) # include # include diff --git a/internal/ceres/cxsparse.cc b/internal/ceres/cxsparse.cc index 7145f73a2..87503d06c 100644 --- a/internal/ceres/cxsparse.cc +++ b/internal/ceres/cxsparse.cc @@ -28,6 +28,9 @@ // // Author: strandmark@google.com (Petter Strandmark) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_CXSPARSE #include "ceres/cxsparse.h" diff --git a/internal/ceres/cxsparse.h b/internal/ceres/cxsparse.h index cd87908a4..1fed82f78 100644 --- a/internal/ceres/cxsparse.h +++ b/internal/ceres/cxsparse.h @@ -31,6 +31,9 @@ #ifndef CERES_INTERNAL_CXSPARSE_H_ #define CERES_INTERNAL_CXSPARSE_H_ +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_CXSPARSE #include diff --git a/internal/ceres/generate_eliminator_specialization.py b/internal/ceres/generate_eliminator_specialization.py index 37b1fd7a2..2ec3c5b42 100644 --- a/internal/ceres/generate_eliminator_specialization.py +++ b/internal/ceres/generate_eliminator_specialization.py @@ -126,6 +126,9 @@ template class SchurEliminator<%s, %s, %s>; """ SPECIALIZATION_FILE = """ +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generate_partitioned_matrix_view_specializations.py b/internal/ceres/generate_partitioned_matrix_view_specializations.py index a352d2920..c9bdf238c 100644 --- a/internal/ceres/generate_partitioned_matrix_view_specializations.py +++ b/internal/ceres/generate_partitioned_matrix_view_specializations.py @@ -124,6 +124,9 @@ template class PartitionedMatrixView<%s, %s, %s>; """ SPECIALIZATION_FILE = """ +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_2_2.cc b/internal/ceres/generated/partitioned_matrix_view_2_2_2.cc index d7bd14c04..a7d802ad8 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_2_2.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_2_2.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_2_3.cc b/internal/ceres/generated/partitioned_matrix_view_2_2_3.cc index 6fca7b345..89e6f7750 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_2_3.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_2_3.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_2_4.cc b/internal/ceres/generated/partitioned_matrix_view_2_2_4.cc index 73c910068..3a3e8b672 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_2_4.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_2_4.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_2_d.cc b/internal/ceres/generated/partitioned_matrix_view_2_2_d.cc index 8315e6a49..661f135cd 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_2_d.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_2_d.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_3_3.cc b/internal/ceres/generated/partitioned_matrix_view_2_3_3.cc index dc62c2091..e79e001d6 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_3_3.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_3_3.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_3_4.cc b/internal/ceres/generated/partitioned_matrix_view_2_3_4.cc index de6365138..2f1ae68d6 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_3_4.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_3_4.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_3_9.cc b/internal/ceres/generated/partitioned_matrix_view_2_3_9.cc index f85bd6259..ab4055039 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_3_9.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_3_9.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_3_d.cc b/internal/ceres/generated/partitioned_matrix_view_2_3_d.cc index 2fe07be43..89ecff733 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_3_d.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_3_d.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_4_3.cc b/internal/ceres/generated/partitioned_matrix_view_2_4_3.cc index ed87dcf19..182707d7d 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_4_3.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_4_3.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_4_4.cc b/internal/ceres/generated/partitioned_matrix_view_2_4_4.cc index 5e9a33929..a2cf8f4a9 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_4_4.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_4_4.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_4_8.cc b/internal/ceres/generated/partitioned_matrix_view_2_4_8.cc index aef70488e..a2637691c 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_4_8.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_4_8.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_4_9.cc b/internal/ceres/generated/partitioned_matrix_view_2_4_9.cc index 8fea0bd77..d85386032 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_4_9.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_4_9.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_4_d.cc b/internal/ceres/generated/partitioned_matrix_view_2_4_d.cc index d9e743b3d..7d622fcab 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_4_d.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_4_d.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_2_d_d.cc b/internal/ceres/generated/partitioned_matrix_view_2_d_d.cc index 1f26134af..31981cae4 100644 --- a/internal/ceres/generated/partitioned_matrix_view_2_d_d.cc +++ b/internal/ceres/generated/partitioned_matrix_view_2_d_d.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_4_4_2.cc b/internal/ceres/generated/partitioned_matrix_view_4_4_2.cc index c3c06106f..d51ab5ff7 100644 --- a/internal/ceres/generated/partitioned_matrix_view_4_4_2.cc +++ b/internal/ceres/generated/partitioned_matrix_view_4_4_2.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_4_4_3.cc b/internal/ceres/generated/partitioned_matrix_view_4_4_3.cc index 34a094416..4b17fbdec 100644 --- a/internal/ceres/generated/partitioned_matrix_view_4_4_3.cc +++ b/internal/ceres/generated/partitioned_matrix_view_4_4_3.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_4_4_4.cc b/internal/ceres/generated/partitioned_matrix_view_4_4_4.cc index a790d0d9f..7b5fe0f35 100644 --- a/internal/ceres/generated/partitioned_matrix_view_4_4_4.cc +++ b/internal/ceres/generated/partitioned_matrix_view_4_4_4.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/partitioned_matrix_view_4_4_d.cc b/internal/ceres/generated/partitioned_matrix_view_4_4_d.cc index 467fb0e03..c31fed395 100644 --- a/internal/ceres/generated/partitioned_matrix_view_4_4_d.cc +++ b/internal/ceres/generated/partitioned_matrix_view_4_4_d.cc @@ -40,6 +40,9 @@ // This file is generated using generate_partitioned_matrix_view_specializations.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/partitioned_matrix_view_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_2_2.cc b/internal/ceres/generated/schur_eliminator_2_2_2.cc index 696632b92..db2a4dc6b 100644 --- a/internal/ceres/generated/schur_eliminator_2_2_2.cc +++ b/internal/ceres/generated/schur_eliminator_2_2_2.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_2_3.cc b/internal/ceres/generated/schur_eliminator_2_2_3.cc index 2b92a16fd..f53c12a43 100644 --- a/internal/ceres/generated/schur_eliminator_2_2_3.cc +++ b/internal/ceres/generated/schur_eliminator_2_2_3.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_2_4.cc b/internal/ceres/generated/schur_eliminator_2_2_4.cc index 5ed16255d..9e29383b0 100644 --- a/internal/ceres/generated/schur_eliminator_2_2_4.cc +++ b/internal/ceres/generated/schur_eliminator_2_2_4.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_2_d.cc b/internal/ceres/generated/schur_eliminator_2_2_d.cc index 4a7309071..541def6fc 100644 --- a/internal/ceres/generated/schur_eliminator_2_2_d.cc +++ b/internal/ceres/generated/schur_eliminator_2_2_d.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_3_3.cc b/internal/ceres/generated/schur_eliminator_2_3_3.cc index a42556048..e45026382 100644 --- a/internal/ceres/generated/schur_eliminator_2_3_3.cc +++ b/internal/ceres/generated/schur_eliminator_2_3_3.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_3_4.cc b/internal/ceres/generated/schur_eliminator_2_3_4.cc index b71a48cb4..0618c684a 100644 --- a/internal/ceres/generated/schur_eliminator_2_3_4.cc +++ b/internal/ceres/generated/schur_eliminator_2_3_4.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_3_9.cc b/internal/ceres/generated/schur_eliminator_2_3_9.cc index e0c265f1e..c1ca665d4 100644 --- a/internal/ceres/generated/schur_eliminator_2_3_9.cc +++ b/internal/ceres/generated/schur_eliminator_2_3_9.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_3_d.cc b/internal/ceres/generated/schur_eliminator_2_3_d.cc index 31d5d6b4b..1b6092c75 100644 --- a/internal/ceres/generated/schur_eliminator_2_3_d.cc +++ b/internal/ceres/generated/schur_eliminator_2_3_d.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_4_3.cc b/internal/ceres/generated/schur_eliminator_2_4_3.cc index cc8270d95..edce8ef71 100644 --- a/internal/ceres/generated/schur_eliminator_2_4_3.cc +++ b/internal/ceres/generated/schur_eliminator_2_4_3.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_4_4.cc b/internal/ceres/generated/schur_eliminator_2_4_4.cc index d600a8bb9..a6f3c52d7 100644 --- a/internal/ceres/generated/schur_eliminator_2_4_4.cc +++ b/internal/ceres/generated/schur_eliminator_2_4_4.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_4_8.cc b/internal/ceres/generated/schur_eliminator_2_4_8.cc index 81e6bd68e..bf2f0abb1 100644 --- a/internal/ceres/generated/schur_eliminator_2_4_8.cc +++ b/internal/ceres/generated/schur_eliminator_2_4_8.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_4_9.cc b/internal/ceres/generated/schur_eliminator_2_4_9.cc index 6de47d56b..a63d0bbe0 100644 --- a/internal/ceres/generated/schur_eliminator_2_4_9.cc +++ b/internal/ceres/generated/schur_eliminator_2_4_9.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_4_d.cc b/internal/ceres/generated/schur_eliminator_2_4_d.cc index 716e789ea..b3a7fffb3 100644 --- a/internal/ceres/generated/schur_eliminator_2_4_d.cc +++ b/internal/ceres/generated/schur_eliminator_2_4_d.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_2_d_d.cc b/internal/ceres/generated/schur_eliminator_2_d_d.cc index 4b420c371..f4d28cd16 100644 --- a/internal/ceres/generated/schur_eliminator_2_d_d.cc +++ b/internal/ceres/generated/schur_eliminator_2_d_d.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_4_4_2.cc b/internal/ceres/generated/schur_eliminator_4_4_2.cc index f944f748f..d1eadc1fc 100644 --- a/internal/ceres/generated/schur_eliminator_4_4_2.cc +++ b/internal/ceres/generated/schur_eliminator_4_4_2.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_4_4_3.cc b/internal/ceres/generated/schur_eliminator_4_4_3.cc index 9787b9690..c340dbfc7 100644 --- a/internal/ceres/generated/schur_eliminator_4_4_3.cc +++ b/internal/ceres/generated/schur_eliminator_4_4_3.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_4_4_4.cc b/internal/ceres/generated/schur_eliminator_4_4_4.cc index 1a25bd02d..b7d58ad02 100644 --- a/internal/ceres/generated/schur_eliminator_4_4_4.cc +++ b/internal/ceres/generated/schur_eliminator_4_4_4.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/generated/schur_eliminator_4_4_d.cc b/internal/ceres/generated/schur_eliminator_4_4_d.cc index 7ddea9fa2..47e00592b 100644 --- a/internal/ceres/generated/schur_eliminator_4_4_d.cc +++ b/internal/ceres/generated/schur_eliminator_4_4_d.cc @@ -40,6 +40,9 @@ // This file is generated using generate_eliminator_specialization.py. // Editing it manually is not recommended. +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION #include "ceres/schur_eliminator_impl.h" diff --git a/internal/ceres/mutex.h b/internal/ceres/mutex.h index 564c39f1b..97e2cd360 100644 --- a/internal/ceres/mutex.h +++ b/internal/ceres/mutex.h @@ -95,6 +95,8 @@ #ifndef CERES_INTERNAL_MUTEX_H_ #define CERES_INTERNAL_MUTEX_H_ +#include "ceres/internal/port.h" + #if defined(CERES_NO_THREADS) typedef int MutexType; // to keep a lock-count #elif defined(_WIN32) || defined(__CYGWIN32__) || defined(__CYGWIN64__) diff --git a/internal/ceres/program_evaluator.h b/internal/ceres/program_evaluator.h index a06dc8c51..672c233b3 100644 --- a/internal/ceres/program_evaluator.h +++ b/internal/ceres/program_evaluator.h @@ -79,6 +79,9 @@ #ifndef CERES_INTERNAL_PROGRAM_EVALUATOR_H_ #define CERES_INTERNAL_PROGRAM_EVALUATOR_H_ +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifdef CERES_USE_OPENMP #include #endif diff --git a/internal/ceres/schur_eliminator_impl.h b/internal/ceres/schur_eliminator_impl.h index c09b7fb3a..305d94e8c 100644 --- a/internal/ceres/schur_eliminator_impl.h +++ b/internal/ceres/schur_eliminator_impl.h @@ -45,6 +45,9 @@ #define EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD 10 +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifdef CERES_USE_OPENMP #include #endif diff --git a/internal/ceres/single_linkage_clustering.cc b/internal/ceres/single_linkage_clustering.cc index 54b4379d5..0a8b20cfe 100644 --- a/internal/ceres/single_linkage_clustering.cc +++ b/internal/ceres/single_linkage_clustering.cc @@ -28,6 +28,9 @@ // // Author: sameeragarwal@google.com (Sameer Agarwal) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include "ceres/single_linkage_clustering.h" diff --git a/internal/ceres/single_linkage_clustering.h b/internal/ceres/single_linkage_clustering.h index 9b137cfa6..e6fdeabea 100644 --- a/internal/ceres/single_linkage_clustering.h +++ b/internal/ceres/single_linkage_clustering.h @@ -31,6 +31,9 @@ #ifndef CERES_INTERNAL_SINGLE_LINKAGE_CLUSTERING_H_ #define CERES_INTERNAL_SINGLE_LINKAGE_CLUSTERING_H_ +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include "ceres/collections_port.h" diff --git a/internal/ceres/single_linkage_clustering_test.cc b/internal/ceres/single_linkage_clustering_test.cc index 42cbda373..1cbc5be79 100644 --- a/internal/ceres/single_linkage_clustering_test.cc +++ b/internal/ceres/single_linkage_clustering_test.cc @@ -28,6 +28,9 @@ // // Author: Sameer Agarwal (sameeragarwal@google.com) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include "ceres/single_linkage_clustering.h" diff --git a/internal/ceres/small_blas.h b/internal/ceres/small_blas.h index e14e664b7..26228e493 100644 --- a/internal/ceres/small_blas.h +++ b/internal/ceres/small_blas.h @@ -35,6 +35,7 @@ #ifndef CERES_INTERNAL_SMALL_BLAS_H_ #define CERES_INTERNAL_SMALL_BLAS_H_ +#include "ceres/internal/port.h" #include "ceres/internal/eigen.h" #include "glog/logging.h" diff --git a/internal/ceres/sparse_normal_cholesky_solver.cc b/internal/ceres/sparse_normal_cholesky_solver.cc index 07537e3d1..cf5bb235b 100644 --- a/internal/ceres/sparse_normal_cholesky_solver.cc +++ b/internal/ceres/sparse_normal_cholesky_solver.cc @@ -28,6 +28,9 @@ // // Author: sameeragarwal@google.com (Sameer Agarwal) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #if !defined(CERES_NO_SUITESPARSE) || !defined(CERES_NO_CXSPARSE) #include "ceres/sparse_normal_cholesky_solver.h" diff --git a/internal/ceres/sparse_normal_cholesky_solver.h b/internal/ceres/sparse_normal_cholesky_solver.h index ea91534b1..ed777a118 100644 --- a/internal/ceres/sparse_normal_cholesky_solver.h +++ b/internal/ceres/sparse_normal_cholesky_solver.h @@ -34,6 +34,9 @@ #ifndef CERES_INTERNAL_SPARSE_NORMAL_CHOLESKY_SOLVER_H_ #define CERES_INTERNAL_SPARSE_NORMAL_CHOLESKY_SOLVER_H_ +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #if !defined(CERES_NO_SUITESPARSE) || !defined(CERES_NO_CXSPARSE) #include "ceres/cxsparse.h" diff --git a/internal/ceres/suitesparse.cc b/internal/ceres/suitesparse.cc index 8079bc16e..1df7566e0 100644 --- a/internal/ceres/suitesparse.cc +++ b/internal/ceres/suitesparse.cc @@ -28,6 +28,9 @@ // // Author: sameeragarwal@google.com (Sameer Agarwal) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include "ceres/suitesparse.h" diff --git a/internal/ceres/suitesparse.h b/internal/ceres/suitesparse.h index 832f103b8..0a7ea97f2 100644 --- a/internal/ceres/suitesparse.h +++ b/internal/ceres/suitesparse.h @@ -33,6 +33,8 @@ #ifndef CERES_INTERNAL_SUITESPARSE_H_ #define CERES_INTERNAL_SUITESPARSE_H_ +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" #ifndef CERES_NO_SUITESPARSE diff --git a/internal/ceres/visibility.cc b/internal/ceres/visibility.cc index acfa45b86..b3ee18558 100644 --- a/internal/ceres/visibility.cc +++ b/internal/ceres/visibility.cc @@ -28,6 +28,9 @@ // // Author: kushalav@google.com (Avanish Kushal) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include "ceres/visibility.h" diff --git a/internal/ceres/visibility.h b/internal/ceres/visibility.h index 2d1e6f85d..5ddd3a560 100644 --- a/internal/ceres/visibility.h +++ b/internal/ceres/visibility.h @@ -35,6 +35,9 @@ #ifndef CERES_INTERNAL_VISIBILITY_H_ #define CERES_INTERNAL_VISIBILITY_H_ +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include diff --git a/internal/ceres/visibility_based_preconditioner.cc b/internal/ceres/visibility_based_preconditioner.cc index a3bebed2c..695eedcc8 100644 --- a/internal/ceres/visibility_based_preconditioner.cc +++ b/internal/ceres/visibility_based_preconditioner.cc @@ -28,6 +28,9 @@ // // Author: sameeragarwal@google.com (Sameer Agarwal) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include "ceres/visibility_based_preconditioner.h" diff --git a/internal/ceres/visibility_based_preconditioner_test.cc b/internal/ceres/visibility_based_preconditioner_test.cc index 2edbb187e..c718b5e8a 100644 --- a/internal/ceres/visibility_based_preconditioner_test.cc +++ b/internal/ceres/visibility_based_preconditioner_test.cc @@ -28,6 +28,9 @@ // // Author: sameeragarwal@google.com (Sameer Agarwal) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include "ceres/visibility_based_preconditioner.h" diff --git a/internal/ceres/visibility_test.cc b/internal/ceres/visibility_test.cc index 3cfb232cf..0e22f88c3 100644 --- a/internal/ceres/visibility_test.cc +++ b/internal/ceres/visibility_test.cc @@ -29,6 +29,9 @@ // Author: kushalav@google.com (Avanish Kushal) // sameeragarwal@google.com (Sameer Agarwal) +// This include must come before any #ifndef check on Ceres compile options. +#include "ceres/internal/port.h" + #ifndef CERES_NO_SUITESPARSE #include "ceres/visibility.h" diff --git a/jni/Android.mk b/jni/Android.mk index 941c89a19..70271460b 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -96,7 +96,6 @@ LOCAL_CPP_EXTENSION := .cc LOCAL_CFLAGS := $(CERES_EXTRA_DEFINES) \ -DCERES_NO_LAPACK \ -DCERES_NO_SUITESPARSE \ - -DCERES_NO_GFLAGS \ -DCERES_NO_THREADS \ -DCERES_NO_CXSPARSE \ -DCERES_STD_UNORDERED_MAP \