@@ -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+
7279find_program (CTEST_EXE
7380 NAMES ctest
7481 REQUIRED
@@ -100,12 +107,12 @@ set(NBL_BUILD_INFO_POSTPROCESS_COMMAND
100107cmake_path(GET SPIRV_DIS_EXE PARENT_PATH VULKAN_SDK_BIN_DIRECTORY)
101108cmake_path(NATIVE_PATH VULKAN_SDK_BIN_DIRECTORY NORMALIZE VULKAN_SDK_BIN_DIRECTORY)
102109cmake_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
106113set (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")
120127include (InstallRequiredSystemLibraries)
121128
122129string (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} " )
124132cmake_path(NATIVE_PATH MSVC_REDIST_DIR NORMALIZE NBL_REDIST_DIR)
125133
126134if (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
143309string (APPEND COMPOSE_CONTENT
144310[=[
145311services:
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
176336networks:
177337 docker_default:
@@ -181,28 +341,28 @@ networks:
181341
182342string (CONFIGURE "${COMPOSE_CONTENT} " COMPOSE_CONTENT @ONLY)
183343file (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
185347add_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
204364add_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