it compiles

This commit is contained in:
2025-12-27 15:07:45 -06:00
commit e34ce95436
10 changed files with 164 additions and 0 deletions

101
CMakeLists.txt Normal file
View File

@@ -0,0 +1,101 @@
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}
)