lovr/CMakeLists.txt

377 lines
11 KiB
CMake
Raw Normal View History

cmake_minimum_required(VERSION 3.1.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-07-31 10:45:57 +00:00
string(CONCAT LOVR_EMSCRIPTEN_FLAGS
"-O3 "
2018-05-03 02:01:20 +00:00
"-s WASM=1 "
2017-07-31 10:45:57 +00:00
"-s USE_GLFW=3 "
2018-05-03 02:01:20 +00:00
"-s USE_WEBGL2=1 "
2018-05-18 06:51:07 +00:00
"-s GL_PREINITIALIZED_CONTEXT=1 "
"-s USE_ZLIB=1 "
2018-05-03 02:01:20 +00:00
"-s FULL_ES3=1 "
"-s FORCE_FILESYSTEM=1 "
2017-09-03 00:31:20 +00:00
"-s ALLOW_MEMORY_GROWTH=1 "
2018-05-28 01:58:30 +00:00
"-s \"EXPORTED_FUNCTIONS=[ "
"'_main','_lovrRun','_lovrQuit','_lovrDestroy',"
"'_mat4_identity','_mat4_invert','_mat4_multiply','_mat4_rotateQuat','_mat4_transform','_mat4_transformDirection','_mat4_translate',"
"'_quat_fromMat4','_quat_getAngleAxis'"
"]\" "
2018-04-29 21:38:08 +00:00
"-s \"EXTRA_EXPORTED_RUNTIME_METHODS=['getValue','setValue']\" "
2018-05-01 22:24:03 +00:00
"--js-library \"${CMAKE_CURRENT_SOURCE_DIR}/src/resources/lovr.js\""
2017-07-31 10:45:57 +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")
2017-06-11 06:18:04 +00:00
elseif(UNIX)
find_package(PkgConfig REQUIRED)
2016-10-04 21:47:48 +00:00
endif()
2017-10-23 04:55:23 +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 "")
2018-05-01 22:53:36 +00:00
set(PHYSFS_ARCHIVE_SLB OFF CACHE BOOL "")
set(PHYSFS_ARCHIVE_ISO9660 OFF CACHE BOOL "")
set(PHYSFS_ARCHIVE_VDF OFF CACHE BOOL "")
2017-10-23 04:55:23 +00:00
set(PHYSFS_BUILD_TEST OFF CACHE BOOL "")
set(PHYSFS_BUILD_WX_TEST FALSE CACHE BOOL "")
if(EMSCRIPTEN)
add_subdirectory(deps/physfs physfs)
include_directories(deps/physfs/src)
set(LOVR_PHYSFS physfs)
elseif(WIN32)
add_subdirectory(deps/physfs physfs)
include_directories(deps/physfs/src)
set(LOVR_PHYSFS physfs)
else()
find_package(PhysFS REQUIRED)
include_directories(${PHYSFS_INCLUDE_DIR})
set(LOVR_PHYSFS ${PHYSFS_LIBRARY})
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 "")
2018-05-01 22:53:36 +00:00
set(ASSIMP_NO_EXPORT ON CACHE BOOL "")
2017-06-02 06:48:46 +00:00
set(ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT OFF CACHE BOOL "")
set(ASSIMP_BUILD_FBX_IMPORTER ON CACHE BOOL "")
2017-10-21 22:31:41 +00:00
set(ASSIMP_BUILD_GLTF_IMPORTER ON CACHE BOOL "")
set(ASSIMP_BUILD_OBJ_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")
set(ZLIB_INCLUDE_DIR "assimp/contrib/zlib")
2017-06-02 06:48:46 +00:00
add_subdirectory(deps/assimp assimp)
2017-11-21 06:03:57 +00:00
include_directories(deps/assimp/include ${CMAKE_BINARY_DIR}/assimp/include)
2017-06-02 06:48:46 +00:00
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)
2017-11-21 06:03:57 +00:00
include_directories(deps/assimp/include ${CMAKE_BINARY_DIR}/assimp/include)
2017-06-02 06:48:46 +00:00
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-07-24 02:27:21 +00:00
# enet
2017-07-24 06:02:57 +00:00
if(EMSCRIPTEN)
2017-08-03 07:32:31 +00:00
set(HAVE_HAS_SOCKLEN_T TRUE CACHE BOOL "")
2017-07-24 06:02:57 +00:00
add_definitions(-D__APPLE__)
add_subdirectory(deps/enet enet)
2017-07-31 05:12:12 +00:00
include_directories(deps/enet/include)
2017-07-24 06:02:57 +00:00
set(LOVR_ENET enet)
remove_definitions(-D__APPLE__)
else()
add_subdirectory(deps/enet enet)
include_directories(deps/enet/include)
set(LOVR_ENET enet)
2017-07-24 08:29:14 +00:00
if(WIN32)
set(LOVR_ENET ${LOVR_ENET} ws2_32 winmm)
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
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 "")
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})
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()
2017-07-24 05:56:45 +00:00
unset(LIB_SUFFIX CACHE)
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)
option(LUA_USE_POPEN OFF)
2017-06-02 06:48:46 +00:00
add_subdirectory(deps/lua lua)
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
if(EMSCRIPTEN)
set(ODE_BUILD_SHARED OFF CACHE BOOL "")
add_subdirectory(deps/ode ode)
set_target_properties(ode PROPERTIES COMPILE_FLAGS "-Wno-unused-volatile-lvalue -Wno-array-bounds -Wno-undefined-var-template")
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++")
if(APPLE)
set(LOVR_ODE ode ccd)
else()
set(LOVR_ODE ode)
endif()
2016-10-04 21:47:48 +00:00
endif()
2017-01-07 02:43:24 +00:00
# OpenAL
set(USE_OPENAL ON CACHE BOOL "If set to OFF, OpenAL is excluded and the behavior of lovr.audio is undefined")
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 "")
if(USE_OPENAL)
add_definitions(-DUSE_OPENAL)
set(LOVR_AUDIO_SRC src/audio/audio.c src/audio/source.c src/audio/microphone.c)
if(EMSCRIPTEN)
include_directories(deps/openal-soft/include)
elseif(WIN32)
add_subdirectory(deps/openal-soft openal)
include_directories(deps/openal-soft/include)
set_target_properties(OpenAL PROPERTIES COMPILE_FLAGS "/wd4005 /wd4098")
set(LOVR_OPENAL OpenAL)
else()
pkg_search_module(OPENAL openal-soft)
2017-09-06 05:13:01 +00:00
if (NOT OPENAL_FOUND)
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()
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-09-06 05:13:01 +00:00
endif()
else()
set(LOVR_AUDIO_SRC src/audio/null.c)
2017-01-07 02:43:24 +00:00
endif()
2017-06-02 06:48:46 +00:00
# OpenGL
2018-05-03 02:01:20 +00:00
if(NOT WIN32 AND NOT EMSCRIPTEN)
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
2017-04-16 23:56:49 +00:00
if(NOT EMSCRIPTEN)
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)
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
# pthreads
if(NOT WIN32)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
set(LOVR_PTHREADS Threads::Threads)
endif()
2018-05-03 02:01:20 +00:00
# LÖVR source
2017-06-02 06:48:46 +00:00
set(LOVR_SRC
src/api/audio.c
2018-01-21 06:22:43 +00:00
src/api/data.c
2017-06-02 06:48:46 +00:00
src/api/event.c
src/api/filesystem.c
src/api/graphics.c
src/api/headset.c
2018-02-23 05:01:34 +00:00
src/api/lovr.c
2017-06-02 06:48:46 +00:00
src/api/math.c
src/api/physics.c
src/api/thread.c
2017-06-02 06:48:46 +00:00
src/api/timer.c
2017-11-03 06:55:28 +00:00
src/api/types/animator.c
2018-01-22 17:05:44 +00:00
src/api/types/audioStream.c
2017-06-02 06:48:46 +00:00
src/api/types/blob.c
2017-12-10 04:10:36 +00:00
src/api/types/canvas.c
src/api/types/channel.c
2017-06-02 06:48:46 +00:00
src/api/types/collider.c
src/api/types/controller.c
src/api/types/font.c
src/api/types/joints.c
2017-10-21 22:21:43 +00:00
src/api/types/material.c
2017-06-02 06:48:46 +00:00
src/api/types/mesh.c
src/api/types/microphone.c
2017-06-02 06:48:46 +00:00
src/api/types/model.c
2018-01-23 02:51:34 +00:00
src/api/types/modelData.c
2017-07-27 05:48:43 +00:00
src/api/types/randomGenerator.c
2018-01-22 17:05:44 +00:00
src/api/types/rasterizer.c
2017-06-02 06:48:46 +00:00
src/api/types/shader.c
2018-08-04 01:39:04 +00:00
src/api/types/shaderBlock.c
2017-06-02 06:48:46 +00:00
src/api/types/shapes.c
2018-07-06 06:34:12 +00:00
src/api/types/soundData.c
2017-06-02 06:48:46 +00:00
src/api/types/source.c
src/api/types/texture.c
2018-01-21 06:22:43 +00:00
src/api/types/textureData.c
src/api/types/thread.c
2017-06-02 06:48:46 +00:00
src/api/types/transform.c
2018-02-11 21:40:36 +00:00
src/api/types/vertexData.c
2017-06-02 06:48:46 +00:00
src/api/types/world.c
2018-01-22 17:05:44 +00:00
src/data/audioStream.c
2018-02-21 07:10:20 +00:00
src/data/blob.c
2018-02-11 23:22:04 +00:00
src/data/modelData.c
2018-01-22 17:05:44 +00:00
src/data/rasterizer.c
2018-07-06 06:34:12 +00:00
src/data/soundData.c
2018-02-11 23:22:04 +00:00
src/data/textureData.c
2018-02-11 21:40:36 +00:00
src/data/vertexData.c
2017-06-02 06:48:46 +00:00
src/event/event.c
2017-10-22 04:52:05 +00:00
src/filesystem/file.c
2017-06-02 06:48:46 +00:00
src/filesystem/filesystem.c
2017-11-03 06:55:28 +00:00
src/graphics/animator.c
2017-06-02 06:48:46 +00:00
src/graphics/font.c
src/graphics/graphics.c
2017-10-21 22:21:43 +00:00
src/graphics/material.c
2017-06-02 06:48:46 +00:00
src/graphics/model.c
2018-07-17 22:11:30 +00:00
src/graphics/opengl.c
src/headset/fake.c
2017-06-02 06:48:46 +00:00
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
2017-07-24 06:14:28 +00:00
src/lib/lua-enet/enet.c
2017-06-02 06:48:46 +00:00
src/lib/map/map.c
2018-07-07 01:42:14 +00:00
src/lib/noise1234/noise1234.c
2017-06-02 06:48:46 +00:00
src/lib/stb/stb_image.c
2018-02-10 18:32:16 +00:00
src/lib/stb/stb_image_write.c
2018-07-05 09:12:15 +00:00
src/lib/stb/stb_truetype.c
2017-06-02 06:48:46 +00:00
src/lib/stb/stb_vorbis.c
src/lib/tinycthread/tinycthread.c
2017-06-02 06:48:46 +00:00
src/lib/vec/vec.c
src/lovr.c
src/luax.c
src/main.c
src/math/mat4.c
2017-07-27 05:48:43 +00:00
src/math/math.c
2017-06-02 06:48:46 +00:00
src/math/quat.c
2017-07-27 05:48:43 +00:00
src/math/randomGenerator.c
2017-06-02 06:48:46 +00:00
src/math/transform.c
src/math/vec3.c
src/physics/physics.c
2017-12-10 20:31:50 +00:00
src/resources/shaders.c
src/thread/channel.c
src/thread/thread.c
2017-06-02 06:48:46 +00:00
src/timer/timer.c
src/util.c
${LOVR_AUDIO_SRC}
2017-06-02 06:48:46 +00:00
)
2017-05-29 04:53:19 +00:00
2018-05-03 02:01:20 +00:00
# Conditional sources
2017-06-02 06:48:46 +00:00
if(EMSCRIPTEN)
set(LOVR_SRC ${LOVR_SRC} src/headset/webvr.c)
2017-06-02 06:48:46 +00:00
else()
set(LOVR_SRC ${LOVR_SRC} src/headset/openvr.c)
2017-06-02 06:48:46 +00:00
endif()
2018-05-03 02:01:20 +00:00
# LÖVR
2017-06-02 06:48:46 +00:00
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
add_executable(lovr ${LOVR_SRC})
set_property(TARGET lovr PROPERTY C_STANDARD 99)
2017-06-02 05:06:13 +00:00
target_link_libraries(lovr
2016-07-15 08:16:08 +00:00
${LOVR_ASSIMP}
2017-07-24 02:27:21 +00:00
${LOVR_ENET}
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}
${LOVR_PTHREADS}
${LOVR_EMSCRIPTEN_FLAGS}
2016-07-15 08:16:08 +00:00
)
2018-05-03 02:01:20 +00:00
# Yay Windows
2016-10-04 21:47:48 +00:00
if(WIN32)
set_target_properties(lovr PROPERTIES COMPILE_FLAGS "/wd4244")
set_target_properties(lovr PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
set_target_properties(lovr PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
2018-05-03 02:01:20 +00:00
if(MSVC_VERSION VERSION_LESS 1900)
target_compile_definitions(lovr PUBLIC -Dinline=__inline -Dsnprintf=_snprintf)
endif()
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})
2018-08-20 20:36:07 +00:00
if (LOVR_OPENAL)
move_dll(${LOVR_OPENAL})
endif()
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()