diff --git a/src/corelib/Qt6AndroidMacros.cmake b/src/corelib/Qt6AndroidMacros.cmake index 14c630ed4cc..9c73e5617b1 100644 --- a/src/corelib/Qt6AndroidMacros.cmake +++ b/src/corelib/Qt6AndroidMacros.cmake @@ -961,6 +961,7 @@ function(_qt_internal_configure_android_multiabi_target target) endif() set(missing_qt_abi_toolchains "") + set(previous_copy_apk_dependencies_target ${target}) # Create external projects for each android ABI except the main one. list(REMOVE_ITEM android_abis "${CMAKE_ANDROID_ARCH_ABI}") include(ExternalProject) @@ -1005,11 +1006,38 @@ function(_qt_internal_configure_android_multiabi_target target) COMMAND "${CMAKE_COMMAND}" "--build" "${android_abi_build_dir}" "--config" "$" - "--target" "qt_internal_${target}_copy_apk_dependencies" + "--target" "${target}" ) ExternalProject_Add_StepTargets("qt_internal_android_${abi}" "${target}_build") add_dependencies(${target} "qt_internal_android_${abi}-${target}_build") + + ExternalProject_Add_Step("qt_internal_android_${abi}" + "${target}_copy_apk_dependencies" + DEPENDEES "${target}_build" + # TODO: Remove this when the step will depend on DEPFILE generated by + # androiddeployqt for the ${target}. + ALWAYS TRUE + EXCLUDE_FROM_MAIN TRUE + COMMAND "${CMAKE_COMMAND}" + "--build" "${android_abi_build_dir}" + "--config" "$" + "--target" "qt_internal_${target}_copy_apk_dependencies" + ) + ExternalProject_Add_StepTargets("qt_internal_android_${abi}" + "${target}_copy_apk_dependencies") + set(external_project_copy_target + "qt_internal_android_${abi}-${target}_copy_apk_dependencies") + + # Need to build dependency chain between the + # qt_internal_android_${abi}-${target}_copy_apk_dependencies targets for all ABI's, to + # prevent parallel execution of androiddeployqt processes. We cannot use Ninja job pools + # here because it's not possible to define job pool for the step target in ExternalProject. + # All tricks with interlayer targets don't work, because we only can bind interlayer target + # to the job pool, but its dependencies can still be built in parallel. + add_dependencies(${previous_copy_apk_dependencies_target} + "${external_project_copy_target}") + set(previous_copy_apk_dependencies_target "${external_project_copy_target}") endforeach() if(missing_qt_abi_toolchains)