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 )
2021-02-25 16:00:12 +00:00
option ( LOVR_ENABLE_SYSTEM "Enable the system module" ON )
2018-09-19 07:03:04 +00:00
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 )
2022-05-08 21:06:18 +00:00
option ( LOVR_USE_GLSLANG "Use glslang to compile GLSL shaders" ON )
2022-04-21 07:27:13 +00:00
option ( LOVR_USE_VULKAN "Use the Vulkan renderer" ON )
2022-04-22 00:58:26 +00:00
option ( LOVR_USE_WEBGPU "Use the WebGPU renderer" OFF )
2022-03-21 19:02:17 +00:00
option ( LOVR_USE_OPENXR "Enable the OpenXR backend for the headset module" ON )
2020-05-06 21:07:59 +00:00
option ( LOVR_USE_WEBXR "Enable the WebXR backend for the headset module" OFF )
2021-04-07 14:55:44 +00:00
option ( LOVR_USE_DESKTOP "Enable the keyboard/mouse backend for the headset module" ON )
2021-02-10 20:18:12 +00:00
option ( LOVR_USE_STEAM_AUDIO "Enable the Steam Audio spatializer (be sure to also set LOVR_STEAM_AUDIO_PATH)" OFF )
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 )
2021-02-15 18:15:25 +00:00
option ( LOVR_SANITIZE "Enable Address Sanitizer" 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 )
2021-04-28 08:38:06 +00:00
set ( LOVR_SYMBOL_VISIBILITY "hidden" CACHE STRING "What should the C symbol visibility be? hidden reduces binary size, default lets other binaries use this one." )
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 )
2022-04-22 00:58:26 +00:00
string ( CONCAT EMSCRIPTEN_LINKER_FLAGS
2019-10-09 20:36:35 +00:00
" - O s "
2022-04-22 00:58:26 +00:00
" - s U S E _ W E B G P U = 1 "
2018-05-03 02:01:20 +00:00
" - s F O R C E _ F I L E S Y S T E M = 1 "
2022-04-22 00:58:26 +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 "
" - s \ " 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 ' ] \ " "
2022-03-30 19:13:53 +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 } / e t c / w e b x r . j s \ " "
" - - 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 } / e t c / l o v r . h t m l \ " "
2017-07-31 10:45:57 +00:00
)
2022-04-22 00:58:26 +00:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os" )
2019-12-05 21:37:27 +00:00
if ( LOVR_ENABLE_THREAD )
2022-04-22 00:58:26 +00:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread" )
2019-12-05 21:37:27 +00:00
endif ( )
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 )
2022-04-22 00:58:26 +00:00
set ( LOVR_USE_OPENXR OFF )
set ( LOVR_USE_WEBGPU ON )
set ( LOVR_USE_VULKAN OFF )
2018-10-25 03:40:11 +00:00
elseif ( ANDROID )
2022-03-22 22:47:18 +00:00
set ( ANDROID_FLAVOR "oculus" CACHE STRING "Which Android flavor to build (oculus or pico)" )
2020-06-28 03:20:40 +00:00
find_package ( Java REQUIRED )
2021-04-07 14:55:44 +00:00
set ( LOVR_USE_DESKTOP 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 ( )
2021-04-28 10:27:41 +00:00
if ( NOT ANDROID AND LOVR_BUILD_SHARED )
set ( LOVR_BUILD_EXE OFF )
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 )
2021-01-11 14:29:05 +00:00
# Required to make luajit compile without breaking linker cache on macOS Big Sur. Also, is a better,
# newer GC so enable it on all builds.
set ( LUAJIT_ENABLE_GC64 ON )
2021-02-25 23:31:14 +00:00
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 ( 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 ( )
2021-03-23 02:12:48 +00:00
set ( LUA_SRC
l a p i . c l a u x l i b . c l b a s e l i b . c l c o d e . c l d b l i b . c l d e b u g . c l d o . c l d u m p . c l f u n c . c l g c . c l i n i t . c
l i o l i b . c l l e x . c l m a t h l i b . c l m e m . c l o a d l i b . c l o b j e c t . c l o p c o d e s . c l o s l i b . c l p a r s e r . c l s t a t e . c
l s t r i n g . c l s t r l i b . c l t a b l e . c l t a b l i b . c l t m . c l u n d u m p . c l v m . c l z i o . c
)
list ( TRANSFORM LUA_SRC PREPEND deps/lua/ )
add_library ( lua SHARED ${ LUA_SRC } )
2021-06-10 12:17:21 +00:00
target_link_libraries ( lua m )
target_link_libraries ( lua dl )
target_compile_definitions ( lua PRIVATE -DLUA_USE_DLOPEN )
2021-03-23 02:12:48 +00:00
include_directories ( deps/lua )
set ( LOVR_LUA lua )
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 )
2021-04-03 07:18:40 +00:00
set ( BUILD_SHARED_LIBS ON )
2021-02-11 23:19:35 +00:00
add_subdirectory ( deps/msdfgen msdfgen )
2018-09-19 07:03:04 +00:00
include_directories ( deps/msdfgen )
2021-02-10 23:52:15 +00:00
set ( LOVR_MSDF msdfgen )
2020-01-25 06:02:13 +00:00
if ( APPLE )
2021-02-10 23:52:15 +00:00
set_target_properties ( msdfgen PROPERTIES MACOSX_RPATH ON )
2020-01-25 06:02:13 +00:00
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 )
2022-03-30 20:40:27 +00:00
if ( MSVC )
set_target_properties ( ode PROPERTIES COMPILE_FLAGS "/wd4244 /wd4267" )
target_compile_definitions ( ode PRIVATE _CRT_SECURE_NO_WARNINGS )
else ( )
2018-09-20 04:42:20 +00:00
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 ( )
2022-05-08 21:06:18 +00:00
# glslang
if ( LOVR_USE_GLSLANG )
set ( ENABLE_HLSL OFF CACHE BOOL "" )
set ( ENABLE_SPVREMAPPER OFF CACHE BOOL "" )
set ( ENABLE_GLSLANG_BINARIES OFF CACHE BOOL "" )
set ( ENABLE_GLSLANG_INSTALL OFF CACHE BOOL "" )
set ( ENABLE_OPT OFF CACHE BOOL "" )
set ( ENABLE_CTEST OFF CACHE BOOL "" )
set ( BUILD_EXTERNAL OFF CACHE BOOL "" )
2022-05-22 21:58:07 +00:00
set ( BUILD_SHARED_LIBS OFF )
include_directories ( deps/glslang/glslang/Include deps/glslang/StandAlone )
2022-05-08 21:06:18 +00:00
add_subdirectory ( deps/glslang glslang )
2022-05-22 21:58:07 +00:00
target_sources ( glslang PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/deps/glslang/StandAlone/ResourceLimits.cpp" )
target_sources ( glslang PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/deps/glslang/StandAlone/resource_limits_c.cpp" )
set ( LOVR_GLSLANG glslang SPIRV )
2022-05-08 21:06:18 +00:00
endif ( )
2022-04-21 07:27:13 +00:00
# Vulkan
if ( LOVR_USE_VULKAN )
find_package ( Vulkan REQUIRED )
include_directories ( ${ Vulkan_INCLUDE_DIRS } )
endif ( )
2019-10-02 23:29:09 +00:00
# OpenXR
if ( LOVR_ENABLE_HEADSET AND LOVR_USE_OPENXR )
include_directories ( deps/openxr/include )
2020-08-30 01:45:52 +00:00
if ( ANDROID )
add_library ( openxr_loader SHARED IMPORTED )
set ( LOVR_OPENXR openxr_loader )
2022-03-22 22:47:18 +00:00
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" )
else ( )
message ( FATAL_ERROR "Unsupported Android flavor (expected: oculus or pico)" )
endif ( )
2020-08-30 01:45:52 +00:00
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 ( )
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
2021-03-30 23:38:05 +00:00
# Steam Audio (aka Phonon)
2021-02-10 20:18:12 +00:00
if ( LOVR_USE_STEAM_AUDIO )
if ( NOT LOVR_STEAM_AUDIO_PATH )
message ( FATAL_ERROR "LOVR_USE_STEAM_AUDIO requires the LOVR_STEAM_AUDIO_PATH to be set to the location of the Steam Audio folder" )
endif ( )
2021-03-30 23:38:05 +00:00
if ( CMAKE_SIZEOF_VOID_P EQUAL 4 ) # Note: SteamAudio distributes 32 bit libs but wiring them up is very verbose
message ( FATAL_ERROR "LOVR_USE_STEAM_AUDIO is not currently available on 32 bit builds" )
endif ( )
2021-03-08 05:42:17 +00:00
include_directories ( "${LOVR_STEAM_AUDIO_PATH}/include" )
2021-03-30 23:38:05 +00:00
add_library ( Phonon SHARED IMPORTED )
if ( ANDROID )
2021-04-19 17:27:38 +00:00
set_target_properties ( Phonon PROPERTIES IMPORTED_LOCATION "${LOVR_STEAM_AUDIO_PATH}/lib/Android/arm64/libphonon.so" )
2021-03-30 23:38:05 +00:00
elseif ( WIN32 )
set_target_properties ( Phonon PROPERTIES IMPORTED_IMPLIB "${LOVR_STEAM_AUDIO_PATH}/lib/Windows/x64/phonon.lib" )
set_target_properties ( Phonon PROPERTIES IMPORTED_LOCATION "${LOVR_STEAM_AUDIO_PATH}/bin/Windows/x64/phonon.dll" )
2021-04-27 04:56:54 +00:00
elseif ( APPLE )
set_target_properties ( Phonon PROPERTIES IMPORTED_LOCATION "${LOVR_STEAM_AUDIO_PATH}/lib/OSX/libphonon.dylib"
I M P O R T E D _ S O N A M E " @ r p a t h / l i b p h o n o n . d y l i b " ) # It doesn't make sense this line is required, but it is
2021-03-30 23:38:05 +00:00
else ( ) # Assume Linux. Note: This has *not* been tested. FIXME: When is the .so copied?
set_target_properties ( Phonon PROPERTIES IMPORTED_LOCATION "${LOVR_STEAM_AUDIO_PATH}/lib/Linux/x64/libphonon.so" )
endif ( )
set ( LOVR_PHONON Phonon )
2021-02-10 20:18:12 +00:00
endif ( )
2021-02-10 19:27:20 +00:00
# Oculus Audio
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 )
2021-03-08 04:16:25 +00:00
if ( ANDROID )
2021-02-10 19:27:20 +00:00
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.
2021-03-08 04:16:25 +00:00
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 )
2021-02-10 19:27:20 +00:00
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 ( )
2021-04-27 04:56:54 +00:00
elseif ( APPLE )
# Oculus Audio ships with an intel .framework, but (as of 25.0.0) it is broken. We can convert it to a working dylib with install_name_tool in a custom target:
SET ( OCULUS_AUDIO_MAC_LIB_DIR "${CMAKE_CURRENT_BINARY_DIR}/ovraudio" )
SET ( OCULUS_AUDIO_MAC_LIB_FILE "${OCULUS_AUDIO_MAC_LIB_DIR}/ovraudio64.dylib" )
SET ( OCULUS_AUDIO_MAC_RPATH "@rpath/ovraudio64.dylib" )
file ( MAKE_DIRECTORY "${OCULUS_AUDIO_MAC_LIB_DIR}" )
add_custom_command ( OUTPUT "${OCULUS_AUDIO_MAC_LIB_FILE}"
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y " $ { L O V R _ O C U L U S _ A U D I O _ P A T H } / L i b / m a c 6 4 / O V R A u d i o 6 4 . f r a m e w o r k / V e r s i o n s / A / o v r a u d i o 6 4 " " $ { O C U L U S _ A U D I O _ M A C _ L I B _ F I L E } "
C O M M A N D i n s t a l l _ n a m e _ t o o l - i d $ { O C U L U S _ A U D I O _ M A C _ R P A T H } " $ { O C U L U S _ A U D I O _ M A C _ L I B _ F I L E } "
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 } " )
add_custom_target ( OculusAudioFixed DEPENDS "${OCULUS_AUDIO_MAC_LIB_FILE}" )
add_dependencies ( OculusAudio OculusAudioFixed )
# IMPORTED_SONAME required because the automatic rpath requires the dylib file to exist before builds start
set_target_properties ( OculusAudio PROPERTIES IMPORTED_LOCATION "${OCULUS_AUDIO_MAC_LIB_FILE}"
I M P O R T E D _ S O N A M E " $ { O C U L U S _ A U D I O _ M A C _ R P A T H } " )
2021-02-10 19:27:20 +00:00
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 )
endif ( )
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 } )
2021-04-06 10:17:36 +00:00
file ( GLOB LOVR_PLUGINS ${ CMAKE_SOURCE_DIR } /plugins/* )
2022-05-06 18:11:59 +00:00
foreach ( PLUGIN_PATH ${ LOVR_PLUGINS } )
if ( IS_DIRECTORY ${ PLUGIN_PATH } AND EXISTS ${ PLUGIN_PATH } /CMakeLists.txt )
get_filename_component ( PLUGIN "${PLUGIN_PATH}" NAME )
add_subdirectory ( ${ PLUGIN_PATH } "${CMAKE_CURRENT_BINARY_DIR}/plugins/${PLUGIN}" )
get_directory_property ( PLUGIN_TARGETS DIRECTORY ${ PLUGIN_PATH } DEFINITION LOVR_PLUGIN_TARGETS )
2020-12-27 17:55:35 +00:00
if ( NOT PLUGIN_TARGETS )
2022-05-06 18:11:59 +00:00
get_directory_property ( PLUGIN_TARGETS DIRECTORY ${ PLUGIN_PATH } BUILDSYSTEM_TARGETS )
2020-12-27 17:55:35 +00:00
endif ( )
2022-05-06 18:11:59 +00:00
set_target_properties ( ${ PLUGIN_TARGETS } PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/plugins/${PLUGIN}" )
2020-12-27 17:55:35 +00:00
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
2019-11-25 01:27:17 +00:00
s r c / c o r e / f s . c
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
2022-03-22 07:13:21 +00:00
s r c / u t i l . c
2017-06-02 06:48:46 +00:00
)
2017-05-29 04:53:19 +00:00
2022-03-22 22:47:18 +00:00
if ( LOVR_BUILD_EXE )
2021-04-28 10:27:41 +00:00
list ( APPEND LOVR_SRC src/main.c )
2020-07-27 20:56:21 +00:00
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 } )
2021-04-19 09:58:03 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_BUILDING_SHARED )
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 ( )
2021-04-28 10:27:41 +00:00
if ( NOT LOVR_BUILD_EXE )
target_compile_definitions ( lovr PUBLIC LOVR_OMIT_MAIN ) # specifically for win32 WinMain
endif ( )
2021-04-28 08:38:06 +00:00
set_target_properties ( lovr PROPERTIES C_VISIBILITY_PRESET ${ LOVR_SYMBOL_VISIBILITY } )
2022-03-20 08:44:18 +00:00
set_target_properties ( lovr PROPERTIES C_STANDARD 11 )
2022-04-28 03:31:10 +00:00
set_target_properties ( lovr PROPERTIES C_STANDARD_REQUIRED ON )
2022-03-30 19:13:53 +00:00
target_include_directories ( lovr PRIVATE src src/modules src/lib/stdatomic etc )
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 }
2022-05-08 21:06:18 +00:00
$ { L O V R _ G L S L A N G }
2019-10-02 23:29:09 +00:00
$ { L O V R _ O P E N X R }
2021-03-08 04:16:25 +00:00
$ { L O V R _ O C U L U S _ A U D I O }
2018-09-21 03:34:57 +00:00
$ { L O V R _ P T H R E A D S }
2022-04-22 00:58:26 +00:00
$ { E M S C R I P T E N _ L I N K E R _ F L A G S }
2018-09-21 03:34:57 +00:00
)
2021-02-15 18:15:25 +00:00
if ( LOVR_SANITIZE )
set ( LOVR_SANITIZE_FLAGS "-fsanitize=address,undefined" "-O1" "-fno-omit-frame-pointer" )
target_compile_options ( lovr PRIVATE ${ LOVR_SANITIZE_FLAGS } )
target_link_options ( lovr PRIVATE ${ LOVR_SANITIZE_FLAGS } )
endif ( )
2021-02-11 20:11:49 +00:00
if ( LOVR_ENABLE_AUDIO OR LOVR_ENABLE_DATA )
target_sources ( lovr PRIVATE
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
)
endif ( )
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-10 19:27:20 +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 i m p l e . 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
2018-09-19 07:03:04 +00:00
)
2020-12-19 22:17:16 +00:00
2021-02-10 20:18:12 +00:00
if ( LOVR_USE_STEAM_AUDIO )
2021-07-23 16:41:43 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_ENABLE_PHONON_SPATIALIZER )
2021-02-10 20:18:12 +00:00
target_sources ( lovr PRIVATE src/modules/audio/spatializer_phonon.c )
2021-04-27 04:56:54 +00:00
# Dynamically linked at runtime, so this is not otherwise a dependency
add_dependencies ( lovr ${ LOVR_PHONON } )
2021-02-10 20:18:12 +00:00
endif ( )
2020-12-19 22:17:16 +00:00
2021-02-10 19:27:20 +00:00
if ( LOVR_USE_OCULUS_AUDIO )
2021-07-23 16:41:43 +00:00
target_compile_definitions ( lovr PRIVATE LOVR_ENABLE_OCULUS_SPATIALIZER )
2021-02-10 19:27:20 +00:00
target_sources ( lovr PRIVATE src/modules/audio/spatializer_oculus.c )
2020-12-19 22:17:16 +00:00
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
2021-02-09 03:17:47 +00:00
s r c / m o d u l e s / d a t a / i m a g e . c
2019-05-19 07:38:35 +00:00
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
2021-02-24 20:22:46 +00:00
s r c / m o d u l e s / d a t a / m o d e l D a t a _ s t l . c
2019-05-19 07:38:35 +00:00
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
2021-02-09 02:52:56 +00:00
s r c / m o d u l e s / d a t a / s o u n d . 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
2021-02-09 03:17:47 +00:00
s r c / a p i / l _ d a t a _ i m a g e . c
2020-01-01 03:31:44 +00:00
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
2021-02-09 02:52:56 +00:00
s r c / a p i / l _ d a t a _ s o u n d . 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
2022-05-22 22:02:42 +00:00
s r c / c o r e / s p v . c
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 / g r a p h i c s . 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
2022-04-26 22:32:54 +00:00
s r c / a p i / l _ g r a p h i c s _ b u f f e r . c
2022-04-30 03:56:23 +00:00
s r c / a p i / l _ g r a p h i c s _ t e x t u r e . c
2022-05-01 22:47:17 +00:00
s r c / a p i / l _ g r a p h i c s _ s a m p l e r . c
2022-05-09 18:47:06 +00:00
s r c / a p i / l _ g r a p h i c s _ s h a d e r . c
2022-06-20 22:51:24 +00:00
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 _ f o n t . c
2022-05-01 01:54:29 +00:00
s r c / a p i / l _ g r a p h i c s _ p a s s . c
2018-09-19 07:03:04 +00:00
)
2022-04-21 07:27:13 +00:00
2022-05-22 21:58:07 +00:00
if ( LOVR_USE_GLSLANG )
target_compile_definitions ( lovr PRIVATE LOVR_USE_GLSLANG )
endif ( )
2022-04-21 07:27:13 +00:00
if ( LOVR_USE_VULKAN )
target_compile_definitions ( lovr PRIVATE LOVR_VK )
target_sources ( lovr PRIVATE src/core/gpu_vk.c )
endif ( )
2022-04-22 00:58:26 +00:00
if ( LOVR_USE_WEBGPU )
target_compile_definitions ( lovr PRIVATE LOVR_WGPU )
target_sources ( lovr PRIVATE src/core/gpu_webgpu.c )
endif ( )
2022-06-08 04:19:42 +00:00
add_custom_target ( compile_shaders ALL )
add_dependencies ( lovr compile_shaders )
function ( compile_shaders )
file ( GLOB shader_files "etc/shaders/*.${ARGV0}" )
foreach ( shader_file ${ shader_files } )
string ( REGEX MATCH "([^\/]+)\.${ARGV0}" shader ${ shader_file } )
string ( REPLACE ".${ARGV0}" "" shader ${ shader } )
add_custom_command ( TARGET compile_shaders POST_BUILD
C O M M A N D
g l s l a n g V a l i d a t o r
- - q u i e t
- - t a r g e t - e n v v u l k a n 1 . 1
- - v n l o v r _ s h a d e r _ $ { s h a d e r } _ $ { A R G V 0 }
- o $ { s h a d e r _ f i l e } . h
$ { s h a d e r _ f i l e }
)
endforeach ( )
endfunction ( )
compile_shaders ( "vert" )
compile_shaders ( "frag" )
compile_shaders ( "comp" )
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
)
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 ( )
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 ( )
2021-04-07 14:55:44 +00:00
if ( LOVR_USE_DESKTOP )
target_compile_definitions ( lovr PRIVATE LOVR_USE_DESKTOP )
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
2022-03-26 22:25:40 +00:00
s r c / l i b / n o i s e / s i m p l e x n o i s e 1 2 3 4 . 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_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 ( )
2021-02-25 16:00:12 +00:00
if ( LOVR_ENABLE_SYSTEM )
target_sources ( lovr PRIVATE
s r c / m o d u l e s / s y s t e m / s y s t e m . c
s r c / a p i / l _ s y s t e m . c
)
else ( )
target_compile_definitions ( lovr PRIVATE LOVR_DISABLE_SYSTEM )
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
2022-06-20 22:51:24 +00:00
file ( GLOB LOVR_RESOURCES "etc/*.ttf" "etc/*.lua" "etc/shaders/*.glsl" )
2020-12-27 17:55:35 +00:00
foreach ( path ${ LOVR_RESOURCES } )
2018-09-19 07:03:04 +00:00
2022-03-30 19:13:53 +00:00
# Turn the absolute path into a C variable like etc_boot_lua
2020-12-27 17:55:35 +00:00
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
2022-06-03 03:27:35 +00:00
# Add a custom target that is always out of date so libraries are always moved
add_custom_target ( move_libraries ALL )
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 )
2022-03-30 19:13:53 +00:00
target_sources ( lovr PRIVATE etc/lovr.rc )
2021-06-15 07:36:55 +00:00
if ( MSVC )
set_target_properties ( lovr PROPERTIES COMPILE_FLAGS "/wd4244 /MP" )
else ( )
set_target_properties ( lovr PROPERTIES COMPILE_FLAGS "-MP" )
endif ( )
2021-04-19 09:58:03 +00:00
if ( NOT LOVR_BUILD_SHARED )
set_target_properties ( lovr PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:console /ENTRY:WinMainCRTStartup" )
set_target_properties ( lovr PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:windows /ENTRY:WinMainCRTStartup" )
endif ( )
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 } )
2022-06-03 03:27:35 +00:00
add_custom_command ( TARGET move_libraries POST_BUILD
2018-09-19 07:03:04 +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
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 } )
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 } )
2021-03-30 23:38:05 +00:00
move_dll ( ${ LOVR_PHONON } )
2020-12-27 17:55:35 +00:00
foreach ( target ${ ALL_PLUGIN_TARGETS } )
move_dll ( ${ target } )
endforeach ( )
2018-10-30 00:13:53 +00:00
elseif ( APPLE )
2021-04-27 20:41:30 +00:00
find_library ( AVFOUNDATION AVFoundation )
target_link_libraries ( lovr objc ${ AVFOUNDATION } )
2019-12-14 03:36:46 +00:00
target_sources ( lovr PRIVATE src/core/os_macos.c )
2021-04-27 20:41:30 +00:00
set_source_files_properties ( src/core/os_macos.c PROPERTIES COMPILE_FLAGS -xobjective-c )
2021-04-02 07:07:37 +00:00
set_target_properties ( lovr PROPERTIES
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 "
)
2019-10-14 22:24:27 +00:00
if ( LOVR_BUILD_BUNDLE )
2021-04-03 04:17:58 +00:00
set ( EXE_DIR ${ CMAKE_CURRENT_BINARY_DIR } /lovr.app/Contents/MacOS )
2022-03-30 19:13:53 +00:00
target_sources ( lovr PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/etc/lovr.icns" )
2019-10-14 22:24:27 +00:00
set_target_properties ( lovr PROPERTIES
M A C O S X _ B U N D L E T R U E
2022-03-30 19:13:53 +00:00
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 } / e t c / 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 } / e t c / l o v r . i c n s "
2019-10-14 22:24:27 +00:00
)
2021-04-03 04:17:58 +00:00
else ( )
set ( EXE_DIR ${ CMAKE_CURRENT_BINARY_DIR } /bin )
set_target_properties ( lovr PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" )
2019-10-14 22:24:27 +00:00
endif ( )
2021-04-03 04:17:58 +00:00
function ( move_lib )
if ( TARGET ${ ARGV0 } )
2021-06-25 02:51:39 +00:00
get_target_property ( TARGET_TYPE ${ ARGV0 } TYPE )
if ( ${ TARGET_TYPE } STREQUAL "MODULE_LIBRARY" )
2022-06-03 03:27:35 +00:00
add_custom_command ( TARGET move_libraries POST_BUILD
2021-06-25 02:51:39 +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
$ < T A R G E T _ F I L E : $ { A R G V 0 } >
$ { E X E _ D I R } / $ < T A R G E T _ F I L E _ N A M E : $ { A R G V 0 } >
)
else ( )
2022-06-03 03:27:35 +00:00
add_custom_command ( TARGET move_libraries POST_BUILD
2021-06-25 02:51:39 +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
$ < T A R G E T _ S O N A M E _ F I L E : $ { A R G V 0 } >
$ { E X E _ D I R } / $ < 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 ( )
2021-04-03 04:17:58 +00:00
endif ( )
endfunction ( )
move_lib ( ${ LOVR_GLFW } )
move_lib ( ${ LOVR_LUA } )
move_lib ( ${ LOVR_ODE } )
move_lib ( ${ LOVR_MSDF } )
move_lib ( ${ LOVR_OCULUS_AUDIO } )
move_lib ( ${ LOVR_PHONON } )
foreach ( target ${ ALL_PLUGIN_TARGETS } )
move_lib ( ${ target } )
endforeach ( )
2018-10-30 00:13:53 +00:00
elseif ( EMSCRIPTEN )
2022-01-06 20:23:21 +00:00
target_sources ( lovr PRIVATE src/core/os_wasm.c )
2022-03-30 19:13:53 +00:00
configure_file ( etc/lovr.ico favicon.ico COPYONLY )
2018-11-07 15:24:44 +00:00
elseif ( ANDROID )
2022-03-22 22:47:18 +00:00
target_sources ( lovr PRIVATE src/core/os_android.c )
2022-06-21 01:23:28 +00:00
target_link_libraries ( lovr log android dl )
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 (
2021-03-23 16:38:09 +00:00
l o v r
$ { L O V R _ O D E }
2021-04-03 07:18:40 +00:00
$ { L O V R _ M S D F }
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}" )
2022-03-30 19:13:53 +00:00
set ( ANDROID_MANIFEST "${CMAKE_CURRENT_SOURCE_DIR}/etc/AndroidManifest_${ANDROID_FLAVOR}.xml" CACHE STRING "The AndroidManifest.xml file to use" )
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
2022-03-22 22:47:18 +00:00
if ( ANDROID_PACKAGE )
set ( PACKAGE_RENAME "--rename-manifest-package" "${ANDROID_PACKAGE}" )
endif ( )
2020-08-30 01:45:52 +00:00
if ( LOVR_USE_OPENXR )
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-07-27 18:48:01 +00:00
endif ( )
2020-06-28 03:20:40 +00:00
2021-03-23 16:38:09 +00:00
if ( LOVR_USE_OCULUS_AUDIO )
get_target_property ( OCULUS_AUDIO_LIB ${ LOVR_OCULUS_AUDIO } IMPORTED_LOCATION )
file ( COPY ${ OCULUS_AUDIO_LIB } DESTINATION raw/lib/ ${ ANDROID_ABI } )
endif ( )
2021-03-30 23:38:05 +00:00
if ( LOVR_USE_STEAM_AUDIO )
get_target_property ( PHONON_LIB ${ LOVR_PHONON } IMPORTED_LOCATION )
file ( COPY ${ PHONON_LIB } DESTINATION raw/lib/ ${ ANDROID_ABI } )
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
2022-03-30 19:13:53 +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 } / e t c / A c t i v i t y . j a v a A c t i v i t y . j a v a
2022-03-22 22:47:18 +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 _ J A R } " - d . A c t i v i t y . j a v a
C O M M A N D $ { A N D R O I D _ T O O L S } / d 8 - - m i n - a p i $ { A N D R O I D _ N A T I V E _ A P I _ L E V E L } - - o u t p u t r a w o r g / l o v r / a p p / A c t i v i t y . c l a s s
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
2021-02-10 04:19:29 +00:00
$ { P A C K A G E _ R E N A M E }
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
$ { 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 }
2021-04-05 18:20:36 +00:00
$ < $ < B O O L : $ { A N D R O I D _ K E Y S T O R E _ P A S S } > : - - k s - p a s s > $ < $ < B O O L : $ { A N D R O I D _ 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 } >
2021-04-01 12:59:04 +00:00
$ < $ < B O O L : $ { A N D R O I D _ K E Y _ P A S S } > : - - k e y - p a s s > $ < $ < B O O L : $ { A N D R O I D _ K E Y _ P A S S } > : $ { A N D R O I D _ K E Y _ 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 )
2021-04-03 07:18:58 +00:00
if ( CMAKE_BUILD_TYPE STREQUAL Release )
add_custom_target (
s t r i p A L L
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 }
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
)
add_dependencies ( strip lovr )
add_dependencies ( buildAPK strip )
endif ( )
2020-12-27 17:55:35 +00:00
# Copy plugin libraries to lib folder before packaging APK
foreach ( target ${ ALL_PLUGIN_TARGETS } )
2022-06-03 03:27:35 +00:00
add_custom_command ( TARGET move_libraries 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 ( )
2022-06-03 03:27:35 +00:00
add_dependencies ( buildAPK move_libraries )
2020-07-27 18:48:01 +00:00
endif ( )
2018-10-30 00:13:53 +00:00
elseif ( UNIX )
2020-12-25 23:19:09 +00:00
target_sources ( lovr PRIVATE src/core/os_linux.c )
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" )
2022-06-03 03:27:35 +00:00
add_custom_command ( TARGET move_libraries POST_BUILD
2021-02-02 10:18:14 +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
$ < 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 ( )
2022-06-03 03:27:35 +00:00
add_custom_command ( TARGET move_libraries POST_BUILD
2021-02-02 10:18:14 +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
$ < 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 ( )
2021-04-06 16:21:16 +00:00
function ( move_app_image_file )
2022-03-30 19:13:53 +00:00
set ( SRC "${CMAKE_CURRENT_SOURCE_DIR}/etc/${ARGV0}" )
2021-04-06 16:21:16 +00:00
set ( DST "${CMAKE_BINARY_DIR}/bin/${ARGV0}" )
add_custom_command ( TARGET lovr POST_BUILD
D E P E N D S $ { S R C }
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y $ { S R C } $ { D S T }
)
endfunction ( )
2021-02-02 10:18:14 +00:00
move_lib ( ${ LOVR_GLFW } )
move_lib ( ${ LOVR_LUA } )
move_lib ( ${ LOVR_ODE } )
move_lib ( ${ LOVR_MSDF } )
2022-04-20 05:41:18 +00:00
move_lib ( ${ LOVR_OPENXR } )
2021-02-10 19:27:20 +00:00
move_lib ( ${ LOVR_OCULUS_AUDIO } )
2021-02-02 10:18:14 +00:00
foreach ( target ${ ALL_PLUGIN_TARGETS } )
move_lib ( ${ target } )
endforeach ( )
2021-04-06 16:21:16 +00:00
if ( LOVR_BUILD_BUNDLE )
move_app_image_file ( "lovr.desktop" )
move_app_image_file ( "AppRun" )
move_app_image_file ( "logo.svg" )
endif ( )
2016-10-04 21:47:48 +00:00
endif ( )