From 4679f7f858b17cd1fadb26b2d5d2bdc2622225e8 Mon Sep 17 00:00:00 2001
From: Stephen Birarda <commit@birarda.com>
Date: Mon, 26 Jan 2015 13:26:08 -0800
Subject: [PATCH] cleanup linking of oculus mobile sdk

---
 cmake/android/QtCreateAPK.cmake    |  4 ++
 cmake/modules/FindLibOVR.cmake     | 83 +++++++++++++++++++-----------
 gvr-interface/CMakeLists.txt       | 18 +++----
 gvr-interface/src/GVRInterface.cpp |  4 ++
 4 files changed, 68 insertions(+), 41 deletions(-)

diff --git a/cmake/android/QtCreateAPK.cmake b/cmake/android/QtCreateAPK.cmake
index 2a79d34857..8039f5af64 100644
--- a/cmake/android/QtCreateAPK.cmake
+++ b/cmake/android/QtCreateAPK.cmake
@@ -66,6 +66,10 @@ macro(qt_create_apk)
   # 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})
diff --git a/cmake/modules/FindLibOVR.cmake b/cmake/modules/FindLibOVR.cmake
index 6ffb3ed309..9833e06fff 100644
--- a/cmake/modules/FindLibOVR.cmake
+++ b/cmake/modules/FindLibOVR.cmake
@@ -21,42 +21,59 @@
 include("${MACRO_DIR}/HifiLibrarySearchHints.cmake")
 hifi_library_search_hints("libovr")
 
-find_path(LIBOVR_INCLUDE_DIRS OVR.h PATH_SUFFIXES Include HINTS ${LIBOVR_SEARCH_DIRS})
-find_path(LIBOVR_SRC_DIR Util_Render_Stereo.h PATH_SUFFIXES Src/Util HINTS ${LIBOVR_SEARCH_DIRS})
-
 include(SelectLibraryConfigurations)
 
-if (APPLE)
-  find_library(LIBOVR_LIBRARY_DEBUG NAMES ovr PATH_SUFFIXES Lib/Mac/Debug HINTS ${LIBOVR_SEARCH_DIRS})
-  find_library(LIBOVR_LIBRARY_RELEASE NAMES ovr PATH_SUFFIXES Lib/Mac/Release HINTS ${LIBOVR_SEARCH_DIRS})
-  find_library(ApplicationServices ApplicationServices)
-  find_library(IOKit IOKit)
-elseif (UNIX)
-  find_library(UDEV_LIBRARY_RELEASE udev /usr/lib/x86_64-linux-gnu/)
-  find_library(XINERAMA_LIBRARY_RELEASE Xinerama /usr/lib/x86_64-linux-gnu/)
+if (NOT ANDROID)
+
+  find_path(LIBOVR_INCLUDE_DIRS OVR.h PATH_SUFFIXES Include HINTS ${LIBOVR_SEARCH_DIRS})
+  find_path(LIBOVR_SRC_DIR Util_Render_Stereo.h PATH_SUFFIXES Src/Util HINTS ${LIBOVR_SEARCH_DIRS})
   
-  if (CMAKE_CL_64)
-    set(LINUX_ARCH_DIR "i386")
-  else()
-    set(LINUX_ARCH_DIR "x86_64")
-  endif()
+  if (APPLE)
+    find_library(LIBOVR_LIBRARY_DEBUG NAMES ovr PATH_SUFFIXES Lib/Mac/Debug HINTS ${LIBOVR_SEARCH_DIRS})
+    find_library(LIBOVR_LIBRARY_RELEASE NAMES ovr PATH_SUFFIXES Lib/Mac/Release HINTS ${LIBOVR_SEARCH_DIRS})
+    find_library(ApplicationServices ApplicationServices)
+    find_library(IOKit IOKit)
+  elseif (UNIX)
+    find_library(UDEV_LIBRARY_RELEASE udev /usr/lib/x86_64-linux-gnu/)
+    find_library(XINERAMA_LIBRARY_RELEASE Xinerama /usr/lib/x86_64-linux-gnu/)
   
