2018-03-17 21:44:13 +00:00
cmake_minimum_required ( VERSION 3.1.0 )
2019-04-20 23:17:49 +00:00
cmake_policy ( SET CMP0063 NEW )
2017-05-29 17:31:46 +00:00
project ( lovr )
2016-07-15 08:16:08 +00:00
2018-09-19 07:03:04 +00:00
# Options
option ( LOVR_ENABLE_AUDIO "Enable the audio module" ON )
option ( LOVR_ENABLE_DATA "Enable the data module" ON )
option ( LOVR_ENABLE_EVENT "Enable the event module" ON )
option ( LOVR_ENABLE_FILESYSTEM "Enable the filesystem module" ON )
option ( LOVR_ENABLE_GRAPHICS "Enable the graphics module" ON )
option ( LOVR_ENABLE_HEADSET "Enable the headset module" ON )
option ( LOVR_ENABLE_MATH "Enable the math module" ON )
option ( LOVR_ENABLE_PHYSICS "Enable the physics module" ON )
option ( LOVR_ENABLE_THREAD "Enable the thread module" ON )
option ( LOVR_ENABLE_TIMER "Enable the timer module" ON )
option ( LOVR_USE_LUAJIT "Use LuaJIT instead of Lua" ON )
2018-10-28 19:31:27 +00:00
option ( LOVR_USE_OPENVR "Enable the OpenVR backend for the headset module" ON )
2019-10-02 23:29:09 +00:00
option ( LOVR_USE_OPENXR "Enable the OpenXR backend for the headset module" OFF )
2020-05-06 21:07:59 +00:00
option ( LOVR_USE_WEBXR "Enable the WebXR backend for the headset module" OFF )
2018-09-19 07:03:04 +00:00
option ( LOVR_USE_OCULUS "Enable the LibOVR backend for the headset module (be sure to also set LOVR_OCULUS_PATH to point to the Oculus SDK)" OFF )
2020-06-28 03:20:40 +00:00
option ( LOVR_USE_VRAPI "Enable the VrApi backend for the headset module" OFF )
2020-07-27 19:58:52 +00:00
option ( LOVR_USE_PICO "Enable the Pico backend for the headset module" OFF )
2019-03-07 07:02:03 +00:00
option ( LOVR_USE_DESKTOP_HEADSET "Enable the keyboard/mouse backend for the headset module" ON )
2020-12-19 22:17:16 +00:00
option ( LOVR_USE_OCULUS_AUDIO "Enable the Oculus Audio spatializer (be sure to also set LOVR_OCULUS_AUDIO_PATH)" OFF )
2020-10-24 18:29:25 +00:00
option ( LOVR_USE_LINUX_EGL "Use the EGL graphics extension on Linux" OFF )
2018-09-19 07:03:04 +00:00
option ( LOVR_SYSTEM_GLFW "Use the system-provided glfw" OFF )
option ( LOVR_SYSTEM_LUA "Use the system-provided Lua" OFF )
option ( LOVR_SYSTEM_ODE "Use the system-provided ODE" OFF )
2020-10-24 22:16:57 +00:00
option ( LOVR_SYSTEM_OPENXR "Use the system-provided OpenXR" OFF )
2018-09-19 07:03:04 +00:00
2020-06-28 03:20:40 +00:00
option ( LOVR_BUILD_EXE "Build an executable (or an apk on Android)" ON )
2019-12-13 11:35:02 +00:00
option ( LOVR_BUILD_SHARED "Build a shared library (takes precedence over LOVR_BUILD_EXE)" OFF )
option ( LOVR_BUILD_BUNDLE "On macOS, build a .app bundle instead of a raw program" OFF )
2018-10-29 02:55:12 +00:00
2017-06-02 06:48:46 +00:00
# Setup
2017-06-11 06:18:04 +00:00
if ( EMSCRIPTEN )
2017-07-31 10:45:57 +00:00
string ( CONCAT LOVR_EMSCRIPTEN_FLAGS
2019-10-09 20:36:35 +00:00
" - O s "
2018-05-03 02:01:20 +00:00
" - s U S E _ W E B G L 2 = 1 "
" - s F O R C E _ F I L E S Y S T E M = 1 "
2020-09-25 02:03:37 +00:00
" - s \ " E X P O R T E D _ F U N C T I O N S = [ ' _ m a i n ' , ' _ l o v r D e s t r o y ' , ' _ w e b x r _ a t t a c h ' , ' _ w e b x r _ d e t a c h ' , ' _ l o v r C a n v a s C r e a t e F r o m H a n d l e ' , ' _ l o v r C a n v a s D e s t r o y ' , ' _ l o v r G r a p h i c s S e t B a c k b u f f e r ' , ' _ l o v r G r a p h i c s S e t V i e w M a t r i x ' , ' _ l o v r G r a p h i c s S e t P r o j e c t i o n ' ] \ " "
2018-04-29 21:38:08 +00:00
" - s \ " E X T R A _ E X P O R T E D _ R U N T I M E _ M E T H O D S = [ ' g e t V a l u e ' , ' s e t V a l u e ' ] \ " "
2020-05-06 21:07:59 +00:00
" - - j s - l i b r a r y \ " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / r e s o u r c e s / w e b x r . j s \ " "
2018-09-06 23:04:58 +00:00
" - - s h e l l - f i l e \ " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / r e s o u r c e s / l o v r . h t m l \ " "
2017-07-31 10:45:57 +00:00
)
2019-12-05 21:37:27 +00:00
if ( LOVR_ENABLE_THREAD )
set ( LOVR_EMSCRIPTEN_FLAGS "${LOVR_EMSCRIPTEN_FLAGS} -s USE_PTHREADS=1" )
endif ( )
2017-06-18 04:09:03 +00:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LOVR_EMSCRIPTEN_FLAGS}" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LOVR_EMSCRIPTEN_FLAGS}" )
2018-08-31 04:37:45 +00:00
set ( CMAKE_EXECUTABLE_SUFFIX ".html" )
2020-05-06 21:07:59 +00:00
set ( LOVR_USE_WEBXR ON )
2018-09-19 07:03:04 +00:00
set ( LOVR_USE_OPENVR OFF )
2018-10-25 03:40:11 +00:00
elseif ( ANDROID )
2020-06-28 03:20:40 +00:00
find_package ( Java REQUIRED )
2018-10-25 03:40:11 +00:00
set ( LOVR_USE_OPENVR OFF )
2019-03-07 07:02:03 +00:00
set ( LOVR_USE_DESKTOP_HEADSET OFF )
2020-06-28 03:20:40 +00:00
if ( LOVR_BUILD_EXE )
set ( LOVR_BUILD_SHARED ON )
endif ( )
2017-06-11 06:18:04 +00:00
elseif ( UNIX )
2018-09-19 07:03:04 +00:00
find_package ( PkgConfig )
2019-12-04 22:07:35 +00:00
if ( NOT APPLE )
set ( CMAKE_SKIP_RPATH OFF )
endif ( )
2016-10-04 21:47:48 +00:00
endif ( )
2016-07-10 23:14:12 +00:00
# GLFW
2018-10-25 03:40:11 +00:00
if ( NOT ( EMSCRIPTEN OR ANDROID ) )
2018-09-19 07:03:04 +00:00
if ( LOVR_SYSTEM_GLFW )
pkg_search_module ( GLFW REQUIRED glfw3 )
include_directories ( ${ GLFW_INCLUDE_DIRS } )
set ( LOVR_GLFW ${ GLFW_LIBRARIES } )
else ( )
set ( GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" )
set ( GLFW_BUILD_TESTS OFF CACHE BOOL "" )
set ( GLFW_BUILD_DOCS OFF CACHE BOOL "" )
2020-12-25 23:08:51 +00:00
set ( GLFW_INSTALL OFF CACHE BOOL "" )
2019-04-14 01:56:54 +00:00
set ( BUILD_SHARED_LIBS ON CACHE BOOL "" )
2018-09-19 07:03:04 +00:00
add_subdirectory ( deps/glfw glfw )
include_directories ( deps/glfw/include )
set ( LOVR_GLFW glfw ${ GLFW_LIBRARIES } )
endif ( )
unset ( LIB_SUFFIX CACHE )
2016-10-04 21:47:48 +00:00
endif ( )
2016-07-15 08:16:08 +00:00
2017-06-02 06:48:46 +00:00
# Lua
2019-05-21 07:26:04 +00:00
if ( LOVR_USE_LUAJIT AND NOT EMSCRIPTEN )
2017-06-02 06:48:46 +00:00
if ( APPLE )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000" )
endif ( )
2018-09-19 07:03:04 +00:00
if ( LOVR_SYSTEM_LUA )
pkg_search_module ( LUAJIT REQUIRED luajit )
include_directories ( ${ LUAJIT_INCLUDE_DIRS } )
set ( LOVR_LUA ${ LUAJIT_LIBRARIES } )
else ( )
2018-10-20 19:22:24 +00:00
add_subdirectory ( deps/luajit luajit )
2020-12-25 23:17:59 +00:00
set_target_properties ( luajit PROPERTIES EXCLUDE_FROM_ALL 1 )
2018-09-19 07:03:04 +00:00
include_directories ( deps/luajit/src ${ CMAKE_BINARY_DIR } /luajit )
2019-05-21 07:26:04 +00:00
set ( LOVR_LUA libluajit )
2018-09-19 07:03:04 +00:00
endif ( )
else ( )
if ( EMSCRIPTEN )
option ( LUA_USE_RELATIVE_LOADLIB OFF )
option ( LUA_USE_ULONGJMP OFF )
option ( LUA_USE_POPEN OFF )
endif ( )
if ( LOVR_SYSTEM_LUA )
pkg_search_module ( LUA REQUIRED lua )
include_directories ( ${ LUA_INCLUDE_DIRS } )
set ( LOVR_LUA ${ LUA_LIBRARIES } )
2018-10-20 19:22:24 +00:00
else ( )
add_subdirectory ( deps/lua lua )
include_directories ( deps/lua/src ${ CMAKE_BINARY_DIR } /lua )
set ( LOVR_LUA liblua_static )
2020-03-03 06:24:14 +00:00
set_target_properties ( lua luac PROPERTIES EXCLUDE_FROM_ALL 1 )
2018-10-20 19:22:24 +00:00
endif ( )
2016-11-01 00:25:49 +00:00
endif ( )
2017-07-14 15:21:47 +00:00
# MSDF
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_DATA )
add_subdirectory ( deps/msdfgen lib_msdfgen )
include_directories ( deps/msdfgen )
set ( LOVR_MSDF lib_msdfgen )
2020-01-25 06:02:13 +00:00
if ( APPLE )
set_target_properties ( lib_msdfgen PROPERTIES MACOSX_RPATH ON )
endif ( )
2018-09-19 07:03:04 +00:00
endif ( )
2017-07-14 15:21:47 +00:00
2017-06-02 06:48:46 +00:00
# ODE
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_PHYSICS )
if ( LOVR_SYSTEM_ODE )
pkg_search_module ( ODE REQUIRED ode )
pkg_search_module ( CCD REQUIRED ccd )
include_directories ( ${ ODE_INCLUDE_DIRS } ${ CCD_INCLUDE_DIRS } )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lstdc++" )
2018-05-16 02:53:44 +00:00
set ( LOVR_ODE ode ccd )
else ( )
2018-09-19 07:03:04 +00:00
if ( EMSCRIPTEN )
set ( ODE_BUILD_SHARED OFF CACHE BOOL "" )
else ( )
set ( ODE_BUILD_SHARED ON CACHE BOOL "" )
endif ( )
add_subdirectory ( deps/ode ode )
2018-09-20 04:42:20 +00:00
if ( NOT WIN32 )
set_target_properties ( ode PROPERTIES COMPILE_FLAGS "-Wno-unused-volatile-lvalue -Wno-array-bounds -Wno-undefined-var-template" )
endif ( )
2018-09-19 07:03:04 +00:00
include_directories ( deps/ode/include "${CMAKE_CURRENT_BINARY_DIR}/ode/include" )
2018-05-16 02:53:44 +00:00
set ( LOVR_ODE ode )
endif ( )
2016-10-04 21:47:48 +00:00
endif ( )
2017-06-02 06:48:46 +00:00
# OpenGL
2018-10-25 03:40:11 +00:00
if ( NOT ( WIN32 OR EMSCRIPTEN OR ANDROID ) )
2017-06-02 06:48:46 +00:00
find_package ( OpenGL REQUIRED )
include_directories ( ${ OPENGL_INCLUDE_DIRS } )
set ( LOVR_OPENGL ${ OPENGL_LIBRARIES } )
2017-05-27 06:23:41 +00:00
endif ( )
2017-05-29 17:31:46 +00:00
# OpenVR
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_HEADSET AND LOVR_USE_OPENVR )
2017-04-16 23:56:49 +00:00
set ( BUILD_SHARED ON CACHE BOOL "" )
2017-07-29 23:29:37 +00:00
set ( BUILD_UNIVERSAL OFF CACHE BOOL "" )
2017-11-21 06:36:18 +00:00
include_directories ( deps/openvr/headers )
2017-07-29 23:29:37 +00:00
include_directories ( deps/openvr/src )
include_directories ( deps/openvr/src/vrcommon )
2018-08-11 10:57:14 +00:00
if ( WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 8 )
set ( LOVR_OPENVR openvr_api64 )
else ( )
set ( LOVR_OPENVR openvr_api )
endif ( )
add_subdirectory ( deps/openvr )
set_target_properties ( ${ LOVR_OPENVR } PROPERTIES
2017-07-29 23:29:37 +00:00
L I B R A R Y _ O U T P U T _ D I R E C T O R Y " $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / o p e n v r _ a p i "
R U N T I M E _ O U T P U T _ D I R E C T O R Y " $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / o p e n v r _ a p i "
)
2017-04-16 23:56:49 +00:00
endif ( )
2017-03-31 07:06:05 +00:00
2019-10-02 23:29:09 +00:00
# OpenXR
2020-01-01 02:28:56 +00:00
# Currently, to use OpenXR, add the OpenXR SDK to the deps folder:
# git submodule add https://github.com/khronosgroup/openxr-sdk deps/openxr
2020-08-30 01:45:52 +00:00
# On Android, download the Oculus OpenXR loader and place the "OpenXR" folder at "deps/OpenXR-Oculus"
2019-10-02 23:29:09 +00:00
if ( LOVR_ENABLE_HEADSET AND LOVR_USE_OPENXR )
include_directories ( deps/openxr/include )
2020-08-30 01:45:52 +00:00
if ( ANDROID )
set ( LOVR_OPENXR_OCULUS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/deps/OpenXR-Oculus" CACHE STRING "The path to the Oculus OpenXR loader" )
add_library ( openxr_loader SHARED IMPORTED )
include_directories ( "${LOVR_OPENXR_OCULUS_PATH}/Include" )
set_target_properties ( openxr_loader PROPERTIES IMPORTED_LOCATION "${LOVR_OPENXR_OCULUS_PATH}/Libs/Android/${ANDROID_ABI}/Release/libopenxr_loader.so" )
set ( LOVR_OPENXR openxr_loader )
else ( )
2020-10-24 22:16:57 +00:00
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 ( )
add_subdirectory ( deps/openxr openxr )
set ( LOVR_OPENXR openxr_loader )
endif ( )
2020-08-30 01:45:52 +00:00
endif ( )
2019-10-02 23:29:09 +00:00
endif ( )
2019-02-08 20:02:29 +00:00
# Oculus SDK -- expects Oculus SDK 1.26.0 or later
2019-04-09 19:38:55 +00:00
if ( LOVR_ENABLE_HEADSET AND LOVR_USE_OCULUS )
2018-10-24 16:52:25 +00:00
if ( NOT LOVR_OCULUS_PATH )
2019-04-09 19:38:55 +00:00
message ( FATAL_ERROR "LOVR_USE_OCULUS requires the LOVR_OCULUS_PATH to be set to the location of the Oculus Desktop SDK (LibOVR) folder" )
2018-10-24 16:52:25 +00:00
endif ( )
2020-02-17 19:45:03 +00:00
set ( OCULUS_BUILD_TYPE "Release" )
2018-09-11 22:47:03 +00:00
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set ( OCULUS_ARCH "x64" )
else ( )
set ( OCULUS_ARCH "Win32" )
endif ( )
2018-09-09 13:25:02 +00:00
include_directories ( "${LOVR_OCULUS_PATH}/LibOVR/Include" )
2018-09-11 22:47:03 +00:00
link_directories ( "${LOVR_OCULUS_PATH}/LibOVR/Lib/Windows/${OCULUS_ARCH}/${OCULUS_BUILD_TYPE}/VS2017" )
2018-09-09 13:25:02 +00:00
set ( LOVR_OCULUS LibOVR )
endif ( )
2020-06-28 03:20:40 +00:00
# VrApi (Oculus Mobile SDK) -- tested on 1.34.0
if ( LOVR_ENABLE_HEADSET AND LOVR_USE_VRAPI )
2020-07-27 19:16:07 +00:00
set ( LOVR_VRAPI_PATH "${CMAKE_CURRENT_SOURCE_DIR}/deps/VrApi" CACHE STRING "The path to the VrApi folder of the Oculus Mobile SDK" )
add_library ( VrApi SHARED IMPORTED )
2020-08-04 12:59:23 +00:00
include_directories ( "${LOVR_VRAPI_PATH}/Include" )
2020-07-27 19:16:07 +00:00
set_target_properties ( VrApi PROPERTIES IMPORTED_LOCATION "${LOVR_VRAPI_PATH}/Libs/Android/${ANDROID_ABI}/Release/libvrapi.so" )
set ( LOVR_VRAPI VrApi )
2020-06-28 03:20:40 +00:00
endif ( )
2020-07-27 19:58:52 +00:00
# Pico Native SDK (1.3.3)
if ( LOVR_ENABLE_HEADSET AND LOVR_USE_PICO )
set ( LOVR_PICO_PATH "${CMAKE_CURRENT_SOURCE_DIR}/deps/pico" CACHE STRING "The path to the Pico SDK folder (unzipped aar)" )
add_library ( Pvr_NativeSDK SHARED IMPORTED )
set_target_properties ( Pvr_NativeSDK PROPERTIES IMPORTED_LOCATION "${LOVR_PICO_PATH}/jni/${ANDROID_ABI}/libPvr_NativeSDK.so" )
set ( LOVR_PICO Pvr_NativeSDK )
endif ( )
2018-04-15 04:36:24 +00:00
# pthreads
2020-12-25 23:43:25 +00:00
if ( LOVR_ENABLE_THREAD AND NOT ( WIN32 OR EMSCRIPTEN ) )
set ( THREADS_PREFER_PTHREAD_FLAG ON )
find_package ( Threads REQUIRED )
set ( LOVR_PTHREADS Threads::Threads )
2017-04-16 23:56:49 +00:00
endif ( )
2017-03-31 07:06:05 +00:00
2017-06-02 06:48:46 +00:00
# LÖVR
2018-09-21 03:34:57 +00:00
2020-12-27 17:55:35 +00:00
# Plugins
set ( LOVR 1 )
2020-12-28 19:36:41 +00:00
link_libraries ( ${ LOVR_LUA } )
2020-12-27 17:55:35 +00:00
file ( GLOB LOVR_PLUGINS plugins/* )
foreach ( plugin ${ LOVR_PLUGINS } )
if ( IS_DIRECTORY ${ plugin } AND EXISTS ${ plugin } /CMakeLists.txt )
add_subdirectory ( ${ plugin } )
get_directory_property ( PLUGIN_TARGETS DIRECTORY ${ plugin } DEFINITION LOVR_PLUGIN_TARGETS )
if ( NOT PLUGIN_TARGETS )
get_directory_property ( PLUGIN_TARGETS DIRECTORY ${ plugin } BUILDSYSTEM_TARGETS )
endif ( )
set_target_properties ( ${ PLUGIN_TARGETS } PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/plugins/lib" )
list ( APPEND ALL_PLUGIN_TARGETS ${ PLUGIN_TARGETS } )
endif ( )
2020-01-10 05:57:13 +00:00
endforeach ( )
2018-10-25 03:40:11 +00:00
set ( LOVR_SRC
2017-06-02 06:48:46 +00:00
s r c / m a i n . c
2019-06-08 10:45:03 +00:00
s r c / c o r e / a r r . c
2019-11-25 01:27:17 +00:00
s r c / c o r e / f s . c
2019-09-07 22:07:07 +00:00
s r c / c o r e / m a p . c
2019-06-02 08:09:22 +00:00
s r c / c o r e / r e f . c
2019-05-20 09:47:33 +00:00
s r c / c o r e / u t f . c
s r c / c o r e / u t i l . c
2019-11-25 01:27:17 +00:00
s r c / c o r e / z i p . c
2019-08-21 22:27:26 +00:00
s r c / a p i / a p i . c
2019-05-18 00:11:22 +00:00
s r c / a p i / l _ l o v r . c
2017-06-02 06:48:46 +00:00
)
2017-05-29 04:53:19 +00:00
2020-07-27 20:56:21 +00:00
if ( LOVR_USE_PICO )
list ( REMOVE_ITEM LOVR_SRC src/main.c )
endif ( )
2019-12-13 11:35:02 +00:00
if ( LOVR_BUILD_SHARED )
2018-10-25 03:40:11 +00:00
add_library ( lovr SHARED ${ LOVR_SRC } )
2019-12-13 11:35:02 +00:00
elseif ( LOVR_BUILD_EXE )
2018-10-25 03:40:11 +00:00
add_executable ( lovr ${ LOVR_SRC } )
2019-12-13 11:35:02 +00:00
else ( )
return ( )
2018-10-25 03:40:11 +00:00
endif ( )
2020-12-25 22:50:08 +00:00
set_target_properties ( lovr PROPERTIES C_VISIBILITY_PRESET hidden )
2018-09-21 03:34:57 +00:00
set_target_properties ( lovr PROPERTIES C_STANDARD 99 )
2019-12-10 21:01:28 +00:00
target_include_directories ( lovr PRIVATE src src/modules )
2018-09-21 03:34:57 +00:00
target_link_libraries ( lovr
$ { L O V R _ G L F W }
$ { L O V R _ L U A }
$ { L O V R _ M S D F }
$ { L O V R _ O D E }
$ { L O V R _ O P E N G L }
$ { L O V R _ O P E N V R }
2019-10-02 23:29:09 +00:00
$ { L O V R _ O P E N X R }
2018-09-21 03:34:57 +00:00
$ { L O V R _ O C U L U S }
2020-06-28 03:20:40 +00:00
$ { L O V R _ V R A P I }
2020-07-27 19:58:52 +00:00
$ { L O V R _ P I C O }
2018-09-21 03:34:57 +00:00
$ { L O V R _ P T H R E A D S }
$ { L O V R _ E M S C R I P T E N _ F L A G S }
)
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_AUDIO )
2018-09-21 03:34:57 +00:00
target_sources ( lovr PRIVATE
2019-05-19 07:38:35 +00:00
s r c / m o d u l e s / a u d i o / a u d i o . c
2021-02-05 05:25:50 +00:00
s r c / m o d u l e s / a u d i o / s p a t i a l i z e r s / s i m p l e _ s p a t i a l i z e r . c
2019-05-18 00:11:22 +00:00
s r c / a p i / l _ a u d i o . c
2020-01-01 03:31:44 +00:00
s r c / a p i / l _ a u d i o _ s o u r c e . c
2020-11-21 03:47:38 +00:00
s r c / l i b / m i n i a u d i o / m i n i a u d i o . c
2018-09-19 07:03:04 +00:00
)
2020-12-19 22:17:16 +00:00
if ( LOVR_USE_OCULUS_AUDIO )
if ( NOT LOVR_OCULUS_AUDIO_PATH )
message ( FATAL_ERROR "LOVR_USE_OCULUS_AUDIO requires the LOVR_OCULUS_AUDIO_PATH to be set to the location of the Oculus Spatializer Native (AudioSDK) folder" )
endif ( )
include_directories ( "${LOVR_OCULUS_AUDIO_PATH}/Include" )
add_library ( OculusAudio SHARED IMPORTED )
if ( ANDROID )
set_target_properties ( OculusAudio PROPERTIES IMPORTED_LOCATION "${LOVR_OCULUS_AUDIO_PATH}/Lib/Android/arm64-v8a/libovraudio64.so" )
elseif ( WIN32 ) # Note: This has *not* been tested.
if ( CMAKE_GENERATOR_PLATFORM STREQUAL "x64" )
set_target_properties ( OculusAudio PROPERTIES IMPORTED_IMPLIB "${LOVR_OCULUS_AUDIO_PATH}/Lib/x64/ovraudio64.lib" )
set_target_properties ( OculusAudio PROPERTIES IMPORTED_LOCATION "${LOVR_OCULUS_AUDIO_PATH}/Lib/x64/ovraudio64.dll" )
else ( ) # ARM and ARM64 are also valid values for CMAKE_GENERATOR_PLATFORM but we will ignore this
set_target_properties ( OculusAudio PROPERTIES IMPORTED_IMPLIB "${LOVR_OCULUS_AUDIO_PATH}/Lib/Win32/ovraudio32.lib" )
set_target_properties ( OculusAudio PROPERTIES IMPORTED_LOCATION "${LOVR_OCULUS_AUDIO_PATH}/Lib/Win32/ovraudio32.dll" )
endif ( )
elseif ( APPLE ) # This *might* be possible-- there is a .framework in "macub/" ("universal binary"?)
message ( FATAL_ERROR "LOVR_USE_OCULUS_AUDIO is not currently supported on Apple platforms" )
else ( ) # Assume Linux. Note: This has *not* been tested. FIXME: When is the .so copied?
set_target_properties ( OculusAudio PROPERTIES IMPORTED_LOCATION "${LOVR_OCULUS_AUDIO_PATH}/Lib/Linux64/libovraudio64.so" )
endif ( )
set ( LOVR_OCULUS_AUDIO OculusAudio )
add_definitions ( -DLOVR_ENABLE_OCULUS_AUDIO )
target_sources ( lovr PRIVATE src/modules/audio/spatializers/oculus_spatializer.c )
target_link_libraries ( lovr ${ LOVR_OCULUS_AUDIO } ) # TODO: Reorder?
endif ( )
2021-02-07 23:45:03 +00:00
else ( )
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_AUDIO )
2017-06-02 06:48:46 +00:00
endif ( )
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_DATA )
2018-09-21 03:34:57 +00:00
target_sources ( lovr PRIVATE
2019-05-19 07:38:35 +00:00
s r c / m o d u l e s / d a t a / b l o b . c
s r c / m o d u l e s / d a t a / m o d e l D a t a . c
s r c / m o d u l e s / d a t a / m o d e l D a t a _ g l t f . c
s r c / m o d u l e s / d a t a / m o d e l D a t a _ o b j . c
s r c / m o d u l e s / d a t a / r a s t e r i z e r . c
s r c / m o d u l e s / d a t a / s o u n d D a t a . c
s r c / m o d u l e s / d a t a / t e x t u r e D a t a . c
2019-05-18 00:11:22 +00:00
s r c / a p i / l _ d a t a . c
2020-01-01 03:31:44 +00:00
s r c / a p i / l _ d a t a _ b l o b . c
s r c / a p i / l _ d a t a _ m o d e l D a t a . c
s r c / a p i / l _ d a t a _ r a s t e r i z e r . c
s r c / a p i / l _ d a t a _ s o u n d D a t a . c
s r c / a p i / l _ d a t a _ t e x t u r e D a t a . c
2021-02-07 17:59:24 +00:00
s r c / l i b / m i n i m p 3 / m i n i m p 3 . c
2018-09-19 07:03:04 +00:00
s r c / l i b / s t b / s t b _ i m a g e . c
s r c / l i b / s t b / s t b _ t r u e t y p e . c
s r c / l i b / s t b / s t b _ v o r b i s . c
2018-09-26 00:10:09 +00:00
s r c / l i b / j s m n / j s m n . c
2018-09-19 07:03:04 +00:00
)
2021-02-07 23:45:03 +00:00
else ( )
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_DATA )
2017-09-10 22:23:33 +00:00
endif ( )
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_EVENT )
2018-09-21 03:34:57 +00:00
target_sources ( lovr PRIVATE
2019-05-19 07:38:35 +00:00
s r c / m o d u l e s / e v e n t / e v e n t . c
2019-05-18 00:11:22 +00:00
s r c / a p i / l _ e v e n t . c
2018-09-19 07:03:04 +00:00
)
2021-02-07 23:45:03 +00:00
else ( )
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_EVENT )
2018-09-19 07:03:04 +00:00
endif ( )
2018-10-20 19:22:24 +00:00
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_FILESYSTEM )
2018-09-21 03:34:57 +00:00
target_sources ( lovr PRIVATE
2019-05-19 07:38:35 +00:00
s r c / m o d u l e s / f i l e s y s t e m / f i l e s y s t e m . c
2019-12-18 01:06:42 +00:00
s r c / m o d u l e s / f i l e s y s t e m / f i l e . c
2019-05-18 00:11:22 +00:00
s r c / a p i / l _ f i l e s y s t e m . c
2018-09-19 07:03:04 +00:00
)
2021-02-07 23:45:03 +00:00
else ( )
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_FILESYSTEM )
2018-09-19 07:03:04 +00:00
endif ( )
if ( LOVR_ENABLE_GRAPHICS )
2018-09-21 03:34:57 +00:00
target_sources ( lovr PRIVATE
2019-05-19 07:38:35 +00:00
s r c / m o d u l e s / g r a p h i c s / f o n t . c
s r c / m o d u l e s / g r a p h i c s / g r a p h i c s . c
s r c / m o d u l e s / g r a p h i c s / m a t e r i a l . c
s r c / m o d u l e s / g r a p h i c s / m o d e l . c
s r c / m o d u l e s / g r a p h i c s / o p e n g l . c
2019-05-18 00:11:22 +00:00
s r c / a p i / l _ g r a p h i c s . c
2020-01-01 03:31:44 +00:00
s r c / a p i / l _ g r a p h i c s _ c a n v a s . c
s r c / a p i / l _ g r a p h i c s _ f o n t . c
s r c / a p i / l _ g r a p h i c s _ m a t e r i a l . c
s r c / a p i / l _ g r a p h i c s _ m e s h . c
s r c / a p i / l _ g r a p h i c s _ m o d e l . c
s r c / a p i / l _ g r a p h i c s _ s h a d e r . c
s r c / a p i / l _ g r a p h i c s _ s h a d e r B l o c k . c
s r c / a p i / l _ g r a p h i c s _ t e x t u r e . c
2018-09-19 07:03:04 +00:00
s r c / r e s o u r c e s / s h a d e r s . c
s r c / l i b / g l a d / g l a d . c
)
2021-02-07 23:48:25 +00:00
else ( )
2021-02-07 23:45:03 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_GRAPHICS )
endif ( )
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_HEADSET )
2018-09-21 03:34:57 +00:00
target_sources ( lovr PRIVATE
2019-05-18 00:11:22 +00:00
s r c / a p i / l _ h e a d s e t . c
2019-05-19 07:38:35 +00:00
s r c / m o d u l e s / h e a d s e t / h e a d s e t . c
2018-09-19 07:03:04 +00:00
)
if ( LOVR_USE_OPENVR )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_USE_OPENVR )
2020-05-24 19:31:14 +00:00
target_sources ( lovr PRIVATE src/modules/headset/headset_openvr.c )
2018-10-21 16:00:18 +00:00
endif ( )
2019-10-02 23:29:09 +00:00
if ( LOVR_USE_OPENXR )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_USE_OPENXR )
2020-05-24 19:31:14 +00:00
target_sources ( lovr PRIVATE src/modules/headset/headset_openxr.c )
2019-10-02 23:29:09 +00:00
endif ( )
2018-09-19 07:03:04 +00:00
if ( LOVR_USE_OCULUS )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_USE_OCULUS )
2020-05-24 19:31:14 +00:00
target_sources ( lovr PRIVATE src/modules/headset/headset_oculus.c )
2018-09-19 07:03:04 +00:00
endif ( )
2020-06-28 03:20:40 +00:00
if ( LOVR_USE_VRAPI )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_USE_VRAPI )
2020-06-28 03:20:40 +00:00
target_sources ( lovr PRIVATE src/modules/headset/headset_vrapi.c )
endif ( )
2020-07-27 19:58:52 +00:00
if ( LOVR_USE_PICO )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_USE_PICO )
2020-07-27 19:58:52 +00:00
target_sources ( lovr PRIVATE src/modules/headset/headset_pico.c )
endif ( )
2020-05-06 21:07:59 +00:00
if ( LOVR_USE_WEBXR )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_USE_WEBXR )
2020-05-24 19:31:14 +00:00
target_sources ( lovr PRIVATE src/modules/headset/headset_webxr.c )
2020-05-06 21:07:59 +00:00
endif ( )
2019-03-07 07:02:03 +00:00
if ( LOVR_USE_DESKTOP_HEADSET )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_USE_DESKTOP_HEADSET )
2020-05-24 19:31:14 +00:00
target_sources ( lovr PRIVATE src/modules/headset/headset_desktop.c )
2018-09-19 07:03:04 +00:00
endif ( )
2021-02-07 23:45:03 +00:00
else ( )
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_HEADSET )
2018-09-19 07:03:04 +00:00
endif ( )
2018-10-21 16:00:18 +00:00
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_MATH )
2018-09-21 03:34:57 +00:00
target_sources ( lovr PRIVATE
2019-05-19 07:38:35 +00:00
s r c / m o d u l e s / m a t h / m a t h . c
s r c / m o d u l e s / m a t h / c u r v e . c
s r c / m o d u l e s / m a t h / p o o l . c
s r c / m o d u l e s / m a t h / r a n d o m G e n e r a t o r . c
2019-05-18 00:11:22 +00:00
s r c / a p i / l _ m a t h . c
2020-01-01 03:31:44 +00:00
s r c / a p i / l _ m a t h _ c u r v e . c
s r c / a p i / l _ m a t h _ r a n d o m G e n e r a t o r . c
s r c / a p i / l _ m a t h _ v e c t o r s . c
2018-09-19 07:03:04 +00:00
s r c / l i b / n o i s e 1 2 3 4 / n o i s e 1 2 3 4 . c
)
2021-02-07 23:45:03 +00:00
else ( )
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_MATH )
2018-09-19 07:03:04 +00:00
endif ( )
if ( LOVR_ENABLE_PHYSICS )
2018-09-21 03:34:57 +00:00
target_sources ( lovr PRIVATE
2019-05-19 07:38:35 +00:00
s r c / m o d u l e s / p h y s i c s / p h y s i c s . c
2019-05-18 00:11:22 +00:00
s r c / a p i / l _ p h y s i c s . c
2020-01-01 03:31:44 +00:00
s r c / a p i / l _ p h y s i c s _ c o l l i d e r . c
s r c / a p i / l _ p h y s i c s _ j o i n t s . c
s r c / a p i / l _ p h y s i c s _ s h a p e s . c
s r c / a p i / l _ p h y s i c s _ w o r l d . c
2018-10-21 16:00:18 +00:00
)
2021-02-07 23:45:03 +00:00
else ( )
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_PHYSICS )
2018-10-20 19:22:24 +00:00
endif ( )
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_THREAD )
2018-09-21 03:34:57 +00:00
target_sources ( lovr PRIVATE
2019-05-19 07:38:35 +00:00
s r c / m o d u l e s / t h r e a d / c h a n n e l . c
s r c / m o d u l e s / t h r e a d / t h r e a d . c
2019-05-18 00:11:22 +00:00
s r c / a p i / l _ t h r e a d . c
2020-01-01 03:31:44 +00:00
s r c / a p i / l _ t h r e a d _ c h a n n e l . c
s r c / a p i / l _ t h r e a d _ t h r e a d . c
2018-09-19 07:03:04 +00:00
s r c / l i b / t i n y c t h r e a d / t i n y c t h r e a d . c
)
2021-02-07 23:45:03 +00:00
else ( )
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_THREAD )
2018-09-19 07:03:04 +00:00
endif ( )
2017-06-18 04:09:03 +00:00
2018-09-19 07:03:04 +00:00
if ( LOVR_ENABLE_TIMER )
2019-05-19 07:38:35 +00:00
target_sources ( lovr PRIVATE src/modules/timer/timer.c src/api/l_timer.c )
2021-02-07 23:45:03 +00:00
else ( )
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_TIMER )
2018-09-19 07:03:04 +00:00
endif ( )
2016-07-15 08:16:08 +00:00
2020-12-27 17:55:35 +00:00
# Resources
file ( GLOB LOVR_RESOURCES "src/resources/*.ttf" "src/resources/*.json" "src/resources/*.lua" )
foreach ( path ${ LOVR_RESOURCES } )
2018-09-19 07:03:04 +00:00
2020-12-27 17:55:35 +00:00
# Turn the absolute path into a C variable like src_resources_boot_lua
file ( RELATIVE_PATH identifier ${ CMAKE_CURRENT_SOURCE_DIR } ${ path } )
string ( MAKE_C_IDENTIFIER ${ identifier } identifier )
# Read the file and turn the bytes into comma-separated hex literals
file ( READ ${ path } data HEX )
string ( REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," data ${ data } )
# Generate the output filename by adding .h to the input filename
string ( CONCAT output ${ path } ".h" )
# Write some xxd-compatible C code!
file ( WRITE ${ output } "const unsigned char ${identifier}[] = {${data}};\nconst unsigned int ${identifier}_len = sizeof(${identifier});\n" )
endforeach ( )
2018-10-20 19:22:24 +00:00
2019-01-29 23:05:23 +00:00
# Platforms
2016-10-04 21:47:48 +00:00
if ( WIN32 )
2019-12-14 03:36:46 +00:00
target_sources ( lovr PRIVATE src/core/os_win32.c )
2019-09-15 00:34:32 +00:00
set_target_properties ( lovr PROPERTIES COMPILE_FLAGS "/wd4244 /MP" )
2017-10-22 09:26:06 +00:00
set_target_properties ( lovr PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE" )
set_target_properties ( lovr PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:windows /ENTRY:mainCRTStartup" )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE _CRT_SECURE_NO_WARNINGS )
target_compile_definitions ( lovr PRIVATE _CRT_NONSTDC_NO_WARNINGS )
2017-10-22 04:51:39 +00:00
2018-05-03 02:01:20 +00:00
if ( MSVC_VERSION VERSION_LESS 1900 )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE inline=__inline snprintf=_snprintf )
2018-05-03 02:01:20 +00:00
endif ( )
2019-03-06 19:06:02 +00:00
function ( move_dll )
if ( TARGET ${ ARGV0 } )
2018-09-19 07:03:04 +00:00
add_custom_command ( TARGET lovr POST_BUILD
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y
2019-03-06 19:06:02 +00:00
$ < T A R G E T _ F I L E : $ { A R G V 0 } >
2019-11-07 22:08:44 +00:00
$ < T A R G E T _ F I L E _ D I R : l o v r > / $ < T A R G E T _ F I L E _ N A M E : $ { A R G V 0 } >
2018-09-19 07:03:04 +00:00
)
endif ( )
2017-06-02 06:48:46 +00:00
endfunction ( )
move_dll ( ${ LOVR_GLFW } )
move_dll ( ${ LOVR_LUA } )
2017-06-10 10:12:31 +00:00
move_dll ( ${ LOVR_ODE } )
2018-10-29 02:55:12 +00:00
move_dll ( ${ LOVR_OPENVR } )
2020-01-06 19:19:13 +00:00
move_dll ( ${ LOVR_MSDF } )
2020-12-19 22:17:16 +00:00
move_dll ( ${ LOVR_OCULUS_AUDIO } )
2020-12-27 17:55:35 +00:00
foreach ( target ${ ALL_PLUGIN_TARGETS } )
move_dll ( ${ target } )
endforeach ( )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_GL )
2018-10-30 00:13:53 +00:00
elseif ( APPLE )
2020-01-23 00:29:42 +00:00
target_link_libraries ( lovr objc )
2019-12-14 03:36:46 +00:00
target_sources ( lovr PRIVATE src/core/os_macos.c )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_GL )
2019-10-14 22:24:27 +00:00
if ( LOVR_BUILD_BUNDLE )
function ( move_lib )
if ( TARGET ${ ARGV0 } )
add_custom_command ( TARGET lovr POST_BUILD
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y
$ < T A R G E T _ S O N A M E _ F I L E : $ { A R G V 0 } >
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l o v r . a p p / C o n t e n t s / M a c O S / $ < T A R G E T _ S O N A M E _ F I L E _ N A M E : $ { A R G V 0 } > # Bad
)
endif ( )
endfunction ( )
move_lib ( ${ LOVR_GLFW } )
move_lib ( ${ LOVR_LUA } )
move_lib ( ${ LOVR_ODE } )
move_lib ( ${ LOVR_OPENVR } )
2020-01-25 06:10:15 +00:00
move_lib ( ${ LOVR_MSDF } )
2020-12-27 17:55:35 +00:00
foreach ( target ${ ALL_PLUGIN_TARGETS } )
move_lib ( ${ target } )
endforeach ( )
2019-10-14 22:24:27 +00:00
target_sources ( lovr PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src/resources/lovr.icns" )
set_target_properties ( lovr PROPERTIES
M A C O S X _ B U N D L E T R U E
M A C O S X _ R P A T H T R U E
B U I L D _ W I T H _ I N S T A L L _ R P A T H T R U E
I N S T A L L _ R P A T H " @ e x e c u t a b l e _ p a t h "
M A C O S X _ B U N D L E _ I N F O _ P L I S T " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / r e s o u r c e s / I n f o . p l i s t "
R E S O U R C E " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / r e s o u r c e s / l o v r . i c n s "
)
endif ( )
2018-10-30 00:13:53 +00:00
elseif ( EMSCRIPTEN )
2019-12-14 03:36:46 +00:00
target_sources ( lovr PRIVATE src/core/os_web.c )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_WEBGL )
2018-11-07 15:24:44 +00:00
elseif ( ANDROID )
2020-11-30 15:54:56 +00:00
target_link_libraries ( lovr log EGL GLESv3 OpenSLES android dl )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_GLES )
2020-07-27 18:48:01 +00:00
target_include_directories ( lovr PRIVATE "${ANDROID_NDK}/sources/android/native_app_glue" )
2020-06-28 03:20:40 +00:00
2020-12-28 21:45:56 +00:00
# Dynamically linked targets output libraries in raw/lib/<ABI> for easy including in apk with aapt
2020-07-27 23:20:58 +00:00
set_target_properties (
2020-11-21 03:47:38 +00:00
l o v r $ { L O V R _ O D E }
2020-12-28 21:45:56 +00:00
P R O P E R T I E S L I B R A R Y _ O U T P U T _ D I R E C T O R Y " $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / r a w / l i b / $ { A N D R O I D _ A B I } "
2020-07-27 23:20:58 +00:00
)
2020-07-27 18:48:01 +00:00
if ( LOVR_BUILD_EXE )
2020-07-27 20:18:28 +00:00
set ( ANDROID_JAR "${ANDROID_SDK}/platforms/${ANDROID_PLATFORM}/android.jar" )
2020-07-27 18:48:01 +00:00
set ( ANDROID_TOOLS "${ANDROID_SDK}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}" )
2020-06-28 03:20:40 +00:00
2020-07-27 18:48:01 +00:00
# If assets are included in the apk then add '-A assets' to aapt, otherwise don't add any flags
if ( ANDROID_ASSETS )
set ( ANDROID_ASSETS -A ${ ANDROID_ASSETS } )
endif ( )
2020-06-28 03:20:40 +00:00
2020-07-27 19:58:52 +00:00
# Flavor-specific config:
2020-12-28 21:45:56 +00:00
# - Imported targets need to have their libraries manually copied to raw/lib/<ABI>
2020-07-27 19:58:52 +00:00
# - Figure out which Java class (Activity) and AndroidManifest.xml to use
# - Oculus uses the regular android os layer, pico implements its own in the headset backend
# - Some of the Pico SDK is in a jar that has to be added to the classpath and dx invocation
2020-08-30 01:45:52 +00:00
# TODO error (probably way earlier) if no headset API is defined, since everything will break
if ( LOVR_USE_OPENXR )
set ( MANIFEST "oculus" )
set ( ACTIVITY "openxr" )
target_sources ( lovr PRIVATE src/core/os_android.c )
get_target_property ( OPENXR_LIB ${ LOVR_OPENXR } IMPORTED_LOCATION )
2020-12-28 21:45:56 +00:00
file ( COPY ${ OPENXR_LIB } DESTINATION raw/lib/ ${ ANDROID_ABI } )
2020-08-30 01:45:52 +00:00
set ( ANDROID_CLASSPATH "${ANDROID_JAR}" )
elseif ( LOVR_USE_VRAPI )
set ( MANIFEST "oculus" )
set ( ACTIVITY "vrapi" )
2020-07-27 20:28:40 +00:00
target_sources ( lovr PRIVATE src/core/os_android.c )
2020-07-27 19:16:07 +00:00
get_target_property ( VRAPI_LIB ${ LOVR_VRAPI } IMPORTED_LOCATION )
2020-12-28 21:45:56 +00:00
file ( COPY ${ VRAPI_LIB } DESTINATION raw/lib/ ${ ANDROID_ABI } )
2020-07-27 20:25:57 +00:00
set ( ANDROID_CLASSPATH "${ANDROID_JAR}" )
2020-07-27 19:58:52 +00:00
elseif ( LOVR_USE_PICO )
2020-08-30 01:45:52 +00:00
set ( MANIFEST "pico" )
set ( ACTIVITY "pico" )
2020-07-27 19:58:52 +00:00
get_target_property ( PICO_LIB ${ LOVR_PICO } IMPORTED_LOCATION )
2020-12-28 21:45:56 +00:00
file ( COPY ${ PICO_LIB } DESTINATION raw/lib/ ${ ANDROID_ABI } )
2020-07-27 20:25:57 +00:00
set ( EXTRA_JAR "${LOVR_PICO_PATH}/classes.jar" )
if ( WIN32 )
set ( ANDROID_CLASSPATH "${ANDROID_JAR};${EXTRA_JAR}" )
else ( )
set ( ANDROID_CLASSPATH "${ANDROID_JAR}:${EXTRA_JAR}" )
endif ( )
2020-07-27 18:48:01 +00:00
endif ( )
2020-06-28 03:20:40 +00:00
2020-08-30 01:45:52 +00:00
set ( ANDROID_MANIFEST "${CMAKE_CURRENT_SOURCE_DIR}/src/resources/AndroidManifest_${MANIFEST}.xml" CACHE STRING "The AndroidManifest.xml file to use" )
2020-07-27 20:18:28 +00:00
2020-10-28 03:26:30 +00:00
if ( ANDROID_KEYSTORE_PASS ) # Trick so that --ks-pass is not passed if no password is given.
set ( ANDROID_APKSIGNER_KEYSTORE_PASS --ks-pass )
endif ( )
2020-12-07 15:50:32 +00:00
if ( ANDROID_EXTRAPACKAGES ) # Only pass --extra-packages if var is set
set ( ANDROID_EXTRAPACKAGES --extra-packages ${ ANDROID_EXTRAPACKAGES } )
endif ( )
2020-07-27 18:48:01 +00:00
# Make an apk
2020-11-02 18:47:44 +00:00
add_custom_target (
b u i l d A P K A L L
2020-07-27 18:48:01 +00:00
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R }
2020-07-27 20:18:28 +00:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y " $ { A N D R O I D _ M A N I F E S T } " A n d r o i d M a n i f e s t . x m l
2020-08-30 01:45:52 +00:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / r e s o u r c e s / A c t i v i t y _ $ { A C T I V I T Y } . j a v a A c t i v i t y . j a v a
2020-07-27 20:25:57 +00:00
C O M M A N D $ { J a v a _ J A V A C _ E X E C U T A B L E } - c l a s s p a t h " $ { A N D R O I D _ C L A S S P A T H } " - d . A c t i v i t y . j a v a
2020-12-28 21:45:56 +00:00
C O M M A N D $ { A N D R O I D _ T O O L S } / d x - - d e x - - o u t p u t r a w / c l a s s e s . d e x $ { E X T R A _ J A R } o r g / l o v r / a p p / A c t i v i t y . c l a s s
2021-02-07 23:53:54 +00:00
C O M M A N D $ { C M A K E _ S T R I P } r a w / l i b / $ { A N D R O I D _ A B I } / * . s o
2020-07-27 18:48:01 +00:00
C O M M A N D
$ { A N D R O I D _ T O O L S } / a a p t
p a c k a g e - f
2020-12-28 21:45:56 +00:00
- 0 s o
2020-07-27 20:18:28 +00:00
- M A n d r o i d M a n i f e s t . x m l
2020-07-27 18:48:01 +00:00
- I $ { A N D R O I D _ J A R }
- F l o v r . u n a l i g n e d . a p k
2020-12-07 15:50:32 +00:00
$ { A N D R O I D _ E X T R A P A C K A G E S }
2020-07-27 18:48:01 +00:00
$ { A N D R O I D _ A S S E T S }
2020-12-28 21:45:56 +00:00
r a w
C O M M A N D $ { A N D R O I D _ T O O L S } / z i p a l i g n - f - p 4 l o v r . u n a l i g n e d . a p k l o v r . u n s i g n e d . a p k
2020-07-27 18:48:01 +00:00
C O M M A N D $ { A N D R O I D _ T O O L S } / a p k s i g n e r
s i g n
- - k s $ { A N D R O I D _ K E Y S T O R E }
2020-10-28 03:26:30 +00:00
$ { A N D R O I D _ A P K S I G N E R _ K E Y S T O R E _ P A S S } $ { A N D R O I D _ K E Y S T O R E _ P A S S }
2020-07-27 18:48:01 +00:00
- - i n l o v r . u n s i g n e d . a p k
- - o u t l o v r . a p k
2020-12-28 21:45:56 +00:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E r e m o v e l o v r . u n a l i g n e d . a p k l o v r . u n s i g n e d . a p k A n d r o i d M a n i f e s t . x m l A c t i v i t y . j a v a
2020-07-27 19:16:22 +00:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E r e m o v e _ d i r e c t o r y o r g
2020-07-27 18:48:01 +00:00
)
2020-12-27 17:55:35 +00:00
2021-02-05 05:27:06 +00:00
add_dependencies ( buildAPK lovr )
2020-12-27 17:55:35 +00:00
# Copy plugin libraries to lib folder before packaging APK
foreach ( target ${ ALL_PLUGIN_TARGETS } )
2020-12-28 21:45:56 +00:00
add_custom_command ( TARGET lovr POST_BUILD
2020-12-27 17:55:35 +00:00
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y
2020-12-28 21:45:56 +00:00
$ < T A R G E T _ F I L E : $ { t a r g e t } >
r a w / l i b / $ { A N D R O I D _ A B I } / $ < T A R G E T _ F I L E _ N A M E : $ { t a r g e t } >
2020-12-27 17:55:35 +00:00
)
endforeach ( )
2020-07-27 18:48:01 +00:00
endif ( )
2018-10-30 00:13:53 +00:00
elseif ( UNIX )
2020-10-24 18:29:25 +00:00
if ( LOVR_USE_LINUX_EGL )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_LINUX_EGL )
2020-10-24 18:29:25 +00:00
else ( )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_LINUX_X11 )
2020-10-24 18:29:25 +00:00
endif ( )
2020-12-25 23:19:09 +00:00
target_sources ( lovr PRIVATE src/core/os_linux.c )
2020-12-25 23:06:40 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_GL )
2021-02-02 10:18:14 +00:00
set_target_properties ( lovr PROPERTIES
R U N T I M E _ O U T P U T _ D I R E C T O R Y " $ { C M A K E _ B I N A R Y _ D I R } / b i n "
B U I L D _ W I T H _ I N S T A L L _ R P A T H T R U E
I N S T A L L _ R P A T H " \ $ O R I G I N "
)
function ( move_lib )
if ( TARGET ${ ARGV0 } )
get_target_property ( TARGET_TYPE ${ ARGV0 } TYPE )
if ( ${ TARGET_TYPE } STREQUAL "MODULE_LIBRARY" )
add_custom_command ( TARGET lovr POST_BUILD
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y
$ < T A R G E T _ F I L E : $ { A R G V 0 } >
$ { C M A K E _ B I N A R Y _ D I R } / b i n / $ < T A R G E T _ F I L E _ N A M E : $ { A R G V 0 } >
)
else ( )
add_custom_command ( TARGET lovr POST_BUILD
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y
$ < T A R G E T _ S O N A M E _ F I L E : $ { A R G V 0 } >
$ { C M A K E _ B I N A R Y _ D I R } / b i n / $ < T A R G E T _ S O N A M E _ F I L E _ N A M E : $ { A R G V 0 } >
)
endif ( )
endif ( )
endfunction ( )
move_lib ( ${ LOVR_GLFW } )
move_lib ( ${ LOVR_LUA } )
move_lib ( ${ LOVR_ODE } )
move_lib ( ${ LOVR_OPENVR } )
move_lib ( ${ LOVR_MSDF } )
foreach ( target ${ ALL_PLUGIN_TARGETS } )
move_lib ( ${ target } )
endforeach ( )
2016-10-04 21:47:48 +00:00
endif ( )