Cmake refactoring
1. Use CMake FindLAPACK and FindBLAS Modules.
2. Remove SEARCH_HEADERS and SEARCH_LIBS and replace them with
CMAKE variables. This leads to simplification of the FIND_LIBRARY
and FIND_PATH calls.
3. Make miniglog a fallback when glog is not present and the
user indicates MINIGLOG=OFF.
4. Add time.h to miniglog.
5. Remove shared library building.
Change-Id: I8a97156d3d7cf645fbbfe8e571761bc16c89f43f
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 9138c0d..7562f5c 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -132,20 +132,14 @@
ENDIF (SCHUR_SPECIALIZATIONS)
# For Android, use the internal Glog implementation.
-IF (BUILD_ANDROID)
- ADD_LIBRARY(miniglog STATIC
- miniglog/glog/logging.cc)
-
- # The Android logging library that defines e.g. __android_log_print is
- # creatively named "log".
- TARGET_LINK_LIBRARIES(miniglog log)
-
+IF (MINIGLOG)
+ ADD_LIBRARY(miniglog STATIC miniglog/glog/logging.cc)
INSTALL(TARGETS miniglog
EXPORT CeresExport
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib${LIB_SUFFIX}
ARCHIVE DESTINATION lib${LIB_SUFFIX})
-ENDIF (BUILD_ANDROID)
+ENDIF (MINIGLOG)
SET(CERES_LIBRARY_DEPENDENCIES ${GLOG_LIB})
@@ -179,11 +173,8 @@
ENDIF (CXSPARSE_FOUND)
IF (BLAS_AND_LAPACK_FOUND)
- LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${LAPACK_LIB})
-
- IF (EXISTS ${BLAS_LIB})
- LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${BLAS_LIB})
- ENDIF (EXISTS ${BLAS_LIB})
+ LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${LAPACK_LIBRARIES})
+ LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${BLAS_LIBRARIES})
ENDIF (BLAS_AND_LAPACK_FOUND)
IF (CXSPARSE_FOUND)
@@ -201,7 +192,7 @@
${CERES_INTERNAL_HDRS}
${CERES_INTERNAL_SCHUR_FILES})
-ADD_LIBRARY(ceres STATIC ${CERES_LIBRARY_SOURCE})
+ADD_LIBRARY(ceres ${CERES_LIBRARY_SOURCE})
TARGET_LINK_LIBRARIES(ceres ${CERES_LIBRARY_DEPENDENCIES})
INSTALL(TARGETS ceres
@@ -210,23 +201,6 @@
LIBRARY DESTINATION lib${LIB_SUFFIX}
ARCHIVE DESTINATION lib${LIB_SUFFIX})
-# Don't build a DLL on MSVC. Supporting Ceres as a DLL on Windows involves
-# nontrivial changes that we haven't made yet.
-IF (NOT MSVC AND NOT BUILD_ANDROID AND BUILD_SHARED)
- ADD_LIBRARY(ceres_shared SHARED ${CERES_LIBRARY_SOURCE})
- TARGET_LINK_LIBRARIES(ceres_shared ${CERES_LIBRARY_DEPENDENCIES})
- SET_TARGET_PROPERTIES(ceres_shared PROPERTIES
- VERSION ${CERES_VERSION}
- SOVERSION ${CERES_ABI_VERSION})
-
- INSTALL(TARGETS ceres_shared
- EXPORT CeresExport
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION lib${LIB_SUFFIX}
- ARCHIVE DESTINATION lib${LIB_SUFFIX})
-
-ENDIF (NOT MSVC AND NOT BUILD_ANDROID AND BUILD_SHARED)
-
IF (BUILD_TESTING AND GFLAGS)
ADD_LIBRARY(gtest gmock_gtest_all.cc gmock_main.cc)
ADD_LIBRARY(test_util
@@ -235,6 +209,7 @@
test_util.cc)
TARGET_LINK_LIBRARIES(gtest ${GFLAGS_LIB} ${GLOG_LIB})
+ TARGET_LINK_LIBRARIES(test_util ceres gtest ${GLOG_LIB})
MACRO (CERES_TEST NAME)
ADD_EXECUTABLE(${NAME}_test ${NAME}_test.cc)
diff --git a/internal/ceres/c_api.cc b/internal/ceres/c_api.cc
index 02bc129..1fd01c9 100644
--- a/internal/ceres/c_api.cc
+++ b/internal/ceres/c_api.cc
@@ -49,7 +49,8 @@
void ceres_init() {
// This is not ideal, but it's not clear what to do if there is no gflags and
// no access to command line arguments.
- google::InitGoogleLogging("<unknown>");
+ char message[] = "<unknown>";
+ google::InitGoogleLogging(message);
}
ceres_problem_t* ceres_create_problem() {
@@ -172,7 +173,7 @@
void ceres_solve(ceres_problem_t* c_problem) {
Problem* problem = reinterpret_cast<Problem*>(c_problem);
-
+
// TODO(keir): Obviously, this way of setting options won't scale or last.
// Instead, figure out a way to specify some of the options without
// duplicating everything.
diff --git a/internal/ceres/miniglog/glog/logging.h b/internal/ceres/miniglog/glog/logging.h
index 1fc137b..13e8e2d 100644
--- a/internal/ceres/miniglog/glog/logging.h
+++ b/internal/ceres/miniglog/glog/logging.h
@@ -97,11 +97,12 @@
#endif // ANDROID
#include <algorithm>
-#include <iostream>
-#include <string>
+#include <ctime>
#include <fstream>
+#include <iostream>
#include <set>
#include <sstream>
+#include <string>
#include <vector>
// Log severity level constants.