76 lines
1.9 KiB
CMake
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
|
|
)
|