diff --git a/CMakeLists.txt b/CMakeLists.txt
index 173c6b0040..b4d815abd1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -55,9 +55,19 @@ if (APPLE)
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
endif ()
+if (NOT HIFI_ANDROID)
+ set(HIFI_ANDROID $ENV{HIFI_ANDROID})
+endif ()
+
if (ANDROID)
if (NOT ANDROID_QT_CMAKE_PREFIX_PATH)
- set(QT_CMAKE_PREFIX_PATH $ENV{HIFI_ANDROID}/qt/5.3/android_armv7/lib/cmake)
+ set(QT_CMAKE_PREFIX_PATH ${HIFI_ANDROID}/qt/5.3/android_armv7/lib/cmake)
+ endif ()
+
+ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
+
+ if (HIFI_ANDROID)
+ list(APPEND CMAKE_FIND_ROOT_PATH ${HIFI_ANDROID})
endif ()
else ()
if (NOT QT_CMAKE_PREFIX_PATH)
@@ -88,13 +98,14 @@ foreach(CUSTOM_MACRO ${HIFI_CUSTOM_MACROS})
endforeach()
# add subdirectories for all targets
-add_subdirectory(assignment-client)
-add_subdirectory(tools)
-
if (NOT ANDROID)
-add_subdirectory(domain-server)
-add_subdirectory(ice-server)
-add_subdirectory(interface)
-add_subdirectory(tests)
-add_subdirectory(voxel-edit)
-endif ()
+ add_subdirectory(assignment-client)
+ add_subdirectory(domain-server)
+ add_subdirectory(ice-server)
+ add_subdirectory(interface)
+ add_subdirectory(tests)
+ add_subdirectory(tools)
+ add_subdirectory(voxel-edit)
+else ()
+ add_subdirectory(gvr-interface)
+endif()
diff --git a/cmake/macros/AutoMTC.cmake b/cmake/macros/AutoMTC.cmake
index 4d433e7b69..de60d5c21f 100644
--- a/cmake/macros/AutoMTC.cmake
+++ b/cmake/macros/AutoMTC.cmake
@@ -13,5 +13,11 @@ macro(AUTO_MTC)
file(GLOB INCLUDE_FILES src/*.h)
- add_custom_command(OUTPUT ${AUTOMTC_SRC} COMMAND mtc -o ${AUTOMTC_SRC} ${INCLUDE_FILES} DEPENDS mtc ${INCLUDE_FILES})
+ if (NOT ANDROID)
+ set(MTC_EXECUTABLE mtc)
+ else ()
+ set(MTC_EXECUTABLE $ENV{MTC_PATH}/mtc)
+ endif ()
+
+ add_custom_command(OUTPUT ${AUTOMTC_SRC} COMMAND ${MTC_EXECUTABLE} -o ${AUTOMTC_SRC} ${INCLUDE_FILES} DEPENDS ${MTC_EXECUTABLE} ${INCLUDE_FILES})
endmacro()
diff --git a/cmake/macros/HifiLibrarySearchHints.cmake b/cmake/macros/HifiLibrarySearchHints.cmake
index b97fa47ad1..e22b442beb 100644
--- a/cmake/macros/HifiLibrarySearchHints.cmake
+++ b/cmake/macros/HifiLibrarySearchHints.cmake
@@ -16,8 +16,8 @@ macro(HIFI_LIBRARY_SEARCH_HINTS LIBRARY_FOLDER)
set(${LIBRARY_PREFIX}_SEARCH_DIRS "${${LIBRARY_PREFIX}_ROOT_DIR}")
endif ()
- if (ANDROID AND DEFINED ENV{HIFI_ANDROID})
- set(${LIBRARY_PREFIX}_SEARCH_DIRS "${${LIBRARY_PREFIX}_SEARCH_DIRS}" "$ENV{HIFI_ANDROID}/${LIBRARY_FOLDER}")
+ if (ANDROID)
+ set(${LIBRARY_PREFIX}_SEARCH_DIRS "${${LIBRARY_PREFIX}_SEARCH_DIRS}" "/${LIBRARY_FOLDER}")
endif ()
if (DEFINED ENV{${LIBRARY_PREFIX}_ROOT_DIR})
diff --git a/cmake/android/android.toolchain.cmake b/cmake/macros/android.toolchain.cmake
old mode 100644
new mode 100755
similarity index 98%
rename from cmake/android/android.toolchain.cmake
rename to cmake/macros/android.toolchain.cmake
index 7f1a993074..90c8139fb4
--- a/cmake/android/android.toolchain.cmake
+++ b/cmake/macros/android.toolchain.cmake
@@ -208,16 +208,8 @@
#
# ------------------------------------------------------------------------------
-# Modified by Lasse Oorni and Yao Wei Tjong for Urho3D
-
cmake_minimum_required( VERSION 2.6.3 )
-# Urho3D: on Windows Cygwin-based NDK tools may fail in the linking phase with too long command line. Turn on response files to avoid this
-if( CMAKE_HOST_WIN32 )
- set( CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1 )
- set( CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1 )
-endif()
-
if( DEFINED CMAKE_CROSSCOMPILING )
# subsequent toolchain loading is not really needed
return()
@@ -271,12 +263,11 @@ set( ANDROID_SUPPORTED_ABIS_mips "mips" )
set( ANDROID_SUPPORTED_ABIS_mips64 "mips64" )
# API level defaults
-# Urho3D: default to API 12
-set( ANDROID_DEFAULT_NDK_API_LEVEL 12 )
+set( ANDROID_DEFAULT_NDK_API_LEVEL 8 )
set( ANDROID_DEFAULT_NDK_API_LEVEL_arm64 21 )
-set( ANDROID_DEFAULT_NDK_API_LEVEL_x86 12)
+set( ANDROID_DEFAULT_NDK_API_LEVEL_x86 9 )
set( ANDROID_DEFAULT_NDK_API_LEVEL_x86_64 21 )
-set( ANDROID_DEFAULT_NDK_API_LEVEL_mips 12 )
+set( ANDROID_DEFAULT_NDK_API_LEVEL_mips 9 )
set( ANDROID_DEFAULT_NDK_API_LEVEL_mips64 21 )
@@ -1430,9 +1421,8 @@ endif()
# cache flags
set( CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags" )
set( CMAKE_C_FLAGS "" CACHE STRING "c flags" )
-# Urho3D: optimise for size
-set( CMAKE_CXX_FLAGS_RELEASE "-Os -DNDEBUG" CACHE STRING "c++ Release flags" )
-set( CMAKE_C_FLAGS_RELEASE "-Os -DNDEBUG" CACHE STRING "c Release flags" )
+set( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "c++ Release flags" )
+set( CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "c Release flags" )
set( CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DDEBUG -D_DEBUG" CACHE STRING "c++ Debug flags" )
set( CMAKE_C_FLAGS_DEBUG "-O0 -g -DDEBUG -D_DEBUG" CACHE STRING "c Debug flags" )
set( CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags" )
@@ -1534,8 +1524,7 @@ if(NOT _CMAKE_IN_TRY_COMPILE)
else()
set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin" CACHE PATH "Output directory for applications" )
endif()
- # Urho3D: All libraries are first generated in CMake default binary directory and only the main target library is later copied to below output path by Urho3D own build script
- set( ANDROID_LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}" CACHE PATH "path for android libs" FORCE )
+ set( LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}" CACHE PATH "path for android libs" )
endif()
# copy shaed stl library to build directory
diff --git a/cmake/macros/apk.cmake b/cmake/macros/apk.cmake
new file mode 100644
index 0000000000..66ceaf51fd
--- /dev/null
+++ b/cmake/macros/apk.cmake
@@ -0,0 +1,146 @@
+#*********************************************************#
+#* File: Apk.cmake *
+#* Android apk tools
+#*
+#* Copyright (C) 2002-2013 The PixelLight Team (http://www.pixellight.org/)
+#*
+#* This file is part of PixelLight.
+#*
+#* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+#* and associated documentation files (the "Software"), to deal in the Software without
+#* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+#* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+#* Software is furnished to do so, subject to the following conditions:
+#*
+#* The above copyright notice and this permission notice shall be included in all copies or
+#* substantial portions of the Software.
+#*
+#* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+#* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+#* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+#* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+#* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#*********************************************************#
+
+
+##################################################
+## Options
+##################################################
+set(ANDROID_APK_API_LEVEL "19" CACHE STRING "Android APK API level")
+set(ANDROID_APK_INSTALL "0" CACHE BOOL "Install created apk file on the device automatically?")
+set(ANDROID_APK_RUN "0" CACHE BOOL "Run created apk file on the device automatically? (installs it automatically as well, \"ANDROID_APK_INSTALL\"-option is ignored)")
+set(ANDROID_APK_SIGNER_KEYSTORE "~/my-release-key.keystore" CACHE STRING "Keystore for signing the apk file (only required for release apk)")
+set(ANDROID_APK_SIGNER_ALIAS "myalias" CACHE STRING "Alias for signing the apk file (only required for release apk)")
+
+##################################################
+## Variables
+##################################################
+set(ANDROID_THIS_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) # Directory this CMake file is in
+
+##################################################
+## MACRO: android_create_apk
+##
+## Create/copy Android apk related files
+##
+## @param name
+## Name of the project (e.g. "MyProject"), this will also be the name of the created apk file
+## @param apk_pacakge_name
+## Pacakge name of the application
+## @param apk_directory
+## Directory were to construct the apk file in (e.g. "${CMAKE_BINARY_DIR}/apk")
+## @param libs_directory
+## Directory where the built android libraries will be POST_BUILD, e.g ${CMAKE_SOURCE_DIR}/libs
+## @param assets_directory
+## Directory where the assets for the application are locatated
+##
+## @remarks
+## Requires the following tools to be found automatically
+## - "android" (part of the Android SDK)
+## - "adb" (part of the Android SDK)
+## - "ant" (type e.g. "sudo apt-get install ant" on your Linux system to install Ant)
+## - "jarsigner" (part of the JDK)
+## - "zipalign" (part of the Android SDK)
+##################################################
+macro(android_create_apk name apk_package_name apk_directory libs_directory android_directory assets_directory)
+ set(ANDROID_NAME ${name})
+ set(ANDROID_APK_PACKAGE ${apk_package_name})
+
+ # Create the directory for the libraries
+ add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E remove_directory "${apk_directory}/libs")
+ add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${apk_directory}/libs")
+ add_custom_command(TARGET ${ANDROID_NAME} POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_directory
+ "${libs_directory}" "${apk_directory}/libs/")
+
+ # Create "build.xml", "default.properties", "local.properties" and "proguard.cfg" files
+ if(CMAKE_BUILD_TYPE MATCHES Release)
+ set(ANDROID_APK_DEBUGGABLE "false")
+ else()
+ set(ANDROID_APK_DEBUGGABLE "true")
+ endif()
+
+ add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${apk_directory}/res")
+ add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_directory
+ "${android_directory}/res" "${apk_directory}/res/")
+
+ configure_file("${android_directory}/AndroidManifest.xml" "${apk_directory}/AndroidManifest.xml")
+
+ add_custom_command(TARGET ${ANDROID_NAME}
+ COMMAND android update project -t android-${ANDROID_APK_API_LEVEL} --name ${ANDROID_NAME} --path "${apk_directory}")
+
+ # Copy assets
+ add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E remove_directory "${apk_directory}/assets")
+ add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${apk_directory}/assets/")
+ add_custom_command(TARGET ${ANDROID_NAME} POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_directory
+ "${CMAKE_SOURCE_DIR}/assets" "${apk_directory}/assets/")
+
+ # Build the apk file
+ if(CMAKE_BUILD_TYPE MATCHES Release)
+ # Let Ant create the unsigned apk file
+ add_custom_command(TARGET ${ANDROID_NAME}
+ COMMAND ant release
+ WORKING_DIRECTORY "${apk_directory}")
+
+ # Sign the apk file
+ add_custom_command(TARGET ${ANDROID_NAME}
+ COMMAND jarsigner -verbose -keystore ${ANDROID_APK_SIGNER_KEYSTORE} bin/${ANDROID_NAME}-unsigned.apk ${ANDROID_APK_SIGNER_ALIAS}
+ WORKING_DIRECTORY "${apk_directory}")
+
+ # Align the apk file
+ add_custom_command(TARGET ${ANDROID_NAME}
+ COMMAND zipalign -v -f 4 bin/${ANDROID_NAME}-unsigned.apk bin/${ANDROID_NAME}.apk
+ WORKING_DIRECTORY "${apk_directory}")
+
+ # Install current version on the device/emulator
+ if(ANDROID_APK_INSTALL OR ANDROID_APK_RUN)
+ add_custom_command(TARGET ${ANDROID_NAME}
+ COMMAND adb install -r bin/${ANDROID_NAME}.apk
+ WORKING_DIRECTORY "${apk_directory}")
+ endif()
+ else()
+ # Let Ant create the unsigned apk file
+ add_custom_command(TARGET ${ANDROID_NAME}
+ COMMAND ant debug
+ WORKING_DIRECTORY "${apk_directory}")
+
+ # Install current version on the device/emulator
+ if(ANDROID_APK_INSTALL OR ANDROID_APK_RUN)
+ add_custom_command(TARGET ${ANDROID_NAME}
+ COMMAND adb install -r bin/${ANDROID_NAME}-debug.apk
+ WORKING_DIRECTORY "${apk_directory}")
+ endif()
+ endif()
+
+ # Start the application
+ if(ANDROID_APK_RUN)
+ add_custom_command(TARGET ${ANDROID_NAME}
+ COMMAND adb shell am start -n ${ANDROID_APK_PACKAGE}/android.app.NativeActivity)
+ endif()
+endmacro(android_create_apk name apk_directory libs_directory assets_directory)
\ No newline at end of file
diff --git a/cmake/modules/FindOpenSSL.cmake b/cmake/modules/FindOpenSSL.cmake
index 18633b4301..6fb1c82efb 100644
--- a/cmake/modules/FindOpenSSL.cmake
+++ b/cmake/modules/FindOpenSSL.cmake
@@ -54,7 +54,6 @@ endif ()
find_path(OPENSSL_INCLUDE_DIR NAMES openssl/ssl.h HINTS ${_OPENSSL_ROOT_HINTS_AND_PATHS} ${_OPENSSL_INCLUDEDIR}
PATH_SUFFIXES include
- NO_CMAKE_FIND_ROOT_PATH
)
if (WIN32 AND NOT CYGWIN)
@@ -134,12 +133,10 @@ else()
find_library(OPENSSL_SSL_LIBRARY NAMES ssl ssleay32 ssleay32MD HINTS ${_OPENSSL_ROOT_HINTS_AND_PATHS} ${_OPENSSL_LIBDIR}
PATH_SUFFIXES lib
- NO_CMAKE_FIND_ROOT_PATH
)
find_library(OPENSSL_CRYPTO_LIBRARY NAMES crypto HINTS ${_OPENSSL_ROOT_HINTS_AND_PATHS} ${_OPENSSL_LIBDIR}
PATH_SUFFIXES lib
- NO_CMAKE_FIND_ROOT_PATH
)
mark_as_advanced(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY)
diff --git a/cmake/modules/FindTBB.cmake b/cmake/modules/FindTBB.cmake
index e5ca100391..b1b5a74392 100644
--- a/cmake/modules/FindTBB.cmake
+++ b/cmake/modules/FindTBB.cmake
@@ -115,6 +115,14 @@ if (UNIX)
endif (APPLE)
endif (UNIX)
+if (ANDROID)
+ set(_TBB_DEFAULT_INSTALL_DIR "/tbb")
+ set(_TBB_LIB_NAME "tbb")
+ set(_TBB_LIB_MALLOC_NAME "${_TBB_LIB_NAME}malloc")
+ set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug")
+ set(_TBB_LIB_MALLOC_DEBUG_NAME "${_TBB_LIB_MALLOC_NAME}_debug")
+endif ()
+
if (CMAKE_SYSTEM MATCHES "SunOS.*")
# SUN
# not yet supported
@@ -189,7 +197,6 @@ find_path(TBB_INCLUDE_DIR
)
mark_as_advanced(TBB_INCLUDE_DIR)
-
#-- Look for libraries
# GvdB: $ENV{TBB_ARCH_PLATFORM} is set by the build script tbbvars[.bat|.sh|.csh]
if (NOT $ENV{TBB_ARCH_PLATFORM} STREQUAL "")
diff --git a/gvr-interface/CMakeLists.txt b/gvr-interface/CMakeLists.txt
new file mode 100644
index 0000000000..ebf46f4234
--- /dev/null
+++ b/gvr-interface/CMakeLists.txt
@@ -0,0 +1,19 @@
+project(gvr-builder)
+
+include_directories(${ANDROID_NDK}/sources/android/native_app_glue)
+
+set(GVR_SRC
+ ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c
+ src/main.cpp
+)
+
+add_library(gvr-interface SHARED ${GVR_SRC})
+
+target_link_libraries(gvr-interface log android)
+set_target_properties(gvr-interface PROPERTIES COMPILE_DEFINITIONS "ANDROID")
+android_create_apk(gvr-interface "io.highfidelity.interface"
+ "${CMAKE_BINARY_DIR}/apk"
+ "${CMAKE_BINARY_DIR}/libs"
+ "${CMAKE_CURRENT_SOURCE_DIR}/android"
+ "${CMAKE_CURRENT_SOURCE_DIR}/assets"
+)
\ No newline at end of file
diff --git a/gvr-interface/android/AndroidManifest.xml b/gvr-interface/android/AndroidManifest.xml
new file mode 100644
index 0000000000..229d2ea0c2
--- /dev/null
+++ b/gvr-interface/android/AndroidManifest.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/gvr-interface/android/res/values/strings.xml b/gvr-interface/android/res/values/strings.xml
new file mode 100644
index 0000000000..401a5a122b
--- /dev/null
+++ b/gvr-interface/android/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Interface
+
\ No newline at end of file
diff --git a/gvr-interface/src/main.cpp b/gvr-interface/src/main.cpp
new file mode 100644
index 0000000000..2d3db0d843
--- /dev/null
+++ b/gvr-interface/src/main.cpp
@@ -0,0 +1,23 @@
+//
+// main.cpp
+// gvr-interface/src
+//
+// Created by Stephen Birarda on 11/17/14.
+// Copyright 2014 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
+//
+
+#include
+#include
+
+#define APPNAME "Interface"
+
+void android_main(struct android_app* state) {
+ app_dummy();
+
+ __android_log_print(ANDROID_LOG_INFO, APPNAME, "GearVR Interface, reporting for duty");
+
+ ANativeActivity_finish(state->activity);
+}
\ No newline at end of file