qt5base-lts/mkspecs/features/android/android.prf
Alexandru Croitor ebac49dd45 android:qmake: Fix static libraries to include the QT_ARCH suffix
When building a shared library (with qmake) in a user project
targeting Android, the library gets a QT_ARCH suffix added to its
name.
This suffix is not added when building a static library
(CONFIG += staticlib).

In the context of a multi-abi android qmake build, all the arch
specific static libraries would have the same name and would
override each other.
This happens with Qt 5.15 and it would also happen in Qt 6,
but we don't support multi-abi qmake builds in Qt 6 so far.

When the original fix to include the arch suffix for shared libraries
was done in Qt 5, d463a63bb9
it was likely an oversight that it was not applied to static
libraries as well.
The !static part of the condition was added in
72d4f0750b .
The change only handled installation responsibilities, not naming of
libraries.

Fix static libraries to include the arch suffix, but only in Qt 6.

It's too late to fix it in Qt 5, there might be projects that rely on
there not being a suffix in static library names. Adding the suffix
would suddenly cause linking errors.

Amends d463a63bb9

[ChangeLog][Android][qmake] Static libraries targeting Android will
now include an arch suffix when built using qmake.

Fixes: QTBUG-83165
Change-Id: I6f68dcb74cec30b4c8f0bc5a819d89843e9d695e
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
2021-12-02 20:29:58 +01:00

60 lines
2.5 KiB
Plaintext

APK_PATH = $$shell_path($$OUT_PWD/android-build/$${TARGET}.apk)
TARGET_FOR_ANDROID_DEPLOYMENT_SETTINGS = $$TARGET
!contains(TEMPLATE, subdirs): {
apk_install_target.target = apk_install_target
apk_install_target.depends = first
apk_install_target.commands = $(MAKE) -f $(MAKEFILE) INSTALL_ROOT=$$shell_path($$OUT_PWD/android-build) install
qtPrepareTool(ANDROIDDEPLOYQT, androiddeployqt)
isEmpty(ANDROID_DEPLOYMENT_SETTINGS_FILE): ANDROID_DEPLOYMENT_SETTINGS_FILE = $$OUT_PWD/android-$$TARGET-deployment-settings.json
contains(QMAKE_HOST.os, Windows): extension = .exe
apk.target = apk
apk.depends = apk_install_target
apk.commands = $$ANDROIDDEPLOYQT --input $$ANDROID_DEPLOYMENT_SETTINGS_FILE --output $$OUT_PWD/android-build --apk $$APK_PATH
aab.target = aab
aab.depends = apk_install_target
aab.commands = $$ANDROIDDEPLOYQT --input $$ANDROID_DEPLOYMENT_SETTINGS_FILE --output $$OUT_PWD/android-build --aab --apk $$APK_PATH
} else {
prepareRecursiveTarget(aab)
prepareRecursiveTarget(apk)
prepareRecursiveTarget(apk_install_target)
}
# Apply Android arch specific settings in the following cases:
# - build_pass == true aka Qt was configured with multi-ABI (2+ arches)
# - single_android_abi == true aka Qt was configuring with a single ABI / arch
# modifications are omitted when building config.tests
# during Qt configuration, by checkking for the presence of single_arch
build_pass|if(single_android_abi:!single_arch) {
contains(TEMPLATE, ".*app") {
!android_app {
!contains(TARGET, ".so") {
single_arch:TARGET = lib$${TARGET}.so
else:TARGET = lib$${TARGET}_$${QT_ARCH}.so
}
QMAKE_LFLAGS += -Wl,-soname,$$shell_quote($$TARGET)
android_install {
target.path=/libs/$$ANDROID_TARGET_ARCH/
INSTALLS *= target
}
}
} else: contains(TEMPLATE, "lib"):!QTDIR_build:android_install {
tmpvar = $$str_member($$TARGET, -$$str_size($${QT_ARCH}), -1)
!equals(tmpvar, $${QT_ARCH}): TARGET = $${TARGET}_$${QT_ARCH}
!static {
target.path = /libs/$$ANDROID_TARGET_ARCH/
INSTALLS *= target
}
}
} else {
android-build-distclean.commands = \
$$QMAKE_DEL_TREE $$shell_quote($$shell_path($$OUT_PWD/android-build))
QMAKE_EXTRA_TARGETS *= android-build-distclean
CLEAN_DEPS += android-build-distclean
}
QMAKE_EXTRA_TARGETS *= aab apk apk_install_target