summaryrefslogtreecommitdiffstats
path: root/mkspecs/common/ios/arch.conf
blob: 4ad96874fe0bb130ef9122a1a71701bcbe1c80ab (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
#
# Helper to set CPU architecture flags for iOS configurations
#
# Depends on:
#
#   QMAKE_IPHONEOS_DEPLOYMENT_TARGET - set in mkspecs/common/ios/versions.conf
#
# Note:
#
#   Must be included after load(qt_config) in mkspec for auto-detection based
#   on GL/ES version (GL/ES 2.x implies armv7 on iOS).
#

# Target architecture for iOS devices (armv6, armv7 or leave blank for default)
QMAKE_IOS_TARGET_ARCH   =

###########################################################################

# Device?
!*simulator* {
    # Let mkspec specify archictecture
    *armv6*: QMAKE_IOS_TARGET_ARCH = armv6
    else:*armv7*: QMAKE_IOS_TARGET_ARCH = armv7

    # ARMv7 architecture device (see below) is required for OpenGL/ES 2.x
    isEmpty(QMAKE_IOS_TARGET_ARCH):contains(QT_CONFIG, opengles2): QMAKE_IOS_TARGET_ARCH = armv7

    # No target architecture specified?
    isEmpty(QMAKE_IOS_TARGET_ARCH) {
        # iOS versions < 4.3 can be armv6 or armv7, so need armv6 for max. compatibility,
        # assume that building for OpenGL/ES 1.x is targeting armv6
        lessThan(QMAKE_IPHONEOS_DEPLOYMENT_TARGET, "4.3")|contains(QT_CONFIG, opengles1) {
            QMAKE_IOS_TARGET_ARCH = armv6
        } else: QMAKE_IOS_TARGET_ARCH = armv7
    }

    # Samsung S5PC100, Apple A4, A5, A5X
    equals(QMAKE_IOS_TARGET_ARCH, "armv7") {
        # iOS CPU architecture (armv7)
        QMAKE_IOS_ARM_ARCH = __ARM_ARCH_7__

        # Thumb2 instructions
        QMAKE_IOS_ARM_FLAGS = -mthumb
        QMAKE_IOS_ARM_ARCH += __MARM_THUMB__

        # NEON instructions
        *-g++*: QMAKE_IOS_ARM_FLAGS += -mfloat-abi=softfp -mfpu=neon
        QMAKE_IOS_ARM_ARCH += __ARM_NEON__
    } else {
        # Samsung S5L8900
        if(equals(QMAKE_IOS_TARGET_ARCH, "armv6")) {
            # iOS CPU architecture (armv6)
            QMAKE_IOS_ARM_ARCH = __ARM_ARCH_6__

            # ARM instructions
            QMAKE_IOS_ARM_FLAGS = -marm -mcpu=arm1176jzf-s
            !*clang*: QMAKE_IOS_ARM_FLAGS += -march=armv6
        } else {
            # Unsupported architecture
            error("Invalid iOS target $${QMAKE_IOS_TARGET_ARCH}! Edit mkspecs/common/ios/arch.conf to specify target architecture.")
        }
    }
# Simulator is i386 only
} else: QMAKE_IOS_TARGET_ARCH = i386

# iOS architecture build flags
QMAKE_IOS_ARCH_FLAGS    = -arch $$QMAKE_IOS_TARGET_ARCH
QMAKE_CFLAGS           += $$QMAKE_IOS_ARCH_FLAGS
QMAKE_CXXFLAGS         += $$QMAKE_IOS_ARCH_FLAGS
QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_IOS_ARCH_FLAGS
QMAKE_LFLAGS           += $$QMAKE_IOS_ARCH_FLAGS
QMAKE_IOS_TARGET_ARCH   =
QMAKE_IOS_ARCH_FLAGS    =

# Architecture specific defines/flags
!*simulator* {
    DEFINES            += $$QMAKE_IOS_ARM_ARCH
    QMAKE_IOS_ARM_ARCH  =

    QMAKE_CFLAGS       += $$QMAKE_IOS_ARM_FLAGS
    QMAKE_CXXFLAGS     += $$QMAKE_IOS_ARM_FLAGS
    QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_IOS_ARM_FLAGS
    QMAKE_IOS_ARM_FLAGS =
}