Skip to content

Commit 3ef1339

Browse files
Refactor shader target functions in attchments/CMakeLists.txt to fix MSBuild warning (MSB8065/MSB8064) and add post-build commands to move shaders/models/textures to correct executable directory for Visual Studio
1 parent a543c82 commit 3ef1339

File tree

1 file changed

+85
-33
lines changed

1 file changed

+85
-33
lines changed

attachments/CMakeLists.txt

Lines changed: 85 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -56,46 +56,48 @@ find_program (GLSLANG_VALIDATOR "glslangValidator" HINTS $ENV{VULKAN_SDK}/bin RE
5656
set_property (TARGET glslang::validator PROPERTY IMPORTED_LOCATION "${GLSLANG_VALIDATOR}")
5757
find_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)
99101
endfunction()
100102

101103
function (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()
138190
endfunction ()
139191

140192
add_chapter (00_base_code)

0 commit comments

Comments
 (0)