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
Pick-to: 6.6 6.5
Change-Id: I47568798e2a2e8550ddab1990a33611967183761
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit 5f0575256a4af14c1f2f9a846e40cd9490c12b56)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Alexey Edelev 2023-11-27 15:14:02 +01:00 committed by Qt Cherry-pick Bot
parent 273f1ffbf6
commit 5d9c9fe8f7
2 changed files with 36 additions and 3 deletions

View File

@ -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"

View File

@ -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}")
@ -1364,3 +1391,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")