diff options
Diffstat (limited to 'mkspecs/macx-ios-clang/features/default_post.prf')
-rw-r--r-- | mkspecs/macx-ios-clang/features/default_post.prf | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/mkspecs/macx-ios-clang/features/default_post.prf b/mkspecs/macx-ios-clang/features/default_post.prf new file mode 100644 index 0000000000..a61db3daea --- /dev/null +++ b/mkspecs/macx-ios-clang/features/default_post.prf @@ -0,0 +1,85 @@ + +equals(TEMPLATE, app) { + + # If the application uses Qt, it needs to be an application bundle + # to be able to deploy and run on iOS. The only exception to this + # is if you're working with a jailbroken device and can run the + # resulting binary from the console/over SSH, but that's not a + # use-case we care about, so no need to complicate the logic. + qt: CONFIG *= app_bundle + + # Application bundles require building through Xcode + app_bundle:!macx-xcode { + # For Qt applications we want Xcode project files as the generated output, + # but since qmake doesn't handle the transition between makefiles and Xcode + # project files (which happens when using subdirs), we create a wrapper + # makefile that takes care of generating the Xcode project, and allows + # building by calling out to xcodebuild. + TEMPLATE = aux + + CONFIG -= have_target qt staticlib dll + SOURCES = + RESOURCES = + INSTALLS = + + TARGET_XCODE_PROJECT_DIR = $${TARGET}.xcodeproj + + system("cd $$system_quote($$OUT_PWD) && $${QMAKE_QMAKE} $$system_quote($$_PRO_FILE_) -spec macx-xcode") + + # We use xcodebuild to do the actual build, but filter out the verbose + # output that shows all environment variables for each build step. + xcodebuild_build.commands = "@bash -o pipefail -c 'xcodebuild | grep -v setenv'" + QMAKE_EXTRA_TARGETS += xcodebuild_build + all.depends = xcodebuild_build + QMAKE_EXTRA_TARGETS += all + + # We do the same for the clean action + xcodebuild_clean.commands = "@xcodebuild clean" + QMAKE_EXTRA_TARGETS += xcodebuild_clean + clean.depends = xcodebuild_clean + QMAKE_EXTRA_TARGETS += clean + + # And distclean + xcodebuild_distclean.commands = "$(DEL_FILE) -R $$TARGET_XCODE_PROJECT_DIR" + QMAKE_EXTRA_TARGETS += xcodebuild_distclean + distclean.depends = xcodebuild_distclean + QMAKE_EXTRA_TARGETS += distclean + } +} + +macx-xcode { + ios_device_family.name = TARGETED_DEVICE_FAMILY + ios_device_family.value = $$QMAKE_IOS_TARGETED_DEVICE_FAMILY + QMAKE_MAC_XCODE_SETTINGS += ios_device_family +} + +isEmpty(QT_ARCH) { + # The iPhoneOS and iPhoneSimulator targets share the same toolchain, + # so when configure runs the arch tests it passes the correct sysroot, + # but we fail to pick up the architecture since we're not passing -arch + # yet. Xcode does not seem to have a way to run the shared toolchain + # in a way that will automatically do this (for example xcrun -sdk). + contains(QMAKE_MAC_SDK, iphoneos.*): QT_ARCH = arm + else: QT_ARCH = i386 # Simulator +} + +# Be more specific about which architecture we're targeting +equals(QT_ARCH, arm): \ + actual_archs = armv7 +else: \ + actual_archs = $$QT_ARCH + +macx-xcode { + QMAKE_XCODE_ARCHS = $$actual_archs +} else { + for(arch, actual_archs): \ + arch_flags += -arch $$arch + + QMAKE_CFLAGS += $$arch_flags + QMAKE_CXXFLAGS += $$arch_flags + QMAKE_OBJECTIVE_CFLAGS += $$arch_flags + QMAKE_LFLAGS += $$arch_flags +} +unset(actual_archs) + +load(default_post) |