cmake_minimum_required(VERSION 3.21) if(APPLE) message(FATAL_ERROR "This game does not support macOS") endif() project(Cubed LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug CACHE STRING "" FORCE) endif() if(NOT DEFINED CUBED_VERSION) set(CUBED_VERSION "dev") endif() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${PROJECT_NAME}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${PROJECT_NAME}) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ) include(Dependencies) add_subdirectory(third_party/glad) add_subdirectory(third_party/imgui) add_subdirectory(third_party/dr_libs) add_executable(${PROJECT_NAME}) add_subdirectory(src) file(GLOB_RECURSE PROTO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/proto/*.proto ) protobuf_generate( TARGET ${PROJECT_NAME} LANGUAGE cpp PROTOS ${PROTO_FILES} IMPORT_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/proto ) configure_file( src/version.hpp.in ${CMAKE_BINARY_DIR}/generated/version.hpp @ONLY ) target_compile_options(${PROJECT_NAME} PRIVATE $<$:-fno-omit-frame-pointer> $<$:-g> #$<$:-fsanitize=address> #$<$:-fsanitize=thread> $<$:-Wall> $<$:-Wextra> $<$:-Wpedantic> $<$:/utf-8> $<$:/W4> ) target_link_options(${PROJECT_NAME} PRIVATE #$<$:-fsanitize=address> #$<$:-fsanitize=thread> ) target_compile_definitions(${PROJECT_NAME} PRIVATE ASIO_STANDALONE ASIO_NO_DEPRECATED $<$:DEBUG_MODE> $<$: WIN32_LEAN_AND_MEAN NOMINMAX _CRT_SECURE_NO_WARNINGS > ) if(CMAKE_CONFIGURATION_TYPES) # Visual Studio / Xcode multi-configuration generator target_compile_definitions(${PROJECT_NAME} PRIVATE ASSETS_PATH="$<$:${PROJECT_SOURCE_DIR}/assets/>$<$>:./assets/>" ) else() # Ninja / Makefiles single-configuration generator if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_compile_definitions(${PROJECT_NAME} PRIVATE ASSETS_PATH="${PROJECT_SOURCE_DIR}/assets/" ) else() target_compile_definitions(${PROJECT_NAME} PRIVATE ASSETS_PATH="./assets/" ) endif() endif() target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/third_party/asio/include ${CMAKE_BINARY_DIR}/generated ${PROJECT_BINARY_DIR} ${PROJECT_BINARY_DIR}/src ) target_link_libraries(${PROJECT_NAME} PRIVATE SDL3::SDL3 glad OpenGL::GL soil2 Freetype::Freetype tomlplusplus::tomlplusplus imgui dr_libs tbb protobuf::libprotobuf absl::log absl::check absl::base absl::strings absl::flat_hash_map zstd::zstd OpenAL::OpenAL harfbuzz::harfbuzz Opus::Opus $<$:ws2_32> ) if(WIN32) add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ $ COMMAND_EXPAND_LISTS ) endif()