mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-06 01:05:23 +08:00
qt 6.5.1 original
This commit is contained in:
59
mkspecs/features/android/android.prf
Normal file
59
mkspecs/features/android/android.prf
Normal file
@ -0,0 +1,59 @@
|
||||
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
|
127
mkspecs/features/android/android_deployment_settings.prf
Normal file
127
mkspecs/features/android/android_deployment_settings.prf
Normal file
@ -0,0 +1,127 @@
|
||||
contains(TEMPLATE, ".*app"):!build_pass {
|
||||
|
||||
defineReplace(emitString) {
|
||||
return("\"$$clean_path($$1)\"")
|
||||
}
|
||||
|
||||
FILE_CONTENT = "{"
|
||||
FILE_CONTENT += " \"description\": \"This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.\","
|
||||
|
||||
FILE_CONTENT += " \"qt\": $$emitString($$[QT_INSTALL_PREFIX]),"
|
||||
FILE_CONTENT += " \"qtDataDirectory\": $$emitString($$relative_path($$[QT_INSTALL_DATA], $$[QT_INSTALL_PREFIX])),"
|
||||
FILE_CONTENT += " \"qtLibExecsDirectory\": $$emitString($$relative_path($$[QT_INSTALL_LIBEXECS], $$[QT_INSTALL_PREFIX])),"
|
||||
FILE_CONTENT += " \"qtLibsDirectory\": $$emitString($$relative_path($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])),"
|
||||
FILE_CONTENT += " \"qtPluginsDirectory\": $$emitString($$relative_path($$[QT_INSTALL_PLUGINS], $$[QT_INSTALL_PREFIX])),"
|
||||
FILE_CONTENT += " \"qtQmlDirectory\": $$emitString($$relative_path($$[QT_INSTALL_QML], $$[QT_INSTALL_PREFIX])),"
|
||||
|
||||
# Settings from mkspecs/environment
|
||||
FILE_CONTENT += " \"sdk\": $$emitString($$ANDROID_SDK_ROOT),"
|
||||
FILE_CONTENT += " \"sdkBuildToolsRevision\": $$emitString($$ANDROID_SDK_BUILD_TOOLS_REVISION),"
|
||||
|
||||
isEmpty(NDK_ROOT): NDK_ROOT = $$(ANDROID_NDK_ROOT)
|
||||
isEmpty(NDK_ROOT): NDK_ROOT = $$DEFAULT_ANDROID_NDK_ROOT
|
||||
FILE_CONTENT += " \"ndk\": $$emitString($$NDK_ROOT),"
|
||||
|
||||
FILE_CONTENT += " \"toolchain-prefix\": \"llvm\","
|
||||
FILE_CONTENT += " \"tool-prefix\": \"llvm\","
|
||||
|
||||
NDK_HOST = $$(ANDROID_NDK_HOST)
|
||||
isEmpty(NDK_HOST): NDK_HOST = $$DEFAULT_ANDROID_NDK_HOST
|
||||
FILE_CONTENT += " \"ndk-host\": $$emitString($$NDK_HOST),"
|
||||
|
||||
for (arch, ANDROID_ABIS) {
|
||||
equals(arch, x86): libs_arch = i686-linux-android
|
||||
else: equals(arch, x86_64): libs_arch = x86_64-linux-android
|
||||
else: equals(arch, arm64-v8a): libs_arch = aarch64-linux-android
|
||||
else: libs_arch = arm-linux-androideabi
|
||||
ARCHS += "$$emitString($$arch):$$emitString($$libs_arch)"
|
||||
}
|
||||
FILE_CONTENT += " \"architectures\": {$$join(ARCHS,", ")},"
|
||||
|
||||
# Explicitly set qt dependencies of application for deployment
|
||||
!isEmpty(ANDROID_DEPLOYMENT_DEPENDENCIES): \
|
||||
FILE_CONTENT += " \"deployment-dependencies\": $$emitString($$join(ANDROID_DEPLOYMENT_DEPENDENCIES, ",")),"
|
||||
|
||||
# Explicitly set external dependencies of application for deployment
|
||||
!isEmpty(ANDROID_EXTRA_PLUGINS): \
|
||||
FILE_CONTENT += " \"android-extra-plugins\": $$emitString($$join(ANDROID_EXTRA_PLUGINS, ",")),"
|
||||
|
||||
# Android-specific settings of Project
|
||||
!isEmpty(ANDROID_PACKAGE_SOURCE_DIR): \
|
||||
FILE_CONTENT += " \"android-package-source-directory\": $$emitString($$ANDROID_PACKAGE_SOURCE_DIR),"
|
||||
|
||||
# Android-specific version string
|
||||
!isEmpty(ANDROID_VERSION_NAME): \
|
||||
FILE_CONTENT += " \"android-version-name\": $$emitString($$ANDROID_VERSION_NAME),"
|
||||
|
||||
# Android-specific version number
|
||||
!isEmpty(ANDROID_VERSION_CODE): \
|
||||
FILE_CONTENT += " \"android-version-code\": $$emitString($$ANDROID_VERSION_CODE),"
|
||||
|
||||
!isEmpty(ANDROID_MIN_SDK_VERSION): \
|
||||
FILE_CONTENT += " \"android-min-sdk-version\": $$emitString($$ANDROID_MIN_SDK_VERSION),"
|
||||
|
||||
!isEmpty(ANDROID_TARGET_SDK_VERSION): \
|
||||
FILE_CONTENT += " \"android-target-sdk-version\": $$emitString($$ANDROID_TARGET_SDK_VERSION),"
|
||||
|
||||
!isEmpty(ANDROID_EXTRA_LIBS): \
|
||||
FILE_CONTENT += " \"android-extra-libs\": $$emitString($$join(ANDROID_EXTRA_LIBS, ",")),"
|
||||
|
||||
tool_extension = ""
|
||||
contains(QMAKE_HOST.os, Windows): tool_extension = ".exe"
|
||||
FILE_CONTENT += " \"rcc-binary\": $$emitString($$[QT_HOST_LIBEXECS]/rcc$${tool_extension}),"
|
||||
|
||||
contains(QT_MODULES, qml) {
|
||||
FILE_CONTENT += " \"qml-importscanner-binary\": $$emitString($$[QT_HOST_LIBEXECS]/qmlimportscanner$${tool_extension}),"
|
||||
|
||||
qml_import_paths = $$(QML2_IMPORT_PATH)
|
||||
qml_import_paths = $$split(qml_import_paths, $$DIRLIST_SEPARATOR)
|
||||
qml_import_paths += $$QML_IMPORT_PATH
|
||||
!isEmpty(qml_import_paths) {
|
||||
FILE_CONTENT += " \"qml-import-paths\": $$emitString($$join(qml_import_paths, ",")),"
|
||||
}
|
||||
unset(qml_import_paths)
|
||||
|
||||
|
||||
isEmpty(QML_ROOT_PATH): \
|
||||
QML_ROOT_PATH = $$_PRO_FILE_PWD_
|
||||
FILE_CONTENT += " \"qml-root-path\": $$emitString($$QML_ROOT_PATH),"
|
||||
} else {
|
||||
FILE_CONTENT += " \"qml-skip-import-scanning\": true,"
|
||||
}
|
||||
|
||||
!isEmpty(ANDROID_APPLICATION_ARGUMENTS): \
|
||||
FILE_CONTENT += " \"android-application-arguments\": $$emitString($$ANDROID_APPLICATION_ARGUMENTS),"
|
||||
|
||||
FILE_CONTENT += " \"stdcpp-path\": $$emitString($$ANDROID_STDCPP_PATH),"
|
||||
!isEmpty(RESOURCES)|!isEmpty(QMLCACHE_RESOURCE_FILES) {
|
||||
# Make sure that qmake generated qrc files are accounted for
|
||||
load(resources_functions)
|
||||
qtFlattenResources()
|
||||
NEWRESOURCES = $$RESOURCES $$QMLCACHE_RESOURCE_FILES
|
||||
for(resource, NEWRESOURCES) {
|
||||
contains(resource, ".*qmake_qmake_immediate\\.qrc$") {
|
||||
# They will be created for each architecture, since they could be different
|
||||
# we need to account for all of them
|
||||
qmake_qrc_path = "qmake_qmake_immediate.qrc"
|
||||
base_out_path = $$OUT_PWD/$$RCC_DIR
|
||||
multi_android_abi {
|
||||
for (arch, ANDROID_ABIS): \
|
||||
rescopy += $$absolute_path($$qmake_qrc_path, $$base_out_path/$$arch)
|
||||
} else {
|
||||
rescopy += $$absolute_path($$qmake_qrc_path, $$base_out_path)
|
||||
}
|
||||
} else {
|
||||
contains(resource, ".*\\.qrc$"): rescopy += $$absolute_path($$resource, $$_PRO_FILE_PWD_)
|
||||
}
|
||||
}
|
||||
FILE_CONTENT += " \"qrcFiles\": $$emitString($$join(rescopy, ",")),"
|
||||
}
|
||||
FILE_CONTENT += ""
|
||||
FILE_CONTENT += " \"application-binary\": $$emitString($$TARGET_FOR_ANDROID_DEPLOYMENT_SETTINGS)"
|
||||
FILE_CONTENT += "}"
|
||||
|
||||
isEmpty(ANDROID_DEPLOYMENT_SETTINGS_FILE): ANDROID_DEPLOYMENT_SETTINGS_FILE = $$OUT_PWD/android-$$TARGET_FOR_ANDROID_DEPLOYMENT_SETTINGS-deployment-settings.json
|
||||
|
||||
write_file($$ANDROID_DEPLOYMENT_SETTINGS_FILE, FILE_CONTENT)|error()
|
||||
}
|
81
mkspecs/features/android/default_pre.prf
Normal file
81
mkspecs/features/android/default_pre.prf
Normal file
@ -0,0 +1,81 @@
|
||||
load(default_pre)
|
||||
|
||||
build_pass:armeabi-v7a {
|
||||
QT_ARCH = armeabi-v7a
|
||||
} else:build_pass:arm64-v8a {
|
||||
QT_ARCH = arm64-v8a
|
||||
} else:build_pass:x86 {
|
||||
QT_ARCH = x86
|
||||
} else:build_pass:x86_64 {
|
||||
QT_ARCH = x86_64
|
||||
} else:count(ALL_ANDROID_ABIS, 1) {
|
||||
QT_ARCH = $$ALL_ANDROID_ABIS
|
||||
CONFIG += single_android_abi $$QT_ARCH
|
||||
} else {
|
||||
# default architecture
|
||||
QT_ARCH = arm64-v8a
|
||||
}
|
||||
|
||||
DEFAULT_ANDROID_TARGET_ARCH=$${QT_ARCH}
|
||||
|
||||
ANDROID_TARGET_ARCH = $$(ANDROID_TARGET_ARCH)
|
||||
isEmpty(ANDROID_TARGET_ARCH): ANDROID_TARGET_ARCH = $$DEFAULT_ANDROID_TARGET_ARCH
|
||||
|
||||
# Follow https://android.googlesource.com/platform/ndk/+/ndk-release-r20/docs/BuildSystemMaintainers.md
|
||||
|
||||
equals(ANDROID_TARGET_ARCH, armeabi-v7a): \
|
||||
QMAKE_CFLAGS = -target armv7a-linux-androideabi$$replace(ANDROID_PLATFORM, "android-", "")
|
||||
else: equals(ANDROID_TARGET_ARCH, arm64-v8a): \
|
||||
QMAKE_CFLAGS = -target aarch64-linux-android$$replace(ANDROID_PLATFORM, "android-", "")
|
||||
else: equals(ANDROID_TARGET_ARCH, x86): \
|
||||
QMAKE_CFLAGS = -target i686-linux-android$$replace(ANDROID_PLATFORM, "android-", "") -mstackrealign
|
||||
else: equals(ANDROID_TARGET_ARCH, x86_64): \
|
||||
QMAKE_CFLAGS = -target x86_64-linux-android$$replace(ANDROID_PLATFORM, "android-", "")
|
||||
|
||||
QMAKE_CFLAGS += -fno-limit-debug-info
|
||||
|
||||
QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS
|
||||
|
||||
equals(ANDROID_TARGET_ARCH, armeabi-v7a): \
|
||||
QMAKE_LINK += -Wl,--exclude-libs,libunwind.a
|
||||
|
||||
ANDROID_STDCPP_PATH = $$NDK_LLVM_PATH/sysroot/usr/lib/
|
||||
|
||||
# -fstack-protector-strong offers good protection against stack smashing attacks.
|
||||
# It is (currently) enabled only on Android because we know for sure that Android compilers supports it
|
||||
QMAKE_CFLAGS += -fPIC -fstack-protector-strong -DANDROID
|
||||
|
||||
|
||||
equals(ANDROID_TARGET_ARCH, armeabi-v7a) | equals(ANDROID_TARGET_ARCH, armeabi) {
|
||||
CONFIG += optimize_size
|
||||
QMAKE_CFLAGS_DEBUG = -g -marm -O0
|
||||
QMAKE_CFLAGS_RELEASE += -mthumb
|
||||
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -mthumb
|
||||
}
|
||||
|
||||
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
|
||||
|
||||
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
|
||||
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
|
||||
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
|
||||
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
|
||||
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
|
||||
QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB
|
||||
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
|
||||
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
|
||||
|
||||
QMAKE_LIBS_EGL = -lEGL
|
||||
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2
|
||||
|
||||
QMAKE_STRIP =
|
||||
#$${CROSS_COMPILE}strip
|
||||
|
||||
|
||||
equals(QT_ARCH, x86): CROSS_COMPILE = $$NDK_LLVM_PATH/bin/i686-linux-android-
|
||||
else: equals(QT_ARCH, x86_64): CROSS_COMPILE = $$NDK_LLVM_PATH/bin/x86_64-linux-android-
|
||||
else: equals(QT_ARCH, arm64-v8a): CROSS_COMPILE = $$NDK_LLVM_PATH/bin/aarch64-linux-android-
|
||||
else: CROSS_COMPILE = $$NDK_LLVM_PATH/bin/arm-linux-androideabi-
|
||||
|
||||
QMAKE_LFLAGS =
|
||||
|
||||
QMAKE_LIBS_PRIVATE = -llog -lz -lm -ldl -lc
|
29
mkspecs/features/android/resolve_config.prf
Normal file
29
mkspecs/features/android/resolve_config.prf
Normal file
@ -0,0 +1,29 @@
|
||||
load(resolve_config)
|
||||
|
||||
!equals(TEMPLATE, aux):!host_build:!single_arch:!java:!single_android_abi:android {
|
||||
isEmpty(ANDROID_ABIS): ANDROID_ABIS = $$ALL_ANDROID_ABIS
|
||||
|
||||
ALL_ABIS = $$join(ANDROID_ABIS, _and_)
|
||||
CONFIG += $$ALL_ABIS build_all
|
||||
addExclusiveBuildsProper($$ALL_ABIS, $$ANDROID_ABIS)
|
||||
unset(ALL_ABIS)
|
||||
CONFIG += multi_android_abi
|
||||
}
|
||||
|
||||
# single_arch is set qtConfTest_compile and is a marker that a config test is being built, and
|
||||
# thus all Android ABI file name modifications should be avoided (prefix / suffix of
|
||||
# the built binary).
|
||||
# single_android_abi means ANDROID_ABI only has one value
|
||||
# multi_android_abi means ANDROID_ABI has more than one value (Qt configured with 2+ arches)
|
||||
#
|
||||
# Assign $$ALL_ANDROID_ABIS to ANDROID_ABIS only if ANDROID_ABIS was not provided by the user
|
||||
# on the qmake command line and Qt was not configured with 2+ arches.
|
||||
#
|
||||
# Note that in config.tests, ANDROID_ABIS ends up being empty (due to !single_arch check) regardless
|
||||
# of how many ABIs Qt is configured with, which in turns causes the 'architectures' field in
|
||||
# in android-arch-deployment-settings.json be empty.
|
||||
!equals(TEMPLATE, aux):!host_build:!single_arch:!java:!multi_android_abi:android:isEmpty(ANDROID_ABIS) {
|
||||
# Needed for the generated deployment-settings.json not to have an empty list
|
||||
# of architectures.
|
||||
ANDROID_ABIS = $$ALL_ANDROID_ABIS
|
||||
}
|
3
mkspecs/features/android/resolve_target.prf
Normal file
3
mkspecs/features/android/resolve_target.prf
Normal file
@ -0,0 +1,3 @@
|
||||
load(resolve_config)
|
||||
load(android)
|
||||
load(resolve_target)
|
21
mkspecs/features/android/sdk.prf
Normal file
21
mkspecs/features/android/sdk.prf
Normal file
@ -0,0 +1,21 @@
|
||||
API_VERSION_TO_USE = $$(ANDROID_API_VERSION)
|
||||
isEmpty(API_VERSION_TO_USE): API_VERSION_TO_USE = $$API_VERSION
|
||||
isEmpty(API_VERSION_TO_USE): API_VERSION_TO_USE = android-33
|
||||
|
||||
ANDROID_JAR_FILE = $$ANDROID_SDK_ROOT/platforms/$$API_VERSION_TO_USE/android.jar
|
||||
!exists($$ANDROID_JAR_FILE) {
|
||||
ANDROID_API_VERSION = $$section(API_VERSION_TO_USE, -, 1, 1) # Get version number from android-XY to ensure numeric comparison
|
||||
ANDROID_API_VERSIONS = $$files($$ANDROID_SDK_ROOT/platforms/*)
|
||||
for (VERSION, ANDROID_API_VERSIONS) {
|
||||
BASENAME = $$basename(VERSION)
|
||||
BASENAME = $$section(BASENAME, -, 1, 1)
|
||||
greaterThan(BASENAME, $$ANDROID_API_VERSION): ANDROID_API_VERSION = $$BASENAME
|
||||
}
|
||||
API_VERSION_TO_USE = android-$$ANDROID_API_VERSION
|
||||
ANDROID_JAR_FILE = $$ANDROID_SDK_ROOT/platforms/$$API_VERSION_TO_USE/android.jar
|
||||
}
|
||||
!exists($$ANDROID_JAR_FILE) {
|
||||
error("No suitable Android SDK platform found. Minimum version is $${API_VERSION_TO_USE}.")
|
||||
}
|
||||
JAVACLASSPATH += $$ANDROID_JAR_FILE
|
||||
|
6
mkspecs/features/android/spec_post.prf
Normal file
6
mkspecs/features/android/spec_post.prf
Normal file
@ -0,0 +1,6 @@
|
||||
load(spec_post)
|
||||
|
||||
# Work around idiosyncracy in Android NDK's make executable
|
||||
# which tries to call the shell-builtin "move" as direct process
|
||||
equals(QMAKE_HOST.os, Windows):equals(QMAKE_MOVE, move): \
|
||||
QMAKE_MOVE = cmd /c move
|
Reference in New Issue
Block a user