Warning, /education/gcompris/android/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 #============================================================================= 0002 # SPDX-FileCopyrightText: 2014 Johnny Jazeix <jazeix@gmail.com> 0003 # 0004 # SPDX-License-Identifier: BSD-3-Clause 0005 #============================================================================= 0006 #android build 0007 # copied/inspired from stellarium project (http://www.stellarium.org/wiki/index.php/Building_for_Android) 0008 0009 list(APPEND JAVA_SRCS "src/net/gcompris/GComprisActivity.java") 0010 0011 foreach(JavaSource ${JAVA_SRCS}) 0012 add_custom_command( 0013 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${JavaSource} 0014 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${JavaSource} ${CMAKE_CURRENT_BINARY_DIR}/${JavaSource} 0015 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${JavaSource} 0016 ) 0017 list(APPEND TARGET_JAVA_FILES ${CMAKE_CURRENT_BINARY_DIR}/${JavaSource}) 0018 endforeach() 0019 0020 add_custom_target(java_src DEPENDS ${TARGET_JAVA_FILES}) 0021 0022 find_program(ANDROID_DEPLOY_QT NAMES androiddeployqt PATHS ${_qt5Core_install_prefix}/bin/) 0023 0024 # Look for androiddeployqt program 0025 if(NOT ANDROID_DEPLOY_QT) 0026 message(FATAL_ERROR "Could not find androiddeployqt. Make sure you set all the Qt5_* paths to the Qt for android compiled version.") 0027 endif() 0028 0029 # Set version 0030 set(ANDROID_VERSION_NAME ${GCOMPRIS_VERSION}) 0031 0032 # Set a name representing the build type 0033 set(APK_SUFFIX "-") 0034 0035 # _HOST have been removed from ECM in https://cgit.kde.org/extra-cmake-modules.git/commit/?id=731ba7036effcc430f98031e7f2a9826f6234cba 0036 set(_HOST "${CMAKE_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}") 0037 string(TOLOWER "${_HOST}" _HOST) 0038 0039 if(WITH_DOWNLOAD) 0040 set(APK_SUFFIX "-dl${APK_SUFFIX}") 0041 endif() 0042 0043 if(WITH_KIOSK_MODE) 0044 set(APK_SUFFIX "-kiosk${APK_SUFFIX}") 0045 endif() 0046 0047 # specific clang addition 0048 if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 0049 set(STDCPP_PATH ",\"stdcpp-path\": \"${ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ABI}/libc++_shared.so\"") 0050 endif() 0051 0052 set(ANDROID_TOOLCHAIN arm-linux-androideabi) 0053 if("${CMAKE_ANDROID_ARCH}" STREQUAL "arm64") 0054 set(ANDROID_TOOLCHAIN aarch64-linux-android) 0055 endif() 0056 0057 # set android package source for androiddeployqt json file 0058 set(PACKAGE_SOURCE_ANDROID ${CMAKE_BINARY_DIR}/tmpAndroid) 0059 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml @ONLY) 0060 0061 # create json file parsed by the androiddeployqt 0062 set(ANDROID_SDK_ROOT $ENV{ANDROID_SDK_ROOT}) 0063 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configAndroid.json.cmake ${PACKAGE_SOURCE_ANDROID}/configAndroid.json @ONLY) 0064 0065 # Get all po files in po/ to create the values-{locale} in order to have the locales available in android 0066 file(GLOB TRANSLATIONS_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "../po/*.po") 0067 foreach(PoSource ${TRANSLATIONS_FILES}) 0068 # Remove suffix ".po" 0069 string(REPLACE ".po" "" PoSource ${PoSource}) 0070 # Remove prefix "../po/gcompris_" 0071 string(REPLACE "../po/gcompris_" "" locale ${PoSource}) 0072 # replace _ par -r for locales with country 0073 string(REPLACE "_" "-r" locale ${locale}) 0074 0075 add_custom_command( 0076 OUTPUT ${locale} 0077 COMMAND cmake -E make_directory ${GCOMPRIS_TRANSLATIONS_DIR} 0078 COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/android/res/values-${locale} 0079 COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/android/strings.xml ${CMAKE_BINARY_DIR}/android/res/values-${locale}/strings.xml 0080 ) 0081 list(APPEND ALL_LOCALES ${locale}) 0082 endforeach() 0083 0084 add_custom_command( 0085 OUTPUT createApkFromAndroidDeployQtDebug 0086 DEPENDS ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml 0087 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${PACKAGE_SOURCE_ANDROID} 0088 COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_CURRENT_BINARY_DIR}/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --debug --gradle 0089 COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/build/outputs/apk/debug/android-debug.apk ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-debug-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk 0090 ) 0091 0092 add_custom_command( 0093 OUTPUT createApkFromAndroidDeployQtRelease 0094 DEPENDS ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml 0095 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${PACKAGE_SOURCE_ANDROID} 0096 COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_CURRENT_BINARY_DIR}/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --release --gradle 0097 COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/build/outputs/apk/release/android-release-unsigned.apk ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk 0098 ) 0099 0100 add_custom_command( 0101 OUTPUT createApkSignedAlignedFromAndroidDeployQtRelease 0102 DEPENDS ${PACKAGE_SOURCE_ANDROID}/AndroidManifest.xml 0103 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR} ${PACKAGE_SOURCE_ANDROID} 0104 COMMAND ${ANDROID_DEPLOY_QT} --output ${CMAKE_CURRENT_BINARY_DIR}/ --input ${PACKAGE_SOURCE_ANDROID}/configAndroid.json --gradle --sign $ENV{ANDROID_KEYSTORE} gcompris --storepass $ENV{ANDROID_KEYSTORE_PASSWD} 0105 COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/build/outputs/apk/release/android-release-signed.apk ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk 0106 ) 0107 0108 add_custom_command( 0109 OUTPUT apkInstall 0110 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk 0111 COMMAND ${ANDROID_SDK_ROOT}/platform-tools/adb install -r ${CMAKE_CURRENT_BINARY_DIR}/GCompris-Android-release-signed-aligned-${ANDROID_ABI}${APK_SUFFIX}${GCOMPRIS_VERSION}.apk 0112 ) 0113 0114 # Command to create apk from Makefile 0115 add_custom_target(apk_debug 0116 DEPENDS ${ALL_LOCALES} move_translations_to_assets package_openssl createApkFromAndroidDeployQtDebug java_src 0117 ) 0118 0119 # Command to create apk from Makefile 0120 add_custom_target(apk_release 0121 DEPENDS ${ALL_LOCALES} move_translations_to_assets package_openssl createApkFromAndroidDeployQtRelease java_src 0122 ) 0123 0124 # Command to create aligned signed apk from Makefile 0125 add_custom_target(apk_aligned_signed 0126 DEPENDS ${ALL_LOCALES} move_translations_to_assets package_openssl createApkSignedAlignedFromAndroidDeployQtRelease java_src 0127 ) 0128 0129 # Command to install the signed aligned apk through adb from Makefile 0130 add_custom_target(apk_install 0131 DEPENDS apkInstall 0132 ) 0133 0134 # compile openssl needed to download from https 0135 include(ExternalProject) 0136 set(OPENSSL_DIR "${CMAKE_BINARY_DIR}/external/openssl/") 0137 0138 # For Qt 5.12.5 and above 5.13.0, it needs libcrypto_1_1.so and libssl_1_1.so 0139 set(suffix_libssl ".so") 0140 if(Qt5Core_VERSION VERSION_GREATER_EQUAL "5.12.5" AND NOT Qt5Core_VERSION MATCHES "5.13.0") 0141 set(suffix_libssl "_1_1.so") 0142 endif() 0143 0144 find_program(LLVM_STRIP NAMES llvm-strip PATHS ${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/) 0145 0146 ExternalProject_Add( 0147 ext_openssl 0148 DOWNLOAD_DIR ${CMAKE_BINARY_DIR} 0149 SOURCE_DIR ${OPENSSL_DIR} 0150 URL https://www.openssl.org/source/openssl-1.1.1n.tar.gz 0151 URL_HASH SHA256=40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a 0152 BUILD_IN_SOURCE 1 0153 CONFIGURE_COMMAND 0154 ${CMAKE_COMMAND} -E env PATH=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin:$ENV{PATH} 0155 ./Configure --prefix=${CMAKE_CURRENT_BINARY_DIR} --openssldir=./ssl android-${CMAKE_ANDROID_ARCH} shared -D__ANDROID_API__=${CMAKE_ANDROID_API} 0156 BUILD_COMMAND 0157 ${CMAKE_COMMAND} -E env PATH=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin:$ENV{PATH} 0158 make SHLIB_VERSION_NUMBER= SHLIB_EXT=${suffix_libssl} build_libs && 0159 ${LLVM_STRIP} --strip-all libcrypto${suffix_libssl} && 0160 ${LLVM_STRIP} --strip-all libcrypto${suffix_libssl} 0161 INSTALL_COMMAND "" 0162 ) 0163 add_custom_command( 0164 OUTPUT package_openssl 0165 COMMAND ${CMAKE_COMMAND} -E copy "${OPENSSL_DIR}/libcrypto${suffix_libssl}" "${CMAKE_BINARY_DIR}/android/libs/${ANDROID_ABI}/libcrypto${suffix_libssl}" 0166 COMMAND ${CMAKE_COMMAND} -E copy "${OPENSSL_DIR}/libssl${suffix_libssl}" "${CMAKE_BINARY_DIR}/android/libs/${ANDROID_ABI}/libssl${suffix_libssl}" 0167 ) 0168 0169 # 0170 add_custom_command( 0171 OUTPUT move_translations_to_assets 0172 COMMAND ${CMAKE_COMMAND} -E copy_directory ${GCOMPRIS_TRANSLATIONS_DIR} ${CMAKE_BINARY_DIR}/android/assets/share/GCompris 0173 ) 0174 0175 if(TARGET create-apk) 0176 set(PACKAGE_DIR ${PACKAGE_SOURCE_ANDROID}) 0177 set_target_properties(create-apk-GCompris PROPERTIES ANDROID_APK_DIR "${PACKAGE_DIR}") 0178 add_custom_target(gcompris-move-metadata ALL 0179 COMMAND cmake -E echo "Moving GCompris shared Android resources" 0180 COMMAND cmake -E make_directory ${PACKAGE_SOURCE_ANDROID} 0181 COMMAND cmake -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}" "${PACKAGE_SOURCE_ANDROID}" 0182 ) 0183 add_dependencies(create-apk gcompris-move-metadata) 0184 endif()