@@ -56,46 +56,48 @@ find_program (GLSLANG_VALIDATOR "glslangValidator" HINTS $ENV{VULKAN_SDK}/bin RE
5656set_property (TARGET glslang::validator PROPERTY IMPORTED_LOCATION "${GLSLANG_VALIDATOR} " )
5757find_program (SLANGC_EXECUTABLE slangc HINTS $ENV{VULKAN_SDK} /bin REQUIRED)
5858
59- function (add_shaders_target TARGET )
60- cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN} )
61- set (SHADERS_DIR ${SHADER_CHAPTER_NAME} /shaders)
62- add_custom_command (
63- OUTPUT ${SHADERS_DIR}
59+ function (add_shaders_target TARGET )
60+ cmake_parse_arguments (SHADER "" "CHAPTER_NAME" "SOURCES" ${ARGN} )
61+
62+ set (SHADERS_DIR ${CMAKE_BINARY_DIR} /${SHADER_CHAPTER_NAME} /shaders)
63+ message (STATUS "${TARGET} Shaders will be output to: ${SHADERS_DIR} " )
64+
65+ # Ensure the shaders directory exists
66+ file (MAKE_DIRECTORY ${SHADERS_DIR} )
67+
68+ add_custom_target (${TARGET}
6469 COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR}
65- )
66- add_custom_command (
67- OUTPUT ${SHADERS_DIR} /frag.spv ${SHADERS_DIR} /vert.spv
68- COMMAND glslang::validator
69- ARGS --target -env vulkan1.0 ${SHADER_SOURCES} --quiet
70- WORKING_DIRECTORY ${SHADERS_DIR}
71- DEPENDS ${SHADERS_DIR} ${SHADER_SOURCES}
72- COMMENT "Compiling Shaders"
70+ COMMAND glslang::validator --target -env vulkan1.0 ${SHADER_SOURCES} --quiet
71+ WORKING_DIRECTORY ${SHADERS_DIR}
72+ COMMENT "Compiling Shaders for ${TARGET} "
7373 VERBATIM
74- )
75- add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR} /frag.spv ${SHADERS_DIR} /vert.spv)
76- endfunction ()
74+ )
75+ endfunction ()
76+
77+ function (add_slang_shader_target TARGET )
78+ cmake_parse_arguments (SHADER "" "CHAPTER_NAME" "SOURCES" ${ARGN} )
7779
78- function (add_slang_shader_target TARGET )
79- cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN} )
80- set (SHADERS_DIR ${SHADER_CHAPTER_NAME} /shaders)
80+ set (SHADERS_DIR ${CMAKE_BINARY_DIR} /${SHADER_CHAPTER_NAME} /shaders)
81+ message (STATUS "${TARGET} Slang shaders will be output to: ${SHADERS_DIR} " )
82+ # Ensure the shaders directory exists
83+ file (MAKE_DIRECTORY ${SHADERS_DIR} )
84+
85+ set (ENTRY_POINTS -entry vertMain -entry fragMain)
8186 file (GLOB HAS_COMPUTE ${CHAPTER_SHADER} .comp)
82- set (ENTRY_POINTS -entry vertMain -entry fragMain)
8387 if (HAS_COMPUTE)
8488 list (APPEND ENTRY_POINTS -entry compMain)
8589 endif ()
86- add_custom_command (
87- OUTPUT ${SHADERS_DIR}
88- COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR}
89- )
90- add_custom_command (
91- OUTPUT ${SHADERS_DIR} /slang.spv
92- COMMAND ${SLANGC_EXECUTABLE} ${SHADER_SOURCES} -target spirv -profile spirv_1_4 -emit-spirv-directly -fvk-use-entrypoint-name ${ENTRY_POINTS} -o slang.spv
93- WORKING_DIRECTORY ${SHADERS_DIR}
94- DEPENDS ${SHADERS_DIR} ${SHADER_SOURCES}
95- COMMENT "Compiling Slang Shaders"
96- VERBATIM
90+
91+ add_custom_target (${TARGET}
92+ COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR}
93+ COMMAND ${SLANGC_EXECUTABLE} ${SHADER_SOURCES}
94+ -target spirv -profile spirv_1_4 -emit-spirv-directly
95+ -fvk-use-entrypoint-name ${ENTRY_POINTS}
96+ -o slang.spv
97+ WORKING_DIRECTORY ${SHADERS_DIR}
98+ COMMENT "Compiling Slang Shaders for ${TARGET} "
99+ VERBATIM
97100 )
98- add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR} /slang.spv)
99101endfunction ()
100102
101103function (add_chapter CHAPTER_NAME)
@@ -133,8 +135,58 @@ function (add_chapter CHAPTER_NAME)
133135 file (COPY assets/${CHAPTER_MODELS} DESTINATION ${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /models)
134136 endif ()
135137 if (DEFINED CHAPTER_TEXTURES)
136- file (COPY assets/${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /textures)
138+ file (COPY assets/${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /textures)
137139 endif ()
140+
141+ if (WIN32 )
142+ if (${CMAKE_GENERATOR} MATCHES "Visual Studio.*" )
143+ set (EXECUTABLE_DIR $<TARGET_FILE_DIR:${CHAPTER_NAME} >)
144+
145+ add_custom_target (${CHAPTER_NAME} _postbuild ALL
146+ COMMENT "${CHAPTER_NAME} : Post-build asset sync"
147+ )
148+
149+ if (DEFINED CHAPTER_SHADER)
150+ add_custom_command (TARGET ${CHAPTER_NAME} _postbuild POST_BUILD
151+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${EXECUTABLE_DIR} /shaders
152+ COMMAND ${CMAKE_COMMAND} -E make_directory ${EXECUTABLE_DIR} /shaders
153+ COMMAND ${CMAKE_COMMAND} -E copy_directory
154+ ${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /shaders
155+ ${EXECUTABLE_DIR} /shaders
156+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /shaders
157+ COMMENT "${CHAPTER_NAME} : Copying shaders to executable directory (Visual Studio)"
158+ )
159+ add_dependencies (${CHAPTER_NAME} _postbuild ${CHAPTER_NAME} )
160+
161+ endif ()
162+ if (DEFINED CHAPTER_MODELS)
163+ add_custom_command (TARGET ${CHAPTER_NAME} _postbuild POST_BUILD
164+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${EXECUTABLE_DIR} /models
165+ COMMAND ${CMAKE_COMMAND} -E make_directory ${EXECUTABLE_DIR} /models
166+ COMMAND ${CMAKE_COMMAND} -E copy_directory
167+ ${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /models
168+ ${EXECUTABLE_DIR} /models
169+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /models
170+ COMMENT "${CHAPTER_NAME} : Copying models to executable directory (Visual Studio)"
171+ )
172+ add_dependencies (${CHAPTER_NAME} _postbuild ${CHAPTER_NAME} )
173+
174+ endif ()
175+ if (DEFINED CHAPTER_TEXTURES)
176+ add_custom_command (TARGET ${CHAPTER_NAME} _postbuild POST_BUILD
177+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${EXECUTABLE_DIR} /textures
178+ COMMAND ${CMAKE_COMMAND} -E make_directory ${EXECUTABLE_DIR} /textures
179+ COMMAND ${CMAKE_COMMAND} -E copy_directory
180+ ${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /textures
181+ ${EXECUTABLE_DIR} /textures
182+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /textures
183+ COMMENT "${CHAPTER_NAME} : Copying textures to executable directory (Visual Studio)"
184+ )
185+ add_dependencies (${CHAPTER_NAME} _postbuild ${CHAPTER_NAME} )
186+
187+ endif ()
188+ endif ()
189+ endif ()
138190endfunction ()
139191
140192add_chapter (00_base_code)
0 commit comments