From f1ed7a2e7834b6a2e64ee75427fb94593f785b92 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 31 Aug 2016 10:53:29 -0700 Subject: [PATCH] initial changes needed for android interface cmake --- CMakeLists.txt | 4 +- cmake/externals/hifiAudioCodec/CMakeLists.txt | 74 +++++++++--------- cmake/externals/tbb/CMakeLists.txt | 28 +++---- gvr-interface/CMakeLists.txt | 24 +++--- interface/CMakeLists.txt | 76 ++++++++++++++++--- plugins/hifiSixense/CMakeLists.txt | 10 ++- 6 files changed, 137 insertions(+), 79 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bcd2352de..f26a036397 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,7 +98,7 @@ endif () if (ANDROID) if (NOT ANDROID_QT_CMAKE_PREFIX_PATH) - set(QT_CMAKE_PREFIX_PATH ${ANDROID_LIB_DIR}/Qt/5.4/android_armv7/lib/cmake) + set(QT_CMAKE_PREFIX_PATH ${ANDROID_LIB_DIR}/Qt/5.5/android_armv7/lib/cmake) else () set(QT_CMAKE_PREFIX_PATH ${ANDROID_QT_CMAKE_PREFIX_PATH}) endif () @@ -236,6 +236,8 @@ if (NOT ANDROID) endif() if (ANDROID OR DESKTOP_GVR) + add_subdirectory(interface) + add_subdirectory(plugins) add_subdirectory(gvr-interface) endif () diff --git a/cmake/externals/hifiAudioCodec/CMakeLists.txt b/cmake/externals/hifiAudioCodec/CMakeLists.txt index 87b5044b42..b64dbe6f9d 100644 --- a/cmake/externals/hifiAudioCodec/CMakeLists.txt +++ b/cmake/externals/hifiAudioCodec/CMakeLists.txt @@ -5,39 +5,43 @@ set(EXTERNAL_NAME hifiAudioCodec) string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) -if (WIN32 OR APPLE) - ExternalProject_Add( - ${EXTERNAL_NAME} - URL http://s3.amazonaws.com/hifi-public/dependencies/codecSDK-1.zip - URL_MD5 23ec3fe51eaa155ea159a4971856fc13 - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - LOG_DOWNLOAD 1 - ) -elseif(NOT ANDROID) - ExternalProject_Add( - ${EXTERNAL_NAME} - URL http://s3.amazonaws.com/hifi-public/dependencies/codecSDK-linux.zip - URL_MD5 7d37914a18aa4de971d2f45dd3043bde - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - LOG_DOWNLOAD 1 - ) -endif() - -# Hide this external target (for ide users) -set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") - -ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) - -set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/include CACHE TYPE INTERNAL) - -if (WIN32) - set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/Release/audio.lib CACHE TYPE INTERNAL) -elseif(APPLE) - set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/Release/libaudio.a CACHE TYPE INTERNAL) -elseif(NOT ANDROID) - set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/Release/libaudio.a CACHE TYPE INTERNAL) +if (NOT ANDROID) + + if (WIN32 OR APPLE) + ExternalProject_Add( + ${EXTERNAL_NAME} + URL http://s3.amazonaws.com/hifi-public/dependencies/codecSDK-1.zip + URL_MD5 23ec3fe51eaa155ea159a4971856fc13 + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + LOG_DOWNLOAD 1 + ) + elseif () + ExternalProject_Add( + ${EXTERNAL_NAME} + URL http://s3.amazonaws.com/hifi-public/dependencies/codecSDK-linux.zip + URL_MD5 7d37914a18aa4de971d2f45dd3043bde + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + LOG_DOWNLOAD 1 + ) + endif() + + # Hide this external target (for ide users) + set_target_properties(${EXTERNAL_NAME} PROPERTIES FOLDER "hidden/externals") + + ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) + + set(${EXTERNAL_NAME_UPPER}_INCLUDE_DIRS ${SOURCE_DIR}/include CACHE TYPE INTERNAL) + + if (WIN32) + set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/Release/audio.lib CACHE TYPE INTERNAL) + elseif(APPLE) + set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/Release/libaudio.a CACHE TYPE INTERNAL) + elseif(NOT ANDROID) + set(${EXTERNAL_NAME_UPPER}_LIBRARIES ${SOURCE_DIR}/Release/libaudio.a CACHE TYPE INTERNAL) + endif() + endif() diff --git a/cmake/externals/tbb/CMakeLists.txt b/cmake/externals/tbb/CMakeLists.txt index 6ea03fd7a4..74f7e10859 100644 --- a/cmake/externals/tbb/CMakeLists.txt +++ b/cmake/externals/tbb/CMakeLists.txt @@ -3,9 +3,9 @@ set(EXTERNAL_NAME tbb) include(ExternalProject) if (ANDROID) - + find_program(NDK_BUILD_COMMAND NAMES ndk-build DOC "Path to the ndk-build command") - + ExternalProject_Add( ${EXTERNAL_NAME} URL http://hifi-public.s3.amazonaws.com/dependencies/tbb43_20150316oss_src.tgz @@ -20,7 +20,7 @@ if (ANDROID) ) elseif (APPLE) find_program(MAKE_COMMAND NAMES make DOC "Path to the make command") - + ExternalProject_Add( ${EXTERNAL_NAME} URL http://hifi-public.s3.amazonaws.com/dependencies/tbb43_20150316oss_src.tgz @@ -37,11 +37,11 @@ else () if (WIN32) set(DOWNLOAD_URL http://s3.amazonaws.com/hifi-public/dependencies/tbb43_20150316oss_win.zip) set(DOWNLOAD_MD5 d250d40bb93b255f75bcbb19e976a440) - else () + else () set(DOWNLOAD_URL http://s3.amazonaws.com/hifi-public/dependencies/tbb43_20150316oss_lin.tgz) set(DOWNLOAD_MD5 7830ba2bc62438325fba2ec0c95367a5) endif () - + ExternalProject_Add( ${EXTERNAL_NAME} URL ${DOWNLOAD_URL} @@ -60,11 +60,11 @@ ExternalProject_Get_Property(${EXTERNAL_NAME} SOURCE_DIR) string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) -if (APPLE) +if (APPLE) set(_TBB_LIB_DIR "${SOURCE_DIR}/lib") set(_LIB_PREFIX "lib") set(_LIB_EXT "dylib") - + ExternalProject_Add_Step( ${EXTERNAL_NAME} change-install-name @@ -74,7 +74,7 @@ if (APPLE) WORKING_DIRECTORY LOG 1 ) - + elseif (WIN32) if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") set(_TBB_LIB_DIR "${SOURCE_DIR}/lib/intel64/vc12") @@ -91,18 +91,18 @@ elseif (ANDROID) elseif (UNIX) set(_LIB_PREFIX "lib") set(_LIB_EXT "so") - + if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(_TBB_ARCH_DIR "intel64") else() set(_TBB_ARCH_DIR "ia32") endif() - + execute_process( COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION ) - + if (GCC_VERSION VERSION_GREATER 4.4 OR GCC_VERSION VERSION_EQUAL 4.4) set(_TBB_LIB_DIR "${SOURCE_DIR}/lib/${_TBB_ARCH_DIR}/gcc4.4") elseif (GCC_VERSION VERSION_GREATER 4.1 OR GCC_VERSION VERSION_EQUAL 4.1) @@ -110,9 +110,9 @@ elseif (UNIX) else () message(STATUS "Could not find a compatible version of Threading Building Blocks library for your compiler.") endif () - - -endif () + + +endif () if (DEFINED _TBB_LIB_DIR) set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${_TBB_LIB_DIR}/${_LIB_PREFIX}tbb_debug.${_LIB_EXT} CACHE FILEPATH "TBB debug library location") diff --git a/gvr-interface/CMakeLists.txt b/gvr-interface/CMakeLists.txt index 175706a3ff..7d6655e875 100644 --- a/gvr-interface/CMakeLists.txt +++ b/gvr-interface/CMakeLists.txt @@ -3,7 +3,7 @@ set(TARGET_NAME gvr-interface) if (ANDROID) set(ANDROID_APK_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/apk-build") set(ANDROID_APK_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/apk") - + set(ANDROID_SDK_ROOT $ENV{ANDROID_HOME}) set(ANDROID_APP_DISPLAY_NAME Interface) set(ANDROID_API_LEVEL 19) @@ -13,10 +13,10 @@ if (ANDROID) set(ANDROID_APK_VERSION_CODE 1) set(ANDROID_APK_FULLSCREEN TRUE) set(ANDROID_DEPLOY_QT_INSTALL "--install") - + set(BUILD_SHARED_LIBS ON) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${ANDROID_APK_OUTPUT_DIR}/libs/${ANDROID_ABI}") - + setup_hifi_library(Gui Widgets AndroidExtras) else () setup_hifi_project(Gui Widgets) @@ -28,12 +28,12 @@ link_hifi_libraries(shared networking audio-client avatars) if (ANDROID) find_package(LibOVR) - + if (LIBOVR_FOUND) add_definitions(-DHAVE_LIBOVR) target_link_libraries(${TARGET_NAME} ${LIBOVR_LIBRARIES} ${LIBOVR_ANDROID_LIBRARIES} ${TURBOJPEG_LIBRARY}) include_directories(SYSTEM ${LIBOVR_INCLUDE_DIRS}) - + # we need VRLib, so add a project.properties to our apk build folder that says that file(RELATIVE_PATH RELATIVE_VRLIB_PATH ${ANDROID_APK_OUTPUT_DIR} "${LIBOVR_VRLIB_DIR}") file(WRITE "${ANDROID_APK_BUILD_DIR}/project.properties" "android.library.reference.1=${RELATIVE_VRLIB_PATH}") @@ -50,7 +50,7 @@ if (ANDROID AND HOCKEY_APP_ID) set(ANDROID_ACTIVITY_NAME io.highfidelity.gvrinterface.InterfaceBetaActivity) set(ANDROID_DEPLOY_QT_INSTALL "") set(ANDROID_APK_CUSTOM_NAME "Interface-beta.apk") - + # set the ANDROID_APK_VERSION_CODE to the number of git commits execute_process( COMMAND git rev-list --first-parent --count HEAD @@ -58,16 +58,16 @@ if (ANDROID AND HOCKEY_APP_ID) OUTPUT_VARIABLE GIT_COMMIT_COUNT OUTPUT_STRIP_TRAILING_WHITESPACE ) - + set(ANDROID_APK_VERSION_CODE ${GIT_COMMIT_COUNT}) - + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/templates/InterfaceBetaActivity.java.in" "${ANDROID_APK_BUILD_DIR}/src/io/highfidelity/gvrinterface/InterfaceBetaActivity.java") elseif (ANDROID) set(HOCKEY_APP_ENABLED false) endif () if (ANDROID) - + set(HIFI_URL_INTENT "\ \n \ \n \ @@ -75,13 +75,11 @@ if (ANDROID) \n \ \n " ) - + set(ANDROID_EXTRA_APPLICATION_XML "${HOCKEY_APP_ACTIVITY}") set(ANDROID_EXTRA_ACTIVITY_XML "${HIFI_URL_INTENT}") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/templates/hockeyapp.xml.in" "${ANDROID_APK_BUILD_DIR}/res/values/hockeyapp.xml") qt_create_apk() - -endif (ANDROID) -copy_dlls_beside_windows_executable() +endif (ANDROID) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 414fafe705..37e084b4b4 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -39,9 +39,18 @@ else () list(REMOVE_ITEM INTERFACE_SRCS ${SPEECHRECOGNIZER_CPP}) endif () -find_package(Qt5 COMPONENTS - Gui Multimedia Network OpenGL Qml Quick Script ScriptTools Svg - WebChannel WebEngine WebEngineWidgets WebKitWidgets WebSockets) +if (ANDROID) + set(PLATFORM_QT_COMPONENTS AndroidExtras) +else () + set(PLATFORM_QT_COMPONENTS WebEngine WebEngineWidgets WebKitWidgets) +endif () + +find_package( + Qt5 COMPONENTS + Gui Multimedia Network OpenGL Qml Quick Script ScriptTools Svg + ${QT_WEBENGINE_COMPONENTS} + WebChannel WebSockets +) # grab the ui files in resources/ui file (GLOB_RECURSE QT_UI_FILES ui/*.ui) @@ -57,6 +66,25 @@ set(INTERFACE_SRCS ${INTERFACE_SRCS} "${QT_UI_HEADERS}" "${QT_RESOURCES}") # set(TS ${TARGET_NAME}_en.ts) # qt5_create_translation_custom(${QM} ${INTERFACE_SRCS} ${QT_UI_FILES} ${TS}) +# setup the android parameters that will help us produce an APK +if (ANDROID) + set(ANDROID_APK_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/apk-build") + set(ANDROID_APK_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/apk") + + set(ANDROID_SDK_ROOT $ENV{ANDROID_HOME}) + set(ANDROID_APP_DISPLAY_NAME Interface) + set(ANDROID_API_LEVEL 19) + set(ANDROID_APK_PACKAGE io.highfidelity.interface) + set(ANDROID_ACTIVITY_NAME io.highfidelity.interface.InterfaceActivity) + set(ANDROID_APK_VERSION_NAME "0.1") + set(ANDROID_APK_VERSION_CODE 1) + set(ANDROID_APK_FULLSCREEN TRUE) + set(ANDROID_DEPLOY_QT_INSTALL "--install") + + set(BUILD_SHARED_LIBS ON) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${ANDROID_APK_OUTPUT_DIR}/libs/${ANDROID_ABI}") +endif () + if (APPLE) # configure CMake to use a custom Info.plist @@ -95,7 +123,7 @@ if (APPLE) # make sure the output name for the .app bundle is correct set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME ${INTERFACE_BUNDLE_NAME}) -elseif(WIN32) +elseif (WIN32) # configure an rc file for the chosen icon set(CONFIGURE_ICON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/icon/${INTERFACE_ICON_FILENAME}") set(CONFIGURE_ICON_RC_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/Icon.rc") @@ -104,7 +132,7 @@ elseif(WIN32) # add an executable that also has the icon itself and the configured rc file as resources add_executable(${TARGET_NAME} WIN32 ${INTERFACE_SRCS} ${QM} ${CONFIGURE_ICON_RC_OUTPUT}) - if ( NOT DEV_BUILD ) + if (NOT DEV_BUILD) add_custom_command( TARGET ${TARGET_NAME} POST_BUILD @@ -113,9 +141,12 @@ elseif(WIN32) ) endif() -else() +elseif (ANDROID) + # on android the Interface target is a library that gets linked/used by the APK shell that qtcreateapk produces + add_library(${TARGET_NAME} ${INTERFACE_SRCS} ${QM}) +else () add_executable(${TARGET_NAME} ${INTERFACE_SRCS} ${QM}) -endif() +endif () target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_BINARY_DIR}/includes") @@ -135,12 +166,19 @@ if (WIN32) set_property(TARGET ${TARGET_NAME} APPEND_STRING PROPERTY LINK_FLAGS_DEBUG "/OPT:NOREF /OPT:NOICF") endif() +if (NOT ANDROID) + set(${STEAM_WRAPPER} steamworks-wrapper) +endif () + # link required hifi libraries -link_hifi_libraries(shared octree gpu gl gpu-gl procedural model render - recording fbx networking model-networking entities avatars - audio audio-client animation script-engine physics - render-utils entities-renderer ui auto-updater - controllers plugins ui-plugins display-plugins input-plugins steamworks-wrapper) +link_hifi_libraries( + shared octree gpu gl gpu-gl procedural model render + recording fbx networking model-networking entities avatars + audio audio-client animation script-engine physics + render-utils entities-renderer ui auto-updater + controllers plugins ui-plugins display-plugins input-plugins + ${STEAM_WRAPPER} +) # include the binary directory of render-utils for shader includes target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_BINARY_DIR}/libraries/render-utils") @@ -291,3 +329,17 @@ if (WIN32) package_libraries_for_deployment() endif() + +if (ANDROID) + set(HIFI_URL_INTENT "\ + \n \ + \n \ + \n \ + \n \ + \n " + ) + + set(ANDROID_EXTRA_ACTIVITY_XML "${HIFI_URL_INTENT}") + + qt_create_apk() +endif () diff --git a/plugins/hifiSixense/CMakeLists.txt b/plugins/hifiSixense/CMakeLists.txt index f907d7865f..14676217db 100644 --- a/plugins/hifiSixense/CMakeLists.txt +++ b/plugins/hifiSixense/CMakeLists.txt @@ -6,7 +6,9 @@ # See the accompanying file LICENSE or http:#www.apache.org/licenses/LICENSE-2.0.html # -set(TARGET_NAME hifiSixense) -setup_hifi_plugin(Script Qml Widgets) -link_hifi_libraries(shared controllers ui plugins ui-plugins input-plugins) -target_sixense() +if (NOT ANDROID) + set(TARGET_NAME hifiSixense) + setup_hifi_plugin(Script Qml Widgets) + link_hifi_libraries(shared controllers ui plugins ui-plugins input-plugins) + target_sixense() +endif ()