@@ -73,12 +73,11 @@ find_program(SPIRV_DIS_EXE NAMES spirv-dis HINTS "${VULKAN_SDK}/Bin" REQUIRED)
73
73
cmake_path (GET SPIRV_DIS_EXE PARENT_PATH SPIRV_DIS_DIR )
74
74
cmake_path (NATIVE_PATH SPIRV_DIS_DIR NORMALIZE SPIRV_DIS_DIR )
75
75
76
- include (InstallRequiredSystemLibraries )
77
-
78
- if (NOT MSVC_REDIST_DIR )
79
- if (MSVC_REDIST_BASE ) # fallback to our CI toolset
80
- set (MSVC_REDIST_DIR "${MSVC_REDIST_BASE} " )
81
- else ()
76
+ if (MSVC_REDIST_BASE ) # fallback to our toolset
77
+ set (MSVC_REDIST_DIR "${MSVC_REDIST_BASE} " )
78
+ else ()
79
+ include (InstallRequiredSystemLibraries )
80
+ if (NOT MSVC_REDIST_DIR )
82
81
message (FATAL_ERROR "Could not find MSVC_REDIST_DIR, define yourself!" )
83
82
endif ()
84
83
endif ()
@@ -111,16 +110,13 @@ cmake_path(NATIVE_PATH NBL_DOCKER_CT_NSC_VOLUME_SOURCE NORMALIZE NBL_DOCKER_CT_N
111
110
cmake_path (NATIVE_PATH NBL_DOCKER_CT_NSC_VOLUME_TARGET NORMALIZE NBL_DOCKER_CT_NSC_VOLUME_TARGET )
112
111
cmake_path (NATIVE_PATH NBL_NSC_PREINSTALL_DIRECTORY NORMALIZE NBL_NSC_PREINSTALL_DIRECTORY )
113
112
114
- set (CORE_IMAGE mcr.microsoft.com/windows/servercore:ltsc2022 )
115
113
string (CONFIGURE [=[
116
114
# syntax=docker/dockerfile:1
117
115
# escape=`
118
116
119
117
# ---------------- COMPRESS STEP ----------------
120
118
FROM @BASE_IMAGE@ as compress
121
119
122
- COPY --link --from=@CORE_IMAGE@ C:/Windows/System32/icu.dll C:/pack/Windows/System32/
123
- COPY --link --from=@CORE_IMAGE@ C:/Windows/Globalization/ICU/ C:/pack/Windows/Globalization/ICU/
124
120
COPY --link Runtimes/ C:/pack/Windows/System32/
125
121
COPY --link Nabla/ C:/pack/runtimes/Nabla/
126
122
@@ -140,11 +136,14 @@ COPY --link --from=compress ["C:/pack/nabla-artifacts.tar.zst", "C:/pack/"]
140
136
COPY hlsl.local.properties.cmake C:/Compiler-Explorer/etc/config/hlsl.local.properties
141
137
142
138
ENV NBL_INSTALL_DIRECTORY=@NBL_DOCKER_CT_NSC_VOLUME_TARGET@ `
143
- NBL_EXPLICIT_MODULE_LOAD_LOG=ON `
144
- ICU_DATA=C:\Windows\Globalization\ICU
139
+ NBL_EXPLICIT_MODULE_LOAD_LOG=ON
145
140
146
141
WORKDIR C:/Compiler-Explorer
147
- ENTRYPOINT ["C:\\unpack.bat", "&&", "node", "--no-warnings", "--no-deprecation", "--import=tsx", "./app.js", "--language", "hlsl"]
142
+ ENTRYPOINT [ `
143
+ "C:\\unpack.bat", "&&", `
144
+ "copy", "C:\\mount\\Windows\\System32\\icu.dll", "C:\\Windows\\System32\\icu.dll", "&&", `
145
+ "node", "--no-warnings", "--no-deprecation", "--import=tsx", "./app.js", "--language", "hlsl" `
146
+ ]
148
147
]=] INSTRUCTIONS @ONLY )
149
148
150
149
set (DOCKERFILE "${NBL_DOCKER_CTX_DIR} /Dockerfile" )
@@ -197,16 +196,28 @@ execute_process(COMMAND cmd /C ver OUTPUT_VARIABLE PIPE OUTPUT_STRIP_TRAILING_WH
197
196
string (REGEX MATCH "[0-9]+\\ .[0-9]+\\ .[0-9]+\\ .[0-9]+" HOST_KERNEL "${PIPE} " )
198
197
PROMOTE_PROCESS_ISOLATION (${HOST_KERNEL} ${BASE_IMAGE} USE_PROCESS_ISOLATION )
199
198
200
- if (USE_PROCESS_ISOLATION )
201
- set (ISOLATION "--isolation process" )
202
- else ()
199
+ if (NOT USE_PROCESS_ISOLATION )
203
200
# NOTE: we would need to use GET_RUNTIME_DEPENDENCIES which uses objdump
204
201
# https://cmake.org/cmake/help/latest/command/file.html#get-runtime-dependencies
205
202
# to collect *all* missing deps and copy (FROM at least server core) to destination nano
206
203
# image, it will fail currently if we fully isolate it with VM due to lack of certain DLLs
204
+ # BUT it means violating EULA, hence we are not going to support it, also (**)
207
205
message (FATAL_ERROR "HyperV is NOT supported! Update your OS!" )
208
206
endif ()
209
207
208
+ set (CORE_IMAGE mcr.microsoft.com/windows/servercore:ltsc2022 )
209
+ set (ICU_DIR C:\\ Windows\\ Globalization\\ ICU )
210
+ set (ICU_DLL C:\\ Windows\\ System32\\ icu.dll )
211
+ if (NOT EXISTS ${ICU_DIR} OR NOT EXISTS ${ICU_DLL} )
212
+ # fallback for CI purposes, NOTE: we do NOT distribute those in final image as we have host runner requirements (**)
213
+ message (STATUS "\" ${ICU_DIR} \" or \" ${ICU_DLL} \ not found, fallback: copying them to the runner from \" ${CORE_IMAGE} \" " )
214
+ execute_process (COMMAND "${DOCKER_EXE} " rm -f nano-orphan RESULT_VARIABLE res )
215
+ execute_process (COMMAND "${DOCKER_EXE} " run -di --isolation process --name nano-orphan --entrypoint cmd ${CORE_IMAGE} COMMAND_ERROR_IS_FATAL ANY )
216
+ execute_process (COMMAND "${DOCKER_EXE} " cp nano-orphan:${ICU_DIR} ${ICU_DIR} COMMAND_ERROR_IS_FATAL ANY )
217
+ execute_process (COMMAND "${DOCKER_EXE} " cp nano-orphan:${ICU_DLL} ${ICU_DLL} COMMAND_ERROR_IS_FATAL ANY )
218
+ message (STATUS "Fallback completed, runner patched!" )
219
+ endif ()
220
+
210
221
set (ORPHAN nsc-orphan )
211
222
set (NBL_CE_URL http://${ORPHAN}:10240 )
212
223
set (NBL_CE_HEALTHY_CHECK_PY "${NBL_ROOT_PATH} /docker/compiler-explorer/ce_healthy_check.py" )
@@ -215,14 +226,14 @@ set(NBL_NSC_BASIC_HLSL_JPAYLOAD "${CMAKE_CURRENT_SOURCE_DIR}/docker/godbolt/hlsl
215
226
216
227
# to avoid "too long input" errors we proxy build instructions to CMake script and write it to build directory
217
228
string (CONFIGURE [=[
218
- execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Killing remaining NSC orphans")
219
- execute_process(COMMAND "${DOCKER_EXE}" rm -f "${ORPHAN}")
229
+ message(STATUS "Killing remaining NSC orphans")
230
+ execute_process(COMMAND "${DOCKER_EXE}" rm -f "${ORPHAN}" RESULT_VARIABLE res )
220
231
221
- execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Executing CTests")
232
+ message(STATUS "Executing CTests")
222
233
execute_process(COMMAND "${CTEST_EXE}" -C "$<CONFIG>" --stop-on-failure WORKING_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@"
223
234
COMMAND_ERROR_IS_FATAL ANY)
224
235
225
- execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Generating NSC build info")
236
+ message(STATUS "Generating NSC build info")
226
237
execute_process(COMMAND "${CMAKE_COMMAND}"
227
238
"-DNBL_EXECUTABLE_PATH=${NBL_NSC_PREINSTALL_TARGET_EXE_FILEPATH}"
228
239
"-DNBL_BUILD_INFO=${NBL_NSC_PREINSTALL_TARGET_BUILD_INFO}"
@@ -231,7 +242,7 @@ execute_process(COMMAND "${CMAKE_COMMAND}"
231
242
-P "${NBL_ROOT_PATH}/cmake/scripts/nbl/nablaBuildInfo.cmake"
232
243
COMMAND_ERROR_IS_FATAL ANY)
233
244
234
- execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Generating NSC godbolt config")
245
+ message(STATUS "Generating NSC godbolt config")
235
246
execute_process(COMMAND "${CMAKE_COMMAND}"
236
247
"-DSPIRV_DIS_EXE=spirv-dis.exe"
237
248
"-DNSC_RELEASE_BUILD_INFO=$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY}/${NBL_RELATIVE_ENTRY}/${NBL_NSC_BUILD_INFO_FILENAME}>"
@@ -241,37 +252,44 @@ execute_process(COMMAND "${CMAKE_COMMAND}"
241
252
-P "${CMAKE_CURRENT_SOURCE_DIR}/ce-generate-config.cmake"
242
253
COMMAND_ERROR_IS_FATAL ANY)
243
254
244
- execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Updating NSC package context")
255
+ message(STATUS "Updating NSC package context")
245
256
execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_directory_if_different
246
257
"$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY}>"
247
258
"${NBL_DOCKER_CTX_DIR}/Nabla"
248
259
COMMAND_ERROR_IS_FATAL ANY)
249
260
250
- execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Building NSC Godbolt image")
251
- execute_process(COMMAND "${DOCKER_EXE}" build ${ISOLATION}
261
+ message(STATUS "Building NSC Godbolt image")
262
+ execute_process(COMMAND "${DOCKER_EXE}" build --isolation process
252
263
-f "${DOCKERFILE}"
253
264
-t ${NSC_IMAGE_NAME}
254
265
"${NBL_DOCKER_CTX_DIR}"
255
266
COMMAND_ERROR_IS_FATAL ANY)
256
267
257
- execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Running new NSC orphan container")
258
- execute_process(COMMAND "${DOCKER_EXE}" run -di -p 80:10240 ${ISOLATION}
259
- --name "${ORPHAN}" ${NSC_IMAGE_NAME}
268
+ message(STATUS "Running new NSC orphan container")
269
+ execute_process(COMMAND "${DOCKER_EXE}" run -di -p 80:10240 --isolation process
270
+ --name "${ORPHAN}"
271
+ -v $<PATH:NORMAL_PATH,${ICU_DIR}:${ICU_DIR}:ro>
272
+ -v $<PATH:NORMAL_PATH,C:/Windows/System32:C:/mount/Windows/System32:ro>
273
+ ${NSC_IMAGE_NAME}
260
274
COMMAND_ERROR_IS_FATAL ANY)
261
275
262
- execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Health‐ check")
276
+ message(STATUS "Healthy check")
263
277
execute_process(COMMAND "${_Python3_EXECUTABLE}" "${NBL_CE_HEALTHY_CHECK_PY}"
264
278
--url "${NBL_CE_URL}" --interval 5 --ticks 12
265
279
COMMAND_ERROR_IS_FATAL ANY)
266
280
267
- execute_process(COMMAND "${CMAKE_COMMAND}" -E echo " Post‐Checking basic shader compile")
281
+ message(STATUS " Post Basic NSC shader compile check ")
268
282
execute_process(COMMAND "${_Python3_EXECUTABLE}" "${NBL_CE_ENDPOINT_PY}"
269
283
--url "${NBL_CE_URL}"
270
284
--endpoint /api/compiler/nsc_$<LOWER_CASE:$<CONFIG>>_upstream/compile
271
285
--method POST --json "${NBL_NSC_BASIC_HLSL_JPAYLOAD}"
272
286
COMMAND_ERROR_IS_FATAL ANY)
273
287
274
- execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "OK! NSC container is healthy.")
288
+ message(STATUS "Printing NSC container logs")
289
+ execute_process(COMMAND "${DOCKER_EXE}" logs "${ORPHAN}" COMMAND_ERROR_IS_FATAL ANY)
290
+
291
+ message(STATUS "OK! NSC container is healthy.")
292
+ message(STATUS "Type \"localhost\" in your browser to use NSC with Godbolt!")
275
293
]=] INSTRUCTIONS )
276
294
277
295
file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR} /run-compiler-explorer-$<CONFIG>.cmake" CONTENT "${INSTRUCTIONS} " )
0 commit comments