-  find_library(LIBOVR_LIBRARY_DEBUG NAMES ovr PATH_SUFFIXES Lib/Linux/Debug/${LINUX_ARCH_DIR} HINTS ${LIBOVR_SEARCH_DIRS})
-  find_library(LIBOVR_LIBRARY_RELEASE NAMES ovr PATH_SUFFIXES Lib/Linux/Release/${LINUX_ARCH_DIR} HINTS ${LIBOVR_SEARCH_DIRS})
+    if (CMAKE_CL_64)
+      set(LINUX_ARCH_DIR "i386")
+    else()
+      set(LINUX_ARCH_DIR "x86_64")
+    endif()
   
-  select_library_configurations(UDEV)
-  select_library_configurations(XINERAMA)
+    find_library(LIBOVR_LIBRARY_DEBUG NAMES ovr PATH_SUFFIXES Lib/Linux/Debug/${LINUX_ARCH_DIR} HINTS ${LIBOVR_SEARCH_DIRS})
+    find_library(LIBOVR_LIBRARY_RELEASE NAMES ovr PATH_SUFFIXES Lib/Linux/Release/${LINUX_ARCH_DIR} HINTS ${LIBOVR_SEARCH_DIRS})
   
-elseif (WIN32)   
-  if (MSVC10)
-    find_library(LIBOVR_LIBRARY_DEBUG NAMES libovrd PATH_SUFFIXES Lib/Win32/VS2010 HINTS ${LIBOVR_SEARCH_DIRS})
-    find_library(LIBOVR_LIBRARY_RELEASE NAMES libovr PATH_SUFFIXES Lib/Win32/VS2010 HINTS ${LIBOVR_SEARCH_DIRS})
-  elseif (MSVC12)
-    find_library(LIBOVR_LIBRARY_DEBUG NAMES libovrd PATH_SUFFIXES Lib/Win32/VS2013 HINTS ${LIBOVR_SEARCH_DIRS})
-    find_library(LIBOVR_LIBRARY_RELEASE NAMES libovr PATH_SUFFIXES Lib/Win32/VS2013 HINTS ${LIBOVR_SEARCH_DIRS})
+    select_library_configurations(UDEV)
+    select_library_configurations(XINERAMA)
+  
+  elseif (WIN32)   
+    if (MSVC10)
+      find_library(LIBOVR_LIBRARY_DEBUG NAMES libovrd PATH_SUFFIXES Lib/Win32/VS2010 HINTS ${LIBOVR_SEARCH_DIRS})
+      find_library(LIBOVR_LIBRARY_RELEASE NAMES libovr PATH_SUFFIXES Lib/Win32/VS2010 HINTS ${LIBOVR_SEARCH_DIRS})
+    elseif (MSVC12)
+      find_library(LIBOVR_LIBRARY_DEBUG NAMES libovrd PATH_SUFFIXES Lib/Win32/VS2013 HINTS ${LIBOVR_SEARCH_DIRS})
+      find_library(LIBOVR_LIBRARY_RELEASE NAMES libovr PATH_SUFFIXES Lib/Win32/VS2013 HINTS ${LIBOVR_SEARCH_DIRS})
+    endif ()
+    find_package(ATL)
   endif ()
-  find_package(ATL)
-endif ()
+  
+else (NOT ANDROID)  
+  set(_VRLIB_JNI_DIR "VRLib/jni")
+  set(_VRLIB_LIBS_DIR "VRLib/libs/armeabi-v7a")
+  
+  find_path(LIBOVR_VRLIB_DIR VRLib.vcxproj PATH_SUFFIXES VRLib HINTS ${LIBOVR_SEARCH_DIRS})
+  
+  find_path(LIBOVR_INCLUDE_DIRS OVR.h PATH_SUFFIXES ${_VRLIB_JNI_DIR}/LibOVR/Include HINTS ${LIBOVR_SEARCH_DIRS})
+  find_path(LIBOVR_SRC_DIR OVR_CAPI.h PATH_SUFFIXES ${_VRLIB_JNI_DIR}/LibOVR/Src HINTS ${LIBOVR_SEARCH_DIRS})
+  
+  find_path(MINIZIP_DIR minizip.c PATH_SUFFIXES ${_VRLIB_JNI_DIR}/3rdParty/minizip HINTS ${LIBOVR_SEARCH_DIRS})
+  find_path(JNI_DIR VrCommon.h PATH_SUFFIXES ${_VRLIB_JNI_DIR} HINTS ${LIBOVR_SEARCH_DIRS})
+  
+  find_library(LIBOVR_LIBRARY_RELEASE NAMES OculusPlugin PATH_SUFFIXES ${_VRLIB_LIBS_DIR} HINTS ${LIBOVR_SEARCH_DIRS})
+endif (NOT ANDROID)
 
 select_library_configurations(LIBOVR)
 set(LIBOVR_LIBRARIES ${LIBOVR_LIBRARY})
