From 0658e6fbe15a195484ddcb39dcbfc37ab6531ad3 Mon Sep 17 00:00:00 2001 From: EndrII Date: Tue, 27 Jul 2021 20:52:44 +0300 Subject: [PATCH] addded support qt6 --- AddQtAndroidApk.cmake | 79 +++++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 22 deletions(-) diff --git a/AddQtAndroidApk.cmake b/AddQtAndroidApk.cmake index f812ec9..9b5e6d4 100644 --- a/AddQtAndroidApk.cmake +++ b/AddQtAndroidApk.cmake @@ -38,8 +38,7 @@ else() endif() -set(QT_ANDROID_IMPORTSCANER_BINARY "${ANDROID_DEPLOY_TOOL_ROOT_PATH}/bin/qmlimportscanner") -set(QT_ANDROID_RCC_BINARY "${ANDROID_DEPLOY_TOOL_ROOT_PATH}/libexec/rcc") + # find the Android SDK if(NOT QT_ANDROID_SDK_ROOT) @@ -83,6 +82,7 @@ include(CMakeParseArguments) # INSTALL #) # + macro(add_qt_android_apk TARGET SOURCE_TARGET) # parse the macro arguments @@ -94,6 +94,14 @@ macro(add_qt_android_apk TARGET SOURCE_TARGET) set(QT_ANDROID_SUPPORT_MULTI_ABI ON) endif() + set(QT_ANDROID_IMPORTSCANER_BINARY "${ANDROID_DEPLOY_TOOL_ROOT_PATH}/bin/qmlimportscanner") + + if(${Qt${QT_VERSION_MAJOR}Core_VERSION} VERSION_GREATER_EQUAL 6.1) + set(QT_ANDROID_RCC_BINARY "${ANDROID_DEPLOY_TOOL_ROOT_PATH}/libexec/rcc") + else() + set(QT_ANDROID_RCC_BINARY "${ANDROID_DEPLOY_TOOL_ROOT_PATH}/bin/rcc") + endif() + if(QT_ANDROID_SUPPORT_MULTI_ABI) # qtandroideploy will append by itself the ANDROID_ABI to the target name set(QT_ANDROID_APPLICATION_BINARY "${SOURCE_TARGET}") @@ -184,26 +192,33 @@ macro(add_qt_android_apk TARGET SOURCE_TARGET) message(WARNING "Failed to determine ANDROID_STL_PREFIX value for ANDROID_STL=${ANDROID_STL}") endif() - if(QT_ANDROID_SUPPORT_MULTI_ABI) - # from Qt 5.14 qtandroideploy will find the correct stl. - set(QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs") + if (${QT_VERSION_MAJOR} GREATER_EQUAL 6) + # qt6 + set(QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/") + else() - # define the STL shared library path - # up until NDK r18, ANDROID_STL_SHARED_LIBRARIES is populated by the NDK's toolchain file - # since NDK r19, the only option for a shared STL library is libc++_shared - if(ANDROID_STL_SHARED_LIBRARIES) - list(GET ANDROID_STL_SHARED_LIBRARIES 0 STL_LIBRARY_NAME) # we can only give one to androiddeployqt - if(ANDROID_STL_PATH) - set(QT_ANDROID_STL_PATH "${ANDROID_STL_PATH}/libs/${ANDROID_ABI}/lib${ANDROID_STL}.so") - else() - set(QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs/${ANDROID_ABI}/lib${ANDROID_STL}.so") - endif() - elseif(ANDROID_STL STREQUAL c++_shared) - set(QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs/${ANDROID_ABI}/libc++_shared.so") + + if(QT_ANDROID_SUPPORT_MULTI_ABI) + # from Qt 5.14 qtandroideploy will find the correct stl. + set(QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs") else() - message(WARNING "ANDROID_STL (${ANDROID_STL}) isn't a known shared stl library." - "You should consider setting ANDROID_STL to c++_shared (like Qt).") - set(QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs/${ANDROID_ABI}/libc++_shared.so") + # define the STL shared library path + # up until NDK r18, ANDROID_STL_SHARED_LIBRARIES is populated by the NDK's toolchain file + # since NDK r19, the only option for a shared STL library is libc++_shared + if(ANDROID_STL_SHARED_LIBRARIES) + list(GET ANDROID_STL_SHARED_LIBRARIES 0 STL_LIBRARY_NAME) # we can only give one to androiddeployqt + if(ANDROID_STL_PATH) + set(QT_ANDROID_STL_PATH "${ANDROID_STL_PATH}/libs/${ANDROID_ABI}/lib${ANDROID_STL}.so") + else() + set(QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs/${ANDROID_ABI}/lib${ANDROID_STL}.so") + endif() + elseif(ANDROID_STL STREQUAL c++_shared) + set(QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs/${ANDROID_ABI}/libc++_shared.so") + else() + message(WARNING "ANDROID_STL (${ANDROID_STL}) isn't a known shared stl library." + "You should consider setting ANDROID_STL to c++_shared (like Qt).") + set(QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT}/sources/cxx-stl/${ANDROID_STL_PREFIX}/libs/${ANDROID_ABI}/libc++_shared.so") + endif() endif() endif() @@ -211,10 +226,30 @@ macro(add_qt_android_apk TARGET SOURCE_TARGET) # It have been replaced by "architectures": { "${ANDROID_ABI}": "${ANDROID_ABI}" } # This allow to package multiple ABI in a single apk # For now we only support single ABI build with this script (to ensure it work with Qt5.14 & Qt5.15) - if(QT_ANDROID_SUPPORT_MULTI_ABI) - set(QT_ANDROID_ARCHITECTURES "\"${ANDROID_ABI}\":\"${ANDROID_ABI}\"") + + + if (${QT_VERSION_MAJOR} GREATER_EQUAL 6) + if (ANDROID_ABI STREQUAL "x86") + set(arch_value "i686-linux-android") + elseif (ANDROID_ABI STREQUAL "x86_64") + set(arch_value "x86_64-linux-android") + elseif (ANDROID_ABI STREQUAL "arm64-v8a") + set(arch_value "aarch64-linux-android") + else() + set(arch_value "arm-linux-androideabi") + endif() + + set(QT_ANDROID_ARCHITECTURES "\"${ANDROID_ABI}\" : \"${arch_value}\"") + + + else() + if(QT_ANDROID_SUPPORT_MULTI_ABI) + set(QT_ANDROID_ARCHITECTURES "\"${ANDROID_ABI}\":\"${ANDROID_ABI}\"") + endif() + endif() + # set the list of dependant libraries if(ARG_DEPENDS) foreach(LIB ${ARG_DEPENDS})