add support for building for ios use ios-cmake to build for ios Change-Id: I6b17c33339f3121322a4004d79629b22a62f7a94
diff --git a/CMakeLists.txt b/CMakeLists.txt index 319407a..8626a4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -123,6 +123,52 @@ ENDIF (BUILD_TESTING AND BUILD_SHARED_LIBS) ENDIF (MSVC) +# Use ios-cmake to build a static library for iOS +# +# We need to add isysroot to force cmake to find the toolchains from the iOS SDK +# instead of using the standard ones. And add flag mios-simulator-version so clang +# knows we are building for ios simulator but not mac. +# +# You can build for OS (armv7, armv7s, arm64), SIMULATOR (i386) or SIMULATOR64 (x86_64) +# separately and use lipo to merge them into one static library. +# +# There are some features/algorithms are not available in iOS version and the +# minimum supported iOS version is 6.0 now. +# +# Use cmake ../ceres-solver -DCMAKE_TOOLCHAIN_FILE=../ceres-solver/cmake/iOS.cmake \ +# -DIOS_PLATFORM=PLATFORM -DEIGEN_INCLUDE_DIR=/path/to/eigen/header +# to config the cmake. The PLATFORM can be one of OS, SIMULATOR and SIMULATOR64. +# Check the documentation in iOS.cmake to find more options. +# +# After building, you will get libceres.a and libminiglog.a +# You need to add these two libraries into your xcode project. +# +# If you use the lapack and blas, then you also need to add Accelerate.framework +# to your xcode project's linking dependency. +IF (IOS) + MESSAGE(STATUS "Building Ceres for iOS platform: ${IOS_PLATFORM}") + + UPDATE_CACHE_VARIABLE(MINIGLOG ON) + MESSAGE(STATUS "Building for iOS, forcing use of miniglog instead of glog.") + + UPDATE_CACHE_VARIABLE(SUITESPARSE OFF) + UPDATE_CACHE_VARIABLE(CXSPARSE OFF) + UPDATE_CACHE_VARIABLE(GFLAGS OFF) + UPDATE_CACHE_VARIABLE(OPENMP OFF) + + MESSAGE(STATUS "Building for iOS: SuiteSparse, CXSparse, gflags and OpenMP are not available.") + + UPDATE_CACHE_VARIABLE(BUILD_EXAMPLES OFF) + MESSAGE(STATUS "Building for iOS, will not build examples.") + + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-abi-version=2 -fobjc-arc -isysroot ${CMAKE_OSX_SYSROOT}") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-abi-version=2 -fobjc-arc -isysroot ${CMAKE_OSX_SYSROOT}") + + IF (${IOS_PLATFORM} STREQUAL "SIMULATOR" OR ${IOS_PLATFORM} STREQUAL "SIMULATOR64") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mios-simulator-version-min=6.0") + ENDIF() +ENDIF (IOS) + # Prior to October 2013, Ceres used some non-CMake standardised variables to # hold user-specified (as opposed to FindPackage found) include directory and # library paths for Ceres dependencies. These were were of the form: