From 551edc78e5e164d53900cd5b4a6831070bec61e7 Mon Sep 17 00:00:00 2001 From: Shariq Shah Date: Thu, 1 Nov 2018 14:19:46 +1100 Subject: [PATCH] Updated cmake build script to compile current state of the game on linux --- CMakeLists.txt | 242 ++++++++++++++++++++++++++++++------ README.md | 1 + lib/linux/ode/libode.so.6 | 1 + src/game/main.c | 10 +- src/libsymmetry/im_render.c | 2 + 5 files changed, 214 insertions(+), 42 deletions(-) create mode 120000 lib/linux/ode/libode.so.6 diff --git a/CMakeLists.txt b/CMakeLists.txt index 64d26c5..4627f03 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 $<$: -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 $<$: -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) diff --git a/README.md b/README.md index 436b1b7..885bb2c 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/lib/linux/ode/libode.so.6 b/lib/linux/ode/libode.so.6 new file mode 120000 index 0000000..93cd517 --- /dev/null +++ b/lib/linux/ode/libode.so.6 @@ -0,0 +1 @@ +libode.so \ No newline at end of file diff --git a/src/game/main.c b/src/game/main.c index c84d8fc..9658494 100644 --- a/src/game/main.c +++ b/src/game/main.c @@ -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) { diff --git a/src/libsymmetry/im_render.c b/src/libsymmetry/im_render.c index 227ccbc..e7cc155 100644 --- a/src/libsymmetry/im_render.c +++ b/src/libsymmetry/im_render.c @@ -8,6 +8,8 @@ #include "../common/log.h" #include "geometry.h" +#include + #define MAX_IM_VERTICES 2048 #define MAX_IM_GEOMETRIES (MAX_IM_VERTICES / 2)