summaryrefslogtreecommitdiffstats
path: root/src/corelib/Qt6CoreMacros.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/Qt6CoreMacros.cmake')
-rw-r--r--src/corelib/Qt6CoreMacros.cmake108
1 files changed, 4 insertions, 104 deletions
diff --git a/src/corelib/Qt6CoreMacros.cmake b/src/corelib/Qt6CoreMacros.cmake
index 1949ca7066..afaa416349 100644
--- a/src/corelib/Qt6CoreMacros.cmake
+++ b/src/corelib/Qt6CoreMacros.cmake
@@ -542,10 +542,9 @@ function(qt6_add_executable target)
endfunction()
function(_qt_internal_create_executable target)
- cmake_parse_arguments(arg "" "" "ANDROID_ABIS" ${ARGN})
if(ANDROID)
- list(REMOVE_ITEM arg_UNPARSED_ARGUMENTS "WIN32" "MACOSX_BUNDLE")
- add_library("${target}" MODULE ${arg_UNPARSED_ARGUMENTS})
+ list(REMOVE_ITEM ARGN "WIN32" "MACOSX_BUNDLE")
+ add_library("${target}" MODULE ${ARGN})
# On our qmake builds we do don't compile the executables with
# visibility=hidden. Not having this flag set will cause the
# executable to have main() hidden and can then no longer be loaded
@@ -556,108 +555,8 @@ function(_qt_internal_create_executable target)
set_property(TARGET "${target}" PROPERTY OBJCXX_VISIBILITY_PRESET default)
qt6_android_apply_arch_suffix("${target}")
set_property(TARGET "${target}" PROPERTY _qt_is_android_executable TRUE)
- # Build per-abi binaries for android
- if(NOT QT_IS_ANDROID_MULTI_ABI_EXTERNAL_PROJECT)
- if(QT_ANDROID_BUILD_ALL_ABIS)
- # Use autodetected Qt for Android ABIs.
- set(android_abis ${QT_DEFAULT_ANDROID_ABIS})
- elseif(arg_ANDROID_ABIS)
- # Use target-specific Qt for Android ABIs.
- set(android_abis ${arg_ANDROID_ABIS})
- elseif(QT_ANDROID_ABIS)
- # Use project-wide Qt for Android ABIs.
- set(android_abis ${QT_ANDROID_ABIS})
- else()
- # User have an empty list of Qt for Android ABIs.
- message(FATAL_ERROR
- "The list of Android ABIs is empty, when building ${target}.\n"
- "You have the following options to select ABIs for a target:\n"
- " - Set the QT_ANDROID_ABIS variable before calling qt6_add_executable\n"
- " - Add the ANDROID_ABIS parameter to the qt6_add_executable call\n"
- " - Set QT_ANDROID_BUILD_ALL_ABIS flag to try building with\n"
- " the list of autodetected Qt for Android:\n ${QT_DEFAULT_ANDROID_ABIS}"
- )
- endif()
-
- set(missing_qt_abi_toolchains "")
- # Create external projects for each android ABI except the main one.
- list(REMOVE_ITEM android_abis "${CMAKE_ANDROID_ARCH_ABI}")
- include(ExternalProject)
- foreach(abi IN ITEMS ${android_abis})
- if(NOT "${abi}" IN_LIST QT_DEFAULT_ANDROID_ABIS)
- list(APPEND missing_qt_abi_toolchains ${abi})
- list(REMOVE_ITEM android_abis "${abi}")
- continue()
- endif()
-
- get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG)
- if(is_multi_config)
- list(JOIN CMAKE_CONFIGURATION_TYPES "$<SEMICOLON>" escaped_configuration_types)
- set(config_arg "-DCMAKE_CONFIGURATION_TYPES=${escaped_configuration_types}")
- else()
- set(config_arg "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
- endif()
- set(android_abi_build_dir "${CMAKE_BINARY_DIR}/android_abi_builds/${abi}")
- get_property(abi_external_projects GLOBAL
- PROPERTY _qt_internal_abi_external_projects)
- if(NOT abi_external_projects
- OR NOT "qt_internal_android_${abi}" IN_LIST abi_external_projects)
- _qt_internal_get_android_abi_path(qt_abi_path ${abi})
- set(qt_abi_toolchain_path
- "${qt_abi_path}/lib/cmake/${QT_CMAKE_EXPORT_NAMESPACE}/qt.toolchain.cmake")
- ExternalProject_Add("qt_internal_android_${abi}"
- SOURCE_DIR "${CMAKE_SOURCE_DIR}"
- BINARY_DIR "${android_abi_build_dir}"
- CMAKE_ARGS "-DCMAKE_TOOLCHAIN_FILE=${qt_abi_toolchain_path}"
- "-DQT_IS_ANDROID_MULTI_ABI_EXTERNAL_PROJECT=ON"
- "-DQT_INTERNAL_ANDROID_MULTI_ABI_BINARY_DIR=${CMAKE_BINARY_DIR}"
- "${config_arg}"
- EXCLUDE_FROM_ALL TRUE
- STETPS_TARGETS
- BUILD_COMMAND "" # avoid top-level build of external project
- )
- set_property(GLOBAL APPEND PROPERTY
- _qt_internal_abi_external_projects "qt_internal_android_${abi}")
- endif()
- ExternalProject_Add_Step("qt_internal_android_${abi}"
- "${target}_build"
- DEPENDEES configure
- # TODO: Remove this when the step will depend on DEPFILE generated by
- # androiddeployqt for the ${target}.
- ALWAYS TRUE
- COMMAND "${CMAKE_COMMAND}"
- "--build" "${android_abi_build_dir}"
- "--config" "$<CONFIG>"
- "--target" "qt_internal_${target}_copy_apk_dependencies"
- )
- ExternalProject_Add_StepTargets("qt_internal_android_${abi}"
- "${target}_build")
- add_dependencies(${target} "qt_internal_android_${abi}-${target}_build")
- endforeach()
-
- if(missing_qt_abi_toolchains)
- list(JOIN missing_qt_abi_toolchains ", " missing_qt_abi_toolchains_string)
- message(FATAL_ERROR "Cannot find toolchain files for the manually specified Android"
- " ABIs: ${missing_qt_abi_toolchains_string}"
- "\nSkipping these ABIs."
- "\nNote that you also may manually specify the path to the required Qt for"
- " Android ABI using QT_PATH_ANDROID_ABI_<abi> CMake variable.\n")
- endif()
-
- list(JOIN android_abis ", " android_abis_string)
- if(android_abis_string)
- set(android_abis_string "${CMAKE_ANDROID_ARCH_ABI}(default), ${android_abis_string}")
- else()
- set(android_abis_string "${CMAKE_ANDROID_ARCH_ABI}(default)")
- endif()
- if(NOT QT_NO_ANDROID_ABI_STATUS_MESSAGE)
- message(STATUS "Configuring '${target}' for the following Android ABIs:"
- " ${android_abis_string}")
- endif()
- set_target_properties(${target} PROPERTIES _qt_android_abis "${android_abis}")
- endif()
else()
- add_executable("${target}" ${arg_UNPARSED_ARGUMENTS})
+ add_executable("${target}" ${ARGN})
endif()
_qt_internal_set_up_static_runtime_library("${target}")
@@ -719,6 +618,7 @@ function(_qt_internal_finalize_executable target)
endif()
if(ANDROID)
+ _qt_internal_configure_android_multiabi_target("${target}")
qt6_android_generate_deployment_settings("${target}")
qt6_android_add_apk_target("${target}")
endif()