401510dbbe
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>
76 lines
3.5 KiB
Plaintext
76 lines
3.5 KiB
Plaintext
|
|
equals(TEMPLATE, app):contains(QT, gui(-private)?) {
|
|
!macx-xcode: \
|
|
error("Linking the iOS platform plugin requires bulding through Xcode")
|
|
|
|
LIBS *= -L$$[QT_INSTALL_PLUGINS/get]/platforms
|
|
|
|
lib_name = qios
|
|
lib_path_and_base = $$[QT_INSTALL_PLUGINS/get]/platforms/lib$${lib_name}$$qtPlatformTargetSuffix()
|
|
LIBS += -l$${lib_name}$$qtPlatformTargetSuffix() $$fromfile($${lib_path_and_base}.prl, QMAKE_PRL_LIBS)
|
|
|
|
# By marking qt_registerPlatformPlugin as undefined, we ensure that
|
|
# the plugin.o translation unit is considered for inclusion in
|
|
# the final binary, which in turn ensures that the plugin's
|
|
# static initializer is included and run.
|
|
QMAKE_LFLAGS += -u _qt_registerPlatformPlugin
|
|
|
|
# We do link and dependency resolution for the platform plugin
|
|
# manually, since we know we always need the plugin, so we don't
|
|
# need to generate an import for it.
|
|
CONFIG -= import_qpa_plugin
|
|
|
|
!no_main_wrapper {
|
|
# Instead of messing with the user's main function we go the other
|
|
# way and change the application entry point to call our main wrapper.
|
|
# This entry point is the 'start' symbol, provided by crt1.o, so we
|
|
# make a copy of the file and rename the '_main' unresolved symbol
|
|
# to our wrapper function, '_qtmn', injecting ourselves into the app
|
|
# startup. Once Apple starts shipping the LLVM linker (lld) we may
|
|
# get rid of this step completely and just pass -e _qtmn to the
|
|
# linker, taking advantage of the new LC_MAIN load command.
|
|
|
|
# We know that iOS 3.1 and up uses crt1.3.1.o (technically not
|
|
# true for simulator, but the SDK has a symlink to the correct file).
|
|
original_crt_path = "$(SDK_DIR)/usr/lib/crt1.3.1.o"
|
|
|
|
xcode_objects_path = "$(OBJECT_FILE_DIR_$(CURRENT_VARIANT))/$(CURRENT_ARCH)"
|
|
custom_crt_filename = "crt1_qt.o"
|
|
custom_crt_path = "$$xcode_objects_path/$$custom_crt_filename"
|
|
|
|
EOC = $$escape_expand(\\n\\t)
|
|
create_custom_crt.commands = \
|
|
# Copy original crt1 to build directory
|
|
"$$QMAKE_COPY_FILE $$original_crt_path $$custom_crt_path $$EOC" \
|
|
# And rename all occurrences of _main to _qtmn
|
|
"strings -t d - $${custom_crt_path}" \
|
|
"| sed -n 's/^\\([0-9]\\{1,\\}\\) _main\$\$/\1/p'" \
|
|
"| while read offset; do" \
|
|
"printf '_qtmn'" \
|
|
"| dd of=$${custom_crt_path} bs=1 seek=\$\$offset conv=notrunc >/dev/null 2>&1" \
|
|
"; done"
|
|
create_custom_crt.depends = $$original_crt_path
|
|
create_custom_crt.target = $$custom_crt_path
|
|
preprocess.depends = create_custom_crt
|
|
QMAKE_EXTRA_TARGETS += create_custom_crt preprocess
|
|
|
|
clean_custom_crt.commands = "$$QMAKE_DEL_FILE $$custom_crt_path"
|
|
preprocess_clean.depends += clean_custom_crt
|
|
QMAKE_EXTRA_TARGETS += clean_custom_crt preprocess_clean
|
|
|
|
# Prevent usage of new LC_MAIN load command, which skips start/crt1
|
|
# and calls main from the loader. We rely on injecting into start.
|
|
QMAKE_LFLAGS += -Wl,-no_new_main
|
|
|
|
# Explicitly link against our modified crt1 object
|
|
QMAKE_LFLAGS += -nostartfiles -l$${custom_crt_filename}
|
|
|
|
# Workaround for QMAKE_PBX_LIBPATHS mangling the Xcode variables
|
|
lib_search_path.name = LIBRARY_SEARCH_PATHS
|
|
lib_search_path.value = $$xcode_objects_path
|
|
QMAKE_MAC_XCODE_SETTINGS += lib_search_path
|
|
}
|
|
}
|
|
|
|
load(qt)
|