diff options
Diffstat (limited to 'toolchain')
| -rw-r--r-- | toolchain/ECMAndroidDeployQt.cmake | 32 | ||||
| -rw-r--r-- | toolchain/specifydependencies.cmake | 68 | 
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()  | 
