Created
October 26, 2020 08:56
-
-
Save mrtrizer/8047a79294e59cd2a1f8aa06795e756a to your computer and use it in GitHub Desktop.
CMake Vulkan build shaders. Tested in Visual Studio, but should also work under Linux and MacOS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cmake_minimum_required (VERSION 3.8) | |
set(PROJECT_NAME SimpleVulkan) | |
add_executable (${PROJECT_NAME} "main.c") | |
find_package(Vulkan REQUIRED) | |
target_include_directories(${PROJECT_NAME} PRIVATE "./") | |
target_link_libraries(${PROJECT_NAME} Vulkan::Vulkan) | |
target_compile_definitions(${PROJECT_NAME} PRIVATE VK_USE_PLATFORM_WIN32_KHR) | |
set(GLSLC "${Vulkan_INCLUDE_DIR}/../Bin/glslc.exe") | |
message("CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}") | |
set(SHADERS_IN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/shaders") | |
set(SHADERS_OUT_DIR "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/shaders") | |
file(GLOB SHADERS "${SHADERS_IN_DIR}/*.vert" "${SHADERS_IN_DIR}/*.frag") | |
file(MAKE_DIRECTORY ${SHADERS_OUT_DIR}) | |
foreach(SHADER ${SHADERS}) | |
get_filename_component(SHADER_NAME ${SHADER} NAME) | |
set(SHADER_OUT_NAME "${SHADERS_OUT_DIR}/${SHADER_NAME}.spv") | |
list(APPEND SHADER_OUT_NAMES ${SHADER_OUT_NAME}) | |
add_custom_command( | |
MAIN_DEPENDENCY ${SHADER} | |
OUTPUT ${SHADER_OUT_NAME} | |
COMMAND ${GLSLC} ${SHADER} "-o" ${SHADER_OUT_NAME} | |
VERBATIM) | |
endforeach() | |
add_custom_target(build_shaders DEPENDS ${SHADER_OUT_NAMES}) | |
add_dependencies(${PROJECT_NAME} build_shaders) |
Thank you so much! It works great for me.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you; this helped me a lot!
Changing the command on line 33 from ${GLSLC} to ${Vulkan_GLSLC_EXECUTABLE} is enough to make this work cross platform. This feature is apparently new to CMake 3.19.
Thanks again!