# Copyright 2022 Simon Boyé cmake_minimum_required(VERSION 3.0.0) project(vk_expe VERSION 0.1.0) find_package(Eigen3 3.3 REQUIRED) find_package(Vulkan REQUIRED) find_package(SDL2 2.0.18 REQUIRED) include(CTest) enable_testing() function(add_shaders TARGET) foreach(SRC ${ARGN}) set(DST "${CMAKE_CURRENT_BINARY_DIR}/${SRC}.spv") list(APPEND SPVS "${DST}") get_filename_component(DST_DIR "${DST}" DIRECTORY) file(MAKE_DIRECTORY "${DST_DIR}") add_custom_command( OUTPUT "${DST}" COMMAND "$ENV{VULKAN_SDK}/bin/glslc" "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}" -o "${DST}" MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}" ) endforeach() add_custom_target( ${TARGET}_shaders DEPENDS ${SPVS} ) add_dependencies(${TARGET} ${TARGET}_shaders) endfunction() add_executable(vk_expe src/core/math.cpp src/core/utils.cpp src/core/Logger.cpp src/vk/Context.cpp src/vk/Fence.cpp src/vk/Semaphore.cpp src/vk/Framebuffer.cpp src/vk/ShaderModule.cpp src/vk/Swapchain.cpp src/vk/Memory.cpp src/vk/Buffer.cpp src/vk/RenderPass.cpp src/main.cpp src/Simplex.cpp src/Planet.cpp src/VkExpe.cpp src/VulkanTutorial.cpp ) add_shaders(vk_expe shaders/shader.vert shaders/shader.geom shaders/shader.frag ) target_include_directories(vk_expe PRIVATE src ) target_compile_features(vk_expe PUBLIC cxx_std_17 ) target_link_libraries(vk_expe PUBLIC Eigen3::Eigen PUBLIC Vulkan::Vulkan PUBLIC SDL2::SDL2 ) set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) include(CPack)