cmake_minimum_required(VERSION 3.20) # ----------------------------- # 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) # ---- 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} )