@@ -66,6 +83,9 @@ list(APPEND LIBOVR_ARGS_LIST LIBOVR_INCLUDE_DIRS LIBOVR_SRC_DIR LIBOVR_LIBRARY)
 if (APPLE)
   list(APPEND LIBOVR_LIBRARIES ${IOKit} ${ApplicationServices})
   list(APPEND LIBOVR_ARGS_LIST IOKit ApplicationServices)
+elseif (ANDROID)
+  # list(APPEND LIBOVR_LIBRARIES "GLESv3" "-lEGL" "-lOpenMAXAL" "-llog" "-landroid" "-lz" "-lOpenSLES")
+  list(APPEND LIBOVR_ARGS_LIST LIBOVR_VRLIB_DIR MINIZIP_DIR JNI_DIR)
 elseif (UNIX) 
   list(APPEND LIBOVR_LIBRARIES "${UDEV_LIBRARY}" "${XINERAMA_LIBRARY}")
   list(APPEND LIBOVR_ARGS_LIST UDEV_LIBRARY XINERAMA_LIBRARY)
@@ -75,7 +95,10 @@ elseif (WIN32)
 endif ()
 
 include(FindPackageHandleStandardArgs)
-
 find_package_handle_standard_args(LibOVR DEFAULT_MSG ${LIBOVR_ARGS_LIST})
 
+if (ANDROID)
+  list(APPEND LIBOVR_INCLUDE_DIRS ${LIBOVR_SRC_DIR} ${MINIZIP_DIR} ${JNI_DIR})
+endif ()
+
 mark_as_advanced(LIBOVR_INCLUDE_DIRS LIBOVR_LIBRARIES LIBOVR_SEARCH_DIRS)
diff --git a/gvr-interface/CMakeLists.txt b/gvr-interface/CMakeLists.txt
index 8b11dc16e6..64722f97dc 100644
--- a/gvr-interface/CMakeLists.txt
+++ b/gvr-interface/CMakeLists.txt
@@ -18,18 +18,14 @@ set(ANDROID_APP_DISPLAY_NAME Interface)
 set(ANDROID_API_LEVEL 19)
 set(ANDROID_APK_PACKAGE io.highfidelity.gvrinterface)
 
+find_package(LibOVR REQUIRED)
+target_link_libraries(${TARGET_NAME} ${LIBOVR_LIBRARIES})
+include_directories(SYSTEM ${LIBOVR_INCLUDE_DIRS})
+
 # we need VRLib, so add a project.properties to our apk build folder that says that
-find_path(_OCULUS_VRLIB_DIR NAME VRLib.vcxproj HINTS "/ovr_mobile_sdk/VRLib/")
-if (NOT _OCULUS_VRLIB_DIR)
-  message(FATAL_ERROR "Could not find Oculus Mobile SDK VRLib.")
-endif()
-
-file(RELATIVE_PATH RELATIVE_VRLIB_PATH ${ANDROID_APK_OUTPUT_DIR} "${_OCULUS_VRLIB_DIR}")
-
-include_directories(SYSTEM "${_OCULUS_VRLIB_DIR}/jni")
-include_directories(SYSTEM "${_OCULUS_VRLIB_DIR}/jni/LibOVR/Include")
-include_directories(SYSTEM "${_OCULUS_VRLIB_DIR}/jni/LibOVR/Src")
-
+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}")
 
+list(APPEND IGNORE_COPY_LIBS ${LIBOVR_LIBRARIES})
+
 qt_create_apk()
\ No newline at end of file
diff --git a/gvr-interface/src/GVRInterface.cpp b/gvr-interface/src/GVRInterface.cpp
index aeddea0356..2ad72ff384 100644
--- a/gvr-interface/src/GVRInterface.cpp
+++ b/gvr-interface/src/GVRInterface.cpp
@@ -77,3 +77,7 @@ void GVRInterface::resumeOVR() {
     
     ovr_EnterVrMode(vrModeParms, &hmdInfo);
 }
+
+void GVRInterface::pauseOVR() {
+    // ovr_LeaveVrMode();
+}