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_ENABLE_ENET "Bundle with lua-enet" ON)
|
|
|
|
option(LOVR_ENABLE_JSON "Bundle with lua-cjson" 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)
|
2018-09-19 07:03:04 +00:00
|
|
|
|
|
|
|
option(LOVR_SYSTEM_ENET "Use the system-provided enet" OFF)
|
|
|
|
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)
|
|
|
|
option(LOVR_SYSTEM_OPENAL "Use the system-provided OpenAL" OFF)
|
|
|
|
|
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
|
|
|
|
2019-12-20 21:09:18 +00:00
|
|
|
option(LOVR_USE_THREADLOCAL "Allow use of thread local storage; disable to run on Windows XP as a DLL" ON)
|
|
|
|
|
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
|
|
|
"-Os "
|
2018-05-03 02:01:20 +00:00
|
|
|
"-s USE_WEBGL2=1 "
|
|
|
|
"-s FORCE_FILESYSTEM=1 "
|
2020-09-25 02:03:37 +00:00
|
|
|
"-s \"EXPORTED_FUNCTIONS=['_main','_lovrDestroy','_webxr_attach','_webxr_detach','_lovrCanvasCreateFromHandle','_lovrCanvasDestroy','_lovrGraphicsSetBackbuffer','_lovrGraphicsSetViewMatrix','_lovrGraphicsSetProjection']\" "
|
2018-04-29 21:38:08 +00:00
|
|
|
"-s \"EXTRA_EXPORTED_RUNTIME_METHODS=['getValue','setValue']\" "
|
2020-05-06 21:07:59 +00:00
|
|
|
"--js-library \"${CMAKE_CURRENT_SOURCE_DIR}/src/resources/webxr.js\" "
|
2018-09-06 23:04:58 +00:00
|
|
|
"--shell-file \"${CMAKE_CURRENT_SOURCE_DIR}/src/resources/lovr.html\""
|
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()
|
|
|
|
|
2017-07-24 02:27:21 +00:00
|
|
|
# enet
|
2018-09-19 07:03:04 +00:00
|
|
|
if(LOVR_ENABLE_ENET)
|
|
|
|
if(LOVR_SYSTEM_ENET)
|
|
|
|
pkg_search_module(ENET REQUIRED enet)
|
|
|
|
include_directories(${ENET_INCLUDE_DIRS})
|
|
|
|
set(LOVR_ENET ${ENET_LIBRARIES})
|
|
|
|
else()
|
|
|
|
if(EMSCRIPTEN)
|
|
|
|
set(HAVE_HAS_SOCKLEN_T TRUE CACHE BOOL "")
|
|
|
|
endif()
|
|
|
|
add_subdirectory(deps/enet enet)
|
|
|
|
include_directories(deps/enet/include)
|
|
|
|
set(LOVR_ENET enet)
|
|
|
|
if(WIN32)
|
|
|
|
set(LOVR_ENET ${LOVR_ENET} ws2_32 winmm)
|
|
|
|
endif()
|
|
|
|
if(EMSCRIPTEN)
|
|
|
|
target_compile_definitions(enet PRIVATE __APPLE__)
|
|
|
|
endif()
|
2017-07-24 08:29:14 +00:00
|
|
|
endif()
|
2017-07-24 06:02:57 +00:00
|
|
|
endif()
|
2017-07-24 02:27:21 +00:00
|
|
|
|
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 "")
|
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)
|
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-01-07 02:43:24 +00:00
|
|
|
# OpenAL
|
2018-09-20 00:27:30 +00:00
|
|
|
if(LOVR_ENABLE_AUDIO)
|
2018-09-19 07:03:04 +00:00
|
|
|
if(LOVR_SYSTEM_OPENAL)
|
2018-08-20 20:33:16 +00:00
|
|
|
pkg_search_module(OPENAL openal-soft)
|
2017-09-06 05:13:01 +00:00
|
|
|
if (NOT OPENAL_FOUND)
|
2018-08-20 20:33:16 +00:00
|
|
|
pkg_search_module(OPENAL openal)
|
|
|
|
if (NOT OPENAL_FOUND)
|
|
|
|
message(FATAL_ERROR "OpenAL not found.")
|
|
|
|
endif()
|
2017-09-06 05:13:01 +00:00
|
|
|
endif()
|
2018-08-20 20:33:16 +00:00
|
|
|
include_directories(${OPENAL_INCLUDE_DIRS})
|
|
|
|
string(REPLACE ";" " " OPENAL_LDFLAGS_STR "${OPENAL_LDFLAGS}")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OPENAL_LDFLAGS_STR}")
|
|
|
|
set(LOVR_OPENAL ${OPENAL_LIBRARIES})
|
2018-09-19 07:03:04 +00:00
|
|
|
else()
|
|
|
|
set(ALSOFT_UTILS OFF CACHE BOOL "")
|
|
|
|
set(ALSOFT_EXAMPLES OFF CACHE BOOL "")
|
|
|
|
set(ALSOFT_TESTS OFF CACHE BOOL "")
|
|
|
|
if(NOT EMSCRIPTEN)
|
|
|
|
add_subdirectory(deps/openal-soft openal)
|
|
|
|
set(LOVR_OPENAL OpenAL)
|
|
|
|
if(WIN32)
|
|
|
|
set_target_properties(OpenAL PROPERTIES COMPILE_FLAGS "/wd4005 /wd4098")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
include_directories(deps/openal-soft/include)
|
2017-09-06 05:13:01 +00:00
|
|
|
endif()
|
2017-01-07 02:43:24 +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
|
|
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/openvr_api"
|
|
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/openvr_api"
|
|
|
|
)
|
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()
|
|
|
|
add_subdirectory(deps/openxr openxr)
|
|
|
|
set(LOVR_OPENXR openxr_loader)
|
|
|
|
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
|
2018-10-22 23:40:58 +00:00
|
|
|
if(LOVR_ENABLE_THREAD)
|
|
|
|
if(NOT WIN32 AND NOT EMSCRIPTEN)
|
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
set(LOVR_PTHREADS Threads::Threads)
|
|
|
|
endif()
|
2019-12-20 21:09:18 +00:00
|
|
|
if (LOVR_USE_THREADLOCAL)
|
|
|
|
add_definitions(-DUSE_LOVR_STBI_THREADLOCAL)
|
|
|
|
endif()
|
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-01-10 05:57:13 +00:00
|
|
|
# Resources
|
|
|
|
file(GLOB LOVR_RESOURCES "src/resources/*.ttf" "src/resources/*.json" "src/resources/*.lua")
|
|
|
|
foreach(path ${LOVR_RESOURCES})
|
|
|
|
|
|
|
|
# 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-25 03:40:11 +00:00
|
|
|
set(LOVR_SRC
|
2017-06-02 06:48:46 +00:00
|
|
|
src/main.c
|
2019-06-08 10:45:03 +00:00
|
|
|
src/core/arr.c
|
2019-11-25 01:27:17 +00:00
|
|
|
src/core/fs.c
|
2019-09-07 22:07:07 +00:00
|
|
|
src/core/map.c
|
2020-02-16 12:11:55 +00:00
|
|
|
src/core/png.c
|
2019-06-02 08:09:22 +00:00
|
|
|
src/core/ref.c
|
2019-05-20 09:47:33 +00:00
|
|
|
src/core/utf.c
|
|
|
|
src/core/util.c
|
2019-11-25 01:27:17 +00:00
|
|
|
src/core/zip.c
|
2019-08-21 22:27:26 +00:00
|
|
|
src/api/api.c
|
2019-05-18 00:11:22 +00:00
|
|
|
src/api/l_lovr.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()
|
|
|
|
|
2019-04-20 23:17:49 +00:00
|
|
|
set_target_properties(lovr PROPERTIES C_VISIBILITY_PRESET default)
|
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
|
|
|
|
${LOVR_ENET}
|
|
|
|
${LOVR_GLFW}
|
|
|
|
${LOVR_LUA}
|
|
|
|
${LOVR_MSDF}
|
|
|
|
${LOVR_ODE}
|
|
|
|
${LOVR_OPENAL}
|
|
|
|
${LOVR_OPENGL}
|
|
|
|
${LOVR_OPENVR}
|
2019-10-02 23:29:09 +00:00
|
|
|
${LOVR_OPENXR}
|
2018-09-21 03:34:57 +00:00
|
|
|
${LOVR_OCULUS}
|
2020-06-28 03:20:40 +00:00
|
|
|
${LOVR_VRAPI}
|
2020-07-27 19:58:52 +00:00
|
|
|
${LOVR_PICO}
|
2018-09-21 03:34:57 +00:00
|
|
|
${LOVR_PTHREADS}
|
|
|
|
${LOVR_EMSCRIPTEN_FLAGS}
|
|
|
|
)
|
|
|
|
|
2018-09-19 07:03:04 +00:00
|
|
|
if(LOVR_ENABLE_AUDIO)
|
|
|
|
add_definitions(-DLOVR_ENABLE_AUDIO)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE
|
2019-05-19 07:38:35 +00:00
|
|
|
src/modules/audio/audio.c
|
2019-05-18 00:11:22 +00:00
|
|
|
src/api/l_audio.c
|
2020-01-01 03:31:44 +00:00
|
|
|
src/api/l_audio_source.c
|
|
|
|
src/api/l_audio_microphone.c
|
2018-09-19 07:03:04 +00:00
|
|
|
)
|
2017-06-02 06:48:46 +00:00
|
|
|
endif()
|
|
|
|
|
2018-09-19 07:03:04 +00:00
|
|
|
if(LOVR_ENABLE_DATA)
|
|
|
|
add_definitions(-DLOVR_ENABLE_DATA)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE
|
2019-05-19 07:38:35 +00:00
|
|
|
src/modules/data/audioStream.c
|
|
|
|
src/modules/data/blob.c
|
|
|
|
src/modules/data/modelData.c
|
|
|
|
src/modules/data/modelData_gltf.c
|
|
|
|
src/modules/data/modelData_obj.c
|
|
|
|
src/modules/data/rasterizer.c
|
|
|
|
src/modules/data/soundData.c
|
|
|
|
src/modules/data/textureData.c
|
2019-05-18 00:11:22 +00:00
|
|
|
src/api/l_data.c
|
2020-01-01 03:31:44 +00:00
|
|
|
src/api/l_data_audioStream.c
|
|
|
|
src/api/l_data_blob.c
|
|
|
|
src/api/l_data_modelData.c
|
|
|
|
src/api/l_data_rasterizer.c
|
|
|
|
src/api/l_data_soundData.c
|
|
|
|
src/api/l_data_textureData.c
|
2018-09-19 07:03:04 +00:00
|
|
|
src/lib/stb/stb_image.c
|
|
|
|
src/lib/stb/stb_truetype.c
|
|
|
|
src/lib/stb/stb_vorbis.c
|
2018-09-26 00:10:09 +00:00
|
|
|
src/lib/jsmn/jsmn.c
|
2018-09-19 07:03:04 +00:00
|
|
|
)
|
2017-09-10 22:23:33 +00:00
|
|
|
endif()
|
|
|
|
|
2018-09-19 07:03:04 +00:00
|
|
|
if(LOVR_ENABLE_EVENT)
|
|
|
|
add_definitions(-DLOVR_ENABLE_EVENT)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE
|
2019-05-19 07:38:35 +00:00
|
|
|
src/modules/event/event.c
|
2019-05-18 00:11:22 +00:00
|
|
|
src/api/l_event.c
|
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)
|
|
|
|
add_definitions(-DLOVR_ENABLE_FILESYSTEM)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE
|
2019-05-19 07:38:35 +00:00
|
|
|
src/modules/filesystem/filesystem.c
|
2019-12-18 01:06:42 +00:00
|
|
|
src/modules/filesystem/file.c
|
2019-05-18 00:11:22 +00:00
|
|
|
src/api/l_filesystem.c
|
2018-09-19 07:03:04 +00:00
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(LOVR_ENABLE_GRAPHICS)
|
|
|
|
add_definitions(-DLOVR_ENABLE_GRAPHICS)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE
|
2019-05-19 07:38:35 +00:00
|
|
|
src/modules/graphics/font.c
|
|
|
|
src/modules/graphics/graphics.c
|
|
|
|
src/modules/graphics/material.c
|
|
|
|
src/modules/graphics/model.c
|
|
|
|
src/modules/graphics/opengl.c
|
2019-05-18 00:11:22 +00:00
|
|
|
src/api/l_graphics.c
|
2020-01-01 03:31:44 +00:00
|
|
|
src/api/l_graphics_canvas.c
|
|
|
|
src/api/l_graphics_font.c
|
|
|
|
src/api/l_graphics_material.c
|
|
|
|
src/api/l_graphics_mesh.c
|
|
|
|
src/api/l_graphics_model.c
|
|
|
|
src/api/l_graphics_shader.c
|
|
|
|
src/api/l_graphics_shaderBlock.c
|
|
|
|
src/api/l_graphics_texture.c
|
2018-09-19 07:03:04 +00:00
|
|
|
src/resources/shaders.c
|
|
|
|
src/lib/glad/glad.c
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(LOVR_ENABLE_HEADSET)
|
|
|
|
add_definitions(-DLOVR_ENABLE_HEADSET)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE
|
2019-05-18 00:11:22 +00:00
|
|
|
src/api/l_headset.c
|
2019-05-19 07:38:35 +00:00
|
|
|
src/modules/headset/headset.c
|
2018-09-19 07:03:04 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
if(LOVR_USE_OPENVR)
|
|
|
|
add_definitions(-DLOVR_USE_OPENVR)
|
2020-05-24 19:31:14 +00:00
|
|
|
target_sources(lovr PRIVATE src/modules/headset/headset_openvr.c)
|
2019-11-12 03:14:35 +00:00
|
|
|
if(UNIX)
|
|
|
|
target_compile_options(lovr PRIVATE -Wno-typedef-redefinition)
|
|
|
|
endif()
|
2018-10-21 16:00:18 +00:00
|
|
|
endif()
|
2019-10-02 23:29:09 +00:00
|
|
|
if(LOVR_USE_OPENXR)
|
|
|
|
add_definitions(-DLOVR_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)
|
|
|
|
add_definitions(-DLOVR_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)
|
|
|
|
add_definitions(-DLOVR_USE_VRAPI)
|
|
|
|
target_sources(lovr PRIVATE src/modules/headset/headset_vrapi.c)
|
|
|
|
endif()
|
2020-07-27 19:58:52 +00:00
|
|
|
if(LOVR_USE_PICO)
|
|
|
|
add_definitions(-DLOVR_USE_PICO)
|
|
|
|
target_sources(lovr PRIVATE src/modules/headset/headset_pico.c)
|
|
|
|
endif()
|
2020-05-06 21:07:59 +00:00
|
|
|
if(LOVR_USE_WEBXR)
|
|
|
|
add_definitions(-DLOVR_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)
|
|
|
|
add_definitions(-DLOVR_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()
|
|
|
|
endif()
|
2018-10-21 16:00:18 +00:00
|
|
|
|
2018-09-19 07:03:04 +00:00
|
|
|
if(LOVR_ENABLE_MATH)
|
|
|
|
add_definitions(-DLOVR_ENABLE_MATH)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE
|
2019-05-19 07:38:35 +00:00
|
|
|
src/modules/math/math.c
|
|
|
|
src/modules/math/curve.c
|
|
|
|
src/modules/math/pool.c
|
|
|
|
src/modules/math/randomGenerator.c
|
2019-05-18 00:11:22 +00:00
|
|
|
src/api/l_math.c
|
2020-01-01 03:31:44 +00:00
|
|
|
src/api/l_math_curve.c
|
|
|
|
src/api/l_math_randomGenerator.c
|
|
|
|
src/api/l_math_vectors.c
|
2018-09-19 07:03:04 +00:00
|
|
|
src/lib/noise1234/noise1234.c
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(LOVR_ENABLE_PHYSICS)
|
|
|
|
add_definitions(-DLOVR_ENABLE_PHYSICS)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE
|
2019-05-19 07:38:35 +00:00
|
|
|
src/modules/physics/physics.c
|
2019-05-18 00:11:22 +00:00
|
|
|
src/api/l_physics.c
|
2020-01-01 03:31:44 +00:00
|
|
|
src/api/l_physics_collider.c
|
|
|
|
src/api/l_physics_joints.c
|
|
|
|
src/api/l_physics_shapes.c
|
|
|
|
src/api/l_physics_world.c
|
2018-10-21 16:00:18 +00:00
|
|
|
)
|
2018-10-20 19:22:24 +00:00
|
|
|
endif()
|
|
|
|
|
2018-09-19 07:03:04 +00:00
|
|
|
if(LOVR_ENABLE_THREAD)
|
|
|
|
add_definitions(-DLOVR_ENABLE_THREAD)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE
|
2019-05-19 07:38:35 +00:00
|
|
|
src/modules/thread/channel.c
|
|
|
|
src/modules/thread/thread.c
|
2019-05-18 00:11:22 +00:00
|
|
|
src/api/l_thread.c
|
2020-01-01 03:31:44 +00:00
|
|
|
src/api/l_thread_channel.c
|
|
|
|
src/api/l_thread_thread.c
|
2018-09-19 07:03:04 +00:00
|
|
|
src/lib/tinycthread/tinycthread.c
|
|
|
|
)
|
|
|
|
endif()
|
2017-06-18 04:09:03 +00:00
|
|
|
|
2018-09-19 07:03:04 +00:00
|
|
|
if(LOVR_ENABLE_TIMER)
|
|
|
|
add_definitions(-DLOVR_ENABLE_TIMER)
|
2019-05-19 07:38:35 +00:00
|
|
|
target_sources(lovr PRIVATE src/modules/timer/timer.c src/api/l_timer.c)
|
2018-09-19 07:03:04 +00:00
|
|
|
endif()
|
2016-07-15 08:16:08 +00:00
|
|
|
|
2018-09-19 07:03:04 +00:00
|
|
|
if(LOVR_ENABLE_ENET)
|
|
|
|
add_definitions(-DLOVR_ENABLE_ENET)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE src/lib/lua-enet/enet.c)
|
2018-09-19 07:03:04 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if(LOVR_ENABLE_JSON)
|
|
|
|
add_definitions(-DLOVR_ENABLE_JSON)
|
2018-09-21 03:34:57 +00:00
|
|
|
target_sources(lovr PRIVATE
|
2018-09-19 07:03:04 +00:00
|
|
|
src/lib/lua-cjson/fpconv.c
|
|
|
|
src/lib/lua-cjson/lua_cjson.c
|
|
|
|
src/lib/lua-cjson/strbuf.c
|
|
|
|
)
|
2018-10-20 19:22:24 +00:00
|
|
|
endif()
|
|
|
|
|
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")
|
2019-02-17 22:58:01 +00:00
|
|
|
target_compile_definitions(lovr PUBLIC -D_CRT_SECURE_NO_WARNINGS)
|
2019-03-17 07:58:01 +00:00
|
|
|
target_compile_definitions(lovr PUBLIC -D_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)
|
|
|
|
target_compile_definitions(lovr PUBLIC -Dinline=__inline -Dsnprintf=_snprintf)
|
|
|
|
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
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
2019-03-06 19:06:02 +00:00
|
|
|
$<TARGET_FILE:${ARGV0}>
|
2019-11-07 22:08:44 +00:00
|
|
|
$<TARGET_FILE_DIR:lovr>/$<TARGET_FILE_NAME:${ARGV0}>
|
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_OPENAL})
|
|
|
|
move_dll(${LOVR_OPENVR})
|
2020-01-06 19:19:13 +00:00
|
|
|
move_dll(${LOVR_MSDF})
|
2019-01-29 23:05:23 +00:00
|
|
|
target_compile_definitions(lovr PRIVATE -DLOVR_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)
|
2019-01-29 23:05:23 +00:00
|
|
|
target_compile_definitions(lovr PRIVATE -DLOVR_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
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
|
|
$<TARGET_SONAME_FILE:${ARGV0}>
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/lovr.app/Contents/MacOS/$<TARGET_SONAME_FILE_NAME:${ARGV0}> # Bad
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
move_lib(${LOVR_GLFW})
|
|
|
|
move_lib(${LOVR_LUA})
|
|
|
|
move_lib(${LOVR_ODE})
|
|
|
|
move_lib(${LOVR_OPENAL})
|
|
|
|
move_lib(${LOVR_OPENVR})
|
2020-01-25 06:10:15 +00:00
|
|
|
move_lib(${LOVR_MSDF})
|
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
|
|
|
|
MACOSX_BUNDLE TRUE
|
|
|
|
MACOSX_RPATH TRUE
|
|
|
|
BUILD_WITH_INSTALL_RPATH TRUE
|
|
|
|
INSTALL_RPATH "@executable_path"
|
|
|
|
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Info.plist"
|
|
|
|
RESOURCE "${CMAKE_CURRENT_SOURCE_DIR}/src/resources/lovr.icns"
|
|
|
|
)
|
|
|
|
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)
|
2019-01-29 23:05:23 +00:00
|
|
|
target_compile_definitions(lovr PRIVATE -DLOVR_WEBGL)
|
2018-11-07 15:24:44 +00:00
|
|
|
elseif(ANDROID)
|
2020-06-28 03:20:40 +00:00
|
|
|
target_link_libraries(lovr log EGL GLESv3 android)
|
2019-01-29 23:05:23 +00:00
|
|
|
target_compile_definitions(lovr PRIVATE -DLOVR_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-07-27 23:20:58 +00:00
|
|
|
# Dynamically linked targets output libraries in lib/<ABI> for easy including in apk with aapt
|
|
|
|
set_target_properties(
|
|
|
|
lovr ${LOVR_ODE} ${LOVR_OPENAL}
|
|
|
|
PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib/${ANDROID_ABI}"
|
|
|
|
)
|
|
|
|
|
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:
|
|
|
|
# - Imported targets need to have their libraries manually copied to lib/<ABI>
|
|
|
|
# - 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)
|
|
|
|
file(COPY ${OPENXR_LIB} DESTINATION lib/${ANDROID_ABI})
|
|
|
|
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)
|
|
|
|
file(COPY ${VRAPI_LIB} DESTINATION 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)
|
|
|
|
file(COPY ${PICO_LIB} DESTINATION 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-07-27 18:48:01 +00:00
|
|
|
# Make an apk
|
|
|
|
add_custom_command(
|
|
|
|
TARGET lovr
|
|
|
|
POST_BUILD
|
|
|
|
BYPRODUCTS lovr.apk
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
2020-07-27 20:18:28 +00:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy "${ANDROID_MANIFEST}" AndroidManifest.xml
|
2020-08-30 01:45:52 +00:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Activity_${ACTIVITY}.java Activity.java
|
2020-07-27 20:25:57 +00:00
|
|
|
COMMAND ${Java_JAVAC_EXECUTABLE} -classpath "${ANDROID_CLASSPATH}" -d . Activity.java
|
|
|
|
COMMAND ${ANDROID_TOOLS}/dx --dex --output classes.dex ${EXTRA_JAR} org/lovr/app/Activity.class
|
2020-07-27 18:48:01 +00:00
|
|
|
COMMAND
|
|
|
|
${ANDROID_TOOLS}/aapt
|
|
|
|
package -f
|
2020-07-27 20:18:28 +00:00
|
|
|
-M AndroidManifest.xml
|
2020-07-27 18:48:01 +00:00
|
|
|
-I ${ANDROID_JAR}
|
|
|
|
-F lovr.unaligned.apk
|
|
|
|
${ANDROID_ASSETS}
|
|
|
|
COMMAND
|
|
|
|
${ANDROID_TOOLS}/aapt
|
|
|
|
add -f lovr.unaligned.apk
|
2020-07-27 19:16:07 +00:00
|
|
|
classes.dex lib/${ANDROID_ABI}/*.so
|
2020-07-27 18:48:01 +00:00
|
|
|
COMMAND ${ANDROID_TOOLS}/zipalign -f 4 lovr.unaligned.apk lovr.unsigned.apk
|
|
|
|
COMMAND ${ANDROID_TOOLS}/apksigner
|
|
|
|
sign
|
|
|
|
--ks ${ANDROID_KEYSTORE}
|
|
|
|
--ks-pass ${ANDROID_KEYSTORE_PASS}
|
|
|
|
--in lovr.unsigned.apk
|
|
|
|
--out lovr.apk
|
2020-07-27 20:18:28 +00:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E remove lovr.unaligned.apk lovr.unsigned.apk AndroidManifest.xml Activity.java classes.dex
|
2020-07-27 19:16:22 +00:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory org
|
2020-07-27 18:48:01 +00:00
|
|
|
)
|
|
|
|
endif()
|
2018-10-30 00:13:53 +00:00
|
|
|
elseif(UNIX)
|
2019-12-14 03:36:46 +00:00
|
|
|
target_sources(lovr PRIVATE src/core/os_linux.c)
|
2019-01-29 23:05:23 +00:00
|
|
|
target_compile_definitions(lovr PRIVATE -DLOVR_GL)
|
2016-10-04 21:47:48 +00:00
|
|
|
endif()
|