A 3d fps game made in OpenGL
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.
 
 
 
 
Symmetry/CMakeLists.txt

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)