You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
230 lines
7.2 KiB
230 lines
7.2 KiB
cmake_minimum_required(VERSION 3.2)
|
|
|
|
project(Symmetry)
|
|
|
|
|
|
if(CMAKE_CONFIGURATION_TYPES)
|
|
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
|
|
else()
|
|
if(CMAKE_BUILD_TYPE MATCHES Debug)
|
|
set(SYMMETRY_BUILD_TYPE debug)
|
|
else()
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
set(SYMMETRY_BUILD_TYPE release)
|
|
endif()
|
|
endif()
|
|
|
|
|
|
if(WIN32)
|
|
set(CURRENT_PLATFORM windows)
|
|
include_directories(${CMAKE_SOURCE_DIR}/include/common
|
|
${CMAKE_SOURCE_DIR}/include/common/soloud
|
|
${CMAKE_SOURCE_DIR}/include/windows/sdl2
|
|
${CMAKE_SOURCE_DIR}/include/windows)
|
|
|
|
set(SDL2_LIB_FILE ${CMAKE_SOURCE_DIR}/lib/windows/sdl2/SDL2.dll)
|
|
set(SOLOUD_LIB_FILE ${CMAKE_SOURCE_DIR}/lib/windows/soloud/soloud_x64.dll)
|
|
set(ODE_LIB_FILE ${CMAKE_SOURCE_DIR}/lib/windows/ode/ode_double.dll)
|
|
|
|
# target_link_libraries(${PROJECT_NAME} openal sdl2 winmm.lib imm32.lib version.lib)
|
|
# set(CMAKE_C_FLAGS_DEBUG /MTd)
|
|
# set(CMAKE_C_FLAGS_RELEASE /MT)
|
|
|
|
elseif(UNIX AND NOT APPLE)
|
|
set(CURRENT_PLATFORM linux)
|
|
include_directories(${CMAKE_SOURCE_DIR}/include/common
|
|
${CMAKE_SOURCE_DIR}/include/common/soloud
|
|
${CMAKE_SOURCE_DIR}/include/linux/sdl2
|
|
${CMAKE_SOURCE_DIR}/include/linux)
|
|
|
|
set(SDL2_LIB_FILE ${CMAKE_SOURCE_DIR}/lib/linux/sdl2/libSDL2.so)
|
|
set(SOLOUD_LIB_FILE ${CMAKE_SOURCE_DIR}/lib/linux/soloud/libsoloud_x64.so)
|
|
set(ODE_LIB_FILE ${CMAKE_SOURCE_DIR}/lib/linux/ode/libode.so)
|
|
else()
|
|
message(FATAL_ERROR "Unsupported Platform! Currently only Windows and Linux supported")
|
|
endif(WIN32)
|
|
|
|
|
|
|
|
################################################################
|
|
# Setup external libs
|
|
################################################################
|
|
|
|
set(SDL2_LIB_DIR ${CMAKE_SOURCE_DIR}/lib/${CURRENT_PLATFORM}/sdl2)
|
|
set(ODE_LIB_DIR ${CMAKE_SOURCE_DIR}/lib/${CURRENT_PLATFORM}/ode)
|
|
set(SOLOUD_LIB_DIR ${CMAKE_SOURCE_DIR}/lib/${CURRENT_PLATFORM}/soloud)
|
|
|
|
file(GLOB SDL2_LIB_FILES "${SDL2_LIB_DIR}/*")
|
|
file(GLOB ODE_LIB_FILES "${ODE_LIB_DIR}/*")
|
|
file(GLOB SOLOUD_LIB_FILES "${SOLOUD_LIB_DIR}/*")
|
|
|
|
add_library(SDL2 SHARED IMPORTED)
|
|
set_target_properties(SDL2 PROPERTIES IMPORTED_LOCATION ${SDL2_LIB_FILE})
|
|
|
|
add_library(SOLOUD SHARED IMPORTED)
|
|
set_target_properties(SOLOUD PROPERTIES IMPORTED_LOCATION ${SOLOUD_LIB_FILE})
|
|
|
|
add_library(ODE SHARED IMPORTED)
|
|
set_target_properties(ODE PROPERTIES IMPORTED_LOCATION ${ODE_LIB_FILE})
|
|
|
|
|
|
|
|
|
|
################################################################
|
|
# Setup source files
|
|
################################################################
|
|
|
|
set(COMMON_HEADERS
|
|
src/common/array.h
|
|
src/common/hashmap.h
|
|
src/common/linmath.h
|
|
src/common/log.h
|
|
src/common/parser.h
|
|
src/common/string_utils.h
|
|
src/common/utils.h
|
|
src/common/variant.h
|
|
src/common/array_str.h
|
|
src/common/common.h
|
|
src/common/num_types.h)
|
|
|
|
set(COMMON_SOURCES
|
|
src/common/array.c
|
|
src/common/hashmap.c
|
|
src/common/linmath.c
|
|
src/common/log.c
|
|
src/common/parser.c
|
|
src/common/string_utils.c
|
|
src/common/utils.c
|
|
src/common/variant.c)
|
|
|
|
set(EXECUTALE_HEADERS
|
|
src/game/main.h
|
|
src/game/config_vars.h
|
|
src/game/file_io.h
|
|
src/game/physics.h
|
|
src/game/platform.h
|
|
src/game/sound.h)
|
|
|
|
set(EXECUTABLE_SOURCES
|
|
src/game/main.c
|
|
src/game/config_vars.c
|
|
src/game/file_io.c
|
|
src/game/physics.c
|
|
src/game/platform.c
|
|
src/game/sound.c)
|
|
|
|
|
|
set(GAME_LIB_SOURCES
|
|
src/libsymmetry/bounding_volumes.c
|
|
src/libsymmetry/camera.c
|
|
src/libsymmetry/editor.c
|
|
src/libsymmetry/console.c
|
|
src/libsymmetry/editor.c
|
|
src/libsymmetry/entity.c
|
|
src/libsymmetry/framebuffer.c
|
|
src/libsymmetry/game.c
|
|
src/libsymmetry/geometry.c
|
|
src/libsymmetry/glad.c
|
|
src/libsymmetry/gl_load.c
|
|
src/libsymmetry/gui.c
|
|
src/libsymmetry/im_render.c
|
|
src/libsymmetry/input.c
|
|
src/libsymmetry/light.c
|
|
src/libsymmetry/material.c
|
|
src/libsymmetry/model.c
|
|
src/libsymmetry/player.c
|
|
src/libsymmetry/renderer.c
|
|
src/libsymmetry/scene.c
|
|
src/libsymmetry/shader.c
|
|
src/libsymmetry/sprite.c
|
|
src/libsymmetry/texture.c
|
|
src/libsymmetry/transform.c)
|
|
|
|
|
|
set(GAME_LIB_HEADERS
|
|
src/libsymmetry/bounding_volumes.h
|
|
src/libsymmetry/camera.h
|
|
src/libsymmetry/editor.h
|
|
src/libsymmetry/console.h
|
|
src/libsymmetry/editor.h
|
|
src/libsymmetry/entity.h
|
|
src/libsymmetry/event.h
|
|
src/libsymmetry/framebuffer.h
|
|
src/libsymmetry/game.h
|
|
src/libsymmetry/geometry.h
|
|
src/libsymmetry/gl_load.h
|
|
src/libsymmetry/gui.h
|
|
src/libsymmetry/im_render.h
|
|
src/libsymmetry/input.h
|
|
src/libsymmetry/light.h
|
|
src/libsymmetry/material.h
|
|
src/libsymmetry/model.h
|
|
src/libsymmetry/player.h
|
|
src/libsymmetry/renderer.h
|
|
src/libsymmetry/scene.h
|
|
src/libsymmetry/shader.h
|
|
src/libsymmetry/sprite.h
|
|
src/libsymmetry/texture.h
|
|
src/libsymmetry/transform.h)
|
|
|
|
|
|
################################################################
|
|
# Game Executable
|
|
################################################################
|
|
|
|
set(EXECUTABLE_NAME ${PROJECT_NAME})
|
|
|
|
add_executable(${EXECUTABLE_NAME} ${EXECUTABLE_HEADERS} ${EXECUTABLE_SOURCES} ${COMMON_HEADERS} ${COMMON_SOURCES})
|
|
target_include_directories(${EXECUTABLE_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/include)
|
|
target_compile_definitions(${EXECUTABLE_NAME} PUBLIC -DGAME $<$<CONFIG:DEBUG>: -DGL_DEBUG_CONTEXT>)
|
|
target_link_libraries(${EXECUTABLE_NAME} SDL2 ODE SOLOUD)
|
|
set_target_properties(${EXECUTABLE_NAME} PROPERTIES LINK_FLAGS "'-Wl,-rpath,$ORIGIN/lib' -Wl,--no-undefined")
|
|
target_compile_options(${EXECUTABLE_NAME} PUBLIC -Wall --std=c99)
|
|
|
|
find_library(LIB_M m REQUIRED)
|
|
find_library(LIB_RT rt REQUIRED)
|
|
find_library(LIB_PTHREAD pthread REQUIRED)
|
|
find_library(LIB_SNDIO sndio REQUIRED)
|
|
target_link_libraries(${EXECUTABLE_NAME} ${LIB_M} ${LIB_RT} ${LIB_PTHREAD} ${LIB_SNDIO})
|
|
|
|
|
|
################################################################
|
|
# Game Library
|
|
################################################################
|
|
|
|
set(GAME_LIB_NAME "${PROJECT_NAME}_Game")
|
|
add_library(${GAME_LIB_NAME} SHARED ${GAME_LIB_HEADERS} ${GAME_LIB_SOURCES} ${COMMON_HEADERS} ${COMMON_SOURCES})
|
|
target_include_directories(${GAME_LIB_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/include)
|
|
target_compile_definitions(${GAME_LIB_NAME} PUBLIC -DGAME_LIB -DUSE_GLAD $<$<CONFIG:DEBUG>: -DGL_DEBUG_CONTEXT>)
|
|
target_compile_options(${GAME_LIB_NAME} PUBLIC -Wall --std=c99)
|
|
|
|
|
|
################################################################
|
|
# Post build
|
|
################################################################
|
|
|
|
add_custom_command(
|
|
TARGET ${EXECUTABLE_NAME}
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/assets ${CMAKE_BINARY_DIR}/assets)
|
|
|
|
add_custom_command(
|
|
TARGET ${EXECUTABLE_NAME}
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/lib/
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SDL2_LIB_FILES} ${CMAKE_BINARY_DIR}/lib/
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ODE_LIB_FILES} ${CMAKE_BINARY_DIR}/lib/
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SOLOUD_LIB_FILES} ${CMAKE_BINARY_DIR}/lib/
|
|
COMMENT "Copying libraries...")
|
|
|
|
|
|
################################################################
|
|
# Install
|
|
################################################################
|
|
|
|
Install(TARGETS ${EXECUTABLE_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX})
|
|
Install(TARGETS ${GAME_LIB_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX})
|
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/assets DESTINATION ${CMAKE_INSTALL_PREFIX})
|
|
install(
|
|
FILES ${SDL2_LIB_FILES} ${ODE_LIB_FILES} ${SOLOUD_LIB_FILES}
|
|
DESTINATION lib)
|
|
|