diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e38c4ba..a49ed21b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,7 +62,6 @@ if(EMSCRIPTEN) elseif(MSVC) add_compile_options(/MP) elseif(ANDROID) - set(ANDROID_FLAVOR "oculus" CACHE STRING "Which Android flavor to build (oculus, pico or generic)") find_package(Java REQUIRED) set(LOVR_USE_DESKTOP OFF) if(LOVR_BUILD_EXE) @@ -207,34 +206,17 @@ endif() # OpenXR if(LOVR_ENABLE_HEADSET AND LOVR_USE_OPENXR) include_directories(deps/openxr/include) - if(ANDROID) - add_library(openxr_loader SHARED IMPORTED) - set(LOVR_OPENXR openxr_loader) - if(ANDROID_FLAVOR STREQUAL "oculus") - set(LOVR_OPENXR_OCULUS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/deps/oculus-openxr" CACHE STRING "The path to the Oculus OpenXR loader") - set_target_properties(openxr_loader PROPERTIES IMPORTED_LOCATION "${LOVR_OPENXR_OCULUS_PATH}/Libs/Android/${ANDROID_ABI}/Release/libopenxr_loader.so") - elseif(ANDROID_FLAVOR STREQUAL "pico") - set(LOVR_OPENXR_PICO_PATH "${CMAKE_CURRENT_SOURCE_DIR}/deps/pico-openxr" CACHE STRING "The path to the Pico OpenXR loader") - set_target_properties(openxr_loader PROPERTIES IMPORTED_LOCATION "${LOVR_OPENXR_PICO_PATH}/Libs/Android/${ANDROID_ABI}/libopenxr_loader.so") - elseif(ANDROID_FLAVOR STREQUAL "generic") - set(LOVR_OPENXR_GENERIC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/deps/generic-openxr" CACHE STRING "The path to the Generic OpenXR loader") - set_target_properties(openxr_loader PROPERTIES IMPORTED_LOCATION "${LOVR_OPENXR_GENERIC_PATH}/Libs/Android/${ANDROID_ABI}/libopenxr_loader.so") - else() - message(FATAL_ERROR "Unsupported Android flavor (expected: oculus, pico or generic)") + if(LOVR_SYSTEM_OPENXR AND NOT ANDROID) + pkg_search_module(OPENXR openxr) + if(NOT OPENXR_FOUND) + message(FATAL_ERROR "OpenXR not found.") endif() + include_directories(${OPENXR_INCLUDE_DIRS}) + set(LOVR_OPENXR ${OPENXR_LIBRARIES}) else() - if(LOVR_SYSTEM_OPENXR) - pkg_search_module(OPENXR openxr) - if(NOT OPENXR_FOUND) - message(FATAL_ERROR "OpenXR not found.") - endif() - include_directories(${OPENXR_INCLUDE_DIRS}) - set(LOVR_OPENXR ${OPENXR_LIBRARIES}) - else() - set(DYNAMIC_LOADER ON CACHE BOOL "") - add_subdirectory(deps/openxr openxr) - set(LOVR_OPENXR openxr_loader) - endif() + set(DYNAMIC_LOADER ON CACHE BOOL "") + add_subdirectory(deps/openxr openxr) + set(LOVR_OPENXR openxr_loader) endif() endif() @@ -759,7 +741,7 @@ elseif(ANDROID) if(LOVR_BUILD_EXE) set(ANDROID_JAR "${ANDROID_SDK}/platforms/${ANDROID_PLATFORM}/android.jar") set(ANDROID_TOOLS "${ANDROID_SDK}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}") - set(ANDROID_MANIFEST "${CMAKE_CURRENT_SOURCE_DIR}/etc/AndroidManifest_${ANDROID_FLAVOR}.xml" CACHE STRING "The AndroidManifest.xml file to use") + set(ANDROID_MANIFEST "${CMAKE_CURRENT_SOURCE_DIR}/etc/AndroidManifest.xml" CACHE STRING "The AndroidManifest.xml file to use") # If assets are included in the apk then add '-A assets' to aapt, otherwise don't add any flags if(ANDROID_ASSETS) @@ -771,8 +753,21 @@ elseif(ANDROID) endif() if(LOVR_USE_OPENXR) - get_target_property(OPENXR_LIB ${LOVR_OPENXR} IMPORTED_LOCATION) - file(COPY ${OPENXR_LIB} DESTINATION raw/lib/${ANDROID_ABI}) + add_custom_command(TARGET move_files POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + $ + raw/lib/${ANDROID_ABI}/libopenxr_loader_generic.so + ) + set (PICO_LOADER "${CMAKE_CURRENT_SOURCE_DIR}/deps/pico-openxr/Libs/Android/${ANDROID_ABI}/libopenxr_loader.so") + if (EXISTS ${PICO_LOADER}) + configure_file(${PICO_LOADER} "raw/lib/${ANDROID_ABI}/libopenxr_loader_pico.so" COPYONLY) + endif() + set (OCULUS_LOADER "${CMAKE_CURRENT_SOURCE_DIR}/deps/oculus-openxr/Libs/Android/${ANDROID_ABI}/Release/libopenxr_loader.so") + if (EXISTS ${OCULUS_LOADER}) + configure_file(${OCULUS_LOADER} "raw/lib/${ANDROID_ABI}/libopenxr_loader_oculus.so" COPYONLY) + endif() + + configure_file("${ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ABI}/libc++_shared.so" "raw/lib/${ANDROID_ABI}/libc++_shared.so" COPYONLY) endif() if(LOVR_USE_OCULUS_AUDIO) diff --git a/etc/Activity.java b/etc/Activity.java index bee76325..946ca9fd 100644 --- a/etc/Activity.java +++ b/etc/Activity.java @@ -3,10 +3,24 @@ package org.lovr.app; import android.Manifest; import android.app.NativeActivity; import android.content.pm.PackageManager; +import android.util.Log; +import android.os.Build; public class Activity extends NativeActivity { static { - System.loadLibrary("openxr_loader"); + if (Build.MANUFACTURER.contains("Oculus")) { + Log.d("LOVR", "Using Oculus OpenXR Loader"); + System.loadLibrary("openxr_loader_oculus"); + } + else if (Build.MANUFACTURER.contains("Pico")) + { + Log.d("LOVR", "Using Pico OpenXR Loader"); + System.loadLibrary("openxr_loader_pico"); + } + else { + Log.d("LOVR", "Using Generic OpenXR Loader"); + System.loadLibrary("openxr_loader_generic"); + } System.loadLibrary("lovr"); } diff --git a/etc/AndroidManifest_oculus.xml b/etc/AndroidManifest.xml similarity index 75% rename from etc/AndroidManifest_oculus.xml rename to etc/AndroidManifest.xml index 45c72670..69719600 100644 --- a/etc/AndroidManifest_oculus.xml +++ b/etc/AndroidManifest.xml @@ -1,9 +1,9 @@ - + @@ -14,16 +14,26 @@ + + + + + + + + + - + + diff --git a/etc/AndroidManifest_generic.xml b/etc/AndroidManifest_generic.xml deleted file mode 100644 index 6b75b0f1..00000000 --- a/etc/AndroidManifest_generic.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/etc/AndroidManifest_pico.xml b/etc/AndroidManifest_pico.xml deleted file mode 100644 index e7b82156..00000000 --- a/etc/AndroidManifest_pico.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - -