Commit Graph

43 Commits

Author SHA1 Message Date
Tor Arne Vestbø
17d690952b iOS: Use Xcode project to filter out environment variables instead of shell
Xcode has a setting for script phases to filter out the environment
variables, so we don't need to use grep.

Change-Id: Ica1c64321385ab3e3b47cf6f8f4d4191bd963540
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
2015-03-09 13:01:12 +00:00
Tor Arne Vestbø
8972ceea87 iOS: Enable runnnig Qt tests using 'make check' via xcodebuild test
Change-Id: I1692cf3eb34726c15eaa969a369bb97a89773bfd
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2015-03-07 11:38:14 +00:00
Tor Arne Vestbø
d5e56fd913 Xcode: Make QMAKE_MAC_SDK_(PLATFORM_)PATH depend on active SDK
The Xcode project generator doesn't support exclusive builds, and always
runs as the default debug/release config, and with iPhoneOS as the target
platform. This means we need to parameterize the QMAKE_MAC_SDK_* build
settings to depend on the currently active SDK in Xcode, so that the
paths, when used in eg. linker flags, are up to date.

Change-Id: I9ca10f794e14ab440d98820657758b3fd8a7cdb0
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2015-03-07 01:57:48 +00:00
Tor Arne Vestbø
f58933f2a9 iOS: Resolve QT depends before checking if we need to link in platform plugin
The logic failed for cases like QT += core widgets.

Change-Id: Ic49c1a2314a4698b03956acbd6778b658326f3e2
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2015-03-07 01:57:47 +00:00
Tor Arne Vestbø
4fb2014657 iOS: Resolve correct SDK as part of sdk.prf instead of default_post.prf
The latter location resulted in the wrong SDK paths being resolved if
sdk.prf was loaded before default_post.prf through an explicit load(sdk)
call.

Change-Id: Ia443260572fbdf5f9ed1daf558c2962703274e32
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2015-03-06 19:01:41 +00:00
Richard Moe Gustavsen
5884160db6 iOS: add AppIcon asset name to Xcode project
The current work-flow for adding app icons to an
iOS app during deployment is not good. You basically
need to specify that you want to use asset catalogs
from within Xcode and add your icons there. The
problem is that qmake will regenerate the Xcode project
the next time it runs, and your changes will then be lost.

This patch will check if the project has a valid asset
catalog assigned to QMAKE_BUNDLE_DATA, and configure
the Xcode project to use it for app icons.

Change-Id: I06621ca46aad91de96cb23ba8ca3b1a3f1226670
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
2015-01-16 11:24:09 +01:00
Tor Arne Vestbø
1018502722 iOS: Use DISTCLEAN_DEPS instead of custom distclean target
Change-Id: I1fb6dc4c9ef3623f58a9c8412499df7b9f9ff9bf
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2014-12-02 10:54:46 +01:00
Richard Moe Gustavsen
8d2da358b7 macx-ios-clang: only provide default LaunchScreen.xib if using Xcode 6
If using an older version of Xcode, Xcode will sometimes complain
that LaunchScreen.xib uses auto layout while the project at
the same time has deployment target set to 5.0 (where auto layout
is not supported).
This is a bug in Xcode really, since LaunchScreen.xib will only be
used when running on iOS 7 (otherwise a LaunchImage will be used).
This has been fixed in Xcode 6.

This patch adds a check for this early on.

Change-Id: Ie612c25b413add23e15fc3cb4f9e30bb5292369d
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2014-11-28 13:20:51 +01:00
Frederik Gladhorn
245acbf6e8 Merge remote-tracking branch 'origin/5.4.0' into 5.4
Change-Id: I95f235a66ce2e9b1fa435c0f911c6f7e811755f0
2014-11-21 13:44:26 +01:00
Tor Arne Vestbø
8aa2ae3e0e iOS: Tell Xcode to not build universal app binaries for debug builds
You're likely to only target/develop on one device at a time, so
we only need to build for one architecture at a time. Switching
device in Xcode will switch the active architecture as well, so
the only case where you'll need a universal debug build is if
you are creating a debug package for testers.

