mirror of
https://github.com/overte-org/overte.git
synced 2025-04-25 18:16:08 +02:00
159 lines
No EOL
6.1 KiB
CMake
159 lines
No EOL
6.1 KiB
CMake
#
|
|
# QtCreateAPK.cmake
|
|
#
|
|
# Created by Stephen Birarda on 11/18/14.
|
|
# Copyright 2013 High Fidelity, Inc.
|
|
#
|
|
# Distributed under the Apache License, Version 2.0.
|
|
# See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
#
|
|
|
|
#
|
|
# OPTIONS
|
|
# These options will modify how QtCreateAPK behaves. May be useful if somebody wants to fork.
|
|
# For High Fidelity purposes these should not need to be changed.
|
|
#
|
|
set(ANDROID_THIS_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) # Directory this CMake file is in
|
|
|
|
if (POLICY CMP0026)
|
|
cmake_policy(SET CMP0026 OLD)
|
|
endif ()
|
|
|
|
macro(qt_create_apk)
|
|
if(ANDROID_APK_FULLSCREEN)
|
|
set(ANDROID_APK_THEME "android:theme=\"@android:style/Theme.NoTitleBar.Fullscreen\"")
|
|
else()
|
|
set(ANDROID_APK_THEME "")
|
|
endif()
|
|
|
|
if (UPPER_CMAKE_BUILD_TYPE MATCHES RELEASE)
|
|
set(ANDROID_APK_DEBUGGABLE "false")
|
|
set(ANDROID_APK_RELEASE_LOCAL ${ANDROID_APK_RELEASE})
|
|
else ()
|
|
set(ANDROID_APK_DEBUGGABLE "true")
|
|
set(ANDROID_APK_RELEASE_LOCAL "0")
|
|
endif ()
|
|
|
|
# Create "AndroidManifest.xml"
|
|
configure_file("${ANDROID_THIS_DIRECTORY}/AndroidManifest.xml.in" "${ANDROID_APK_BUILD_DIR}/AndroidManifest.xml")
|
|
|
|
# create "strings.xml"
|
|
configure_file("${ANDROID_THIS_DIRECTORY}/strings.xml.in" "${ANDROID_APK_BUILD_DIR}/res/values/strings.xml")
|
|
|
|
# find androiddeployqt
|
|
find_program(ANDROID_DEPLOY_QT androiddeployqt HINTS "${QT_DIR}/bin")
|
|
|
|
# set the path to our app shared library
|
|
set(EXECUTABLE_DESTINATION_PATH "${ANDROID_APK_OUTPUT_DIR}/libs/${ANDROID_ABI}/lib${TARGET_NAME}.so")
|
|
|
|
# add our dependencies to the deployment file
|
|
get_property(_DEPENDENCIES TARGET ${TARGET_NAME} PROPERTY INTERFACE_LINK_LIBRARIES)
|
|
|
|
foreach(_IGNORE_COPY IN LISTS IGNORE_COPY_LIBS)
|
|
list(REMOVE_ITEM _DEPENDENCIES ${_IGNORE_COPY})
|
|
endforeach()
|
|
|
|
foreach(_DEP IN LISTS _DEPENDENCIES)
|
|
if (NOT TARGET ${_DEP})
|
|
list(APPEND _DEPS_LIST ${_DEP})
|
|
else ()
|
|
if(NOT _DEP MATCHES "Qt5::.*")
|
|
get_property(_DEP_LOCATION TARGET ${_DEP} PROPERTY "LOCATION_${CMAKE_BUILD_TYPE}")
|
|
|
|
# recurisvely add libraries which are dependencies of this target
|
|
get_property(_DEP_DEPENDENCIES TARGET ${_DEP} PROPERTY INTERFACE_LINK_LIBRARIES)
|
|
|
|
foreach(_SUB_DEP IN LISTS _DEP_DEPENDENCIES)
|
|
if (NOT TARGET ${_SUB_DEP} AND NOT _SUB_DEP MATCHES "Qt5::.*")
|
|
list(APPEND _DEPS_LIST ${_SUB_DEP})
|
|
endif()
|
|
endforeach()
|
|
|
|
list(APPEND _DEPS_LIST ${_DEP_LOCATION})
|
|
endif()
|
|
endif ()
|
|
endforeach()
|
|
|
|
list(REMOVE_DUPLICATES _DEPS_LIST)
|
|
|
|
# just copy static libs to apk libs folder - don't add to deps list
|
|
foreach(_LOCATED_DEP IN LISTS _DEPS_LIST)
|
|
if (_LOCATED_DEP MATCHES "\\.a$")
|
|
add_custom_command(
|
|
TARGET ${TARGET_NAME}
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${_LOCATED_DEP} "${ANDROID_APK_OUTPUT_DIR}/libs/${ANDROID_ABI}"
|
|
)
|
|
list(REMOVE_ITEM _DEPS_LIST ${_LOCATED_DEP})
|
|
endif ()
|
|
endforeach()
|
|
|
|
string(REPLACE ";" "," _DEPS "${_DEPS_LIST}")
|
|
|
|
configure_file("${ANDROID_THIS_DIRECTORY}/deployment-file.json.in" "${TARGET_NAME}-deployment.json")
|
|
|
|
# copy the res folder from the target to the apk build dir
|
|
add_custom_target(
|
|
${TARGET_NAME}-copy-res
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/res" "${ANDROID_APK_BUILD_DIR}/res"
|
|
)
|
|
|
|
# copy the assets folder from the target to the apk build dir
|
|
add_custom_target(
|
|
${TARGET_NAME}-copy-assets
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/assets" "${ANDROID_APK_BUILD_DIR}/assets"
|
|
)
|
|
|
|
# copy the java folder from src to the apk build dir
|
|
add_custom_target(
|
|
${TARGET_NAME}-copy-java
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/src/java" "${ANDROID_APK_BUILD_DIR}/src"
|
|
)
|
|
|
|
# copy the libs folder from src to the apk build dir
|
|
add_custom_target(
|
|
${TARGET_NAME}-copy-libs
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/libs" "${ANDROID_APK_BUILD_DIR}/libs"
|
|
)
|
|
|
|
# handle setup for ndk-gdb
|
|
add_custom_target(${TARGET_NAME}-gdb DEPENDS ${TARGET_NAME})
|
|
|
|
if (ANDROID_APK_DEBUGGABLE)
|
|
get_property(TARGET_LOCATION TARGET ${TARGET_NAME} PROPERTY LOCATION)
|
|
|
|
set(GDB_SOLIB_PATH ${ANDROID_APK_BUILD_DIR}/obj/local/${ANDROID_NDK_ABI_NAME}/)
|
|
|
|
# generate essential Android Makefiles
|
|
file(WRITE ${ANDROID_APK_BUILD_DIR}/jni/Android.mk "APP_ABI := ${ANDROID_NDK_ABI_NAME}\n")
|
|
file(WRITE ${ANDROID_APK_BUILD_DIR}/jni/Application.mk "APP_ABI := ${ANDROID_NDK_ABI_NAME}\n")
|
|
|
|
# create gdb.setup
|
|
get_directory_property(PROJECT_INCLUDES DIRECTORY ${PROJECT_SOURCE_DIR} INCLUDE_DIRECTORIES)
|
|
string(REGEX REPLACE ";" " " PROJECT_INCLUDES "${PROJECT_INCLUDES}")
|
|
file(WRITE ${ANDROID_APK_BUILD_DIR}/libs/${ANDROID_NDK_ABI_NAME}/gdb.setup "set solib-search-path ${GDB_SOLIB_PATH}\n")
|
|
file(APPEND ${ANDROID_APK_BUILD_DIR}/libs/${ANDROID_NDK_ABI_NAME}/gdb.setup "directory ${PROJECT_INCLUDES}\n")
|
|
|
|
# copy lib to obj
|
|
add_custom_command(TARGET ${TARGET_NAME}-gdb PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${GDB_SOLIB_PATH})
|
|
add_custom_command(TARGET ${TARGET_NAME}-gdb PRE_BUILD COMMAND cp ${TARGET_LOCATION} ${GDB_SOLIB_PATH})
|
|
|
|
# strip symbols
|
|
add_custom_command(TARGET ${TARGET_NAME}-gdb PRE_BUILD COMMAND ${CMAKE_STRIP} ${TARGET_LOCATION})
|
|
endif ()
|
|
|
|
# use androiddeployqt to create the apk
|
|
add_custom_target(${TARGET_NAME}-apk
|
|
COMMAND ${ANDROID_DEPLOY_QT} --input "${TARGET_NAME}-deployment.json" --output "${ANDROID_APK_OUTPUT_DIR}" --android-platform android-${ANDROID_API_LEVEL} ${ANDROID_DEPLOY_QT_INSTALL} --verbose --deployment bundled "\\$(ARGS)"
|
|
DEPENDS ${TARGET_NAME} ${TARGET_NAME}-copy-res ${TARGET_NAME}-copy-assets ${TARGET_NAME}-copy-java ${TARGET_NAME}-copy-libs ${TARGET_NAME}-gdb
|
|
)
|
|
|
|
# rename the APK if the caller asked us to
|
|
if (ANDROID_APK_CUSTOM_NAME)
|
|
add_custom_command(
|
|
TARGET ${TARGET_NAME}-apk
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E rename "${ANDROID_APK_OUTPUT_DIR}/bin/QtApp-debug.apk" "${ANDROID_APK_OUTPUT_DIR}/bin/${ANDROID_APK_CUSTOM_NAME}"
|
|
)
|
|
endif ()
|
|
endmacro() |