summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Edelev <[email protected]>2023-11-27 15:14:02 +0100
committerQt Cherry-pick Bot <[email protected]>2024-01-13 02:27:45 +0000
commitfe6d2936a876bffd5b19894aa855a26e72066b8a (patch)
tree35d4fd660c18a09856475ed13c01733eb7d5757d
parentf8619b9b28b2dc72c7a87ad67f2c001514dd0f83 (diff)
Use target-specific android-build directory
This fix allows using multiple executable targets in a single CMakeLists.txt when building for android. Previously artifacts for both targes were collected in a common android-build directory, that led to artifacts overlaping and broke the deployment process. Users need to set the QT_USE_TARGET_ANDROID_BUILD_DIR to TRUE to enable the new android-build directories naming. This change need QtC adjustments that will take a new directory naming into account. Task-number: QTBUG-117443 Change-Id: I47568798e2a2e8550ddab1990a33611967183761 Reviewed-by: Assam Boudjelthia <[email protected]> (cherry picked from commit 5f0575256a4af14c1f2f9a846e40cd9490c12b56) Reviewed-by: Qt Cherry-pick Bot <[email protected]> (cherry picked from commit 5d9c9fe8f729e3782b11a48534d065050913bf82) (cherry picked from commit ee59f65df6a9276c70808f888e9995dfc23794b5)
-rw-r--r--cmake/QtPlatformAndroid.cmake7
-rw-r--r--src/corelib/Qt6AndroidMacros.cmake32
2 files changed, 36 insertions, 3 deletions
diff --git a/cmake/QtPlatformAndroid.cmake b/cmake/QtPlatformAndroid.cmake
index b396b76881a..264f76e8e33 100644
--- a/cmake/QtPlatformAndroid.cmake
+++ b/cmake/QtPlatformAndroid.cmake
@@ -195,8 +195,11 @@ function(qt_internal_android_test_arguments target timeout out_test_runner out_t
endif()
set(target_binary_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>")
- set(apk_dir "${target_binary_dir}/android-build")
-
+ if(QT_USE_TARGET_ANDROID_BUILD_DIR)
+ set(apk_dir "${target_binary_dir}/android-build-${target}")
+ else()
+ set(apk_dir "${target_binary_dir}/android-build")
+ endif()
set(${out_test_arguments}
"--path" "${apk_dir}"
"--adb" "${ANDROID_SDK_ROOT}/platform-tools/adb"
diff --git a/src/corelib/Qt6AndroidMacros.cmake b/src/corelib/Qt6AndroidMacros.cmake
index 310781e7410..9a8d02165f2 100644
--- a/src/corelib/Qt6AndroidMacros.cmake
+++ b/src/corelib/Qt6AndroidMacros.cmake
@@ -385,7 +385,34 @@ function(qt6_android_add_apk_target target)
set(deployment_tool "${QT_HOST_PATH}/${QT6_HOST_INFO_BINDIR}/androiddeployqt")
# No need to use genex for the BINARY_DIR since it's read-only.
get_target_property(target_binary_dir ${target} BINARY_DIR)
- set(apk_final_dir "${target_binary_dir}/android-build")
+
+ if($CACHE{QT_USE_TARGET_ANDROID_BUILD_DIR})
+ set(apk_final_dir "${target_binary_dir}/android-build-${target}")
+ else()
+ if(QT_USE_TARGET_ANDROID_BUILD_DIR)
+ message(WARNING "QT_USE_TARGET_ANDROID_BUILD_DIR needs to be set in CACHE")
+ endif()
+
+ get_property(known_android_build GLOBAL PROPERTY _qt_internal_known_android_build_dir)
+ get_property(already_warned GLOBAL PROPERTY _qt_internal_already_warned_android_build_dir)
+ set(apk_final_dir "${target_binary_dir}/android-build")
+ if(NOT QT_SKIP_ANDROID_BUILD_DIR_CHECK AND "${apk_final_dir}" IN_LIST known_android_build
+ AND NOT "${apk_final_dir}" IN_LIST already_warned)
+ message(WARNING "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt contains multiple"
+ " Qt Android executable targets. This can lead to mixing of deployment artifacts"
+ " of targets defined there. Setting QT_USE_TARGET_ANDROID_BUILD_DIR=TRUE"
+ " allows building multiple executable targets within a single CMakeLists.txt."
+ " Note: This option is not supported by Qt Creator versions older than 13."
+ " Set QT_SKIP_ANDROID_BUILD_DIR_CHECK=TRUE to suppress this warning."
+ )
+ set_property(GLOBAL APPEND PROPERTY _qt_internal_already_warned_android_build_dir
+ "${apk_final_dir}")
+ else()
+ set_property(GLOBAL APPEND PROPERTY
+ _qt_internal_known_android_build_dir "${apk_final_dir}")
+ endif()
+ endif()
+
set(apk_file_name "${target}.apk")
set(dep_file_name "${target}.d")
set(apk_final_file_path "${apk_final_dir}/${apk_file_name}")
@@ -1323,3 +1350,6 @@ function(_qt_internal_expose_android_package_source_dir_to_ide target)
endforeach()
endif()
endfunction()
+
+set(QT_INTERNAL_ANDROID_TARGET_BUILD_DIR_SUPPORT ON CACHE INTERNAL
+ "Indicates that Qt supports per-target Android build directories")