cmake_minimum_required(VERSION 3.20) project(sdl3_flecs_template VERSION 1.0.0 LANGUAGES CXX) # C++ Standard set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Build type defaults to Debug if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif() # Compiler warnings if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") add_compile_options(-Wall -Wextra -Wpedantic) if(CMAKE_BUILD_TYPE STREQUAL "Debug") add_compile_options(-g -O0) else() add_compile_options(-O2) endif() elseif(MSVC) add_compile_options(/W4) endif() # ============================================================================= # Dependencies # ============================================================================= # SDL3 - Using FetchContent for automatic download include(FetchContent) # SDL3 FetchContent_Declare( SDL3 GIT_REPOSITORY https://github.com/libsdl-org/SDL.git GIT_TAG main GIT_SHALLOW TRUE GIT_PROGRESS TRUE ) set(SDL_SHARED OFF CACHE BOOL "" FORCE) set(SDL_STATIC ON CACHE BOOL "" FORCE) set(SDL_TEST OFF CACHE BOOL "" FORCE) # Platform-specific SDL backends if(EMSCRIPTEN) set(SDL_X11 OFF CACHE BOOL "" FORCE) set(SDL_WAYLAND OFF CACHE BOOL "" FORCE) else() # Disable X11, use Wayland only on Linux set(SDL_X11 OFF CACHE BOOL "" FORCE) set(SDL_WAYLAND ON CACHE BOOL "" FORCE) endif() FetchContent_MakeAvailable(SDL3) # FLECS FetchContent_Declare( flecs GIT_REPOSITORY https://github.com/SanderMertens/flecs.git GIT_TAG master GIT_SHALLOW TRUE GIT_PROGRESS TRUE ) FetchContent_MakeAvailable(flecs) # ============================================================================= # Main Executable # ============================================================================= add_executable(${PROJECT_NAME} src/main.cpp src/game.cpp src/systems.cpp src/pipeline.cpp ) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_link_libraries(${PROJECT_NAME} PRIVATE SDL3::SDL3-static flecs::flecs_static ) # Platform-specific settings if(EMSCRIPTEN) set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".html") target_link_options(${PROJECT_NAME} PRIVATE -sUSE_SDL=0 -sALLOW_MEMORY_GROWTH=1 -sTOTAL_MEMORY=67108864 -sMAX_WEBGL_VERSION=2 --shell-file ${CMAKE_CURRENT_SOURCE_DIR}/web/shell.html ) elseif(WIN32) target_link_libraries(${PROJECT_NAME} PRIVATE winmm imm32 version setupapi) elseif(UNIX AND NOT APPLE) find_package(PkgConfig REQUIRED) # Linux dependencies are handled by SDL3 endif() # ============================================================================= # Install # ============================================================================= install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin ) # ============================================================================= # CPack (optional packaging) # ============================================================================= set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) include(CPack)