Change-Id: I4f37f5c982082c42836749d1e9fbe5ef91138912
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
2014-11-17 20:04:00 +01:00
Tor Arne Vestbø
70ea4e2b29 iOS: Enable fat builds containing both armv7 and arm64 slices
Apple will from February 1, 2015, require all applications uploaded to
the App Store to be built for both 32-bit (armv7/s) and 64-bit (arm64).

https://developer.apple.com/news/?id=10202014a

We enable fat Qt binaries by passing both -arch armv7 and -arch arm64
to clang, which takes care of lipoing together the two slices for each
object file. This unfortunately means twice the build time and twice
the binary size for our libraries.

Since precompiled headers are architecture specific, and the -Xarch
option can't be used with -include-pch, we need to disable precompiled
headers globally. This can be improved in the future by switching to
pretokenized headers (http://clang.llvm.org/docs/PTHInternals.html).

Since we're enabling 64-bit ARM builds, we're also switching the
simulator builds from i386 to fat i386 and x86_64 builds, so that
we are able to test 64-bit builds using the simulator, but we're
keeping i386 as the architecture Qt is aware of when it's building
for simulator, as we need the CPU features to match the lowest
common denominator.

Change-Id: I277e60bddae549d24ca3c6301d842405180aded6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-11-13 20:00:34 +01:00
Tor Arne Vestbø
88b2f5e868 iOS: Allow ARCHS to be specified at build time for multi-arch builds
Building all architectures of a multi-arch build during Qt development
is in most cases not needed, so we expose a way to limit the archs we
build by passing ARCHS="subset of archs" to make, similar to how you
can pass ARCHS to xcodebuild. If the subset doesn't match any of the
valid architectures for the target, it will fall back to the default
architectures, so it's safe to pass eg. ARCHS="armv7 i386" to make,
even if building for both simulator and device. The variable may also
be exported to the environment for more persistent limits on which
architectures to build.

Change-Id: I47b10bc9d743f0301efff4181d6881ae140d557f
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2014-11-13 20:00:24 +01:00
Tor Arne Vestbø
eca0668a8c iOS: Ensure that the rename-main logic works for multi-arch builds
We need to tell Xcode which architectures it should set up pre-link
dependencies for, as well as run the rename script in the root object
file directory. We pass it the current architectures so that we only
rename main() for simulator or device, not both.

Change-Id: I095d7c8a22ff0cb2ce872c9a86c93a070c1fcc65
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2014-11-13 20:00:13 +01:00
Richard Moe Gustavsen
d4fcf2ca40 iOS: let qmake generate default LaunchScreen.xib
iOS8 will check if the app has a LaunchScreen.xib to determine
if it supports iPhone6/6+ (scale factor and resolution). So
we follow the same pattern as we do with the launch image for
iPhone5, and generate a default LaunchScreen.xib.

The xib file in this patch is a copy of a default file
generated by a native Xcode project (with quotes escaped), but
with the text label set to be $$TARGET.

Change-Id: I163ab48b6f4edea4cc1f6840a1f3d8b3cc0326db
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2014-11-11 20:43:05 +01:00
Richard Moe Gustavsen
459a32e39b mkspec macx-ios-clang: ensure SDK version is valid
Ensure the sdk is of recent enough version since:
1. we build Qt with the latest sdk version, so the app needs
    to do the same to avoid compatibility problems e.g when linking.
2. using a launch screen to support iphone6 depends on sdk 8
3. Apple requires apps that are pushed to appstore to use the
    latest version of the sdk.

Ideally we should store the sdk version used to build Qt, and
require that apps use the same version or newer. But this patch
will do until that is in place.

Change-Id: I18b06d09c1eda15122975b7169ca7a3372df6054
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2014-11-11 19:19:46 +01:00
Tor Arne Vestbø
a8ed001f36 iOS: Properly detect arm64 builds when choosing which -arch flags to pass
Change-Id: Ib410584ba2c1fe342efb18eb955273090d36db8f
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2014-10-28 19:46:03 +01:00
Tor Arne Vestbø
ca972866e2 Fix iOS simulator build after 1f0823c (Rewrite simd.prf to share more code)
Now that we rely on simd.prf for all SIMD sources (including NEON and SSE2),
we need to ensure that CONFIG has the right SIMD values to match simulator.

This worked before due to us checking QT_CPU_FEATURES.$$QT_ARCH and adding
directly to SOURCES.

Change-Id: I4ea7f559e83860eabff1948ad5d140bbb65454df
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-07-30 19:37:52 +02:00
Frederik Gladhorn
e6286ca289 Merge remote-tracking branch 'origin/release' into stable
Manually fixed up: isES -> isOpenGLES
src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp

Change-Id: I57d2ef26c3d4a7b40ace09f4e8560b7686650ea5
2014-05-03 00:56:41 +02:00
Richard Moe Gustavsen
2c0c4676e3 mkspec (iOS): use QTPLUGIN.platforms=-
After bbcdccd, a deprecation warning is written to
the console every time you run qmake on iOS.

This change will make use of the new QTPLUGIN.platforms=-
instead if the deprecated CONFIG -= import_qpa_plugin

Change-Id: I51e4f9d18f6abd87512a39b3236b89d5444fd6c1
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2014-04-30 18:23:00 +02:00
Simo Fält
cd46e9d959 Add make check target for iOS
Enabling check target to run test apps in iPhone simulator.

Task-number: QTBUG-36639
Change-Id: I700d998fe9f1a6c910431789e98e4789d820f3e4
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Tony Sarajärvi <tony.sarajarvi@digia.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2014-04-15 07:53:40 +02:00
Tor Arne Vestbø
02ecd3ae40 Make Xcode debug info format controllable through a qmake variable
The default is still DWARF instead of DWARF with dSYM for static builds
of Qt, so that debug builds of the final application don't take forever
to build due to generating the dSYM file.

Change-Id: I370d800d7c959e05c1a8780c4ebf58fff250daa1
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
2014-04-10 00:44:44 +02:00
Markus Goetz
f202cd8408 iOS: Create folder for SUBDIR projects
In case of a SUBDIR qmake project, it tried to cd into a directory
that did not exist yet. I needed to run qmake twice to get it working.
This fixes it.

Change-Id: I6d322e9a7c96a9d82df77b9ba5f19711a8180ed0
Task-number: QTBUG-37429
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2014-03-14 22:39:23 +01:00
Tor Arne Vestbø
4c980d2e9b Explicitly use libstdc++ for non-C++11 static builds
Otherwise the compiler may choose libc++ based on the deployment target,
and we'll end up with broken builds due to the mismatch between the two
libraries, eg:

Undefined symbols for architecture x86_64:
  "std::ios_base::Init::Init()", referenced from:
      __GLOBAL__I_a in libQt5Qml.a(qv4object.o)
      ...
  "std::ios_base::Init::~Init()", referenced from:
      __GLOBAL__I_a in libQt5Qml.a(qv4object.o)
      ...
  "std::__throw_length_error(char const*)", referenced from:
      ...

This problem is not iOS specific, which is why the logic is moved
to the more generic mac/default_post.prf.

Change-Id: I28b94e614f9167fc0db84bbf1c88dd97d5629938
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2014-01-28 02:33:40 +01:00
Tor Arne Vestbø
a4a174e1a2 iOS: Disable tests for all other modules than qtbase
Instead of sprinkling '!ios' all around the various modules. This is
a bit more fine grained than the CFG_NOBUILD_PARTS += "tests" that we
had in configure.

Change-Id: I6ca2e5df118dfc0bb5d7b8495a3543f51dc0fa30
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-01-25 03:04:38 +01:00
Tor Arne Vestbø
c5192b300e iOS: Fix simulator build by enabling SSE2 code paths
Commit 3c375a76a1 enabled SSE2 in Qt,
but we failed to build the files that implemented the SSE2 specific
drawhelpers and image functions. Since we know what the iOS simulator
supports and the platforms it runs on we can safely enable this
ourselves without it being based on a configure test.

Change-Id: I0cfc43de80068b89aa47c34ffa84ee1c1734886c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2014-01-18 18:50:14 +01:00
Tor Arne Vestbø
0cd776f2cd iOS: Prevent trying to use both libc++ and libstdc++
Static builds of Qt will automatically enable C++11 for all projects,
but this happens in mac/default_post which is after our check.

Change-Id: I22a01e5d876242263fa31f8a404a65905c6c1877
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-01-16 21:51:36 +01:00
Tor Arne Vestbø
702bda5cc9 iOS: Use in-place string renaming to rename main() instead of ld
Processing the object file with ld strips away debug information for
the main() function, resulting in the debugger not being able to
break on specific lines of the function.

It also causes issues when externing sybols in main's object file.

We revert back to the approach of using the strings in-line in the
object file (which is why we keep the name the same length, 'qtmn').

Task-number: QTBUG-35553
Change-Id: I8b0acee36f48ecfefa2e4fd008a842365713d985
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2014-01-06 20:58:28 +01:00
Frederik Gladhorn
733ace5a7a Merge remote-tracking branch 'origin/release' into stable
Conflicts:
	configure
	mkspecs/macx-ios-clang/features/default_post.prf
	tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp

Change-Id: Iaba97eed2272bccf54289640b8197d40e22f7bf5
2013-12-05 17:42:33 +01:00
Tor Arne Vestbø
bf246e6c28 iOS: Explicitly use libstdc++ when C++11 support is not enabled
Otherwise Xcode might choose to use libc++, eg when the deployment target
is iOS7, and this doesn't work when Qt itself was built using libstdc++.

Change-Id: I0b0f36666ed318be9aae87ebaeb0d344109566ac
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2013-12-05 14:17:50 +01:00
Tor Arne Vestbø
6c6fde809a iOS: Use DWARF instead of DWARF with dSYM for debug builds
Generating the dSYM file takes a long time due to our relatively large
static libraries, and is not really useful for a debug build where you
are likely to have the object files and Qt libraries available on your
host system for debugging anyways.

Change-Id: Ie7549975f271de8c56ca04bd28b29e6ed65f16cb
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2013-12-03 11:41:35 +01:00
Tor Arne Vestbø
740e1900bc iOS: Provide default launch image for 4-inch devices
Otherwise the application will not scale to the full resolution of
the device. We copy the image into the Xcode project, since it's
internal to our build system and not meant as a template to be
edited by the user.

For 5.3 we need to provide a proper qmake/qbs mechanism to handle
launch images.

Task-number: QTBUG-31431
Change-Id: Ied0b2843a78c5ea865750e0404418ced7ad27082
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2013-11-29 09:55:23 +01:00
Tor Arne Vestbø
9b8c4b3dea iOS: Be more specific in where we look for object files to rename main
When building under Xcode we can limit the object files search to the
current SDK and debug/release configuration.

Change-Id: Ic405f13f46a594e3ed20d82ca6b84e7e67edebfc
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
2013-10-31 10:00:49 +01:00
Tor Arne Vestbø
e7bda8ee10 iOS: Build libs (including Qt itself) for both simulator and device
Conceptually a Qt for iOS SDK or source build should support building
for both simulator and device, based on the same qmake binary and Qt
libraries. Qt Creator or Xcode should then be able to use the same Qt
version while still building for a single target at a time. This
applies to user libraries as well, which shouldn't require switching
to a different Qt when changing target platform from simulator to
device.

We achieve this by using Qt's exclusive_build feature, where we build
for the two targets in parallel, and then teach Xcode how to choose
the right library dynamically at build time.

Change-Id: I06d60e120d986085fb8686ced98f22f7047c4f23
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-10-30 13:09:47 +01:00
Tor Arne Vestbø
396aa7fade iOS: Build simulator libraries with suffix
Makes it possible to join two separate builds, and opens up for using
exclusive builds to do this.

Change-Id: I87ccbdd55511fdfbef3fe8b581f40525ebf077ed
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2013-10-30 00:34:34 +01:00
Tor Arne Vestbø
40e69879a2 iOS: Set ARCHS in Xcode project for both simulator and device SDKs
Removes the need to pass ARCHS to xcodebuild for simulator builds.

Change-Id: If15e9d387c416c5c9f83c50f5903ae0cd517ff34
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-10-28 12:05:22 +01:00
Tor Arne Vestbø
1cdbe4752b qmake: Expose qmake arguments as QMAKE_ARGS
Allows project files or mkspecs to call qmake recursively using system()
with the right arguments, which we use to fix the ios default_post.prf.

Change-Id: I90d69e2b156bb0f0af1279188b11f81c84c24fb8
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2013-10-24 20:20:59 +02:00
Richard Moe Gustavsen
13035f7fd6 iOS: default_post: let xcodebuild_distclean depend on xcodebuild_clean
Otherwise, make would upon distclean first remove the xcode
project, then try to do xcodebuild distclean. xcodebuild would
then complain about a missing project.

Change-Id: I0a9a6af6d86d1a95e37f4bbafa38c63d892bf1cc
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2013-10-21 14:13:51 +02:00
Tor Arne Vestbø
14b7400de9 iOS: Don't hard-code simulator and device architectures
Change-Id: Id5a370248b553b7393ec1b187bd34c0ab9f28496
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2013-10-18 15:36:16 +02:00
Tor Arne Vestbø
8ccb9096b9 iOS: Add default QT_ARCH for configure tests to our own qt_config.prf
Setting QT_ARCH when empty is a workaround for a missing qconfig.pri,
since it hasn't been written yet by configure. As qconfig.pri is
loaded by the generic qt_config.prf, putting our workaround in
our own wrapper for qt_config makes sense, as it keeps the logic
close to where the original QT_ARCH is resolved.

Change-Id: I49ffc21cf5dea5ca5b6254ca8084a4dcdc359a72
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
2013-10-18 15:36:05 +02:00
Tor Arne Vestbø
c768b0a7af iOS: Prevent stray non-expected rules/targets in Xcode-wrapper makefile
Change-Id: Ibef10ba174df25aa97fd986b51a62d6b7feb119e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
2013-10-18 14:53:09 +02:00
Tor Arne Vestbø
32f34ddbe1 iOS: Wrap user's main by renaming symbol and relying on weak linking
This approach is similar to the earlier apprach of defining main=qt_main
when building the user's sources, but uses the linker to rename the
symbol instead, which is less fragile than using the preprocessor.

To keep the hybrid usecase unaffected by our wrapper logic we declare
both our main wrapper and a fallback qt_main as weak symbols, which
ensures that when the user's application links in our plugin the
real main/qt_main provided by the user is preferred over our weak
symbols.

Change-Id: Ic76f3ba8932430c4b13a1d3a40b8ed2322fe5eea
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
2013-10-17 13:26:28 +02:00
Tor Arne Vestbø
535e356749 iOS: Remove check for unknown Xcode versions
We assume new Xcode versions and toolchains won't break anything, just
like for toolchains on other platforms.

Change-Id: Idb723dbcdbc82e85db1c55b19cd5fe863ca90933
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2013-10-14 17:28:54 +02:00
Tor Arne Vestbø
401510dbbe iOS: Move qmake features out of the generic features and into the makespec
As they are closely tied to the macx-ios-clang mkspec and can't be shared.

Change-Id: Icb59304cc1e4be12732f50175f3f84be289300c2
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
2013-10-14 17:28:48 +02:00