cmake_minimum_required(VERSION 3.16) set(CMAKE_CXX_STANDARD 17) project(Assignment2) function(add_shader TARGET SHADER) find_program(GLSLC glslc) set(current-shader-path ${CMAKE_CURRENT_SOURCE_DIR}/${SHADER}) set(current-output-path ${CMAKE_CURRENT_SOURCE_DIR}/build/${SHADER}.spv) file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build) get_filename_component(current-output-dir ${current-output-path} DIRECTORY) file(MAKE_DIRECTORY ${current-output-dir}) add_custom_command( OUTPUT ${current-output-path} COMMAND ${GLSLC} --target-env=vulkan1.2 -o ${current-output-path} ${current-shader-path} DEPENDS ${current-shader-path} IMPLICIT_DEPENDS CXX ${current-shader-path} VERBATIM) # Make sure our build depends on this output. set_source_files_properties(${current-output-path} PROPERTIES GENERATED TRUE) target_sources(${TARGET} PRIVATE ${current-output-path}) endfunction(add_shader) find_package(Vulkan REQUIRED) if (DEFINED ENV{RENDERDOC_PATH}) set(RENDERDOC_PATH ENV{RENDERDOC_PATH}) elseif (WIN32) if(EXISTS "C:\\Program Files\\RenderDoc") set(RENDERDOC_PATH "C:\\Program Files\\RenderDoc") endif() else () set(RENDERDOC_PATH "/usr/lib/") #LINUX PATH HERE endif () set(SOURCE_FILE src/main.cpp src/task_common.cpp src/host_timer.cpp src/initialization.cpp src/renderdoc.cpp src/utils.cpp src/A2Task1.cpp src/A2Task2.cpp src/A2Task1Solution/Interleaved.cpp src/A2Task1Solution/KernelDecomposition.cpp src/A2Task1Solution/Sequential.cpp src/A2Task2Solution/KernelDecomposition.cpp src/A2Task2Solution/Naive.cpp ) add_compile_definitions(WORKING_DIR="${CMAKE_CURRENT_SOURCE_DIR}") add_executable(${PROJECT_NAME} ${SOURCE_FILE}) add_shader(${PROJECT_NAME} shaders/A2Task1Interleaved.comp) add_shader(${PROJECT_NAME} shaders/A2Task1KernelDecomposition.comp) add_shader(${PROJECT_NAME} shaders/A2Task1KernelDecompositionAtomic.comp) add_shader(${PROJECT_NAME} shaders/A2Task1KernelDecompositionUnroll.comp) add_shader(${PROJECT_NAME} shaders/A2Task1Sequential.comp) add_shader(${PROJECT_NAME} shaders/A2Task2KernelDecomposition.comp) add_shader(${PROJECT_NAME} shaders/A2Task2KernelDecompositionOffset.comp) add_shader(${PROJECT_NAME} shaders/A2Task2Naive.comp) target_include_directories(${PROJECT_NAME} PUBLIC ./include) target_include_directories(${PROJECT_NAME} PRIVATE ${Vulkan_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} Vulkan::Vulkan) target_compile_definitions(${PROJECT_NAME} PRIVATE) if (RENDERDOC_PATH) target_include_directories(${PROJECT_NAME} PRIVATE /usr/local/renderdoc_1.33/include) target_include_directories(${PROJECT_NAME} PRIVATE ${RENDERDOC_PATH}) target_compile_definitions(${PROJECT_NAME} PRIVATE ENABLE_RENDERDOC) endif ()