summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/uikit/default_post.prf
blob: 52c9b1e8c8f9f547bb7c1da20bb3bfc137d18e82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
equals(TEMPLATE, app):qt {
    # 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.
    CONFIG *= app_bundle

    # 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 can't just override
    # MAKEFILE_GENERATOR. Instead, we generate the Xcode project by spawning a
    # child qmake process with -spec macx-xcode and let the top level qmake
    # process generate a wrapper makefile that forwards everything to xcodebuild.
    equals(MAKEFILE_GENERATOR, UNIX): \
        CONFIG = xcodebuild $$CONFIG
}

load(default_post)

macx-xcode {
    device_family.name = TARGETED_DEVICE_FAMILY
    ios: device_family.value = $$QMAKE_IOS_TARGETED_DEVICE_FAMILY
    tvos: device_family.value = $$QMAKE_TVOS_TARGETED_DEVICE_FAMILY
    watchos: device_family.value = $$QMAKE_WATCHOS_TARGETED_DEVICE_FAMILY
    QMAKE_MAC_XCODE_SETTINGS += device_family

    ios {
        # If QMAKE_BUNDLE_DATA contains an asset catalog that includes an
        # AppIcon.appiconset, we configure Xcode to use it for app icons.
        for(bundle_data, QMAKE_BUNDLE_DATA) {
            for(bundle_file, $${bundle_data}.files) {
                !contains(bundle_file, .*\.xcassets$): next()
                !exists($$absolute_path($$bundle_file/AppIcon.appiconset, $$_PRO_FILE_PWD_)): next()

                asset_catalog_appicon.name = "ASSETCATALOG_COMPILER_APPICON_NAME"
                asset_catalog_appicon.value = "AppIcon"
                QMAKE_MAC_XCODE_SETTINGS += asset_catalog_appicon
                break()
            }
            !isEmpty(asset_catalog_appicon.name): break()
        }

        # Set up default 4-inch iPhone/iPod launch image so that our apps
        # support the full screen resolution of those devices.
        qmake_launch_image = Default-568h@2x.png
        qmake_copy_image.input = $$QMAKESPEC/$$qmake_launch_image
        qmake_copy_image.output = $$OUT_PWD/$${TARGET}.xcodeproj/$$qmake_launch_image
        qmake_copy_image.CONFIG = verbatim
        QMAKE_SUBSTITUTES += qmake_copy_image
        qmake_launch_images.files = $$qmake_copy_image.output
        QMAKE_BUNDLE_DATA += qmake_launch_images

        lessThan(QMAKE_XCODE_VERSION, "6.0") {
            warning("You need to update Xcode to version 6 or newer to fully support iPhone6/6+")
        } else {
            # Set up default LaunchScreen to support iPhone6/6+
            qmake_launch_screen = LaunchScreen.xib
            qmake_copy_launch_screen.input = $$QMAKESPEC/$$qmake_launch_screen
            qmake_copy_launch_screen.output = $$OUT_PWD/$${TARGET}.xcodeproj/$$qmake_launch_screen
            QMAKE_SUBSTITUTES += qmake_copy_launch_screen
            qmake_launch_screens.files = $$qmake_copy_launch_screen.output
            QMAKE_BUNDLE_DATA += qmake_launch_screens
        }
    }
}

macx-xcode {
    arch_device.name = "ARCHS[sdk=$${device.sdk}*]"
    arch_simulator.name = "ARCHS[sdk=$${simulator.sdk}*]"
    ios {
        arch_device.value = $$QMAKE_IOS_DEVICE_ARCHS
        arch_simulator.value = $$QMAKE_IOS_SIMULATOR_ARCHS
        QMAKE_XCODE_ARCHS = $$QMAKE_IOS_DEVICE_ARCHS $$QMAKE_IOS_SIMULATOR_ARCHS
    }
    tvos {
        arch_device.value = $$QMAKE_TVOS_DEVICE_ARCHS
        arch_simulator.value = $$QMAKE_TVOS_SIMULATOR_ARCHS
        QMAKE_XCODE_ARCHS = $$QMAKE_TVOS_DEVICE_ARCHS $$QMAKE_TVOS_SIMULATOR_ARCHS
    }
    watchos {
        arch_device.value = $$QMAKE_WATCHOS_DEVICE_ARCHS
        arch_simulator.value = $$QMAKE_WATCHOS_SIMULATOR_ARCHS
        QMAKE_XCODE_ARCHS = $$QMAKE_WATCHOS_DEVICE_ARCHS $$QMAKE_WATCHOS_SIMULATOR_ARCHS
    }

    QMAKE_MAC_XCODE_SETTINGS += arch_device arch_simulator

    only_active_arch.name = ONLY_ACTIVE_ARCH
    only_active_arch.value = YES
    only_active_arch.build = debug
    QMAKE_MAC_XCODE_SETTINGS += only_active_arch
} else {
    # Be more specific about which architecture we're targeting
    contains(QT_ARCH, arm.*) {
        ios: VALID_ARCHS = $$QMAKE_IOS_DEVICE_ARCHS
        tvos: VALID_ARCHS = $$QMAKE_TVOS_DEVICE_ARCHS
        watchos: VALID_ARCHS = $$QMAKE_WATCHOS_DEVICE_ARCHS
    } else {
        ios: VALID_ARCHS = $$QMAKE_IOS_SIMULATOR_ARCHS
        tvos: VALID_ARCHS = $$QMAKE_TVOS_SIMULATOR_ARCHS
        watchos: VALID_ARCHS = $$QMAKE_WATCHOS_SIMULATOR_ARCHS
    }

    single_arch: VALID_ARCHS = $$first(VALID_ARCHS)

    ACTIVE_ARCHS = $(filter $(EXPORT_VALID_ARCHS), $(ARCHS))
    ARCH_ARGS = $(foreach arch, $(if $(EXPORT_ACTIVE_ARCHS), $(EXPORT_ACTIVE_ARCHS), $(EXPORT_VALID_ARCHS)), -arch $(arch))

    QMAKE_EXTRA_VARIABLES += VALID_ARCHS ACTIVE_ARCHS ARCH_ARGS

    arch_flags = $(EXPORT_ARCH_ARGS)

    QMAKE_CFLAGS += $$arch_flags
    QMAKE_CXXFLAGS += $$arch_flags
    QMAKE_LFLAGS += $$arch_flags
}