diff options
Diffstat (limited to 'src/corelib/Qt6AndroidMacros.cmake')
-rw-r--r-- | src/corelib/Qt6AndroidMacros.cmake | 68 |
1 files changed, 55 insertions, 13 deletions
diff --git a/src/corelib/Qt6AndroidMacros.cmake b/src/corelib/Qt6AndroidMacros.cmake index 58453f0c5f..4a225181ec 100644 --- a/src/corelib/Qt6AndroidMacros.cmake +++ b/src/corelib/Qt6AndroidMacros.cmake @@ -254,6 +254,9 @@ function(qt6_android_generate_deployment_settings target) if(COMMAND _qt_internal_generate_android_qml_deployment_settings) _qt_internal_generate_android_qml_deployment_settings(file_contents ${target}) + else() + string(APPEND file_contents + " \"qml-skip-import-scanning\": true,\n") endif() # Override rcc binary path @@ -271,6 +274,12 @@ function(qt6_android_generate_deployment_settings target) string(APPEND file_contents " \"extraPrefixDirs\" : [ ${extra_prefix_list} ],\n") + # Create an empty target for the cases when we need to generate deployment setting but + # qt_finalize_project is never called. + if(NOT TARGET _qt_internal_apk_dependencies AND NOT QT_NO_COLLECT_BUILD_TREE_APK_DEPS) + add_custom_target(_qt_internal_apk_dependencies) + endif() + # Extra library paths that could be used as a dependency lookup path by androiddeployqt. # # Unlike 'extraPrefixDirs', the 'extraLibraryDirs' key doesn't expect the 'lib' subfolder @@ -388,9 +397,14 @@ function(qt6_android_add_apk_target target) COMMENT "Copying ${target} binary to apk folder" ) + set(sign_apk "") if(QT_ANDROID_SIGN_APK) set(sign_apk "--sign") endif() + set(sign_aab "") + if(QT_ANDROID_SIGN_AAB) + set(sign_aab "--sign") + endif() set(extra_args "") if(QT_INTERNAL_NO_ANDROID_RCC_BUNDLE_CLEANUP) @@ -426,8 +440,8 @@ function(qt6_android_add_apk_target target) --apk "${apk_final_file_path}" --depfile "${dep_file_path}" --builddir "${relative_to_dir}" - ${sign_apk} ${extra_args} + ${sign_apk} COMMENT "Creating APK for ${target}" DEPENDS "${target}" "${deployment_file}" ${extra_deps} DEPFILE "${dep_file_path}" @@ -444,9 +458,10 @@ function(qt6_android_add_apk_target target) --input ${deployment_file} --output ${apk_final_dir} --apk ${apk_final_file_path} - ${sign_apk} ${extra_args} + ${sign_apk} COMMENT "Creating APK for ${target}" + VERBATIM ) endif() @@ -460,6 +475,7 @@ function(qt6_android_add_apk_target target) --output ${apk_final_dir} --apk ${apk_final_file_path} --aab + ${sign_aab} ${extra_args} COMMENT "Creating AAB for ${target}" ) @@ -545,8 +561,8 @@ endfunction() # The function collects all known non-imported shared libraries that are created in the build tree. # It uses the CMake DEFER CALL feature if the CMAKE_VERSION is greater -# than or equal to 3.18. -# Note: Users that use cmake version less that 3.18 need to call qt_finalize_project +# than or equal to 3.19. +# Note: Users that use cmake version less that 3.19 need to call qt_finalize_project # in the end of a project's top-level CMakeLists.txt. function(_qt_internal_collect_apk_dependencies_defer) # User opted-out the functionality @@ -560,13 +576,14 @@ function(_qt_internal_collect_apk_dependencies_defer) endif() set_property(GLOBAL PROPERTY _qt_is_collect_apk_dependencies_defer_called TRUE) - if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.18") + if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.19") cmake_language(EVAL CODE "cmake_language(DEFER DIRECTORY \"${CMAKE_SOURCE_DIR}\" CALL _qt_internal_collect_apk_dependencies)") else() # User don't want to see the warning if(NOT QT_NO_WARN_BUILD_TREE_APK_DEPS) - message(WARNING "CMake version you use is less than 3.18. APK dependencies, that are a" + message(WARNING + "The CMake version you use is less than 3.19. APK dependencies, that are a" " part of the project tree, might not be collected correctly." " Please call qt_finalize_project in the end of a project's top-level" " CMakeLists.txt file to make sure that all the APK dependencies are" @@ -577,8 +594,8 @@ function(_qt_internal_collect_apk_dependencies_defer) endif() endfunction() -# The function collects shared libraries from the build system tree, that might be dependencies for -# the main apk targets. +# The function collects project-built shared libraries that might be dependencies for +# the main apk targets. It stores their locations in a global custom target property. function(_qt_internal_collect_apk_dependencies) # User opted-out the functionality if(QT_NO_COLLECT_BUILD_TREE_APK_DEPS) @@ -621,8 +638,8 @@ function(_qt_internal_collect_apk_dependencies) ) endfunction() -# The function recursively goes through the project subfolders and collects targets that supposed to -# be shared libraries of any kind. +# This function recursively walks the current directory and its subdirectories to collect shared +# library targets built in those directories. function(_qt_internal_collect_buildsystem_shared_libraries out_var subdir) set(result "") get_directory_property(buildsystem_targets DIRECTORY ${subdir} BUILDSYSTEM_TARGETS) @@ -960,18 +977,38 @@ function(_qt_internal_configure_android_multiabi_target target) list(APPEND extra_cmake_args "-DANDROID_NDK_ROOT=${ANDROID_NDK}") endif() + if(DEFINED QT_NO_PACKAGE_VERSION_CHECK) + list(APPEND extra_cmake_args "-DQT_NO_PACKAGE_VERSION_CHECK=${QT_NO_PACKAGE_VERSION_CHECK}") + endif() + + if(DEFINED QT_HOST_PATH_CMAKE_DIR) + list(APPEND extra_cmake_args "-DQT_HOST_PATH_CMAKE_DIR=${QT_HOST_PATH_CMAKE_DIR}") + endif() + if(CMAKE_MAKE_PROGRAM) list(APPEND extra_cmake_args "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}") endif() if(CMAKE_C_COMPILER_LAUNCHER) - list(APPEND extra_cmake_args "-DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER}") + list(JOIN CMAKE_C_COMPILER_LAUNCHER "$<SEMICOLON>" + compiler_launcher) + list(APPEND extra_cmake_args + "-DCMAKE_C_COMPILER_LAUNCHER=${compiler_launcher}") endif() if(CMAKE_CXX_COMPILER_LAUNCHER) - list(APPEND extra_cmake_args "-DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER}") + list(JOIN CMAKE_CXX_COMPILER_LAUNCHER "$<SEMICOLON>" + compiler_launcher) + list(APPEND extra_cmake_args + "-DCMAKE_CXX_COMPILER_LAUNCHER=${compiler_launcher}") endif() + unset(user_cmake_args) + foreach(var IN LISTS QT_ANDROID_MULTI_ABI_FORWARD_VARS) + string(REPLACE ";" "$<SEMICOLON>" var_value "${${var}}") + list(APPEND user_cmake_args "-D${var}=${var_value}") + endforeach() + set(missing_qt_abi_toolchains "") set(previous_copy_apk_dependencies_target ${target}) # Create external projects for each android ABI except the main one. @@ -995,13 +1032,18 @@ function(_qt_internal_configure_android_multiabi_target target) ExternalProject_Add("qt_internal_android_${abi}" SOURCE_DIR "${CMAKE_SOURCE_DIR}" BINARY_DIR "${android_abi_build_dir}" - CMAKE_ARGS + CONFIGURE_COMMAND + "${CMAKE_COMMAND}" + "-G${CMAKE_GENERATOR}" "-DCMAKE_TOOLCHAIN_FILE=${qt_abi_toolchain_path}" "-DQT_HOST_PATH=${QT_HOST_PATH}" "-DQT_IS_ANDROID_MULTI_ABI_EXTERNAL_PROJECT=ON" "-DQT_INTERNAL_ANDROID_MULTI_ABI_BINARY_DIR=${CMAKE_BINARY_DIR}" "${config_arg}" "${extra_cmake_args}" + "${user_cmake_args}" + "-B" "${android_abi_build_dir}" + "-S" "${CMAKE_SOURCE_DIR}" EXCLUDE_FROM_ALL TRUE BUILD_COMMAND "" # avoid top-level build of external project ) |