aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Krause <vkrause@kde.org>2022-02-11 19:13:47 +0100
committerVolker Krause <vkrause@kde.org>2022-02-11 19:14:37 +0100
commit676f90873b4d35c20976536844c36b8c0fbe06a5 (patch)
tree98663d3a5a4c04d7acf14c3fb1eebf292ef6ea36
parent402903e5caa15f483193cd10d97754ea73078f0e (diff)
downloadextra-cmake-modules-676f90873b4d35c20976536844c36b8c0fbe06a5.tar.gz
extra-cmake-modules-676f90873b4d35c20976536844c36b8c0fbe06a5.tar.bz2
Adapt Android toolchain file and FindGradle to Qt6
- We don't need the Threads target workaround anymore, that breaks the build with Qt6 even. - The Gradle wrapper shipped with Qt is no longer installed as executable, so we need to run this in sh explicitly. - Qt6 uses a different Android Gradle plugin version (not to be confused with the Gradle version), which we need to make available for the configure_file() call on the build.gradle file. With this most Framework modules build against Qt6 here.
-rw-r--r--find-modules/FindGradle.cmake19
-rw-r--r--toolchain/Android.cmake6
2 files changed, 21 insertions, 4 deletions
diff --git a/find-modules/FindGradle.cmake b/find-modules/FindGradle.cmake
index 6d8d6929..792598ed 100644
--- a/find-modules/FindGradle.cmake
+++ b/find-modules/FindGradle.cmake
@@ -27,18 +27,24 @@ Installs a Android AAR library that has been created with ``gradle_add_aar``.
Since 5.76.0.
#]=======================================================================]
+include(${CMAKE_CURRENT_LIST_DIR}/../modules/QtVersionOption.cmake)
include(CMakeParseArguments)
include(FindPackageHandleStandardArgs)
-find_package(Qt5Core REQUIRED)
+find_package(Qt${QT_MAJOR_VERSION}Core REQUIRED)
+set (Gradle_PRECOMMAND "")
if (NOT WIN32)
set(Gradle_EXECUTABLE ${CMAKE_BINARY_DIR}/gradle/gradlew)
+ # the gradlew script installed by Qt6 is not executable, so running it directly fails
+ if (QT_MAJOR_VERSION EQUAL "6")
+ set(Gradle_PRECOMMAND "sh")
+ endif()
else()
set(Gradle_EXECUTABLE ${CMAKE_BINARY_DIR}/gradle/gradlew.bat)
endif()
-get_target_property(_qt_core_location Qt5::Core LOCATION)
+get_target_property(_qt_core_location Qt${QT_MAJOR_VERSION}::Core LOCATION)
get_filename_component(_qt_install_root ${_qt_core_location} DIRECTORY)
get_filename_component(_qt_install_root ${_qt_install_root}/../ ABSOLUTE)
@@ -50,6 +56,13 @@ add_custom_command(OUTPUT ${Gradle_EXECUTABLE}
)
add_custom_target(gradle DEPENDS ${Gradle_EXECUTABLE})
+# Android Gradle plugin version (not the Gradle version!) used by Qt, for use in our own build.gradle files
+if (QT_MAJOR_VERSION EQUAL "5")
+ set(Gradle_ANDROID_GRADLE_PLUGIN_VERSION 3.6.4)
+else()
+ set(Gradle_ANDROID_GRADLE_PLUGIN_VERSION 7.0.2)
+endif()
+
find_package_handle_standard_args(Gradle DEFAULT_MSG Gradle_EXECUTABLE)
function(gradle_add_aar target)
@@ -71,7 +84,7 @@ function(gradle_add_aar target)
file(GLOB_RECURSE _src_files CONFIGURE_DEPENDS "*")
add_custom_command(
OUTPUT ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar
- COMMAND ${Gradle_EXECUTABLE} ${_aar_gradleCmd}
+ COMMAND ${Gradle_PRECOMMAND} ${Gradle_EXECUTABLE} ${_aar_gradleCmd}
# this allows make create-apk to work without installations for apps with AAR libs in the same repository
COMMAND ${CMAKE_COMMAND} -E copy ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar ${CMAKE_BINARY_DIR}/jar/${ARG_NAME}.aar
DEPENDS ${Gradle_EXECUTABLE} ${_src_files}
diff --git a/toolchain/Android.cmake b/toolchain/Android.cmake
index 5a48464c..280f129d 100644
--- a/toolchain/Android.cmake
+++ b/toolchain/Android.cmake
@@ -179,7 +179,11 @@ endif()
# armv7 really doesn't like mixing PIC/PIE code.
# Since we only have to care about a single compiler,
# hard-code the values here.
-if (NOT TARGET Threads::Threads)
+# Qt6 fixes this and breaks if we define Threads::Threads here.
+# We cannot use our usual Qt version check at this point though yet,
+# se check whether we are chainloaded by the Qt toolchain as an indicator
+# for Qt6.
+if (NOT TARGET Threads::Threads AND NOT DEFINED __qt_chainload_toolchain_file)
set(Threads_FOUND TRUE)
set(CMAKE_THREAD_LIBS_INIT "-pthread")
add_library(Threads::Threads INTERFACE IMPORTED)