cmake_minimum_required(VERSION 3.20) # ============================= # Project / Compiler # ============================= project(cube LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() # ============================= # Sources # ============================= file(GLOB_RECURSE CUBE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c ) add_executable(${PROJECT_NAME} ${CUBE_SOURCES}) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) # ============================= # Compile definitions # ============================= target_compile_definitions(${PROJECT_NAME} PRIVATE VK_NO_PROTOTYPES VMA_STATIC_VULKAN_FUNCTIONS=0 VMA_DYNAMIC_VULKAN_FUNCTIONS=1 VMA_VULKAN_VERSION=1003000 ) # ============================= # Warnings # ============================= if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow -Wnull-dereference -Wdouble-promotion -Wimplicit-fallthrough ) endif() # ============================= # Dependencies (vendored) # ============================= # ---- spdlog (header-only) add_subdirectory(external/spdlog) target_link_libraries(${PROJECT_NAME} PRIVATE spdlog::spdlog_header_only) # ---- Vulkan Memory Allocator add_subdirectory(external/VulkanMemoryAllocator) target_link_libraries(${PROJECT_NAME} PRIVATE VulkanMemoryAllocator) # ---- vk-bootstrap add_subdirectory(external/vk-bootstrap) target_link_libraries(${PROJECT_NAME} PRIVATE vk-bootstrap::vk-bootstrap) # ---- SPIR-V stack (required by shaderc) add_subdirectory(external/spirv-headers) add_subdirectory(external/SPIRV-Tools) add_subdirectory(external/glslang) # ---- shaderc set(SHADERC_SKIP_TESTS ON CACHE BOOL "" FORCE) set(SHADERC_SKIP_EXAMPLES ON CACHE BOOL "" FORCE) set(SHADERC_SKIP_INSTALL ON CACHE BOOL "" FORCE) set(SHADERC_ENABLE_SHARED_CRT OFF CACHE BOOL "" FORCE) set(SHADERC_ENABLE_SPIRV_TOOLS ON CACHE BOOL "" FORCE) add_subdirectory(external/shaderc) target_link_libraries(${PROJECT_NAME} PRIVATE shaderc_shared) # ============================= # System dependencies # ============================= find_package(Vulkan REQUIRED) find_package(Threads REQUIRED) find_package(PkgConfig REQUIRED) pkg_check_modules(LIBDRM REQUIRED libdrm) target_include_directories(${PROJECT_NAME} PRIVATE ${LIBDRM_INCLUDE_DIRS} ) target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::Vulkan Threads::Threads ${LIBDRM_LIBRARIES} )