1#
2# Helper to set build tool & SDK versions for iOS configurations
3#
4# This file sets up the following configuration variables:
5#
6#   QMAKE_IOS_XCODE_VERSION          - version number of Xcode being used
7#   QMAKE_IOS_SDK_VERSION            - version number of iOS device SDK
8#   QMAKE_IOS_SIMULATOR_SDK_VERSION  - version number of iOS simulator SDK
9#
10# Used in:
11#
12#   mkspecs/common/ios/clang.conf
13#   mkspecs/common/ios/llvm.conf
14#   mkspecs/common/ios/qmake.conf
15#   mkspecs/unsupported/macx-iosdevice-clang-legacy/qmake.conf
16#   mkspecs/unsupported/macx-iosdevice-clang/qmake.conf
17#   mkspecs/unsupported/macx-iosdevice-llvm-legacy/qmake.conf
18#   mkspecs/unsupported/macx-iosdevice-llvm/qmake.conf
19#   mkspecs/unsupported/macx-iosdevice-g++-legacy/qmake.conf
20#   mkspecs/unsupported/macx-iossimulator-llvm-legacy/qmake.conf
21#   mkspecs/unsupported/macx-iossimulator-llvm/qmake.conf
22#   mkspecs/unsupported/macx-iossimulator-g++-legacy/qmake.conf
23#
24
25#
26# IMPORTANT:
27#
28# Xcode versions <= 4.2.x must be installed in /Developer.
29# Xcode versions >= 4.3.x must be installed in /Applications
30#
31# Xcode versions >= 4.10 & < 5.0 and versions >= 10.0 are not supported due to
32# the way the version checks are done here. As Apple (so far) has not used
33# minor version numbers greater than 3 for Xcode, and the Xcode major version
34# has only changed three times in the period 2003-2012, this is viewed as an
35# acceptable limitation.
36#
37
38#
39# Edit values below to match iOS build environment, or leave blank for
40# autodetection (slower!)
41#
42
43# Xcode version used for cross-compiling
44QMAKE_IOS_XCODE_VERSION =
45
46# iOS SDK version used for cross-compiling for iOS devices
47QMAKE_IOS_SDK_VERSION   =
48
49# iOS SDK version used for cross-compiling for the iOS simulator
50QMAKE_IOS_SIMULATOR_SDK_VERSION =
51
52#
53# Do not edit values below here if using a pre-built SDK
54#
55
56# Minimum iOS version required on deployment target (if not specified, will
57# default to minimum version that guarantees ARMv7 & OpenGL/ES 2.x).
58#
59# No part of Qt or any known plugin uses features that require iOS versions
60# later than 4.0.
61QMAKE_IPHONEOS_DEPLOYMENT_TARGET = 4.0
62
63###########################################################################
64
65# No Xcode version specified?
66isEmpty(QMAKE_IOS_XCODE_VERSION) {
67    # Get version string from installed Xcode
68    exists(/Applications/Xcode.app/Contents/Developer) {
69        QMAKE_IOS_XCODE_INFO = $$system(/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -version)
70    } else: QMAKE_IOS_XCODE_INFO = $$system(/Developer/usr/bin/xcodebuild -version)
71
72    # Extract Xcode version number from output
73    QMAKE_IOS_XCODE_VERSION = $$member(QMAKE_IOS_XCODE_INFO, 1)
74    QMAKE_IOS_XCODE_INFO =
75}
76
77# Make sure Xcode version is valid
78!lessThan(QMAKE_IOS_XCODE_VERSION, "4.3") {
79    # Xcode 4.3+ is stored in /Applications
80    QMAKE_IOS_PLATFORM_PATH  = /Applications/Xcode.app/Contents/Developer/Platforms
81
82    # Make sure Xcode path is valid
83    !exists($$QMAKE_IOS_PLATFORM_PATH): error("Xcode is not installed in /Applications/Xcode.app! Edit mkspecs/common/ios/versions.conf to specify version installed.")
84} else {
85    # Older Xcode versions are stored in /Developer
86    QMAKE_IOS_PLATFORM_PATH  = /Developer/Platforms
87
88    # Make sure Xcode path is valid
89    !exists($$QMAKE_IOS_PLATFORM_PATH): error("Xcode is not installed in /Developer! Edit mkspecs/common/ios/versions.conf to specify version installed.")
90}
91
92# iOS 4.3 is the preferred version as it is the earliest version that is armv7/gles2 only
93QMAKE_IPHONEOS_PREFERRED_TARGET = 4.3
94
95# Building for iOS device?
96!*simulator* {
97    # No iOS SDK version specified?
98    isEmpty(QMAKE_IOS_SDK_VERSION) {
99        # Get version string from installed Xcode
100        !lessThan(QMAKE_IOS_XCODE_VERSION, "4.3") {
101            QMAKE_IOS_SDK_INFO = $$system(/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -showsdks)
102        } else: QMAKE_IOS_SDK_INFO = $$system(/Developer/usr/bin/xcodebuild -showsdks)
103
104        # Get names of installed device SDKs
105        QMAKE_IOS_SDK_INFO = $$find(QMAKE_IOS_SDK_INFO, ^iphoneos)
106        for(v, QMAKE_IOS_SDK_INFO): {
107            # Extract SDK version number from output
108            v = $$replace(v,iphoneos,)
109
110            # Use latest SDK version
111            greaterThan(v, $$QMAKE_IOS_SDK_VERSION): QMAKE_IOS_SDK_VERSION = $$v
112        }
113        QMAKE_IOS_SDK_INFO =
114    }
115
116    # Make sure iOS SDK version is valid
117    !exists($$QMAKE_IOS_PLATFORM_PATH/iPhoneOS.platform/Developer/SDKs/iPhoneOS$${QMAKE_IOS_SDK_VERSION}.sdk) {
118        error("iOS $$QMAKE_IOS_SDK_VERSION SDK not found! Edit mkspecs/common/ios/versions.conf to specify version installed.")
119    }
120
121    # No deployment target specified?
122    isEmpty(QMAKE_IPHONEOS_DEPLOYMENT_TARGET) {
123        # Use SDK version for iOS versions < preferred
124        lessThan(QMAKE_IOS_SDK_VERSION, $$QMAKE_IPHONEOS_PREFERRED_TARGET) {
125            QMAKE_IPHONEOS_DEPLOYMENT_TARGET = $$QMAKE_IOS_SDK_VERSION
126        } else: QMAKE_IPHONEOS_DEPLOYMENT_TARGET = $$QMAKE_IPHONEOS_PREFERRED_TARGET
127    }
128
129    # Make sure iOS SDK version is >= iOS target version
130    !lessThan(QMAKE_IPHONEOS_DEPLOYMENT_TARGET, $$QMAKE_IOS_SDK_VERSION) {
131        error("Target iOS version is greater that iOS SDK version $$QMAKE_IOS_SDK_VERSION! Edit mkspecs/common/ios/versions.conf to specify target iOS version.")
132    }
133# Building for iOS simulator
134} else {
135    # No iOS simulator SDK version specified?
136    isEmpty(QMAKE_IOS_SIMULATOR_SDK_VERSION) {
137        # Get version string from installed Xcode
138        !lessThan(QMAKE_IOS_XCODE_VERSION, "4.3") {
139            QMAKE_IOS_SDK_INFO = $$system(/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -showsdks)
140        } else: QMAKE_IOS_SDK_INFO = $$system(/Developer/usr/bin/xcodebuild -showsdks)
141
142        # Get names of installed device SDKs
143        QMAKE_IOS_SDK_INFO = $$find(QMAKE_IOS_SDK_INFO, ^iphonesimulator)
144        for(v, QMAKE_IOS_SDK_INFO): {
145            # Extract SDK version number from output
146            v = $$replace(v,iphonesimulator,)
147
148            # Use latest SDK version
149            greaterThan(v, $$QMAKE_IOS_SIMULATOR_SDK_VERSION): QMAKE_IOS_SIMULATOR_SDK_VERSION = $$v
150        }
151        QMAKE_IOS_SDK_INFO =
152    }
153
154    # Make sure iOS simulator SDK version is valid
155    !exists($$QMAKE_IOS_PLATFORM_PATH/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator$${QMAKE_IOS_SIMULATOR_SDK_VERSION}.sdk) {
156        error("iOS $$QMAKE_IOS_SIMULATOR_SDK_VERSION simulator SDK not found! Edit mkspecs/common/ios/versions.conf to specify version installed.")
157    }
158
159    # No deployment target specified?
160    isEmpty(QMAKE_IPHONEOS_DEPLOYMENT_TARGET) {
161        # Use SDK version for iOS versions < preferred
162        lessThan(QMAKE_IOS_SIMULATOR_SDK_VERSION, $$QMAKE_IPHONEOS_PREFERRED_TARGET) {
163            QMAKE_IPHONEOS_DEPLOYMENT_TARGET = $$QMAKE_IOS_SIMULATOR_SDK_VERSION
164        } else: QMAKE_IPHONEOS_DEPLOYMENT_TARGET = $$QMAKE_IPHONEOS_PREFERRED_TARGET
165    }
166
167    # Make sure iOS simulator SDK version is >= iOS target version
168    !lessThan(QMAKE_IPHONEOS_DEPLOYMENT_TARGET, $$QMAKE_IOS_SIMULATOR_SDK_VERSION) {
169        error("Target iOS version is greater that iOS simulator SDK version $$QMAKE_IOS_SIMULATOR_SDK_VERSION! Edit mkspecs/common/ios/versions.conf to specify target iOS version.")
170    }
171}
172
173QMAKE_IPHONEOS_PREFERRED_TARGET =
174QMAKE_IOS_PLATFORM_PATH =
175
176# Set deployment target
177QMAKE_IOS_VERSION_FLAGS = -miphoneos-version-min=$$QMAKE_IPHONEOS_DEPLOYMENT_TARGET
178
179# Set build flags
180QMAKE_CFLAGS           += $$QMAKE_IOS_VERSION_FLAGS
181QMAKE_CXXFLAGS         += $$QMAKE_IOS_VERSION_FLAGS
182QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_IOS_VERSION_FLAGS
183QMAKE_LFLAGS           += $$QMAKE_IOS_VERSION_FLAGS
184QMAKE_IOS_VERSION_FLAGS =
185