diff options
author | Volker Krause <vkrause@kde.org> | 2020-09-10 15:36:06 +0200 |
---|---|---|
committer | Aleix Pol Gonzalez <aleixpol@kde.org> | 2020-10-12 11:56:20 +0000 |
commit | 64cb8ccc9511a641e108838526405230e527e4f2 (patch) | |
tree | 6e92261b942b2878bf8e04fe324422ae90f91066 /find-modules | |
parent | ea843d0852d7319a5a1ab3bf7a8c3cd9f823bdd6 (diff) | |
download | extra-cmake-modules-64cb8ccc9511a641e108838526405230e527e4f2.tar.gz extra-cmake-modules-64cb8ccc9511a641e108838526405230e527e4f2.tar.bz2 |
Add FindGradle from KNotification
Besides finding Gradle from QtAndroidExtras and thus avoiding the usual
way of the Android world of distributing that (a copy in your source code),
it provides macros to generate and install Android AARs. Those are needed
for libraries that have a non-trivial Java component on Android, e.g.
needing a manifest fragment or having a dependency on other Java libs.
This file has been copied to a few places meanwhile, so centralizing this
in ECM makes sense.
Diffstat (limited to 'find-modules')
-rw-r--r-- | find-modules/FindGradle.cmake | 86 | ||||
-rw-r--r-- | find-modules/local.properties.cmake | 1 | ||||
-rw-r--r-- | find-modules/settings.gradle.cmake | 1 |
3 files changed, 88 insertions, 0 deletions
diff --git a/find-modules/FindGradle.cmake b/find-modules/FindGradle.cmake new file mode 100644 index 00000000..02ccf38a --- /dev/null +++ b/find-modules/FindGradle.cmake @@ -0,0 +1,86 @@ +#.rst: +# FindGradle +# ---------- +# +# Provides the ability to build Android AAR libraries using Gradle. +# +# This relies on the Qt provided Gradle, so a Qt for Android installation +# is required. +# +# gradle_add_aar(<target> +# BUIDLFILE build.gradle +# NAME <aar-name>) +# +# This builds an Android AAR library using the given ``build.gradle`` file. +# +# gradle_install_aar(<target> +# DESTINATION <dest>) +# +# Installs a Android AAR library that has been created with ``gradle_add_aar``. + +#============================================================================= +# SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> +# +# SPDX-License-Identifier: BSD-3-Clause +#============================================================================= + +include(CMakeParseArguments) +include(FindPackageHandleStandardArgs) + +find_package(Qt5Core REQUIRED) + +if (NOT WIN32) + set(Gradle_EXECUTABLE ${CMAKE_BINARY_DIR}/gradle/gradlew) +else() + set(Gradle_EXECUTABLE ${CMAKE_BINARY_DIR}/gradle/gradlew.bat) +endif() + +get_target_property(_qt_core_location Qt5::Core LOCATION) +get_filename_component(_qt_install_root ${_qt_core_location} DIRECTORY) +get_filename_component(_qt_install_root ${_qt_install_root}/../ ABSOLUTE) + +set(_gradle_template_dir ${CMAKE_CURRENT_LIST_DIR}) + +add_custom_command(OUTPUT ${Gradle_EXECUTABLE} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/gradle + COMMAND ${CMAKE_COMMAND} -E copy_directory ${_qt_install_root}/src/3rdparty/gradle ${CMAKE_BINARY_DIR}/gradle +) +add_custom_target(gradle DEPENDS ${Gradle_EXECUTABLE}) + +find_package_handle_standard_args(Gradle DEFAULT_MSG Gradle_EXECUTABLE) + +function(gradle_add_aar target) + cmake_parse_arguments(ARG "" "BUILDFILE;NAME" "" ${ARGN}) + + set(_build_root ${CMAKE_CURRENT_BINARY_DIR}/gradle_build/${ARG_NAME}) + configure_file(${_gradle_template_dir}/local.properties.cmake ${_build_root}/local.properties) + configure_file(${_gradle_template_dir}/settings.gradle.cmake ${_build_root}/settings.gradle) + configure_file(${ARG_BUILDFILE} ${_build_root}/build.gradle) + + if (CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]") + set(_aar_suffix "-debug") + set(_aar_gradleCmd "assembleDebug") + else() + set(_aar_suffix "-release") + set(_aar_gradleCmd "assembleRelease") + endif() + + 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} + DEPENDS ${Gradle_EXECUTABLE} ${_src_files} + DEPENDS gradle + WORKING_DIRECTORY ${_build_root} + ) + add_custom_target(${target} ALL DEPENDS ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar) + set_target_properties(${target} PROPERTIES LOCATION ${_build_root}/build/outputs/aar/${ARG_NAME}${_aar_suffix}.aar) + set_target_properties(${target} PROPERTIES OUTPUT_NAME ${ARG_NAME}) +endfunction() + +function(gradle_install_aar target) + cmake_parse_arguments(ARG "" "DESTINATION" "" ${ARGN}) + get_target_property(_loc ${target} LOCATION) + get_target_property(_name ${target} OUTPUT_NAME) + install(FILES ${_loc} DESTINATION ${ARG_DESTINATION} RENAME ${_name}.aar) +endfunction() diff --git a/find-modules/local.properties.cmake b/find-modules/local.properties.cmake new file mode 100644 index 00000000..4f14cc3f --- /dev/null +++ b/find-modules/local.properties.cmake @@ -0,0 +1 @@ +sdk.dir=@ANDROID_SDK_ROOT@ diff --git a/find-modules/settings.gradle.cmake b/find-modules/settings.gradle.cmake new file mode 100644 index 00000000..6628d9e7 --- /dev/null +++ b/find-modules/settings.gradle.cmake @@ -0,0 +1 @@ +rootProject.name = '@ARG_NAME@' |