Files
cube/CMakeLists.txt

106 lines
2.7 KiB
CMake

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}
)