@@ -69,6 +69,13 @@ find_program(SPIRV_DIS_EXE
69
69
REQUIRED
70
70
)
71
71
72
+ cmake_path (GET Vulkan_INCLUDE_DIR PARENT_PATH VULKAN_SDK_INSTALL_DIRECTORY )
73
+ get_filename_component (VULKAN_SDK_VERSION "${VULKAN_SDK_INSTALL_DIRECTORY} " NAME )
74
+
75
+ if (NOT EXISTS "${VULKAN_SDK_INSTALL_DIRECTORY} " )
76
+ message (FATAL_ERROR "Internal error, VULKAN_SDK_INSTALL_DIRECTORY doesn't exist" )
77
+ endif ()
78
+
72
79
find_program (CTEST_EXE
73
80
NAMES ctest
74
81
REQUIRED
@@ -100,12 +107,12 @@ set(NBL_BUILD_INFO_POSTPROCESS_COMMAND
100
107
cmake_path (GET SPIRV_DIS_EXE PARENT_PATH VULKAN_SDK_BIN_DIRECTORY )
101
108
cmake_path (NATIVE_PATH VULKAN_SDK_BIN_DIRECTORY NORMALIZE VULKAN_SDK_BIN_DIRECTORY )
102
109
cmake_path (GET SPIRV_DIS_EXE FILENAME SPIRV_DIS_EXE )
103
- set (SPIRV_DIS_EXE "C:\\ vulkan\\ bin\\ ${SPIRV_DIS_EXE} " )
104
- cmake_path (NATIVE_PATH SPIRV_DIS_EXE NORMALIZE SPIRV_DIS_EXE )
110
+ set (CT_SPIRV_DIS_EXE "C:\\ vulkan\\ ${VULKAN_SDK_VERSION} \\ bin\\ ${SPIRV_DIS_EXE} " )
111
+ cmake_path (NATIVE_PATH CT_SPIRV_DIS_EXE NORMALIZE CT_SPIRV_DIS_EXE )
105
112
106
113
set (NBL_CE_GENERATE_CONFIG_COMMAND
107
114
"${CMAKE_COMMAND} "
108
- "-DSPIRV_DIS_EXE=${SPIRV_DIS_EXE } "
115
+ "-DSPIRV_DIS_EXE=${CT_SPIRV_DIS_EXE } "
109
116
"-DNSC_RELEASE_BUILD_INFO=${NSC_RELEASE_BUILD_INFO} "
110
117
"-DNSC_RELWITHDEBINFO_BUILD_INFO=${NSC_RELWITHDEBINFO_BUILD_INFO} "
111
118
"-DNSC_DEBUG_BUILD_INFO=${NSC_DEBUG_BUILD_INFO} "
@@ -120,7 +127,8 @@ set(NBL_DOCKER_CE_COMPOSE_TARGET "${GODBOLT_BINARY_DIRECTORY}/compose.yml")
120
127
include (InstallRequiredSystemLibraries )
121
128
122
129
string (REPLACE "v" "VC" TARGET_DCRT ${CMAKE_VS_PLATFORM_TOOLSET} )
123
- set (DEBUG_CRT_DIRECTORY_SOURCE "${MSVC_REDIST_DIR} /debug_nonredist/x64/Microsoft.${TARGET_DCRT} .DebugCRT" )
130
+ set (DEBUG_CRT_RELATIVE debug_nonredist/x64/Microsoft.${TARGET_DCRT}.DebugCRT )
131
+ set (DEBUG_CRT_DIRECTORY_SOURCE "${MSVC_REDIST_DIR} /${DEBUG_CRT_RELATIVE} " )
124
132
cmake_path (NATIVE_PATH MSVC_REDIST_DIR NORMALIZE NBL_REDIST_DIR )
125
133
126
134
if (NOT EXISTS "${DEBUG_CRT_DIRECTORY_SOURCE} " )
@@ -136,42 +144,194 @@ find_file(UCRTBASED_DLL_PATH
136
144
REQUIRED
137
145
)
138
146
139
- # TODO: nabla-devel-host-env-windows image
140
- # I will use it to cache vulkan spirv-dis with CRTs we
141
- # are configuring this cmake build with into docker layers
147
+ # TODO: (***) ---> THIS GOES TO <NBL_ROOT_DIR>/docker to CMakeLists.txt file!
148
+
149
+ set (BASE_IMAGE mcr.microsoft.com/windows/servercore:ltsc2022-amd64 ) # NOTE: HARDCODED CURRENTLY
150
+
151
+ string (TOLOWER "dcr.devsh.eu/nabla/cmake-host-dev-env/${CMAKE_SYSTEM_NAME} /package/vulkan:latest" DOCKER_VULKAN_TAG )
152
+ string (TOLOWER "dcr.devsh.eu/nabla/cmake-host-dev-env/${CMAKE_SYSTEM_NAME} /toolset/redist/${CMAKE_CXX_COMPILER_ID} /crt:latest" DOCKER_CRT_TAG )
153
+ string (TOLOWER "dcr.devsh.eu/nabla/cmake-host-dev-env/${CMAKE_SYSTEM_NAME} /build/${CMAKE_CXX_COMPILER_ID} /devel-compiler-explorer-nsc:latest" DOCKER_DEVEL_TAG )
154
+
155
+ cmake_path (NATIVE_PATH MSVC_REDIST_DIR NORMALIZE TOOLSET_REDIST_PATH )
156
+ get_filename_component (REDIST_CRT_TOOLSET_VERSION "${TOOLSET_REDIST_PATH} " NAME )
157
+
158
+ function (GEN_DOCKER_CONTENT _CTX_ _OUTPUT_DIRECTORY_ _EXTRA_DOCKERFILE_CONTENT_ _DOCKER_IGNORE_CONTENT_ _S_NAME_ _CT_NAME_ _IMAGE_NAME_ _WITH_BUILD_ )
159
+
160
+ set (_OUTPUT_D_PATH_ "${_OUTPUT_DIRECTORY_} /Dockerfile" )
161
+ set (_OUTPUT_C_PATH_ "${_OUTPUT_DIRECTORY_} /compose.yml" )
162
+
163
+ string (CONFIGURE "${_EXTRA_DOCKERFILE_CONTENT_} " _EXTRA_DOCKERFILE_CONTENT_EVAL_ @ONLY )
164
+ string (CONFIGURE "${_DOCKER_IGNORE_CONTENT_} " _DOCKER_IGNORE_CONTENT_EVAL_ @ONLY )
165
+
166
+ string (APPEND DOCKER_CONTENT
167
+ [=[
168
+ # escape=`
169
+
170
+ ARG BASE_IMAGE=@BASE_IMAGE@
171
+ FROM ${BASE_IMAGE}
172
+ SHELL ["cmd", "/S", "/C"]
173
+ @_EXTRA_DOCKERFILE_CONTENT_EVAL_@
174
+ ]=]
175
+ )
176
+
177
+ string (CONFIGURE "${DOCKER_CONTENT} " DOCKER_CONTENT @ONLY )
178
+ file (WRITE "${_OUTPUT_D_PATH_} " "${DOCKER_CONTENT} " )
179
+
180
+ set (_CTX_TARGET_ "${_OUTPUT_DIRECTORY_} /.ctx" )
181
+
182
+ if ("${_CTX_} " STREQUAL "" )
183
+
184
+ else ()
185
+ if (NOT EXISTS "${_CTX_} " )
186
+ message (FATAL_ERROR "Invalid source context directory doesn't exist! _CTX_: \" ${_CTX_} \" " )
187
+ endif ()
188
+
189
+ file (COPY "${_CTX_} " DESTINATION "${_CTX_TARGET_} " )
190
+ endif ()
191
+
192
+ set (_OUTPUT_I_PATH_ "${_CTX_TARGET_} /.dockerignore" )
193
+
194
+ string (APPEND COMPOSE_CONTENT
195
+ [=[
196
+ services:
197
+ @_S_NAME_@:
198
+ build:
199
+ context: ./.ctx
200
+ dockerfile: "@_OUTPUT_D_PATH_@"
201
+ image: @_IMAGE_NAME_@
202
+ container_name: @_CT_NAME_@
203
+ networks:
204
+ docker_default:
205
+
206
+ networks:
207
+ docker_default:
208
+ external: true
209
+ ]=]
210
+ )
211
+
212
+ string (CONFIGURE "${COMPOSE_CONTENT} " COMPOSE_CONTENT @ONLY )
213
+ file (WRITE "${_OUTPUT_C_PATH_} " "${COMPOSE_CONTENT} " )
214
+ file (WRITE "${_OUTPUT_I_PATH_} " "${_DOCKER_IGNORE_CONTENT_EVAL_} " )
215
+
216
+ if (_WITH_BUILD_ )
217
+ execute_process (COMMAND "${DOCKER_EXE} " compose -f "${_OUTPUT_C_PATH_} " build )
218
+ endif ()
219
+ endfunction ()
220
+
221
+ # Vulkan
222
+ set (OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /docker/vulkan" )
223
+ set (CT_VULKAN_TARGET vulkan )
224
+ GEN_DOCKER_CONTENT ("${VULKAN_SDK_INSTALL_DIRECTORY} " "${OUTPUT_DIRECTORY} "
225
+ [=[
226
+ COPY ./ "@CT_VULKAN_TARGET@"
227
+
228
+ ENV VULKAN_SDK="C:/@CT_VULKAN_TARGET@"
229
+ ENV VULKAN_SDK_VERSION="@VULKAN_SDK_VERSION@"
230
+ LABEL VULKAN_SDK="C:/@CT_VULKAN_TARGET@"
231
+ LABEL VULKAN_SDK_VERSION="@VULKAN_SDK_VERSION@"
232
+ ]=]
233
+ [=[
234
+ *
235
+ !@VULKAN_SDK_VERSION@/Bin/*.dll
236
+ !@VULKAN_SDK_VERSION@/Bin/*spirv*.exe
237
+ ]=]
238
+ nabla-dev-env-vulkan
239
+ nabla.dev.env.vulkan
240
+ ${DOCKER_VULKAN_TAG}
241
+ ON
242
+ )
243
+
244
+ # CRT
245
+ set (OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /docker/crt" )
246
+ set (CT_TOOLSET_REDIST_TARGET toolset_redist )
247
+ make_directory ("${OUTPUT_DIRECTORY} /.ctx" )
248
+ file (COPY "${UCRTBASED_DLL_PATH} " DESTINATION "${OUTPUT_DIRECTORY} /.ctx" )
249
+ GEN_DOCKER_CONTENT ("${TOOLSET_REDIST_PATH} " "${OUTPUT_DIRECTORY} "
250
+ [=[
251
+ COPY ./ "/@CT_TOOLSET_REDIST_TARGET@"
252
+
253
+ ENV REDIST_CRT_TOOLSET_VERSION="@REDIST_CRT_TOOLSET_VERSION@"
254
+ ENV TOOLSET_REDIST_PATH="C:/@CT_TOOLSET_REDIST_TARGET@"
255
+ LABEL REDIST_CRT_TOOLSET_VERSION="@REDIST_CRT_TOOLSET_VERSION@"
256
+ LABEL TOOLSET_REDIST_PATH="C:/@CT_TOOLSET_REDIST_TARGET@"
257
+ ]=]
258
+ [=[
259
+ *
260
+ !ucrtbased.dll
261
+ !@REDIST_CRT_TOOLSET_VERSION@/vc_redist.x64.exe
262
+ !@REDIST_CRT_TOOLSET_VERSION@/@DEBUG_CRT_RELATIVE@/*.dll
263
+ ]=]
264
+ nabla-dev-env-crt
265
+ nabla.dev.env.crt
266
+ ${DOCKER_CRT_TAG}
267
+ ON
268
+ )
269
+
270
+ # Devel, combined
271
+ set (BASE_IMAGE dcr.devsh.eu/compiler-explorer )
272
+
273
+ # NOTE to self: could be all done with single docker file & compose file but buildkit works bad with windows driver, yet need to wait for stuff to be implemented
274
+ set (OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /docker/devel" )
275
+ set (CT_REDIST_DIR "${CT_TOOLSET_REDIST_TARGET} /${REDIST_CRT_TOOLSET_VERSION} " )
276
+ set (CT_NONREDIST_CTR_DIR "${CT_REDIST_DIR} /${DEBUG_CRT_RELATIVE} " )
277
+ cmake_path (NATIVE_PATH CT_REDIST_DIR NORMALIZE CT_REDIST_DIR )
278
+ cmake_path (NATIVE_PATH CT_NONREDIST_CTR_DIR NORMALIZE CT_NONREDIST_CTR_DIR )
279
+ set (DEVEL_DOCKERFILE "${OUTPUT_DIRECTORY} /Dockerfile" )
280
+
281
+ GEN_DOCKER_CONTENT ("" "${OUTPUT_DIRECTORY} "
282
+ [=[
283
+
284
+ COPY --from=@DOCKER_VULKAN_TAG@ /@CT_VULKAN_TARGET@ /@CT_VULKAN_TARGET@
285
+ COPY --from=@DOCKER_CRT_TAG@ /@CT_TOOLSET_REDIST_TARGET@ /@CT_TOOLSET_REDIST_TARGET@
286
+
287
+ RUN .\@CT_REDIST_DIR@\vc_redist.x64.exe /quiet /install
288
+ RUN xcopy .\@CT_NONREDIST_CTR_DIR@\*.dll %SystemRoot%\System32 /Y
289
+ RUN xcopy .\@CT_TOOLSET_REDIST_TARGET@\ucrtbased.dll %SystemRoot%\System32 /Y
290
+
291
+ ]=]
292
+ [=[
293
+
294
+ ]=]
295
+ nabla-dev-env-nsc
296
+ nabla.dev.env.nsc
297
+ ${DOCKER_DEVEL_TAG}
298
+ OFF
299
+ )
300
+
301
+ # <---(***)
302
+
303
+ set (NABLA_DEV_ENV_CT_NAME dev.nabla.env.${CMAKE_SYSTEM_NAME}.${CMAKE_CXX_COMPILER_ID}.base )
304
+ string (TOLOWER "${NABLA_DEV_ENV_CT_NAME} " NABLA_DEV_ENV_CT_NAME )
305
+
306
+ set (COMPOSE_NSC_DEV_SERVICE compiler-explorer-nsc-dev )
307
+ string (TOLOWER "dcr.devsh.eu/nabla/cmake-host-dev-env/${CMAKE_SYSTEM_NAME} /build/${CMAKE_CXX_COMPILER_ID} /compiler-explorer-nsc:latest" COMPOSE_NSC_DEV_IMAGE )
142
308
143
309
string (APPEND COMPOSE_CONTENT
144
310
[=[
145
311
services:
146
- compiler-explorer-nsc:
312
+ @COMPOSE_NSC_DEV_SERVICE@:
313
+ container_name: dev.ce.nsc.dev
147
314
extends:
148
315
file: @NBL_DOCKER_CE_COMPOSE_BASE@
149
316
service: compiler-explorer
150
- container_name: dev.ce.nsc
317
+ build:
318
+ context: ./.ctx
319
+ dockerfile: @DEVEL_DOCKERFILE@
320
+ image: @COMPOSE_NSC_DEV_IMAGE@
151
321
environment:
152
322
NBL_INSTALL_DIRECTORY: "@NBL_INSTALL_DIRECTORY@"
153
323
NBL_EXPLICIT_MODULE_LOAD_LOG: "ON"
154
324
entrypoint:
155
325
- "cmd"
156
326
- "/c"
157
327
- >
158
- C:\\redist\\vc_redist.x64.exe /quiet /install
159
- && xcopy C:\\nsc\\install\\.nonredist\\*.dll %SystemRoot%\\System32 /Y
160
- && copy C:\\nsc\\install\\hlsl.local.properties.cmake %GIT_GODBOLT_REPOSITORY_PATH%\\etc\\config\\hlsl.local.properties
328
+ copy C:\\nsc\\install\\hlsl.local.properties.cmake %GIT_GODBOLT_REPOSITORY_PATH%\\etc\\config\\hlsl.local.properties
161
329
&& npm --prefix %GIT_GODBOLT_REPOSITORY_PATH% run dev -- --language hlsl
162
330
volumes:
163
331
- type: bind
164
332
source: .\install
165
333
target: @NBL_DOCKER_CT_NSC_VOLUME_TARGET@
166
334
read_only: true
167
- - type: bind
168
- source: @NBL_REDIST_DIR@
169
- target: C:\redist
170
- read_only: true
171
- - type: bind
172
- source: @VULKAN_SDK_BIN_DIRECTORY@
173
- target: C:\vulkan\bin
174
- read_only: true
175
335
176
336
networks:
177
337
docker_default:
@@ -181,28 +341,28 @@ networks:
181
341
182
342
string (CONFIGURE "${COMPOSE_CONTENT} " COMPOSE_CONTENT @ONLY )
183
343
file (WRITE "${NBL_DOCKER_CE_COMPOSE_TARGET} " "${COMPOSE_CONTENT} " )
344
+ make_directory ("${GODBOLT_BINARY_DIRECTORY} /.ctx" )
345
+ execute_process (COMMAND "${DOCKER_EXE} " compose -f "${NBL_DOCKER_CE_COMPOSE_TARGET} " build )
184
346
185
347
add_custom_target (run-compiler-explorer
186
348
COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --blue "Performing Pre-Test..."
187
349
COMMAND "${CTEST_EXE} " -C $< CONFIG> --stop-on-failure
188
350
COMMAND ${NBL_BUILD_INFO_POSTPROCESS_COMMAND}
189
- COMMAND "${DOCKER_EXE} " compose -f "${NBL_DOCKER_CE_COMPOSE_TARGET} " stop compiler-explorer-nsc
351
+ COMMAND "${DOCKER_EXE} " compose -f "${NBL_DOCKER_CE_COMPOSE_TARGET} " stop ${COMPOSE_NSC_DEV_SERVICE}
190
352
COMMAND ${NBL_CE_GENERATE_CONFIG_COMMAND}
191
353
COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --green "OK! Performing executables hot-swap..."
192
- COMMAND "${CMAKE_COMMAND} " -E copy_directory "${DEBUG_CRT_DIRECTORY_SOURCE} " "${DEBUG_CRT_DIRECTORY_TARGET} "
193
- COMMAND "${CMAKE_COMMAND} " -E copy "${UCRTBASED_DLL_PATH} " "${DEBUG_CRT_DIRECTORY_TARGET} "
194
354
COMMAND "${CMAKE_COMMAND} " -E copy_directory "${NBL_NSC_PREINSTALL_DIRECTORY} " "${NBL_DOCKER_CT_NSC_VOLUME_SOURCE} "
195
- COMMAND "${DOCKER_EXE} " compose -f "${NBL_DOCKER_CE_COMPOSE_TARGET} " up --build -d compiler-explorer-nsc
355
+ COMMAND "${DOCKER_EXE} " compose -f "${NBL_DOCKER_CE_COMPOSE_TARGET} " up -d ${COMPOSE_NSC_DEV_SERVICE}
196
356
COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --blue "Checking health of Compiler Explorer service..."
197
- COMMAND "${DOCKER_EXE } " compose -f "${NBL_DOCKER_CE_COMPOSE_TARGET} " exec -T compiler-explorer-nsc cmd /c python ce_healthy_check.py --interval 10 --ticks 25
357
+ COMMAND "${_Python3_EXECUTABLE } " "${NBL_ROOT_PATH} /docker/ compiler-explorer/ ce_healthy_check.py" --url http://localhost:80 --interval 10 --ticks 25
198
358
COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "Compiler Explorer is running, type \" localhost\" in your browser!"
199
359
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} "
200
360
VERBATIM
201
361
USES_TERMINAL
202
362
)
203
363
204
364
add_custom_target (is-compiler-explorer-running
205
- COMMAND "${DOCKER_EXE } " compose -f "${NBL_DOCKER_CE_COMPOSE_TARGET} " exec -T compiler-explorer-nsc cmd /c python ce_healthy_check.py --ticks 1
365
+ COMMAND "${_Python3_EXECUTABLE } " "${NBL_ROOT_PATH} /docker/ compiler-explorer/ ce_healthy_check.py" --url http://localhost:80 --ticks 1
206
366
VERBATIM
207
367
USES_TERMINAL
208
368
)
0 commit comments