#cmake version cmake_minimum_required(VERSION 3.31) #project name project(TSE-RTS) # backend selection option(USE_GLFW "Build with GLFW backend" OFF) option(USE_SDL3 "Build with SDL3 backend" OFF) # default backend: GLFW if(NOT USE_GLFW AND NOT USE_SDL3) set(USE_GLFW ON) endif() # forbid enabling both at once if(USE_GLFW AND USE_SDL3) message(FATAL_ERROR "USE_GLFW and USE_SDL3 cannot both be ON. Select exactly one backend.") endif() if(USE_GLFW) message(STATUS "Window backend: GLFW") endif() if(USE_SDL3) message(STATUS "Window backend: SDL3") endif() #cpp settings find_program(CLANG_C NAMES clang) find_program(CLANG_CXX NAMES clang++) if(CLANG_C AND CLANG_CXX) message(STATUS "foung Clang, using as Compiler") set(CMAKE_C_COMPILER ${CLANG_C} CACHE STRING "C Compiler" FORCE) set(CMAKE_CXX_COMPILER ${CLANG_CXX} CACHE STRING "C++ Compiler" FORCE) else() message(STATUS "Clang not found, using Standard-Compiler") endif() set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED True) #project output settings set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR}/bin") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR}/bin") #engine projects add_subdirectory(TSE/TSE_Base) add_subdirectory(TSE/TSE_Math) add_subdirectory(TSE/TSE_Core) add_subdirectory(TSE/TSE_Editor) add_subdirectory(TSE/TSE_OpenGlImpl) if(USE_GLFW) add_subdirectory(TSE/TSE_GlfwImpl) endif() if(USE_SDL3) add_subdirectory(TSE/TSE_Sdl3Impl) endif() #source files file(GLOB CPP_SOURCE "${PROJECT_SOURCE_DIR}/TSE-RTS/src/*.cpp" "${PROJECT_SOURCE_DIR}/TSE-RTS/src/*/*.cpp" "${PROJECT_SOURCE_DIR}/TSE-RTS/src/*/*/*.cpp" "${PROJECT_SOURCE_DIR}/TSE-RTS/src/*/*/*/*.cpp" "${PROJECT_SOURCE_DIR}/TSE-RTS/src/*.c" "${PROJECT_SOURCE_DIR}/TSE-RTS/src/*/*.c" "${PROJECT_SOURCE_DIR}/TSE-RTS/src/*/*/*.c" "${PROJECT_SOURCE_DIR}/TSE-RTS/src/*/*/*/*.c" ) #project def add_executable(TSE-RTS ${CPP_SOURCE}) # includes target_include_directories(TSE-RTS PRIVATE ${PROJECT_SOURCE_DIR}/TSE-RTS/src ${PROJECT_SOURCE_DIR}/TSE-RTS/include ${PROJECT_SOURCE_DIR}/TSE/TSE_Math/src ${PROJECT_SOURCE_DIR}/TSE/TSE_Core/src ${PROJECT_SOURCE_DIR}/TSE/TSE_Core/include ${PROJECT_SOURCE_DIR}/TSE/TSE_Base/src ${PROJECT_SOURCE_DIR}/TSE/TSE_Base/include ${PROJECT_SOURCE_DIR}/TSE/TSE_Editor/src ${PROJECT_SOURCE_DIR}/TSE/TSE_OpenGlImpl/src ${PROJECT_SOURCE_DIR}/TSE/TSE_OpenGlImpl/include ) if(USE_GLFW) target_include_directories(TSE-RTS PRIVATE ${PROJECT_SOURCE_DIR}/TSE/TSE_GlfwImpl/src ${PROJECT_SOURCE_DIR}/TSE/TSE_GlfwImpl/include ) endif() if(USE_SDL3) target_include_directories(TSE-RTS PRIVATE ${PROJECT_SOURCE_DIR}/TSE/TSE_Sdl3Impl/src ${PROJECT_SOURCE_DIR}/TSE/TSE_Sdl3Impl/include ) endif() # compile definitions for active backend if(USE_GLFW) target_compile_definitions(TSE-RTS PRIVATE TSE_WINDOW_BACKEND_GLFW) endif() if(USE_SDL3) target_compile_definitions(TSE-RTS PRIVATE TSE_WINDOW_BACKEND_SDL3) endif() # external libs set(LIB_SOURCE "") set(BACKEND_LIBS "") set(BACKEND_TARGETS "") if(WIN32) if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(DEBUGSPEC "${PROJECT_SOURCE_DIR}/TSE/TSE_Core/include/FreeImageLib.d.lib" "${PROJECT_SOURCE_DIR}/TSE/TSE_Core/include/box2dd.lib" ) else() set(DEBUGSPEC "${PROJECT_SOURCE_DIR}/TSE/TSE_Core/include/FreeImageLib.r.lib" "${PROJECT_SOURCE_DIR}/TSE/TSE_Core/include/box2d.lib" ) endif() set(LIB_SOURCE ${DEBUGSPEC} ) if(USE_GLFW) list(APPEND LIB_SOURCE "${PROJECT_SOURCE_DIR}/TSE/TSE_GlfwImpl/include/glfw3.lib" ) list(APPEND BACKEND_TARGETS TSE_GlfwImpl) endif() if(USE_SDL3) list(APPEND LIB_SOURCE "${PROJECT_SOURCE_DIR}/TSE/TSE_Sdl3Impl/include/SDL3-static.lib" "winmm" "setupapi" "cfgmgr32" "version" ) list(APPEND BACKEND_TARGETS TSE_Sdl3Impl) endif() else() set(LIB_SOURCE "${PROJECT_SOURCE_DIR}/TSE/TSE_Core/include/libfreeimage.a" "${PROJECT_SOURCE_DIR}/TSE/TSE_Core/include/libbox2d.a" ) if(USE_GLFW) list(APPEND LIB_SOURCE "${PROJECT_SOURCE_DIR}/TSE/TSE_GlfwImpl/include/libglfw3.a" ) list(APPEND BACKEND_TARGETS TSE_GlfwImpl) endif() if(USE_SDL3) list(APPEND LIB_SOURCE "${PROJECT_SOURCE_DIR}/TSE/TSE_Sdl3Impl/include/libSDL3.a" ) list(APPEND BACKEND_TARGETS TSE_Sdl3Impl) endif() endif() # link if(WIN32) target_link_libraries(TSE-RTS PUBLIC TSE_Base TSE_Math TSE_Core ${BACKEND_TARGETS} TSE_OpenGlImpl TSE_Editor ${LIB_SOURCE} ) else() target_link_libraries(TSE-RTS PUBLIC TSE_Editor TSE_OpenGlImpl ${BACKEND_TARGETS} TSE_Core TSE_Math TSE_Base ${LIB_SOURCE} ) endif() # flags target_compile_options(TSE-RTS PRIVATE -march=native) set(TARGET_DIR "${PROJECT_SOURCE_DIR}/bin") add_custom_command( TARGET TSE-RTS POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_SOURCE_DIR}/TSE-RTS/Resources" "${TARGET_DIR}" COMMENT "📂 Kopiere Resources/ nach bin/ nach Buildabschluss\n" )