diff options
Diffstat (limited to 'cmake')
| -rw-r--r-- | cmake/QtAutoDetectHelpers.cmake | 37 | ||||
| -rw-r--r-- | cmake/QtBaseConfigureTests.cmake | 30 | ||||
| -rw-r--r-- | cmake/QtCMakeVersionHelpers.cmake | 87 | ||||
| -rw-r--r-- | cmake/QtFeature.cmake | 8 | ||||
| -rw-r--r-- | cmake/QtToolchainHelpers.cmake | 7 |
5 files changed, 169 insertions, 0 deletions
diff --git a/cmake/QtAutoDetectHelpers.cmake b/cmake/QtAutoDetectHelpers.cmake index fe6087748d6..6e6473da641 100644 --- a/cmake/QtAutoDetectHelpers.cmake +++ b/cmake/QtAutoDetectHelpers.cmake @@ -64,6 +64,41 @@ function(qt_auto_detect_wasm) endif() endfunction() +# Handle assignment of CMAKE_POLICY_VERSION_MINIMUM for Android NDK cmake toolchain files shipped +# with NDK < r28, to avoid deprecation warnings. +# +# NOTE: If updating the version, also update +# qt_internal_get_android_qt_default_cmake_policy_version_minimum. +# +# Use a macro, to make propagation of the variable in the parent scope of the calling function +# easier. +macro(qt_auto_detect_set_android_cmake_policy_version_minimum is_android_detected) + if("${is_android_detected}" + AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0" + AND NOT QT_NO_SET_ANDROID_CMAKE_POLICY_VERSION_MINIMUM + ) + + if(QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM) + set(min_policy_version "${QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM}") + elseif(CMAKE_POLICY_VERSION_MINIMUM) + set(min_policy_version "${CMAKE_POLICY_VERSION_MINIMUM}") + else() + set(min_policy_version "3.10") + endif() + + message(DEBUG + "Setting CMAKE_POLICY_VERSION_MINIMUM to ${min_policy_version} for Android builds.") + + # Set the variable in the qtbase directory scope for easier reading. + set(CMAKE_POLICY_VERSION_MINIMUM "${min_policy_version}" PARENT_SCOPE) + + # Also set the environment variable, otherwise any try_compile project that's started + # by CMake itself, rather than Qt (e.g. compiler detection), will not inherit the + # assignment. + set(ENV{CMAKE_POLICY_VERSION_MINIMUM} "${min_policy_version}") + endif() +endmacro() + function(qt_auto_detect_android) # Don't assume an Android build if we're requesting to build Java documentation on the host. if(QT_BUILD_HOST_JAVA_DOCS) @@ -154,6 +189,8 @@ function(qt_auto_detect_android) elseif (QT_AUTODETECT_ANDROID) message(STATUS "Android build detected") endif() + + qt_auto_detect_set_android_cmake_policy_version_minimum("${android_detected}") endfunction() function(qt_auto_detect_vcpkg) diff --git a/cmake/QtBaseConfigureTests.cmake b/cmake/QtBaseConfigureTests.cmake index fcc3b1a3f1c..da97e2b4f8b 100644 --- a/cmake/QtBaseConfigureTests.cmake +++ b/cmake/QtBaseConfigureTests.cmake @@ -306,6 +306,36 @@ function(qt_internal_print_cmake_host_and_target_info) message(STATUS "CMAKE_SYSTEM_PROCESSOR: \"${CMAKE_SYSTEM_PROCESSOR}\"") message(STATUS "CMAKE_CROSSCOMPILING: \"${CMAKE_CROSSCOMPILING}\"") + + message(STATUS "CMAKE_CXX_COMPILER_ID: \"${CMAKE_CXX_COMPILER_ID}\"") + message(STATUS "CMAKE_CXX_COMPILER_VERSION: \"${CMAKE_CXX_COMPILER_VERSION}\"") + + # The variables might not be defined depending on platform and CMake version. + if(CMAKE_CXX_COMPILER_TARGET) + message(STATUS "CMAKE_CXX_COMPILER_TARGET: \"${CMAKE_CXX_COMPILER_TARGET}\"") + endif() + if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID) + message(STATUS + "CMAKE_CXX_COMPILER_ARCHITECTURE_ID: \"${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}\"") + endif() + if(CMAKE_CXX_COMPILER_FRONTEND_VARIANT) + message(STATUS + "CMAKE_CXX_COMPILER_FRONTEND_VARIANT: \"${CMAKE_CXX_COMPILER_FRONTEND_VARIANT}\"") + endif() + + if(CMAKE_CXX_COMPILER_LINKER_ID) + message(STATUS "CMAKE_CXX_COMPILER_LINKER_ID: \"${CMAKE_CXX_COMPILER_LINKER_ID}\"") + endif() + + if(CMAKE_CXX_COMPILER_LINKER_VERSION) + message(STATUS + "CMAKE_CXX_COMPILER_LINKER_VERSION: \"${CMAKE_CXX_COMPILER_LINKER_VERSION}\"") + endif() + + if(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT) + message(STATUS "CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT: " + "\"${CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT}\"") + endif() endfunction() qt_internal_print_cmake_host_and_target_info() diff --git a/cmake/QtCMakeVersionHelpers.cmake b/cmake/QtCMakeVersionHelpers.cmake index 3a3ba0fc750..73b40b4a610 100644 --- a/cmake/QtCMakeVersionHelpers.cmake +++ b/cmake/QtCMakeVersionHelpers.cmake @@ -300,3 +300,90 @@ function(qt_internal_upgrade_cmake_policies) qt_internal_get_max_new_policy_cmake_version(upper_version) cmake_minimum_required(VERSION ${lower_version}...${upper_version}) endfunction() + +# Get which version to use for CMAKE_POLICY_VERSION_MINIMUM on Android. +# Allow various overrides via QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM and reading an existing +# CMAKE_POLICY_VERSION_MINIMUM. +function(qt_internal_get_android_cmake_policy_version_minimum_value out_var) + if(QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM) + set(value "${QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM}") + elseif(CMAKE_POLICY_VERSION_MINIMUM) + set(value "${CMAKE_POLICY_VERSION_MINIMUM}") + else() + qt_internal_get_android_qt_default_cmake_policy_version_minimum(default_value) + set(value "${default_value}") + endif() + + set(${out_var} "${value}" PARENT_SCOPE) +endfunction() + +# NOTE: If updating the version, also update +# qt_auto_detect_set_android_cmake_policy_version_minimum. +function(qt_internal_get_android_qt_default_cmake_policy_version_minimum out_var) + set(${out_var} "3.10" PARENT_SCOPE) +endfunction() + +# Handle assignment of CMAKE_POLICY_VERSION_MINIMUM for Android NDK cmake toolchain files shipped +# with NDK < r28, to avoid deprecation warnings. +# See https://github.com/android/ndk/issues/2100 +# and https://android.googlesource.com/platform/ndk/+/799e5a2d44cc2cc6c7d67f52f2d67957944b7680 +# The function is to get the appropriate var asisgnment for try_compile calls, +# as well as writing it to the Qt generated toolchain file. +# Various opt-outs and opt-ins are provided via QT_NO_SET_ANDROID_CMAKE_POLICY_VERSION_MINIMUM +# and QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM. +# +# See also usage in qt_auto_detect_set_android_cmake_policy_version_minimum. +function(qt_internal_get_android_cmake_policy_version_minimum_assignment out_var) + set(option_args "") + set(single_args + TYPE + ) + set(multi_args "") + + cmake_parse_arguments(PARSE_ARGV 1 arg + "${option_args}" + "${single_args}" + "${multi_args}" + ) + _qt_internal_validate_all_args_are_parsed(arg) + + set(value "") + if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0" + AND NOT QT_NO_SET_ANDROID_CMAKE_POLICY_VERSION_MINIMUM + ) + qt_internal_get_android_cmake_policy_version_minimum_value(version) + + if(arg_TYPE STREQUAL "COMMAND_LINE") + set(value "-DCMAKE_POLICY_VERSION_MINIMUM=${version}") + + elseif(arg_TYPE STREQUAL "TOOLCHAIN_FILE_ASSIGNMENT") + set(value " +# Avoid deprecation warnings in Android ndk cmake toolchain file < r28 +set(__qt_initially_configured_android_cmake_policy_version_minimum \"${version}\") +if(CMAKE_VERSION VERSION_GREATER_EQUAL \"4.0\" + AND NOT QT_NO_SET_ANDROID_CMAKE_POLICY_VERSION_MINIMUM + ) + if(QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM) + set(__qt_toolchain_cmake_policy_version_minimum + \"\${QT_ANDROID_CMAKE_POLICY_VERSION_MINIMUM}\") + elseif(CMAKE_POLICY_VERSION_MINIMUM) + set(__qt_toolchain_cmake_policy_version_minimum + \"\${CMAKE_POLICY_VERSION_MINIMUM}\") + else() + set(__qt_toolchain_cmake_policy_version_minimum + \"\${__qt_initially_configured_android_cmake_policy_version_minimum}\") + endif() + set(CMAKE_POLICY_VERSION_MINIMUM \"\${__qt_toolchain_cmake_policy_version_minimum}\") + message(DEBUG + \"Setting CMAKE_POLICY_VERSION_MINIMUM to \" + \"\${__qt_toolchain_cmake_policy_version_minimum}\ in toolchain file.\") +endif() +") + else() + message(FATAL_ERROR "Unknown TYPE value '${arg_TYPE}'. " + " Supported values are COMMAND_LINE and VAR_ASSIGNMENT.") + endif() + endif() + + set(${out_var} "${value}" PARENT_SCOPE) +endfunction() diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake index e8ae3dd5163..de0323214c5 100644 --- a/cmake/QtFeature.cmake +++ b/cmake/QtFeature.cmake @@ -1737,6 +1737,14 @@ function(qt_get_platform_try_compile_vars out_var) list(APPEND flags_cmd_line "-DCMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH:BOOL=OFF") endif() + if(ANDROID) + qt_internal_get_android_cmake_policy_version_minimum_assignment( + android_cmake_policy_version_minimum TYPE COMMAND_LINE) + if(android_cmake_policy_version_minimum) + list(APPEND flags_cmd_line "${android_cmake_policy_version_minimum}") + endif() + endif() + set("${out_var}" "${flags_cmd_line}" PARENT_SCOPE) endfunction() diff --git a/cmake/QtToolchainHelpers.cmake b/cmake/QtToolchainHelpers.cmake index 9407fd0ebe5..348a3c25603 100644 --- a/cmake/QtToolchainHelpers.cmake +++ b/cmake/QtToolchainHelpers.cmake @@ -309,6 +309,13 @@ endif()") " \"Please specify the toolchain file with -DQT_CHAINLOAD_TOOLCHAIN_FILE=<file>.\")") list(APPEND init_platform " endif()") list(APPEND init_platform "endif()") + + qt_internal_get_android_cmake_policy_version_minimum_assignment( + android_cmake_policy_version_minimum TYPE TOOLCHAIN_FILE_ASSIGNMENT) + if(android_cmake_policy_version_minimum) + list(APPEND init_platform "${android_cmake_policy_version_minimum}") + endif() + elseif(EMSCRIPTEN) list(APPEND init_platform "include(\${CMAKE_CURRENT_LIST_DIR}/QtPublicWasmToolchainHelpers.cmake) |
