Skip to content

Commit 2b7d087

Browse files
committed
step towards CE registry
1 parent 8e95b81 commit 2b7d087

File tree

1 file changed

+186
-26
lines changed

1 file changed

+186
-26
lines changed

tools/nsc/CMakeLists.txt

Lines changed: 186 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ find_program(SPIRV_DIS_EXE
6969
REQUIRED
7070
)
7171

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+
7279
find_program(CTEST_EXE
7380
NAMES ctest
7481
REQUIRED
@@ -100,12 +107,12 @@ set(NBL_BUILD_INFO_POSTPROCESS_COMMAND
100107
cmake_path(GET SPIRV_DIS_EXE PARENT_PATH VULKAN_SDK_BIN_DIRECTORY)
101108
cmake_path(NATIVE_PATH VULKAN_SDK_BIN_DIRECTORY NORMALIZE VULKAN_SDK_BIN_DIRECTORY)
102109
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)
105112

106113
set(NBL_CE_GENERATE_CONFIG_COMMAND
107114
"${CMAKE_COMMAND}"
108-
"-DSPIRV_DIS_EXE=${SPIRV_DIS_EXE}"
115+
"-DSPIRV_DIS_EXE=${CT_SPIRV_DIS_EXE}"
109116
"-DNSC_RELEASE_BUILD_INFO=${NSC_RELEASE_BUILD_INFO}"
110117
"-DNSC_RELWITHDEBINFO_BUILD_INFO=${NSC_RELWITHDEBINFO_BUILD_INFO}"
111118
"-DNSC_DEBUG_BUILD_INFO=${NSC_DEBUG_BUILD_INFO}"
@@ -120,7 +127,8 @@ set(NBL_DOCKER_CE_COMPOSE_TARGET "${GODBOLT_BINARY_DIRECTORY}/compose.yml")
120127
include(InstallRequiredSystemLibraries)
121128

122129
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}")
124132
cmake_path(NATIVE_PATH MSVC_REDIST_DIR NORMALIZE NBL_REDIST_DIR)
125133

126134
if(NOT EXISTS "${DEBUG_CRT_DIRECTORY_SOURCE}")
@@ -136,42 +144,194 @@ find_file(UCRTBASED_DLL_PATH
136144
REQUIRED
137145
)
138146

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)
142308

143309
string(APPEND COMPOSE_CONTENT
144310
[=[
145311
services:
146-
compiler-explorer-nsc:
312+
@COMPOSE_NSC_DEV_SERVICE@:
313+
container_name: dev.ce.nsc.dev
147314
extends:
148315
file: @NBL_DOCKER_CE_COMPOSE_BASE@
149316
service: compiler-explorer
150-
container_name: dev.ce.nsc
317+
build:
318+
context: ./.ctx
319+
dockerfile: @DEVEL_DOCKERFILE@
320+
image: @COMPOSE_NSC_DEV_IMAGE@
151321
environment:
152322
NBL_INSTALL_DIRECTORY: "@NBL_INSTALL_DIRECTORY@"
153323
NBL_EXPLICIT_MODULE_LOAD_LOG: "ON"
154324
entrypoint:
155325
- "cmd"
156326
- "/c"
157327
- >
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
161329
&& npm --prefix %GIT_GODBOLT_REPOSITORY_PATH% run dev -- --language hlsl
162330
volumes:
163331
- type: bind
164332
source: .\install
165333
target: @NBL_DOCKER_CT_NSC_VOLUME_TARGET@
166334
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
175335
176336
networks:
177337
docker_default:
@@ -181,28 +341,28 @@ networks:
181341

182342
string(CONFIGURE "${COMPOSE_CONTENT}" COMPOSE_CONTENT @ONLY)
183343
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)
184346

185347
add_custom_target(run-compiler-explorer
186348
COMMAND "${CMAKE_COMMAND}" -E cmake_echo_color --blue "Performing Pre-Test..."
187349
COMMAND "${CTEST_EXE}" -C $<CONFIG> --stop-on-failure
188350
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}
190352
COMMAND ${NBL_CE_GENERATE_CONFIG_COMMAND}
191353
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}"
194354
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}
196356
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
198358
COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "Compiler Explorer is running, type \"localhost\" in your browser!"
199359
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
200360
VERBATIM
201361
USES_TERMINAL
202362
)
203363

204364
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
206366
VERBATIM
207367
USES_TERMINAL
208368
)

0 commit comments

Comments
 (0)