Updated cmake build script to compile current state of the game on linux

dev
Shariq Shah 7 years ago
parent e47b494d80
commit 551edc78e5
  1. 242
      CMakeLists.txt
  2. 1
      README.md
  3. 1
      lib/linux/ode/libode.so.6
  4. 10
      src/game/main.c
  5. 2
      src/libsymmetry/im_render.c

@ -2,18 +2,12 @@ cmake_minimum_required(VERSION 3.2)
project(Symmetry)
include_directories(include)
file(GLOB SOURCES "src/*.c")
add_executable(${PROJECT_NAME} ${SOURCES})
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)
add_definitions(-DGL_DEBUG_CONTEXT)
add_definitions(-DAL_DEBUG)
else()
set(CMAKE_BUILD_TYPE Release)
set(SYMMETRY_BUILD_TYPE release)
@ -21,42 +15,216 @@ else()
endif()
# Flags
add_definitions(-DUSE_GLAD)
# Platform specific libs and flags
if(WIN32)
set(CURRENT_PLATFORM windows)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_library(sdl2 STATIC IMPORTED)
set_target_properties(sdl2 PROPERTIES IMPORTED_LOCATION_DEBUG ${CMAKE_SOURCE_DIR}/libs/debug/win64_msvc/SDL2.lib)
set_target_properties(sdl2 PROPERTIES IMPORTED_LOCATION_RELEASE ${CMAKE_SOURCE_DIR}/libs/release/win64_msvc/SDL2.lib)
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)
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)
find_library(LIB_M m REQUIRED)
find_library(LIB_RT rt REQUIRED)
find_library(LIB_PTHREAD pthread REQUIRED)
find_library(LIB_SNDIO sndio REQUIRED)
find_library(SDL2_LIBRARY SDL2 HINTS libs/${SYMMETRY_BUILD_TYPE}/linux64_gcc REQUIRED)
find_library(AL_LIBRARY openal HINTS libs/${SYMMETRY_BUILD_TYPE}/linux64_gcc REQUIRED)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARY} ${LIB_PTHREAD} ${LIB_M} ${LIB_RT} ${CMAKE_DL_LIBS})
target_link_libraries(${PROJECT_NAME} ${AL_LIBRARY} ${LIB_SNDIO})
set(CMAKE_C_FLAGS "-Wall -Wno-undefined -std=c99")
#after build is complete create a link to assets folder
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/assets ${CMAKE_BINARY_DIR}/assets)
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")
message(FATAL_ERROR "Unsupported Platform! Currently only Windows and Linux supported")
endif(WIN32)
find_package(OpenGL REQUIRED)
target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES})
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/bin) # Does not work on windows for some reason! TODO: Find a way around this for faster windows installation
install(TARGETS ${PROJECT_NAME} DESTINATION ${CURRENT_PLATFORM})
install(DIRECTORY ${CMAKE_SOURCE_DIR}/assets DESTINATION ${CURRENT_PLATFORM})
################################################################
# 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)

@ -162,6 +162,7 @@
- Refactor all global application state into 'Application_Context' struct. A single global instance of which is available everywhere
- Fix mouse button press/release behaviour by investigating how sdl handles mouse release or by explicitly caching mouse state by using event callbacks recieved when a mousebutton release event is reported by sdl
- Improve bounding sphere calculation
- Change the way lights are set as uniforms to remove snprintf calls per frame for every light attribute
- Screen mouse coordinates to world-coordinates for aiming
- Player projectiles and sounds
- Console commands

@ -14,11 +14,11 @@ static struct Platform_Api platform_api;
static struct Window* window = NULL;
static bool reload_game = false;
#if defined(_MSC_VER)
static const char* lib_name = "libSymmetry.dll";
static const char* lib_copy_name = "libSymmetry.copy.dll";
static const char* lib_name = "Symmetry_Game.dll";
static const char* lib_copy_name = "Symmetry_Game.copy.dll";
#elif defined(__MINGW32__) || defined(__MINGW64__)
static const char* lib_name = "libSymmetry.dll";
static const char* lib_copy_name = "libSymmetry.copy.dll";
static const char* lib_name = "Symmetry_Game.dll";
static const char* lib_copy_name = "Symmetry_Game.copy.dll";
#endif
void* game_lib_handle = NULL;
@ -303,7 +303,7 @@ bool game_lib_load(void)
game_lib_handle = platform_load_library("libSymmetry.copy");
#else
game_lib_handle = platform_load_library("Symmetry");
game_lib_handle = platform_load_library("Symmetry_Game");
#endif
if(!game_lib_handle)
{

@ -8,6 +8,8 @@
#include "../common/log.h"
#include "geometry.h"
#include <string.h>
#define MAX_IM_VERTICES 2048
#define MAX_IM_GEOMETRIES (MAX_IM_VERTICES / 2)

Loading…
Cancel
Save