cmake_minimum_required(VERSION 3.10) project(vksdlproj VERSION 0.1.0 LANGUAGES C CXX) SET(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE) set(EXE_NAME project) set(PROGRAM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/vulkanapp.cc) # Get our GLSL shaders set(SHADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shaders) set(SHADER_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}) file(GLOB SHADERS ${SHADER_DIR}/*.vert ${SHADER_DIR}/*.frag ${SHADER_DIR}/*.comp ${SHADER_DIR}/*.geom ${SHADER_DIR}/*.tesc ${SHADER_DIR}/*.tese ${SHADER_DIR}/*.mesh ${SHADER_DIR}/*.task ${SHADER_DIR}/*.rgen ${SHADER_DIR}/*.rchit ${SHADER_DIR}/*.rmiss ) find_package(SDL2 REQUIRED CONFIG REQUIRED COMPONENTS SDL2) find_package(Vulkan REQUIRED COMPONENTS glslc) # Compile each shader foreach(SHADER IN LISTS SHADERS) get_filename_component(FILENAME ${SHADER} NAME) add_custom_command(OUTPUT ${SHADER_BIN_DIR}/${FILENAME}.spv COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${SHADER} -o ${SHADER_BIN_DIR}/${FILENAME}.spv DEPENDS ${SHADER} COMMENT "Compiling Shader ${FILENAME}") list(APPEND SPV_SHADERS ${SHADER_BIN_DIR}/${FILENAME}.spv) endForeach() # Shader target add_custom_target(shaders ALL DEPENDS ${SPV_SHADERS}) add_executable(${EXE_NAME} ${CMAKE_SOURCE_DIR}/src/main.cc ${PROGRAM_SOURCES} ${SHADERS}) target_include_directories(${EXE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include) add_dependencies(${EXE_NAME} shaders) # Linking target_link_libraries(${EXE_NAME} PRIVATE SDL2::SDL2) target_link_libraries(${EXE_NAME} PRIVATE Vulkan::Vulkan)