mirror of
https://github.com/bjornbytes/lovr.git
synced 2024-07-04 13:33:34 +00:00
Support OBJ, FBX, and COLLADA, as these seem to be the most common formats. This is done to reduce the size of the assimp dll. More formats can be added as needed.
158 lines
4 KiB
CMake
158 lines
4 KiB
CMake
cmake_minimum_required(VERSION 3.0.0)
|
|
|
|
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()
|
|
|
|
if(UNIX)
|
|
find_package(PkgConfig REQUIRED)
|
|
endif()
|
|
|
|
project(lovr)
|
|
file(GLOB_RECURSE LOVR_SRC src/*.c)
|
|
add_executable(lovr ${LOVR_SRC})
|
|
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
|
|
# LuaJIT
|
|
if(WIN32)
|
|
add_subdirectory(deps/luajit luajit)
|
|
include_directories(deps/luajit/src ${CMAKE_BINARY_DIR}/luajit)
|
|
set(LOVR_LUA liblua)
|
|
else()
|
|
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})
|
|
endif()
|
|
|
|
# GLEW / OpenGL
|
|
if(WIN32)
|
|
add_subdirectory(deps/glew glew)
|
|
include_directories(deps/glew/include)
|
|
set(LOVR_GL glew)
|
|
else()
|
|
find_package(OpenGL REQUIRED)
|
|
include_directories(${OPENGL_INCLUDE_DIRS})
|
|
set(LOVR_GL ${OPENGL_LIBRARIES})
|
|
endif()
|
|
|
|
# GLFW
|
|
if(WIN32)
|
|
add_subdirectory(deps/glfw glfw)
|
|
include_directories(deps/glfw/include)
|
|
set(LOVR_GLFW glfw ${GLFW_LIBRARIES})
|
|
else()
|
|
pkg_search_module(GLFW REQUIRED glfw3)
|
|
include_directories(${GLFW_INCLUDE_DIRS})
|
|
set(LOVR_GLFW ${GLFW_LIBRARIES})
|
|
endif()
|
|
|
|
# PhysicsFS
|
|
if(WIN32)
|
|
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()
|
|
|
|
# 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 "")
|
|
|
|
if(WIN32)
|
|
add_subdirectory(deps/assimp assimp)
|
|
include_directories(deps/assimp/include)
|
|
set(LOVR_ASSIMP assimp)
|
|
else()
|
|
pkg_search_module(ASSIMP REQUIRED assimp)
|
|
include_directories(${ASSIMP_INCLUDE_DIRS})
|
|
set(LOVR_ASSIMP ${ASSIMP_LIBRARIES})
|
|
endif()
|
|
|
|
# OpenAL
|
|
if (WIN32)
|
|
add_subdirectory(deps/openal-soft openal)
|
|
include_directories(deps/openal-soft/include)
|
|
set(LOVR_OPENAL OpenAL32)
|
|
else()
|
|
find_package(OpenAL REQUIRED)
|
|
include_directories(${OPENAL_INCLUDE_DIR})
|
|
set(LOVR_OPENAL openal)
|
|
endif()
|
|
|
|
# FreeType
|
|
if (WIN32)
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
add_subdirectory(deps/freetype freetype)
|
|
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})
|
|
endif()
|
|
|
|
# openvr
|
|
if(WIN32)
|
|
include_directories(deps/openvr/headers)
|
|
target_link_libraries(lovr ${CMAKE_SOURCE_DIR}/deps/openvr/lib/win32/openvr_api.lib)
|
|
add_custom_command(TARGET lovr POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"${CMAKE_SOURCE_DIR}/deps/openvr/bin/win32/openvr_api.dll"
|
|
$<TARGET_FILE_DIR:lovr>
|
|
)
|
|
else()
|
|
if(DEFINED OPENVR_DIR)
|
|
get_filename_component(FULL_OPENVR_DIR ${OPENVR_DIR} ABSOLUTE BASE_DIR ${CMAKE_BINARY_DIR})
|
|
message(STATUS "Setting OpenVR root directory to ${FULL_OPENVR_DIR}")
|
|
include_directories(${FULL_OPENVR_DIR}/headers)
|
|
if(APPLE)
|
|
set(LOVR_OPENVR ${FULL_OPENVR_DIR}/lib/osx32/libopenvr_api.dylib)
|
|
else()
|
|
set(LOVR_OPENVR ${FULL_OPENVR_DIR}/lib/linux32/libopenvr_api.so)
|
|
endif()
|
|
else()
|
|
message(FATAL_ERROR "Please specify the location of OpenVR (-DOPENVR_DIR=/path/to/openvr)")
|
|
endif()
|
|
endif()
|
|
|
|
set(LOVR_LIB
|
|
${LOVR_LUA}
|
|
${LOVR_GL}
|
|
${LOVR_GLFW}
|
|
${LOVR_PHYSFS}
|
|
${LOVR_ASSIMP}
|
|
${LOVR_OPENAL}
|
|
${LOVR_FREETYPE}
|
|
${LOVR_OPENVR}
|
|
)
|
|
|
|
target_link_libraries(lovr ${LOVR_LIB})
|
|
|
|
if(WIN32)
|
|
move_dll(${LOVR_LUA})
|
|
move_dll(${LOVR_GL})
|
|
move_dll(${LOVR_GLFW})
|
|
move_dll(${LOVR_PHYSFS})
|
|
move_dll(${LOVR_ASSIMP})
|
|
move_dll(${LOVR_OPENAL})
|
|
move_dll(${LOVR_FREETYPE})
|
|
endif()
|