@@ -66,17 +66,23 @@ find_program(DOCKER_EXE NAMES docker REQUIRED)
66
66
67
67
find_file (DXIL_DLL NAMES dxil.dll HINTS "$ENV{CMAKE_WINDOWS_KITS_10_DIR} /Redist/D3D/x64" "C:/Program Files (x86)/Windows Kits/10/Redist/D3D/x64" REQUIRED )
68
68
69
- find_file (ICU_DLL NAMES icu.dll HINTS REQUIRED )
70
- set (ICU_GLOBALIZATION_DIR "C:/Windows/Globalization/ICU" )
71
- find_file (ICUDTL_DAT NAMES icudtl.dat HINTS "${ICU_GLOBALIZATION_DIR} " REQUIRED )
72
-
69
+ set (ICU_GLOBALIZATION_DIR C:\\ Windows\\ Globalization\\ ICU )
73
70
find_file (UCRTBASED_DLL NAMES ucrtbased.dll HINTS ${UCRTBASED_DLL_DIR} REQUIRED )
74
71
75
72
find_program (SPIRV_DIS_EXE NAMES spirv-dis HINTS "${VULKAN_SDK} /Bin" REQUIRED )
76
73
cmake_path (GET SPIRV_DIS_EXE PARENT_PATH SPIRV_DIS_DIR )
77
74
cmake_path (NATIVE_PATH SPIRV_DIS_DIR NORMALIZE SPIRV_DIS_DIR )
78
75
79
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 ()
82
+ message (FATAL_ERROR "Could not find MSVC_REDIST_DIR, define yourself!" )
83
+ endif ()
84
+ endif ()
85
+
80
86
cmake_path (NATIVE_PATH MSVC_REDIST_DIR NORMALIZE TOOLSET_REDIST_PATH )
81
87
82
88
file (GLOB_RECURSE VC_MODULES LIST_DIRECTORIES false
@@ -92,11 +98,9 @@ make_directory("${NBL_DOCKER_CTX_DIR}/Runtimes")
92
98
make_directory ("${NBL_DOCKER_CTX_DIR} /Nabla" )
93
99
execute_process (
94
100
COMMAND "${CMAKE_COMMAND} " -E copy_if_different "${DXIL_DLL} " "${NBL_DOCKER_CTX_DIR} /Runtimes"
95
- COMMAND "${CMAKE_COMMAND} " -E copy_if_different "${ICU_DLL} " "${NBL_DOCKER_CTX_DIR} /Runtimes"
96
101
COMMAND "${CMAKE_COMMAND} " -E copy_if_different "${UCRTBASED_DLL} " "${NBL_DOCKER_CTX_DIR} /Runtimes"
97
102
COMMAND "${CMAKE_COMMAND} " -E copy_if_different "${SPIRV_DIS_EXE} " "${NBL_DOCKER_CTX_DIR} /Runtimes"
98
103
COMMAND "${CMAKE_COMMAND} " -E copy_if_different ${VC_MODULES} "${NBL_DOCKER_CTX_DIR} /Runtimes"
99
- COMMAND "${CMAKE_COMMAND} " -E copy_directory_if_different ${ICU_GLOBALIZATION_DIR} "${NBL_DOCKER_CTX_DIR} /Globalization/ICU"
100
104
)
101
105
102
106
set (CT_RUNTIMES C:/runtimes )
@@ -107,15 +111,17 @@ cmake_path(NATIVE_PATH NBL_DOCKER_CT_NSC_VOLUME_SOURCE NORMALIZE NBL_DOCKER_CT_N
107
111
cmake_path (NATIVE_PATH NBL_DOCKER_CT_NSC_VOLUME_TARGET NORMALIZE NBL_DOCKER_CT_NSC_VOLUME_TARGET )
108
112
cmake_path (NATIVE_PATH NBL_NSC_PREINSTALL_DIRECTORY NORMALIZE NBL_NSC_PREINSTALL_DIRECTORY )
109
113
114
+ set (CORE_IMAGE mcr.microsoft.com/windows/servercore:ltsc2022 )
110
115
string (CONFIGURE [=[
111
116
# syntax=docker/dockerfile:1
112
117
# escape=`
113
118
114
119
# ---------------- COMPRESS STEP ----------------
115
120
FROM @BASE_IMAGE@ as compress
116
121
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/
117
124
COPY --link Runtimes/ C:/pack/Windows/System32/
118
- COPY --link Globalization/ICU/ C:/pack/Windows/Globalization/ICU/
119
125
COPY --link Nabla/ C:/pack/runtimes/Nabla/
120
126
121
127
ARG IMPL_COMPRESSION_OPTIONS=-T0
@@ -134,7 +140,8 @@ COPY --link --from=compress ["C:/pack/nabla-artifacts.tar.zst", "C:/pack/"]
134
140
COPY hlsl.local.properties.cmake C:/Compiler-Explorer/etc/config/hlsl.local.properties
135
141
136
142
ENV NBL_INSTALL_DIRECTORY=@NBL_DOCKER_CT_NSC_VOLUME_TARGET@ `
137
- NBL_EXPLICIT_MODULE_LOAD_LOG=ON
143
+ NBL_EXPLICIT_MODULE_LOAD_LOG=ON `
144
+ ICU_DATA=C:\Windows\Globalization\ICU
138
145
139
146
WORKDIR C:/Compiler-Explorer
140
147
ENTRYPOINT ["C:\\unpack.bat", "&&", "node", "--no-warnings", "--no-deprecation", "--import=tsx", "./app.js", "--language", "hlsl"]
@@ -147,27 +154,9 @@ if(NOT DEFINED NSC_IMAGE_NAME)
147
154
set (NSC_IMAGE_NAME nano/godbolt/nsc )
148
155
endif ()
149
156
150
- set (NBL_BUILD_INFO_POSTPROCESS_COMMAND
151
- "${CMAKE_COMMAND} "
152
- "-DNBL_EXECUTABLE_PATH=${NBL_NSC_PREINSTALL_TARGET_EXE_FILEPATH} "
153
- "-DNBL_BUILD_INFO=${NBL_NSC_PREINSTALL_TARGET_BUILD_INFO} "
154
- "-DNBL_OUTPUT_FILE=${NBL_NSC_PREINSTALL_TARGET_BUILD_INFO} "
155
- "-DNBL_OUTPUT_EXE_OVERRIDE=$<PATH:NORMAL_PATH,${NBL_DOCKER_CT_NSC_VOLUME_TARGET} /${NBL_PACKAGE_RUNTIME_EXE_DIR_PATH} /${NBL_NSC_PREINSTALL_TARGET_EXE_FILENAME} >"
156
- -P "${NBL_ROOT_PATH} /cmake/scripts/nbl/nablaBuildInfo.cmake"
157
- )
158
-
159
157
set (NBL_DOCKER_NSC_COMPILER_CONFIG_OUTPUT "${NBL_DOCKER_CTX_DIR} /hlsl.local.properties.cmake" )
160
158
string (GENEX_STRIP "${NBL_PACKAGE_RUNTIME_EXE_DIR_PATH} " NBL_RELATIVE_ENTRY )
161
159
set (OUTPUT_CONFIG_FILE $< PATH:NORMAL_PATH,${NBL_DOCKER_NSC_COMPILER_CONFIG_OUTPUT} > )
162
- set (NBL_CE_GENERATE_CONFIG_COMMAND
163
- "${CMAKE_COMMAND} "
164
- "-DSPIRV_DIS_EXE=spirv-dis.exe"
165
- "-DNSC_RELEASE_BUILD_INFO=$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY} /${NBL_RELATIVE_ENTRY} /${NBL_NSC_BUILD_INFO_FILENAME} >"
166
- "-DNSC_RELWITHDEBINFO_BUILD_INFO=$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY} /relwithdebinfo/${NBL_RELATIVE_ENTRY} /${NBL_NSC_BUILD_INFO_FILENAME} >"
167
- "-DNSC_DEBUG_BUILD_INFO=$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY} /debug/${NBL_RELATIVE_ENTRY} /${NBL_NSC_BUILD_INFO_FILENAME} >"
168
- "-DOUTPUT_CONFIG_FILE=${OUTPUT_CONFIG_FILE} "
169
- -P "${CMAKE_CURRENT_SOURCE_DIR} /ce-generate-config.cmake"
170
- )
171
160
172
161
function (PROMOTE_PROCESS_ISOLATION HOST_KERNEL BASE VAR )
173
162
set (${VAR} True )
@@ -209,52 +198,88 @@ string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+" HOST_KERNEL "${PIPE}")
209
198
PROMOTE_PROCESS_ISOLATION (${HOST_KERNEL} ${BASE_IMAGE} USE_PROCESS_ISOLATION )
210
199
211
200
if (USE_PROCESS_ISOLATION )
212
- set (ISOLATION --isolation process )
201
+ set (ISOLATION " --isolation process" )
213
202
else ()
214
- # TODO : we will need to use GET_RUNTIME_DEPENDENCIES which uses objdump
203
+ # NOTE : we would need to use GET_RUNTIME_DEPENDENCIES which uses objdump
215
204
# https://cmake.org/cmake/help/latest/command/file.html#get-runtime-dependencies
216
- # to collect *all* required deps and copy (FROM at least server core) to destination
205
+ # to collect *all* missing deps and copy (FROM at least server core) to destination nano
217
206
# image, it will fail currently if we fully isolate it with VM due to lack of certain DLLs
218
- message (FATAL_ERROR "HyperV is NOT supported! Update your OS!" ) # yet
207
+ message (FATAL_ERROR "HyperV is NOT supported! Update your OS!" )
219
208
endif ()
220
209
221
210
set (ORPHAN nsc-orphan )
222
- set (NBL_CE_URL http://localhost:80 )
211
+ set (NBL_CE_URL http://${ORPHAN}:10240 )
223
212
set (NBL_CE_HEALTHY_CHECK_PY "${NBL_ROOT_PATH} /docker/compiler-explorer/ce_healthy_check.py" )
224
213
set (NBL_CE_ENDPOINT_PY "${NBL_ROOT_PATH} /docker/compiler-explorer/endpoint.py" )
225
214
set (NBL_NSC_BASIC_HLSL_JPAYLOAD "${CMAKE_CURRENT_SOURCE_DIR} /docker/godbolt/hlsl-basic-compile-payload.json" )
226
215
227
- add_custom_target (run-compiler-explorer ALL
228
- COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --blue "Killing remaining NSC orphans"
229
- COMMAND "${DOCKER_EXE} " rm -f ${ORPHAN} || "${CMAKE_COMMAND} " -E true
230
-
231
- COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --blue "Executing CTests"
232
- COMMAND "${CTEST_EXE} " -C $< CONFIG> --stop-on-failure
233
-
234
- COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --blue "Generating NSC build info"
235
- COMMAND ${NBL_BUILD_INFO_POSTPROCESS_COMMAND}
236
-
237
- COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --blue "Generating NSC godbolt config"
238
- COMMAND ${NBL_CE_GENERATE_CONFIG_COMMAND}
239
-
240
- COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --blue "Updating NSC package context"
241
- COMMAND "${CMAKE_COMMAND} " -E copy_directory_if_different "${NBL_NSC_PREINSTALL_DIRECTORY} " "${NBL_DOCKER_CTX_DIR} /Nabla"
242
-
243
- COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --blue "Building NSC Godbolt image"
244
- COMMAND "${DOCKER_EXE} " build ${ISOLATION} -f "${DOCKERFILE} " -t ${NSC_IMAGE_NAME} "${NBL_DOCKER_CTX_DIR} "
245
-
246
- COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --blue "Running new NSC orphan container"
247
- COMMAND "${DOCKER_EXE} " run -di -p 80:10240 ${ISOLATION} --name ${ORPHAN} ${NSC_IMAGE_NAME}
248
- COMMAND "${_Python3_EXECUTABLE} " "${NBL_CE_HEALTHY_CHECK_PY} " --url "${NBL_CE_URL} " --interval 5 --ticks 12
249
- COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "Compiler Explorer is running, type \" localhost\" in your browser!"
250
-
251
- COMMAND "${CMAKE_COMMAND} " -E cmake_echo_color --blue "Post-Checking if NSC container is able to compile basic shader input..."
252
- COMMAND "${_Python3_EXECUTABLE} " "${NBL_CE_ENDPOINT_PY} " --url "${NBL_CE_URL} " --endpoint /api/compiler/nsc_$<LOWER_CASE:$<CONFIG>>_upstream/compile --method POST --json "${NBL_NSC_BASIC_HLSL_JPAYLOAD} "
253
- COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "OK! NSC container is healthy."
216
+ # to avoid "too long input" errors we proxy build instructions to CMake script and write it to build directory
217
+ string (CONFIGURE [=[
218
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Killing remaining NSC orphans")
219
+ execute_process(COMMAND "${DOCKER_EXE}" rm -f "${ORPHAN}")
220
+
221
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Executing CTests")
222
+ execute_process(COMMAND "${CTEST_EXE}" -C "$<CONFIG>" --stop-on-failure WORKING_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@"
223
+ COMMAND_ERROR_IS_FATAL ANY)
224
+
225
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Generating NSC build info")
226
+ execute_process(COMMAND "${CMAKE_COMMAND}"
227
+ "-DNBL_EXECUTABLE_PATH=${NBL_NSC_PREINSTALL_TARGET_EXE_FILEPATH}"
228
+ "-DNBL_BUILD_INFO=${NBL_NSC_PREINSTALL_TARGET_BUILD_INFO}"
229
+ "-DNBL_OUTPUT_FILE=${NBL_NSC_PREINSTALL_TARGET_BUILD_INFO}"
230
+ "-DNBL_OUTPUT_EXE_OVERRIDE=$<PATH:NORMAL_PATH,${NBL_DOCKER_CT_NSC_VOLUME_TARGET}/${NBL_PACKAGE_RUNTIME_EXE_DIR_PATH}/${NBL_NSC_PREINSTALL_TARGET_EXE_FILENAME}>"
231
+ -P "${NBL_ROOT_PATH}/cmake/scripts/nbl/nablaBuildInfo.cmake"
232
+ COMMAND_ERROR_IS_FATAL ANY)
233
+
234
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Generating NSC godbolt config")
235
+ execute_process(COMMAND "${CMAKE_COMMAND}"
236
+ "-DSPIRV_DIS_EXE=spirv-dis.exe"
237
+ "-DNSC_RELEASE_BUILD_INFO=$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY}/${NBL_RELATIVE_ENTRY}/${NBL_NSC_BUILD_INFO_FILENAME}>"
238
+ "-DNSC_RELWITHDEBINFO_BUILD_INFO=$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY}/relwithdebinfo/${NBL_RELATIVE_ENTRY}/${NBL_NSC_BUILD_INFO_FILENAME}>"
239
+ "-DNSC_DEBUG_BUILD_INFO=$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY}/debug/${NBL_RELATIVE_ENTRY}/${NBL_NSC_BUILD_INFO_FILENAME}>"
240
+ "-DOUTPUT_CONFIG_FILE=${OUTPUT_CONFIG_FILE}"
241
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/ce-generate-config.cmake"
242
+ COMMAND_ERROR_IS_FATAL ANY)
243
+
244
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Updating NSC package context")
245
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_directory_if_different
246
+ "$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY}>"
247
+ "${NBL_DOCKER_CTX_DIR}/Nabla"
248
+ COMMAND_ERROR_IS_FATAL ANY)
249
+
250
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Building NSC Godbolt image")
251
+ execute_process(COMMAND "${DOCKER_EXE}" build ${ISOLATION}
252
+ -f "${DOCKERFILE}"
253
+ -t ${NSC_IMAGE_NAME}
254
+ "${NBL_DOCKER_CTX_DIR}"
255
+ COMMAND_ERROR_IS_FATAL ANY)
256
+
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}
260
+ COMMAND_ERROR_IS_FATAL ANY)
261
+
262
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Health‐check")
263
+ execute_process(COMMAND "${_Python3_EXECUTABLE}" "${NBL_CE_HEALTHY_CHECK_PY}"
264
+ --url "${NBL_CE_URL}" --interval 5 --ticks 12
265
+ COMMAND_ERROR_IS_FATAL ANY)
266
+
267
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Post‐Checking basic shader compile")
268
+ execute_process(COMMAND "${_Python3_EXECUTABLE}" "${NBL_CE_ENDPOINT_PY}"
269
+ --url "${NBL_CE_URL}"
270
+ --endpoint /api/compiler/nsc_$<LOWER_CASE:$<CONFIG>>_upstream/compile
271
+ --method POST --json "${NBL_NSC_BASIC_HLSL_JPAYLOAD}"
272
+ COMMAND_ERROR_IS_FATAL ANY)
273
+
274
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "OK! NSC container is healthy.")
275
+ ]=] INSTRUCTIONS )
276
+
277
+ file (GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR} /run-compiler-explorer-$<CONFIG>.cmake" CONTENT "${INSTRUCTIONS} " )
254
278
255
- WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} "
256
- VERBATIM
257
- USES_TERMINAL
279
+ add_custom_target (run-compiler-explorer ALL
280
+ COMMAND "${CMAKE_COMMAND} " -P "${CMAKE_CURRENT_BINARY_DIR} /run-compiler-explorer-$<CONFIG>.cmake"
281
+ VERBATIM
282
+ COMMAND_EXPAND_LISTS
258
283
)
259
284
260
285
add_dependencies (run-compiler-explorer nsc )
0 commit comments