@@ -125,6 +125,24 @@ function (add_slang_shader_target TARGET)
125125 add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR} /slang.spv )
126126endfunction ()
127127
128+ function (sync_directory SRC_DIR DST_DIR TARGET_NAME LABEL )
129+ file (GLOB_RECURSE FILES "${SRC_DIR} /*" )
130+
131+ foreach (FILE IN LISTS FILES)
132+ file (RELATIVE_PATH REL_PATH "${SRC_DIR} " "${FILE} " )
133+ set (DST_FILE "${DST_DIR} /${REL_PATH} " )
134+ get_filename_component (DST_DIR_PATH "${DST_FILE} " DIRECTORY )
135+
136+ add_custom_command (
137+ TARGET ${TARGET_NAME}
138+ POST_BUILD
139+ COMMAND ${CMAKE_COMMAND} -E make_directory "${DST_DIR_PATH} "
140+ COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FILE} " "${DST_FILE} "
141+ COMMENT "${LABEL} : Syncing ${REL_PATH} "
142+ )
143+ endforeach ()
144+ endfunction ()
145+
128146function (add_chapter CHAPTER_NAME )
129147 cmake_parse_arguments (CHAPTER "" "SHADER" "LIBS;TEXTURES;MODELS" ${ARGN} )
130148 add_executable (${CHAPTER_NAME} ${CHAPTER_NAME} .cpp )
@@ -172,6 +190,46 @@ function (add_chapter CHAPTER_NAME)
172190 list (TRANSFORM CHAPTER_TEXTURES PREPEND "${CMAKE_CURRENT_SOURCE_DIR} /assets/" )
173191 file (COPY ${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR} /${CHAPTER_NAME}/textures )
174192 endif ()
193+
194+ # Post-build step to copy assets to executable directory
195+ if (${CMAKE_GENERATOR} MATCHES "Visual Studio.*" OR
196+ ${CMAKE_GENERATOR} MATCHES "Ninja Multi-Config" )
197+
198+ set (EXECUTABLE_DIR $<TARGET_FILE_DIR :${CHAPTER_NAME} >)
199+
200+ add_custom_target (${CHAPTER_NAME} _postbuild ALL
201+ COMMENT "${CHAPTER_NAME} : Post-build asset sync"
202+ )
203+
204+ add_dependencies (${CHAPTER_NAME} _postbuild ${CHAPTER_NAME} )
205+
206+ if (DEFINED CHAPTER_SHADER)
207+ sync_directory (
208+ "${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /shaders"
209+ "${EXECUTABLE_DIR} /shaders"
210+ ${CHAPTER_NAME}
211+ "${CHAPTER_NAME} : Shaders"
212+ )
213+ endif ()
214+
215+ if (DEFINED CHAPTER_MODELS)
216+ sync_directory (
217+ "${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /models"
218+ "${EXECUTABLE_DIR} /models"
219+ ${CHAPTER_NAME}
220+ "${CHAPTER_NAME} : Models"
221+ )
222+ endif ()
223+
224+ if (DEFINED CHAPTER_TEXTURES)
225+ sync_directory (
226+ "${CMAKE_BINARY_DIR} /${CHAPTER_NAME} /textures"
227+ "${EXECUTABLE_DIR} /textures"
228+ ${CHAPTER_NAME}
229+ "${CHAPTER_NAME} : Textures"
230+ )
231+ endif ()
232+ endif ()
175233endfunction ()
176234
177235add_chapter (00_base_code )
0 commit comments