2016-07-10 23:14:12 +00:00
|
|
|
cmake_minimum_required(VERSION 3.0.0)
|
2017-05-29 17:31:46 +00:00
|
|
|
project(lovr)
|
2016-07-15 08:16:08 +00:00
|
|
|
|
2017-06-02 06:48:46 +00:00
|
|
|
# Setup
|
2017-06-11 06:18:04 +00:00
|
|
|
if(EMSCRIPTEN)
|
2017-06-18 04:09:03 +00:00
|
|
|
add_definitions(-DLOVR_WEB=1)
|
2017-06-02 06:48:46 +00:00
|
|
|
set(CMAKE_EXECUTABLE_SUFFIX ".html")
|
2017-06-18 04:09:03 +00:00
|
|
|
set(LOVR_EMSCRIPTEN_FLAGS "-O3 -s USE_WEBGL2=1 -s FULL_ES3=1 -s USE_FREETYPE=1 -s USE_GLFW=3 -s USE_ZLIB=1 -s ASSERTIONS=1 -s AGGRESSIVE_VARIABLE_ELIMINATION=1 -s NO_EXIT_RUNTIME=1 -s TOTAL_MEMORY=134217728 -s ELIMINATE_DUPLICATE_FUNCTIONS=1")
|
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LOVR_EMSCRIPTEN_FLAGS}")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LOVR_EMSCRIPTEN_FLAGS}")
|
2017-06-02 06:48:46 +00:00
|
|
|
include_directories("${EMSCRIPTEN_ROOT_PATH}/tests/zlib")
|
2017-06-11 06:18:04 +00:00
|
|
|
elseif(UNIX)
|
|
|
|
find_package(PkgConfig REQUIRED)
|
2016-10-04 21:47:48 +00:00
|
|
|
endif()
|
|
|
|
|
2017-06-02 06:48:46 +00:00
|
|
|
# Assimp
|
|
|
|
set(ASSIMP_BUILD_ASSIMP_TOOLS OFF CACHE BOOL "")
|
|
|
|
set(ASSIMP_BUILD_TESTS OFF CACHE BOOL "")
|
|
|
|
set(ASSIMP_NO_EXPORT ON OFF CACHE BOOL "")
|
|
|
|
set(ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT OFF CACHE BOOL "")
|
|
|
|
set(ASSIMP_BUILD_COLLADA_IMPORTER ON CACHE BOOL "")
|
|
|
|
set(ASSIMP_BUILD_OBJ_IMPORTER ON CACHE BOOL "")
|
|
|
|
set(ASSIMP_BUILD_FBX_IMPORTER ON CACHE BOOL "")
|
2017-04-16 23:56:49 +00:00
|
|
|
if(EMSCRIPTEN)
|
|
|
|
set(ZLIB_FOUND 1)
|
|
|
|
set(ZLIB_LIBRARIES "-s USE_ZLIB=1")
|
2017-06-02 06:48:46 +00:00
|
|
|
set(ZLIB_INCLUDE_DIR "${EMSCRIPTEN_ROOT_PATH}/tests/zlib")
|
|
|
|
add_subdirectory(deps/assimp assimp)
|
|
|
|
include_directories(deps/assimp/include)
|
|
|
|
set(LOVR_ASSIMP assimp)
|
2017-04-16 23:56:49 +00:00
|
|
|
elseif(WIN32)
|
2017-06-02 06:48:46 +00:00
|
|
|
add_subdirectory(deps/assimp assimp)
|
|
|
|
include_directories(deps/assimp/include)
|
|
|
|
set(LOVR_ASSIMP assimp)
|
2016-10-04 21:47:48 +00:00
|
|
|
else()
|
2017-06-02 06:48:46 +00:00
|
|
|
pkg_search_module(ASSIMP REQUIRED assimp)
|
|
|
|
include_directories(${ASSIMP_INCLUDE_DIRS})
|
|
|
|
set(LOVR_ASSIMP ${ASSIMP_LIBRARIES})
|
2016-10-04 21:47:48 +00:00
|
|
|
endif()
|
2016-07-10 23:14:12 +00:00
|
|
|
|
2017-06-02 06:48:46 +00:00
|
|
|
# FreeType
|
|
|
|
if (EMSCRIPTEN)
|
2017-06-11 06:18:04 +00:00
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_FREETYPE=1")
|
2017-06-02 06:48:46 +00:00
|
|
|
elseif (WIN32)
|
|
|
|
set(FREETYPE_NO_DIST TRUE CACHE BOOL "")
|
2017-06-10 09:59:12 +00:00
|
|
|
set(BUILD_SHARED_LIBS OFF)
|
2017-06-02 06:48:46 +00:00
|
|
|
add_subdirectory(deps/freetype freetype)
|
2017-06-10 09:59:12 +00:00
|
|
|
set(BUILD_SHARED_LIBS ON)
|
2017-06-02 06:48:46 +00:00
|
|
|
include_directories(deps/freetype/include)
|
|
|
|
set(LOVR_FREETYPE freetype)
|
|
|
|
else()
|
|
|
|
pkg_search_module(FREETYPE REQUIRED freetype2)
|
|
|
|
include_directories(${FREETYPE_INCLUDE_DIRS})
|
|
|
|
set(LOVR_FREETYPE ${FREETYPE_LIBRARIES})
|
2016-10-04 21:47:48 +00:00
|
|
|
endif()
|
2016-07-16 03:47:38 +00:00
|
|
|
|
2016-07-10 23:14:12 +00:00
|
|
|
# GLFW
|
2017-03-31 07:06:05 +00:00
|
|
|
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "")
|
|
|
|
set(GLFW_BUILD_TESTS OFF CACHE BOOL "")
|
|
|
|
set(GLFW_BUILD_DOCS OFF CACHE BOOL "")
|
2017-06-18 04:09:03 +00:00
|
|
|
if(WIN32)
|
2016-10-04 21:47:48 +00:00
|
|
|
add_subdirectory(deps/glfw glfw)
|
|
|
|
include_directories(deps/glfw/include)
|
|
|
|
set(LOVR_GLFW glfw ${GLFW_LIBRARIES})
|
2017-06-18 04:09:03 +00:00
|
|
|
elseif(NOT EMSCRIPTEN)
|
2016-10-04 21:47:48 +00:00
|
|
|
pkg_search_module(GLFW REQUIRED glfw3)
|
|
|
|
include_directories(${GLFW_INCLUDE_DIRS})
|
|
|
|
set(LOVR_GLFW ${GLFW_LIBRARIES})
|
|
|
|
endif()
|
2016-07-15 08:16:08 +00:00
|
|
|
|
2017-06-02 06:48:46 +00:00
|
|
|
# Lua
|
2017-04-16 23:56:49 +00:00
|
|
|
if(EMSCRIPTEN)
|
2017-06-02 06:48:46 +00:00
|
|
|
option(LUA_USE_RELATIVE_LOADLIB OFF)
|
|
|
|
option(LUA_USE_ULONGJMP OFF)
|
|
|
|
add_subdirectory(deps/lua lua)
|
2017-06-18 04:09:03 +00:00
|
|
|
set_target_properties(lua luac liblua liblua_static PROPERTIES EXCLUDE_FROM_ALL 1)
|
2017-06-02 06:48:46 +00:00
|
|
|
include_directories(deps/lua/src ${CMAKE_BINARY_DIR}/lua)
|
|
|
|
set(LOVR_LUA liblua_static)
|
2017-04-16 23:56:49 +00:00
|
|
|
elseif(WIN32)
|
2017-06-02 06:48:46 +00:00
|
|
|
add_subdirectory(deps/luajit luajit)
|
|
|
|
include_directories(deps/luajit/src ${CMAKE_BINARY_DIR}/luajit)
|
|
|
|
set(LOVR_LUA liblua)
|
2016-11-01 00:25:49 +00:00
|
|
|
else()
|
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()
|
|
|
|
pkg_search_module(LUAJIT REQUIRED luajit)
|
|
|
|
include_directories(${LUAJIT_INCLUDE_DIRS})
|
|
|
|
set(LOVR_LUA ${LUAJIT_LIBRARIES})
|
2016-11-01 00:25:49 +00:00
|
|
|
endif()
|
|
|
|
|
2017-07-14 15:21:47 +00:00
|
|
|
# MSDF
|
2017-07-19 04:48:08 +00:00
|
|
|
set(BUILD_SHARED_LIBS OFF)
|
2017-07-14 15:21:47 +00:00
|
|
|
add_subdirectory(deps/msdfgen lib_msdfgen)
|
2017-07-19 04:48:08 +00:00
|
|
|
set(BUILD_SHARED_LIBS ON)
|
2017-07-14 15:21:47 +00:00
|
|
|
include_directories(deps/msdfgen)
|
|
|
|
set(LOVR_MSDF lib_msdfgen)
|
|
|
|
|
2017-06-02 06:48:46 +00:00
|
|
|
# ODE
|
2017-06-18 04:09:03 +00:00
|
|
|
if(EMSCRIPTEN)
|
|
|
|
set(ODE_BUILD_SHARED OFF CACHE BOOL "")
|
|
|
|
add_subdirectory(deps/ode ode)
|
|
|
|
include_directories(deps/ode/include "${CMAKE_CURRENT_BINARY_DIR}/ode/include")
|
|
|
|
set(LOVR_ODE ode)
|
|
|
|
elseif(WIN32)
|
2017-06-10 10:12:31 +00:00
|
|
|
set(ODE_BUILD_SHARED ON CACHE BOOL "")
|
2017-06-02 06:48:46 +00:00
|
|
|
add_subdirectory(deps/ode ode)
|
|
|
|
include_directories(deps/ode/include "${CMAKE_CURRENT_BINARY_DIR}/ode/include")
|
|
|
|
set(LOVR_ODE ode)
|
2016-10-04 21:47:48 +00:00
|
|
|
else()
|
2017-06-02 06:48:46 +00:00
|
|
|
pkg_search_module(ODE REQUIRED ode)
|
|
|
|
include_directories(${ODE_INCLUDE_DIRS})
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lstdc++")
|
|
|
|
set(LOVR_ODE ode)
|
2016-10-04 21:47:48 +00:00
|
|
|
endif()
|
|
|
|
|
2017-01-07 02:43:24 +00:00
|
|
|
# OpenAL
|
2017-03-31 07:06:05 +00:00
|
|
|
set(ALSOFT_UTILS OFF CACHE BOOL "")
|
|
|
|
set(ALSOFT_EXAMPLES OFF CACHE BOOL "")
|
|
|
|
set(ALSOFT_TESTS OFF CACHE BOOL "")
|
2017-01-07 02:43:24 +00:00
|
|
|
if (WIN32)
|
|
|
|
add_subdirectory(deps/openal-soft openal)
|
|
|
|
include_directories(deps/openal-soft/include)
|
|
|
|
set(LOVR_OPENAL OpenAL32)
|
2017-04-16 23:56:49 +00:00
|
|
|
elseif(NOT EMSCRIPTEN)
|
2017-04-14 06:11:03 +00:00
|
|
|
pkg_search_module(OPENAL REQUIRED openal)
|
|
|
|
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})
|
2017-01-07 02:43:24 +00:00
|
|
|
endif()
|
|
|
|
|
2017-06-02 06:48:46 +00:00
|
|
|
# OpenGL
|
|
|
|
if(NOT WIN32)
|
|
|
|
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
|
2017-04-16 23:56:49 +00:00
|
|
|
if(NOT EMSCRIPTEN)
|
|
|
|
if(NOT DEFINED OPENVR_DIR AND IS_DIRECTORY "${PROJECT_SOURCE_DIR}/deps/openvr")
|
|
|
|
SET(OPENVR_DIR deps/openvr)
|
|
|
|
else()
|
|
|
|
message(FATAL_ERROR "Please specify the location of OpenVR (-DOPENVR_DIR=/path/to/openvr)")
|
|
|
|
endif()
|
|
|
|
if(APPLE)
|
|
|
|
add_definitions(-DOSX -DPOSIX)
|
|
|
|
elseif(UNIX)
|
|
|
|
add_definitions(-DLINUX -DPOSIX)
|
|
|
|
endif()
|
|
|
|
set(BUILD_SHARED ON CACHE BOOL "")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fPIC -fvisibility=hidden")
|
|
|
|
add_definitions(-DVR_API_PUBLIC)
|
|
|
|
include_directories(${OPENVR_DIR}/headers)
|
|
|
|
include_directories(${OPENVR_DIR}/src)
|
|
|
|
include_directories(${OPENVR_DIR}/src/vrcommon)
|
|
|
|
add_subdirectory(${OPENVR_DIR}/src openvr_api)
|
|
|
|
set(LOVR_OPENVR openvr_api)
|
|
|
|
endif()
|
2017-03-31 07:06:05 +00:00
|
|
|
|
2017-06-02 06:48:46 +00:00
|
|
|
# PhysicsFS
|
|
|
|
set(PHYSFS_BUILD_STATIC OFF CACHE BOOL "")
|
|
|
|
set(PHYSFS_ARCHIVE_7Z OFF CACHE BOOL "")
|
|
|
|
set(PHYSFS_ARCHIVE_GRP OFF CACHE BOOL "")
|
|
|
|
set(PHYSFS_ARCHIVE_WAD OFF CACHE BOOL "")
|
|
|
|
set(PHYSFS_ARCHIVE_HOG OFF CACHE BOOL "")
|
|
|
|
set(PHYSFS_ARCHIVE_MVL OFF CACHE BOOL "")
|
|
|
|
set(PHYSFS_ARCHIVE_QPAK OFF CACHE BOOL "")
|
|
|
|
set(PHYSFS_BUILD_TEST OFF CACHE BOOL "")
|
|
|
|
set(PHYSFS_BUILD_WX_TEST FALSE CACHE BOOL "")
|
2017-06-11 06:18:04 +00:00
|
|
|
if(EMSCRIPTEN)
|
|
|
|
option(PHYSFS_ARCHIVE_ZIP OFF)
|
|
|
|
add_subdirectory(deps/physfs physfs)
|
|
|
|
include_directories(deps/physfs)
|
|
|
|
set(LOVR_PHYSFS physfs)
|
|
|
|
elseif(WIN32)
|
2017-06-02 06:48:46 +00:00
|
|
|
add_subdirectory(deps/physfs physfs)
|
|
|
|
include_directories(deps/physfs)
|
|
|
|
set(LOVR_PHYSFS physfs)
|
|
|
|
else()
|
|
|
|
find_package(PhysFS REQUIRED)
|
|
|
|
include_directories(${PHYSFS_INCLUDE_DIR})
|
|
|
|
set(LOVR_PHYSFS ${PHYSFS_LIBRARY})
|
|
|
|
endif()
|
2017-05-29 04:53:19 +00:00
|
|
|
|
2017-06-02 06:48:46 +00:00
|
|
|
# LÖVR
|
|
|
|
set(LOVR_SRC
|
|
|
|
src/api/audio.c
|
|
|
|
src/api/event.c
|
|
|
|
src/api/filesystem.c
|
|
|
|
src/api/graphics.c
|
|
|
|
src/api/headset.c
|
|
|
|
src/api/math.c
|
|
|
|
src/api/physics.c
|
|
|
|
src/api/timer.c
|
|
|
|
src/api/types/blob.c
|
|
|
|
src/api/types/collider.c
|
|
|
|
src/api/types/controller.c
|
|
|
|
src/api/types/font.c
|
|
|
|
src/api/types/joints.c
|
|
|
|
src/api/types/mesh.c
|
|
|
|
src/api/types/model.c
|
|
|
|
src/api/types/shader.c
|
|
|
|
src/api/types/shapes.c
|
|
|
|
src/api/types/skybox.c
|
|
|
|
src/api/types/source.c
|
|
|
|
src/api/types/texture.c
|
|
|
|
src/api/types/transform.c
|
|
|
|
src/api/types/world.c
|
|
|
|
src/audio/audio.c
|
|
|
|
src/audio/source.c
|
|
|
|
src/event/event.c
|
|
|
|
src/filesystem/blob.c
|
|
|
|
src/filesystem/filesystem.c
|
|
|
|
src/graphics/font.c
|
|
|
|
src/graphics/graphics.c
|
|
|
|
src/graphics/mesh.c
|
|
|
|
src/graphics/model.c
|
|
|
|
src/graphics/shader.c
|
|
|
|
src/graphics/skybox.c
|
|
|
|
src/graphics/texture.c
|
|
|
|
src/headset/headset.c
|
2017-06-24 02:42:58 +00:00
|
|
|
src/lib/glad/glad.c
|
2017-06-02 06:48:46 +00:00
|
|
|
src/lib/lua-cjson/fpconv.c
|
|
|
|
src/lib/lua-cjson/lua_cjson.c
|
|
|
|
src/lib/lua-cjson/strbuf.c
|
|
|
|
src/lib/map/map.c
|
|
|
|
src/lib/stb/stb_image.c
|
|
|
|
src/lib/stb/stb_vorbis.c
|
|
|
|
src/lib/vec/vec.c
|
|
|
|
src/loaders/font.c
|
|
|
|
src/loaders/model.c
|
|
|
|
src/loaders/source.c
|
|
|
|
src/loaders/texture.c
|
|
|
|
src/lovr.c
|
|
|
|
src/luax.c
|
|
|
|
src/main.c
|
|
|
|
src/math/mat4.c
|
|
|
|
src/math/quat.c
|
|
|
|
src/math/transform.c
|
|
|
|
src/math/vec3.c
|
|
|
|
src/physics/physics.c
|
|
|
|
src/timer/timer.c
|
|
|
|
src/util.c
|
|
|
|
)
|
2017-05-29 04:53:19 +00:00
|
|
|
|
2017-06-02 06:48:46 +00:00
|
|
|
if(EMSCRIPTEN)
|
|
|
|
set(LOVR_HEADSET src/headset/webvr.c)
|
|
|
|
else()
|
|
|
|
set(LOVR_HEADSET src/headset/openvr.c)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
|
|
add_executable(lovr ${LOVR_SRC} ${LOVR_HEADSET})
|
2017-06-02 05:06:13 +00:00
|
|
|
target_link_libraries(lovr
|
2016-07-15 08:16:08 +00:00
|
|
|
${LOVR_ASSIMP}
|
2017-02-07 04:40:48 +00:00
|
|
|
${LOVR_FREETYPE}
|
2017-06-02 06:48:46 +00:00
|
|
|
${LOVR_GLFW}
|
|
|
|
${LOVR_LUA}
|
2017-07-14 15:21:47 +00:00
|
|
|
${LOVR_MSDF}
|
2017-05-27 06:23:41 +00:00
|
|
|
${LOVR_ODE}
|
2017-06-03 21:18:17 +00:00
|
|
|
${LOVR_OPENAL}
|
2017-06-02 06:48:46 +00:00
|
|
|
${LOVR_OPENGL}
|
|
|
|
${LOVR_OPENVR}
|
|
|
|
${LOVR_PHYSFS}
|
2017-06-18 04:09:03 +00:00
|
|
|
|
|
|
|
${LOVR_EMSCRIPTEN_FLAGS}
|
2016-07-15 08:16:08 +00:00
|
|
|
)
|
|
|
|
|
2016-10-04 21:47:48 +00:00
|
|
|
if(WIN32)
|
2017-06-02 06:48:46 +00:00
|
|
|
function(move_dll ARG_TARGET)
|
|
|
|
add_custom_command(TARGET lovr POST_BUILD
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
|
|
$<TARGET_FILE:${ARG_TARGET}>
|
|
|
|
${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/$<TARGET_FILE_NAME:${ARG_TARGET}>
|
|
|
|
)
|
|
|
|
endfunction()
|
|
|
|
|
2016-10-04 21:47:48 +00:00
|
|
|
move_dll(${LOVR_ASSIMP})
|
2017-06-02 06:48:46 +00:00
|
|
|
move_dll(${LOVR_GLFW})
|
|
|
|
move_dll(${LOVR_LUA})
|
2017-06-10 10:12:31 +00:00
|
|
|
move_dll(${LOVR_ODE})
|
2017-01-07 02:43:24 +00:00
|
|
|
move_dll(${LOVR_OPENAL})
|
2017-03-31 07:06:05 +00:00
|
|
|
move_dll(${LOVR_OPENVR})
|
2017-06-02 06:48:46 +00:00
|
|
|
move_dll(${LOVR_PHYSFS})
|
2016-10-04 21:47:48 +00:00
|
|
|
endif()
|