aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--toolchain/ECMAndroidDeployQt.cmake32
-rw-r--r--toolchain/specifydependencies.cmake68
2 files changed, 71 insertions, 29 deletions
diff --git a/toolchain/ECMAndroidDeployQt.cmake b/toolchain/ECMAndroidDeployQt.cmake
index 544f5a8d..65b68c67 100644
--- a/toolchain/ECMAndroidDeployQt.cmake
+++ b/toolchain/ECMAndroidDeployQt.cmake
@@ -1,7 +1,37 @@
-cmake_minimum_required (VERSION 3.7 FATAL_ERROR)
+cmake_minimum_required (VERSION 3.19 FATAL_ERROR)
find_package(Qt5Core REQUIRED)
find_package(Python3 COMPONENTS Interpreter REQUIRED)
+# Taken from https://stackoverflow.com/a/62311397
+function(_ecm_get_all_targets var)
+ set(targets)
+ _ecm_get_all_targets_recursive(targets ${CMAKE_CURRENT_SOURCE_DIR})
+ set(${var} ${targets} PARENT_SCOPE)
+endfunction()
+
+macro(_ecm_get_all_targets_recursive targets dir)
+ get_property(subdirectories DIRECTORY ${dir} PROPERTY SUBDIRECTORIES)
+ foreach(subdir ${subdirectories})
+ _ecm_get_all_targets_recursive(${targets} ${subdir})
+ endforeach()
+
+ get_property(current_targets DIRECTORY ${dir} PROPERTY BUILDSYSTEM_TARGETS)
+ list(APPEND ${targets} ${current_targets})
+endmacro()
+
+function(_ecm_deferred_androiddeployqt)
+ _ecm_get_all_targets(all_targets)
+ set(module_targets)
+ foreach(tgt ${all_targets})
+ get_target_property(tgt_type ${tgt} TYPE)
+ if(tgt_type STREQUAL "MODULE_LIBRARY")
+ list(APPEND module_targets "$<TARGET_FILE:${tgt}>")
+ endif()
+ endforeach()
+ file(GENERATE OUTPUT "module-plugins" CONTENT "${module_targets}")
+endfunction()
+cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL _ecm_deferred_androiddeployqt)
+
function(ecm_androiddeployqt QTANDROID_EXPORTED_TARGET ECM_ADDITIONAL_FIND_ROOT_PATH)
set(EXPORT_DIR "${CMAKE_BINARY_DIR}/${QTANDROID_EXPORTED_TARGET}_build_apk/")
if (Qt5Core_VERSION VERSION_LESS 5.14.0)
diff --git a/toolchain/specifydependencies.cmake b/toolchain/specifydependencies.cmake
index 905b62c3..69a7f534 100644
--- a/toolchain/specifydependencies.cmake
+++ b/toolchain/specifydependencies.cmake
@@ -1,25 +1,31 @@
-execute_process(COMMAND readelf --wide --dynamic ${TARGET} ERROR_VARIABLE readelf_errors OUTPUT_VARIABLE out RESULT_VARIABLE result)
-if (NOT result EQUAL 0)
- message(FATAL_ERROR "readelf failed on ${TARGET} exit(${result}): ${readelf_errors}")
-endif()
+function(list_dependencies target libs)
+ execute_process(COMMAND readelf --wide --dynamic ${target} ERROR_VARIABLE readelf_errors OUTPUT_VARIABLE out RESULT_VARIABLE result)
-string(REPLACE "\n" ";" lines "${out}")
-set(extralibs)
-foreach(line ${lines})
- string(REGEX MATCH ".*\\(NEEDED\\) +Shared library: +\\[(.+)\\]$" matched ${line})
- set(currentLib ${CMAKE_MATCH_1})
+ if (NOT result EQUAL 0)
+ message(FATAL_ERROR "readelf failed on ${target} exit(${result}): ${readelf_errors}")
+ endif()
- if(NOT ${currentLib} MATCHES "libQt5.*" AND matched)
- find_file(ourlib-${currentLib} ${currentLib} HINTS ${OUTPUT_DIR} ${EXPORT_DIR} ${ECM_ADDITIONAL_FIND_ROOT_PATH} NO_DEFAULT_PATH PATH_SUFFIXES lib)
+ string(REPLACE "\n" ";" lines "${out}")
+ set(extralibs ${${libs}})
+ foreach(line ${lines})
+ string(REGEX MATCH ".*\\(NEEDED\\) +Shared library: +\\[(.+)\\]$" matched ${line})
+ set(currentLib ${CMAKE_MATCH_1})
- if(ourlib-${currentLib})
- list(APPEND extralibs "${ourlib-${currentLib}}")
- else()
- message(STATUS "could not find ${currentLib} in ${OUTPUT_DIR} ${EXPORT_DIR}/lib/ ${ECM_ADDITIONAL_FIND_ROOT_PATH}")
+ if(NOT ${currentLib} MATCHES "libQt5.*" AND matched)
+ find_file(ourlib-${currentLib} ${currentLib} HINTS ${OUTPUT_DIR} ${EXPORT_DIR} ${ECM_ADDITIONAL_FIND_ROOT_PATH} NO_DEFAULT_PATH PATH_SUFFIXES lib)
+
+ if(ourlib-${currentLib})
+ list(APPEND extralibs "${ourlib-${currentLib}}")
+ else()
+ message(STATUS "could not find ${currentLib} in ${OUTPUT_DIR} ${EXPORT_DIR}/lib/ " ${ECM_ADDITIONAL_FIND_ROOT_PATH})
+ endif()
endif()
- endif()
-endforeach()
+ endforeach()
+ set(${libs} ${extralibs} PARENT_SCOPE)
+endfunction()
+
+list_dependencies(${TARGET} extralibs)
function(contains_library libpath IS_EQUAL)
get_filename_component (name ${libpath} NAME)
@@ -47,23 +53,29 @@ if (ANDROID_EXTRA_LIBS)
endforeach()
endif()
-if(extralibs)
- string(REPLACE ";" "," libs "${extralibs}")
- set(extralibs "\"android-extra-libs\": \"${libs}\",")
-endif()
-
set(extraplugins)
-foreach(folder "share" "lib/qml") #now we check for folders with extra stuff
+foreach(folder "plugins" "share" "lib/qml") #now we check for folders with extra stuff
set(plugin "${EXPORT_DIR}/${folder}")
if(EXISTS "${plugin}")
- if(extraplugins)
- set(extraplugins "${extraplugins},${plugin}")
- else()
- set(extraplugins "${plugin}")
- endif()
+ list(APPEND extraplugins "${plugin}")
endif()
endforeach()
+
+if(EXISTS "module-plugins")
+ file(READ "module-plugins" moduleplugins)
+ foreach(module ${moduleplugins})
+ list_dependencies(${module} extralibs)
+ endforeach()
+ list(REMOVE_DUPLICATES extralibs)
+endif()
+
+if(extralibs)
+ string(REPLACE ";" "," extralibs "${extralibs}")
+ set(extralibs "\"android-extra-libs\": \"${extralibs}\",")
+endif()
+
if(extraplugins)
+ string(REPLACE ";" "," extraplugins "${extraplugins}")
set(extraplugins "\"android-extra-plugins\": \"${extraplugins}\",")
endif()