Skip to content

Commit 6928adc

Browse files
authored
Merge pull request #298 from euclid-skyline/build_workflow_branch_from_109a4f4
Visual Studio/Ninja Multi-Config Build workflow branch from 109a4f4
2 parents a774a98 + 295716f commit 6928adc

2 files changed

Lines changed: 63 additions & 20 deletions

File tree

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ ebook/*.epub
1111

1212
convert.py
1313

14+
**/[B,b]uild/*
15+
1416
attachments/build/**
17+
attachments/vcpkg.json
1518
attachments/android/.gradle/**
1619
attachments/android/.idea
1720
attachments/android/.gradle/**

attachments/CMakeLists.txt

Lines changed: 60 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ if(ENABLE_CPP20_MODULE)
5151
endif()
5252

5353
target_sources(VulkanCppModule
54-
PUBLIC
55-
FILE_SET cxx_modules TYPE CXX_MODULES
56-
BASE_DIRS
57-
"${Vulkan_INCLUDE_DIR}"
58-
FILES
59-
"${Vulkan_INCLUDE_DIR}/vulkan/vulkan.cppm"
54+
PUBLIC
55+
FILE_SET cxx_modules TYPE CXX_MODULES
56+
BASE_DIRS
57+
"${Vulkan_INCLUDE_DIR}"
58+
FILES
59+
"${Vulkan_INCLUDE_DIR}/vulkan/vulkan.cppm"
6060
)
6161

6262

@@ -85,7 +85,12 @@ find_program(SLANGC_EXECUTABLE slangc HINTS $ENV{VULKAN_SDK}/bin REQUIRED)
8585

8686
function (add_shaders_target TARGET)
8787
cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN})
88-
set (SHADERS_DIR ${SHADER_CHAPTER_NAME}/shaders)
88+
if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*" OR
89+
${CMAKE_GENERATOR} MATCHES "Ninja Multi-Config")
90+
set (SHADERS_DIR ${CMAKE_BINARY_DIR}/${SHADER_CHAPTER_NAME}/$<CONFIG>/shaders)
91+
else()
92+
set (SHADERS_DIR ${CMAKE_BINARY_DIR}/${SHADER_CHAPTER_NAME}/shaders)
93+
endif()
8994
add_custom_command (
9095
OUTPUT ${SHADERS_DIR}
9196
COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR}
@@ -95,32 +100,37 @@ function (add_shaders_target TARGET)
95100
COMMAND glslang::validator
96101
ARGS --target-env vulkan1.0 ${SHADER_SOURCES} --quiet
97102
WORKING_DIRECTORY ${SHADERS_DIR}
98-
DEPENDS ${SHADERS_DIR} ${SHADER_SOURCES}
99-
COMMENT "Compiling Shaders"
103+
DEPENDS ${SHADER_SOURCES}
104+
COMMENT "Compiling Shaders for ${TARGET}"
100105
VERBATIM
101106
)
102107
add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR}/frag.spv ${SHADERS_DIR}/vert.spv)
103108
endfunction ()
104109

105110
function (add_slang_shader_target TARGET)
106111
cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN})
107-
set (SHADERS_DIR ${SHADER_CHAPTER_NAME}/shaders)
112+
if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*" OR
113+
${CMAKE_GENERATOR} MATCHES "Ninja Multi-Config")
114+
set (SHADERS_DIR ${CMAKE_BINARY_DIR}/${SHADER_CHAPTER_NAME}/$<CONFIG>/shaders)
115+
else()
116+
set (SHADERS_DIR ${CMAKE_BINARY_DIR}/${SHADER_CHAPTER_NAME}/shaders)
117+
endif()
108118
file(GLOB HAS_COMPUTE ${CHAPTER_SHADER}.comp)
109119
set (ENTRY_POINTS -entry vertMain -entry fragMain)
110120
if(HAS_COMPUTE)
111121
list(APPEND ENTRY_POINTS -entry compMain)
112122
endif()
113123
add_custom_command (
114-
OUTPUT ${SHADERS_DIR}
115-
COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR}
124+
OUTPUT ${SHADERS_DIR}
125+
COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR}
116126
)
117127
add_custom_command (
118-
OUTPUT ${SHADERS_DIR}/slang.spv
119-
COMMAND ${SLANGC_EXECUTABLE} ${SHADER_SOURCES} -target spirv -profile spirv_1_4+spvRayQueryKHR -emit-spirv-directly -fvk-use-entrypoint-name ${ENTRY_POINTS} -o slang.spv
120-
WORKING_DIRECTORY ${SHADERS_DIR}
121-
DEPENDS ${SHADERS_DIR} ${SHADER_SOURCES}
122-
COMMENT "Compiling Slang Shaders"
123-
VERBATIM
128+
OUTPUT ${SHADERS_DIR}/slang.spv
129+
COMMAND ${SLANGC_EXECUTABLE} ${SHADER_SOURCES} -target spirv -profile spirv_1_4+spvRayQueryKHR -emit-spirv-directly -fvk-use-entrypoint-name ${ENTRY_POINTS} -o slang.spv
130+
WORKING_DIRECTORY ${SHADERS_DIR}
131+
DEPENDS ${SHADER_SOURCES}
132+
COMMENT "Compiling Slang Shaders for ${TARGET}"
133+
VERBATIM
124134
)
125135
add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR}/slang.spv)
126136
endfunction()
@@ -165,15 +175,45 @@ function (add_chapter CHAPTER_NAME)
165175
target_link_libraries (${CHAPTER_NAME} ${CHAPTER_LIBS})
166176
endif ()
167177
if (DEFINED CHAPTER_MODELS)
168-
list(TRANSFORM CHAPTER_MODELS PREPEND "${CMAKE_SOURCE_DIR}/assets/")
178+
list(TRANSFORM CHAPTER_MODELS PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/assets/")
169179
file (COPY ${CHAPTER_MODELS} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models)
180+
181+
if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*" OR
182+
${CMAKE_GENERATOR} MATCHES "Ninja Multi-Config")
183+
sync_directory(
184+
"${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models"
185+
"${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/$<CONFIG>/models"
186+
${CHAPTER_NAME}
187+
"${CHAPTER_NAME} - Models"
188+
)
189+
endif()
170190
endif ()
171191
if (DEFINED CHAPTER_TEXTURES)
172-
list(TRANSFORM CHAPTER_TEXTURES PREPEND "${CMAKE_SOURCE_DIR}/assets/")
192+
list(TRANSFORM CHAPTER_TEXTURES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/assets/")
173193
file (COPY ${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures)
194+
195+
if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*" OR
196+
${CMAKE_GENERATOR} MATCHES "Ninja Multi-Config")
197+
sync_directory(
198+
"${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures"
199+
"${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/$<CONFIG>/textures"
200+
${CHAPTER_NAME}
201+
"${CHAPTER_NAME} - Textures"
202+
)
203+
endif()
174204
endif ()
175205
endfunction ()
176206

207+
function(sync_directory SRC_DIR DST_DIR TARGET_NAME LABEL)
208+
add_custom_command(
209+
TARGET ${TARGET_NAME}
210+
POST_BUILD
211+
COMMAND ${CMAKE_COMMAND} -E make_directory "${DST_DIR}"
212+
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different "${SRC_DIR}" "${DST_DIR}"
213+
COMMENT "${LABEL}: Syncing directory"
214+
)
215+
endfunction()
216+
177217
add_chapter (00_base_code)
178218

179219
add_chapter (01_instance_creation)

0 commit comments

Comments
 (0)