cmake_minimum_required(VERSION 4.1) project(v) set(CMAKE_CXX_STANDARD 23) include(FetchContent) variable_watch($ENV{VULKAN_SDK}) find_package(Vulkan REQUIRED COMPONENTS volk) FetchContent_Declare( glfw GIT_REPOSITORY https://github.com/glfw/glfw.git GIT_TAG 232164f62b0edbf667cba37c91bab92ffbb020d0 ) FetchContent_MakeAvailable(glfw) FetchContent_Declare( glm GIT_REPOSITORY https://github.com/g-truc/glm.git GIT_TAG 1.0.3 ) FetchContent_MakeAvailable(glm) FetchContent_Declare( stb GIT_REPOSITORY https://github.com/nothings/stb.git GIT_TAG master ) FetchContent_MakeAvailable(stb) add_library(stb INTERFACE) target_include_directories(stb INTERFACE ${stb_SOURCE_DIR}) add_executable(v main.cpp renderer/init.cpp renderer/init.h renderer/renderer.cpp renderer/renderer.h misc.cpp misc.h renderer/sprite.cpp renderer/sprite.h renderer/texture.cpp renderer/texture.h renderer/texture_sheet.cpp renderer/texture_sheet.h) target_include_directories(v PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ) target_link_libraries(v PRIVATE glfw Vulkan::Vulkan glm stb) set(SHADER_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/shaders") set(SHADER_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/shaders") file(GLOB_RECURSE SHADER_SOURCES "${SHADER_SOURCE_DIR}/*.vert" "${SHADER_SOURCE_DIR}/*.frag" "${SHADER_SOURCE_DIR}/*.comp" ) set(SPIRV_BINARY_FILES "") foreach(SHADER ${SHADER_SOURCES}) get_filename_component(FILENAME ${SHADER} NAME) set(OUTPUT_SPV "${SHADER_SOURCE_DIR}/${FILENAME}.spv") add_custom_command( OUTPUT ${OUTPUT_SPV} COMMAND Vulkan::glslc ${SHADER} -o ${OUTPUT_SPV} DEPENDS ${SHADER} COMMENT "Compiling shader: ${FILENAME}" ) list(APPEND SPIRV_BINARY_FILES ${OUTPUT_SPV}) endforeach() add_custom_target(compile_shaders ALL DEPENDS ${SPIRV_BINARY_FILES}) add_dependencies(v compile_shaders)