VulkanTutorial/code/CMakeLists.txt

187 lines
5.2 KiB
CMake

cmake_minimum_required (VERSION 3.8)
project (VulkanTutorial)
find_package (glfw3 REQUIRED)
find_package (glm REQUIRED)
find_package (Vulkan REQUIRED)
find_package (tinyobjloader REQUIRED)
find_package (PkgConfig)
pkg_get_variable (STB_INCLUDEDIR stb includedir)
if (NOT STB_INCLUDEDIR)
unset (STB_INCLUDEDIR)
find_path (STB_INCLUDEDIR stb_image.h PATH_SUFFIXES stb)
endif ()
if (NOT STB_INCLUDEDIR)
message (FATAL_ERROR "stb_image.h not found")
endif ()
add_executable (glslang::validator IMPORTED)
find_program (GLSLANG_VALIDATOR "glslangValidator" HINTS $ENV{VULKAN_SDK}/bin REQUIRED)
set_property (TARGET glslang::validator PROPERTY IMPORTED_LOCATION "${GLSLANG_VALIDATOR}")
function (add_shaders_target TARGET)
cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN})
set (SHADERS_DIR ${SHADER_CHAPTER_NAME}/shaders)
add_custom_command (
OUTPUT ${SHADERS_DIR}
COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR}
)
set (SHADERS ${SHADERS_DIR}/frag.spv ${SHADERS_DIR}/vert.spv)
# Some chapters may have compute shaders in addition to vertex and fragment shaders,
# so we conditionally check this and add them to the target
string(FIND "${SHADER_SOURCES}" "${CHAPTER_SHADER}.comp" COMPUTE_SHADER_INDEX)
if (${COMPUTE_SHADER_INDEX} GREATER -1)
set (SHADERS ${SHADERS} ${SHADERS_DIR}/comp.spv)
endif()
add_custom_command (
OUTPUT ${SHADERS}
COMMAND glslang::validator
ARGS --target-env vulkan1.0 ${SHADER_SOURCES} --quiet
WORKING_DIRECTORY ${SHADERS_DIR}
DEPENDS ${SHADERS_DIR} ${SHADER_SOURCES}
COMMENT "Compiling Shaders"
VERBATIM
)
add_custom_target (${TARGET} DEPENDS ${SHADERS})
endfunction ()
function (add_chapter CHAPTER_NAME)
cmake_parse_arguments (CHAPTER "" "SHADER" "LIBS;TEXTURES;MODELS" ${ARGN})
add_executable (${CHAPTER_NAME} ${CHAPTER_NAME}.cpp)
set_target_properties (${CHAPTER_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CHAPTER_NAME})
set_target_properties (${CHAPTER_NAME} PROPERTIES CXX_STANDARD 17)
target_link_libraries (${CHAPTER_NAME} Vulkan::Vulkan glfw)
target_include_directories (${CHAPTER_NAME} PRIVATE ${STB_INCLUDEDIR})
if (DEFINED CHAPTER_SHADER)
set (CHAPTER_SHADER_TARGET ${CHAPTER_NAME}_shader)
file (GLOB SHADER_SOURCES ${CHAPTER_SHADER}.frag ${CHAPTER_SHADER}.vert ${CHAPTER_SHADER}.comp)
add_shaders_target (${CHAPTER_SHADER_TARGET} CHAPTER_NAME ${CHAPTER_NAME} SOURCES ${SHADER_SOURCES})
add_dependencies (${CHAPTER_NAME} ${CHAPTER_SHADER_TARGET})
endif ()
if (DEFINED CHAPTER_LIBS)
target_link_libraries (${CHAPTER_NAME} ${CHAPTER_LIBS})
endif ()
if (DEFINED CHAPTER_MODELS)
file (COPY ${CHAPTER_MODELS} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models)
endif ()
if (DEFINED CHAPTER_TEXTURES)
file (COPY ${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures)
endif ()
endfunction ()
add_chapter (00_base_code)
add_chapter (01_instance_creation)
add_chapter (02_validation_layers)
add_chapter (03_physical_device_selection)
add_chapter (04_logical_device)
add_chapter (05_window_surface)
add_chapter (06_swap_chain_creation)
add_chapter (07_image_views)
add_chapter (08_graphics_pipeline)
add_chapter (09_shader_modules
SHADER 09_shader_base)
add_chapter (10_fixed_functions
SHADER 09_shader_base)
add_chapter (11_render_passes
SHADER 09_shader_base)
add_chapter (12_graphics_pipeline_complete
SHADER 09_shader_base)
add_chapter (13_framebuffers
SHADER 09_shader_base)
add_chapter (14_command_buffers
SHADER 09_shader_base)
add_chapter (15_hello_triangle
SHADER 09_shader_base)
add_chapter (16_frames_in_flight
SHADER 09_shader_base)
add_chapter (17_swap_chain_recreation
SHADER 09_shader_base)
add_chapter (18_vertex_input
SHADER 18_shader_vertexbuffer
LIBS glm::glm)
add_chapter (19_vertex_buffer
SHADER 18_shader_vertexbuffer
LIBS glm::glm)
add_chapter (20_staging_buffer
SHADER 18_shader_vertexbuffer
LIBS glm::glm)
add_chapter (21_index_buffer
SHADER 18_shader_vertexbuffer
LIBS glm::glm)
add_chapter (22_descriptor_set_layout
SHADER 22_shader_ubo
LIBS glm::glm)
add_chapter (23_descriptor_sets
SHADER 22_shader_ubo
LIBS glm::glm)
add_chapter (24_texture_image
SHADER 22_shader_ubo
TEXTURES ../images/texture.jpg
LIBS glm::glm)
add_chapter (25_sampler
SHADER 22_shader_ubo
TEXTURES ../images/texture.jpg
LIBS glm::glm)
add_chapter (26_texture_mapping
SHADER 26_shader_textures
TEXTURES ../images/texture.jpg
LIBS glm::glm)
add_chapter (27_depth_buffering
SHADER 27_shader_depth
TEXTURES ../images/texture.jpg
LIBS glm::glm)
add_chapter (28_model_loading
SHADER 27_shader_depth
MODELS ../resources/viking_room.obj
TEXTURES ../resources/viking_room.png
LIBS glm::glm tinyobjloader::tinyobjloader)
add_chapter (29_mipmapping
SHADER 27_shader_depth
MODELS ../resources/viking_room.obj
TEXTURES ../resources/viking_room.png
LIBS glm::glm tinyobjloader::tinyobjloader)
add_chapter (30_multisampling
SHADER 27_shader_depth
MODELS ../resources/viking_room.obj
TEXTURES ../resources/viking_room.png
LIBS glm::glm tinyobjloader::tinyobjloader)
add_chapter (31_compute_shader
SHADER 31_shader_compute
LIBS glm::glm)