Files
VulkanRenderer/CMakeLists.txt
2025-11-23 18:05:59 +00:00

76 lines
1.9 KiB
CMake

# Sets minimum CMake and C++ Standard version #
cmake_minimum_required (VERSION 4.0)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
project(VulkanRendererProject)
include(FetchContent)
# Adds Vulkan to the project #
FetchContent_Declare(
VulkanHeaders
GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-Headers.git
GIT_TAG v1.3.296
)
FetchContent_MakeAvailable(VulkanHeaders)
find_package(Vulkan REQUIRED)
# Adds GLFW for window creation #
FetchContent_Declare(
glfw
GIT_REPOSITORY https://github.com/glfw/glfw.git
GIT_TAG 3.4
)
FetchContent_MakeAvailable(glfw)
# Compiles the shaders #
set(SHADER_DIR "${CMAKE_SOURCE_DIR}/shaders")
file(GLOB SHADERS
"${SHADER_DIR}/*.frag"
"${SHADER_DIR}/*.vert"
)
foreach (SHADER ${SHADERS})
get_filename_component(FILENAME_WE ${SHADER} NAME_WE)
set(SPIRV_FILE "${SHADER_DIR}/${FILENAME_WE}.spv")
add_custom_command(
OUTPUT ${SPIRV_FILE}
COMMAND ${Vulkan_GLSLANG_VALIDATOR_EXECUTABLE} -V ${SHADER} -o ${SPIRV_FILE}
DEPENDS ${SHADER}
COMMENT "Compiling shader ${FILENAME}"
)
list(APPEND SPIRV_BINARY_FILES ${SPIRV_FILE})
endforeach()
add_custom_target(CompileShaders ALL DEPENDS ${SPIRV_BINARY_FILES})
# Creates the output binary
project(VulkanRenderer LANGUAGES CXX)
add_executable(VulkanRenderer
src/main.cpp
src/managers/GLFWManager.h
src/managers/GLFWManager.cpp
src/managers/vulkan/VulkanManagerInit.cpp
src/managers/vulkan/VulkanManagerRender.cpp
src/managers/vulkan/VulkanManager.h
src/VulkanRenderer.h
src/RendererTypes.h
src/Mesh.h
)
add_dependencies(VulkanRenderer CompileShaders)
target_precompile_headers(VulkanRenderer PRIVATE src/VulkanRenderer.h)
# Links the libraries to the binary #
target_link_libraries(VulkanRenderer PRIVATE
Vulkan::Vulkan
glfw
)