Use old minimum iOS version flags on Xcode < 7.0.
- The newer style, which are more specific and match the SDK names
are not available on Xcode < 7.0.
Change-Id: I2f07a0365183d2781157cdb05fd49b30ae001ac5
diff --git a/cmake/iOS.cmake b/cmake/iOS.cmake
index a22fcb5..23fe920 100644
--- a/cmake/iOS.cmake
+++ b/cmake/iOS.cmake
@@ -59,6 +59,7 @@
#
# This toolchain defines the following variables for use externally:
#
+# XCODE_VERSION: Version number (not including Build version) of Xcode detected.
# IOS_SDK_VERSION: Version of iOS SDK being used.
# CMAKE_OSX_ARCHITECTURES: Architectures being compiled for (generated from
# IOS_PLATFORM).
@@ -74,6 +75,15 @@
# iOS environment. Thanks to the android-cmake project for providing the
# command.
+# Get the Xcode version being used.
+execute_process(COMMAND xcodebuild -version
+ OUTPUT_VARIABLE XCODE_VERSION
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+string(REGEX MATCH "Xcode [0-9\\.]+" XCODE_VERSION "${XCODE_VERSION}")
+string(REGEX REPLACE "Xcode ([0-9\\.]+)" "\\1" XCODE_VERSION "${XCODE_VERSION}")
+message(STATUS "Building with Xcode version: ${XCODE_VERSION}")
+
# Default to building for iPhoneOS if not specified otherwise, and we cannot
# determine the platform from the CMAKE_OSX_ARCHITECTURES variable. The use
# of CMAKE_OSX_ARCHITECTURES is such that try_compile() projects can correctly
@@ -110,7 +120,6 @@
else()
message(FATAL_ERROR "Invalid IOS_PLATFORM: ${IOS_PLATFORM}")
endif()
-
message(STATUS "Configuring iOS build for platform: ${IOS_PLATFORM}, "
"architecture(s): ${IOS_ARCH}")
@@ -213,16 +222,33 @@
set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
-# Specify minimum version as latest SDK version.
+# Specify minimum version as latest SDK version. Note that only Xcode 7+
+# supports the newer more specific: -m${XCODE_IOS_PLATFORM}-version-min flags,
+# older versions of Xcode use: -m(ios/ios-simulator)-version-min instead.
+if (XCODE_VERSION VERSION_LESS 7.0)
+ if (IOS_PLATFORM STREQUAL "OS")
+ set(XCODE_IOS_PLATFORM_VERSION_FLAGS
+ "-mios-version-min=${IOS_SDK_VERSION}")
+ else()
+ # SIMULATOR or SIMULATOR64 both use -mios-simulator-version-min.
+ set(XCODE_IOS_PLATFORM_VERSION_FLAGS
+ "-mios-simulator-version-min=${IOS_SDK_VERSION}")
+ endif()
+else()
+ # Xcode 7.0+ uses flags we can build directly from XCODE_IOS_PLATFORM.
+ set(XCODE_IOS_PLATFORM_VERSION_FLAGS
+ "-m${XCODE_IOS_PLATFORM}-version-min=${IOS_SDK_VERSION}")
+endif()
+
set(CMAKE_C_FLAGS
- "-m${XCODE_IOS_PLATFORM}-version-min=${IOS_SDK_VERSION} -fobjc-abi-version=2 -fobjc-arc ${CMAKE_C_FLAGS}")
+ "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -fobjc-abi-version=2 -fobjc-arc ${CMAKE_C_FLAGS}")
# Hidden visibilty is required for C++ on iOS.
set(CMAKE_CXX_FLAGS
- "-m${XCODE_IOS_PLATFORM}-version-min=${IOS_SDK_VERSION} -fvisibility=hidden -fvisibility-inlines-hidden -fobjc-abi-version=2 -fobjc-arc ${CMAKE_CXX_FLAGS}")
+ "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden -fobjc-abi-version=2 -fobjc-arc ${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3 -fomit-frame-pointer -ffast-math ${CMAKE_CXX_FLAGS_RELEASE}")
-set(CMAKE_C_LINK_FLAGS "-m${XCODE_IOS_PLATFORM}-version-min=${IOS_SDK_VERSION} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
-set(CMAKE_CXX_LINK_FLAGS "-m${XCODE_IOS_PLATFORM}-version-min=${IOS_SDK_VERSION} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
+set(CMAKE_C_LINK_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
+set(CMAKE_CXX_LINK_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
# In order to ensure that the updated compiler flags are used in try_compile()
# tests, we have to forcibly set them in the CMake cache, not merely set them