cmake_minimum_required(VERSION 3.31) project(Destrum) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) include(CTest) option(DESTRUM_ENABLE_WARNINGS "Enable warnings for first-party targets" ON) function(destrum_enable_warnings target) if (NOT DESTRUM_ENABLE_WARNINGS) return() endif() if (MSVC) target_compile_options(${target} PRIVATE /W4 /permissive-) elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") target_compile_options(${target} PRIVATE -Wall -Wextra -Wpedantic) endif() endfunction() if (MSVC) # Disable Just My Code debugging add_compile_options(/JMC-) endif() add_subdirectory(destrum) add_subdirectory(lightkeeper) add_subdirectory(TheChef) if (TARGET _internal_validate_engine_shaders) add_custom_target(ValidateShaders) add_dependencies(ValidateShaders _internal_validate_engine_shaders) endif() destrum_enable_warnings(destrum) destrum_enable_warnings(lightkeeper) add_custom_target(CleanupAssets COMMAND ${CMAKE_COMMAND} -E rm -rf "$/assets/game" COMMAND ${CMAKE_COMMAND} -E rm -rf "$/assets/engine" DEPENDS _internal_clean_game_assets _internal_clean_engine_assets ) add_custom_target(CookAssets) add_dependencies(CookAssets _internal_cook_game_assets _internal_cook_engine_assets ) option(ENABLE_SANITIZERS "Enable Address/Undefined sanitizers" OFF) if (ENABLE_SANITIZERS AND CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") foreach(target destrum lightkeeper) target_compile_options(${target} PRIVATE -fsanitize=address,undefined -fno-omit-frame-pointer -fno-stack-protector -g3 ) target_link_options(${target} PRIVATE -fsanitize=address,undefined ) endforeach() endif() if (BUILD_TESTING) add_subdirectory(tests) endif()