Skip to content

Commit 1f64763

Browse files
committed
add labeling to image creation steps, update actions to upload image workflow artifacts
1 parent fcbfa5c commit 1f64763

File tree

2 files changed

+165
-110
lines changed

2 files changed

+165
-110
lines changed

.github/workflows/build-nabla.yml

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ jobs:
3939
Set-MpPreference -DisableRemovableDriveScanning $true
4040
Set-MpPreference -DisableArchiveScanning $true
4141
Set-MpPreference -DisableScanningMappedNetworkDrivesForFullScan $true
42+
43+
if (-not (docker network ls --format '{{.Name}}' | Where-Object { $_ -eq 'docker_default' })) {
44+
docker network create --driver nat docker_default
45+
if ($LASTEXITCODE -ne 0) { exit 1 }
46+
}
4247
4348
- name: Checkout
4449
uses: actions/checkout@v4
@@ -47,21 +52,17 @@ jobs:
4752

4853
- name: Set prefix
4954
id: set-prefix
50-
shell: bash
5155
run: |
52-
echo "prefix=run-windows-${{ matrix.tag }}-${{ matrix.vendor }}-${{ matrix.config }}" >> "$GITHUB_OUTPUT"
56+
$prefix = "run-windows-${{ matrix.tag }}-${{ matrix.vendor }}-${{ matrix.config }}"
57+
$nscTargetTaggedImage = "ghcr.io/$env:GITHUB_REPOSITORY:nsc-godbolt-build-${{ matrix.vendor }}-${{ matrix.config }}-${{ matrix.tag }}".ToLower()
58+
59+
"prefix=$prefix" >> $env:GITHUB_OUTPUT
60+
"nscTargetTaggedImage=$nscTargetTaggedImage" >> $env:GITHUB_OUTPUT
5361
5462
- name: Pull Image
5563
run: |
5664
docker pull "${{ env.image }}:${{ matrix.tag }}"
5765
58-
- name: Create default network
59-
run: |
60-
if (-not (docker network ls --format '{{.Name}}' | Where-Object { $_ -eq 'docker_default' })) {
61-
docker network create --driver nat docker_default
62-
if ($LASTEXITCODE -ne 0) { exit 1 }
63-
}
64-
6566
- name: Run Container
6667
run: |
6768
$ctx = docker context show
@@ -97,6 +98,7 @@ jobs:
9798
--preset ci-configure-dynamic-${{ matrix.vendor }} `
9899
--profiling-output=profiling/cmake-profiling.json `
99100
--profiling-format=google-trace
101+
-DNSC_IMAGE_NAME=${{ steps.set-prefix.outputs.nscTargetTaggedImage }}
100102
101103
- name: Container – Build NSC
102104
run: |
@@ -116,11 +118,23 @@ jobs:
116118
${{ env.binary }} --config ${{ matrix.config }} `
117119
--component Executables --prefix ${{ env.install }}
118120
119-
- name: Package workflow artifacts
121+
- name: Container – Save NSC Image
122+
run: |
123+
docker exec orphan `
124+
${{ env.entry }} ${{ env.cmd }} -Command docker `
125+
save ${{ steps.set-prefix.outputs.nscTargetTaggedImage }} | zstd -T0 -3 -f -o ${{ steps.set-prefix.outputs.prefix }}-nsc-godbolt-image.tar.zst
126+
127+
- name: Package left workflow artifacts
120128
run: |
121129
tar -cvf "${{ steps.set-prefix.outputs.prefix }}-profiling.tar" profiling
122130
tar -cvf "${{ steps.set-prefix.outputs.prefix }}-install.tar" ${{ env.install }}
123131
132+
- name: Upload NSC Godbolt Image artifact
133+
uses: actions/upload-artifact@v4
134+
with:
135+
name: ${{ steps.set-prefix.outputs.prefix }}-nsc-godbolt-image
136+
path: ${{ steps.set-prefix.outputs.prefix }}-nsc-godbolt-image.tar.zst
137+
124138
- name: Upload profiling artifacts
125139
uses: actions/upload-artifact@v4
126140
with:

tools/nsc/CMakeLists.txt

Lines changed: 141 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,82 @@ add_test(NAME NBL_NSC_DUMP_BUILD_INFO_TEST
5959

6060
if(NBL_ENABLE_DOCKER_INTEGRATION)
6161

62+
find_program(DOCKER_EXE NAMES docker REQUIRED)
6263
set(BASE_IMAGE ghcr.io/devsh-graphics-programming/compiler-explorer-docker:nano-2022)
64+
set(CORE_IMAGE mcr.microsoft.com/windows/servercore:ltsc2022)
6365

64-
find_program(CTEST_EXE NAMES ctest REQUIRED)
65-
find_program(DOCKER_EXE NAMES docker REQUIRED)
66+
function(PROMOTE_PROCESS_ISOLATION BASE VAR)
67+
set(${VAR} True)
68+
69+
macro(INSPECT IMAGE)
70+
execute_process(COMMAND "${DOCKER_EXE}" inspect --format={{.OsVersion}} ${IMAGE}
71+
RESULT_VARIABLE INSPECTION_OK
72+
OUTPUT_VARIABLE TARGET_KERNEL
73+
OUTPUT_STRIP_TRAILING_WHITESPACE
74+
)
75+
endmacro()
76+
77+
macro(TO_PROCESS IMAGE TARGET_KERNEL)
78+
execute_process(COMMAND "${DOCKER_EXE}" run --rm --isolation process --entrypoint cmd ${BASE} /K
79+
RESULT_VARIABLE PROCESS_ISOLATION_OK
80+
OUTPUT_QUIET ERROR_QUIET
81+
)
82+
83+
if(${PROCESS_ISOLATION_OK} EQUAL 0)
84+
message(STATUS "Promoting \"${IMAGE}\" [${TARGET_KERNEL}] to process isolation")
85+
else()
86+
set(${VAR} False)
87+
message(STATUS "Cannot promote \"${IMAGE}\" [${TARGET_KERNEL}] to process isolation, requires falling back to HyperV. Please update your docker host OS.")
88+
endif()
89+
endmacro()
90+
91+
INSPECT(${BASE})
92+
93+
if(${INSPECTION_OK} EQUAL 0)
94+
TO_PROCESS(${BASE} ${TARGET_KERNEL})
95+
else()
96+
message(STATUS "\"${BASE}\" not found in local registry, pulling...")
97+
execute_process(COMMAND "${DOCKER_EXE}" pull ${BASE})
98+
99+
INSPECT(${BASE})
100+
TO_PROCESS(${BASE} ${TARGET_KERNEL})
101+
endif()
102+
103+
set(${VAR} ${${VAR}} PARENT_SCOPE)
104+
endfunction()
105+
106+
PROMOTE_PROCESS_ISOLATION(${BASE_IMAGE} USE_PROCESS_ISOLATION)
107+
108+
if(NOT USE_PROCESS_ISOLATION)
109+
# NOTE: we would need to use GET_RUNTIME_DEPENDENCIES which uses objdump
110+
# https://cmake.org/cmake/help/latest/command/file.html#get-runtime-dependencies
111+
# to collect *all* missing deps and copy (FROM at least server core) to destination nano
112+
# image, it will fail currently if we fully isolate it with VM due to lack of certain DLLs
113+
# BUT it means violating EULA, hence we are not going to support it, also (**)
114+
message(FATAL_ERROR "HyperV is NOT supported! Update your OS!")
115+
endif()
116+
117+
function(GET_LABEL BASE_IMAGE LABEL VAR)
118+
set(FORMAT "{{ index .Config.Labels \"${LABEL}\" }}")
119+
execute_process(COMMAND ${DOCKER_EXE} inspect --format=${FORMAT} ${BASE_IMAGE}
120+
OUTPUT_VARIABLE OUT
121+
OUTPUT_STRIP_TRAILING_WHITESPACE
122+
ERROR_VARIABLE ERR
123+
RESULT_VARIABLE RES
124+
)
66125

126+
if(NOT RES EQUAL 0)
127+
message(WARNING "Could not get \"${LABEL}\" label from \"${BASE_IMAGE}\" image, it doesn't exist!")
128+
endif()
129+
130+
set(${VAR} "${OUT}" PARENT_SCOPE)
131+
endfunction()
132+
133+
GET_LABEL(${BASE_IMAGE} org.opencontainers.image.title ORG_LABEL_TITLE)
134+
GET_LABEL(${BASE_IMAGE} org.opencontainers.image.source ORG_LABEL_SOURCE)
135+
GET_LABEL(${BASE_IMAGE} org.opencontainers.image.description ORG_LABEL_DESCRIPTION)
136+
137+
find_program(CTEST_EXE NAMES ctest REQUIRED)
67138
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)
68139

69140
set(ICU_GLOBALIZATION_DIR C:\\Windows\\Globalization\\ICU)
@@ -144,6 +215,11 @@ ENTRYPOINT [ `
144215
"copy", "C:\\mount\\Windows\\System32\\icu.dll", "C:\\Windows\\System32\\icu.dll", "&&", `
145216
"node", "--no-warnings", "--no-deprecation", "--import=tsx", "./app.js", "--language", "hlsl" `
146217
]
218+
219+
LABEL org.opencontainers.image.title="[Nabla Shader Compiler (NSC)]: @ORG_LABEL_TITLE@"
220+
LABEL org.opencontainers.image.source=https://github.com/Devsh-Graphics-Programming/Nabla
221+
LABEL org.opencontainers.image.description="[Nabla Shader Compiler (NSC)]: @ORG_LABEL_DESCRIPTION@"
222+
147223
]=] INSTRUCTIONS @ONLY)
148224

149225
set(DOCKERFILE "${NBL_DOCKER_CTX_DIR}/Dockerfile")
@@ -157,58 +233,6 @@ set(NBL_DOCKER_NSC_COMPILER_CONFIG_OUTPUT "${NBL_DOCKER_CTX_DIR}/hlsl.local.prop
157233
string(GENEX_STRIP "${NBL_PACKAGE_RUNTIME_EXE_DIR_PATH}" NBL_RELATIVE_ENTRY)
158234
set(OUTPUT_CONFIG_FILE $<PATH:NORMAL_PATH,${NBL_DOCKER_NSC_COMPILER_CONFIG_OUTPUT}>)
159235

160-
function(PROMOTE_PROCESS_ISOLATION BASE VAR)
161-
set(${VAR} True)
162-
163-
macro(INSPECT IMAGE)
164-
execute_process(COMMAND "${DOCKER_EXE}" inspect --format={{.OsVersion}} ${IMAGE}
165-
RESULT_VARIABLE INSPECTION_OK
166-
OUTPUT_VARIABLE TARGET_KERNEL
167-
OUTPUT_STRIP_TRAILING_WHITESPACE
168-
)
169-
endmacro()
170-
171-
macro(TO_PROCESS IMAGE TARGET_KERNEL)
172-
execute_process(COMMAND "${DOCKER_EXE}" run --rm --isolation process --entrypoint cmd ${BASE} /K
173-
RESULT_VARIABLE PROCESS_ISOLATION_OK
174-
OUTPUT_QUIET ERROR_QUIET
175-
)
176-
177-
if(${PROCESS_ISOLATION_OK} EQUAL 0)
178-
message(STATUS "Promoting \"${IMAGE}\" [${TARGET_KERNEL}] to process isolation")
179-
else()
180-
set(${VAR} False)
181-
message(STATUS "Cannot promote \"${IMAGE}\" [${TARGET_KERNEL}] to process isolation, requires falling back to HyperV. Please update your docker host OS.")
182-
endif()
183-
endmacro()
184-
185-
INSPECT(${BASE})
186-
187-
if(${INSPECTION_OK} EQUAL 0)
188-
TO_PROCESS(${BASE} ${TARGET_KERNEL})
189-
else()
190-
message(STATUS "\"${BASE}\" not found in local registry, pulling...")
191-
execute_process(COMMAND "${DOCKER_EXE}" pull ${BASE})
192-
193-
INSPECT(${BASE})
194-
TO_PROCESS(${BASE} ${TARGET_KERNEL})
195-
endif()
196-
197-
set(${VAR} ${${VAR}} PARENT_SCOPE)
198-
endfunction()
199-
200-
PROMOTE_PROCESS_ISOLATION(${BASE_IMAGE} USE_PROCESS_ISOLATION)
201-
202-
if(NOT USE_PROCESS_ISOLATION)
203-
# NOTE: we would need to use GET_RUNTIME_DEPENDENCIES which uses objdump
204-
# https://cmake.org/cmake/help/latest/command/file.html#get-runtime-dependencies
205-
# to collect *all* missing deps and copy (FROM at least server core) to destination nano
206-
# image, it will fail currently if we fully isolate it with VM due to lack of certain DLLs
207-
# BUT it means violating EULA, hence we are not going to support it, also (**)
208-
message(FATAL_ERROR "HyperV is NOT supported! Update your OS!")
209-
endif()
210-
211-
set(CORE_IMAGE mcr.microsoft.com/windows/servercore:ltsc2022)
212236
set(ICU_DIR C:\\Windows\\Globalization\\ICU)
213237
set(ICU_DLL C:\\Windows\\System32\\icu.dll)
214238
if(NOT EXISTS ${ICU_DIR} OR NOT EXISTS ${ICU_DLL})
@@ -240,75 +264,92 @@ set(NBL_NSC_BASIC_HLSL_JPAYLOAD "${CMAKE_CURRENT_SOURCE_DIR}/docker/godbolt/hlsl
240264
# to avoid "too long input" errors we proxy build instructions to CMake script and write it to build directory
241265
string(CONFIGURE [=[
242266
message(STATUS "Killing remaining NSC orphans")
243-
execute_process(COMMAND "${DOCKER_EXE}" rm -f "${ORPHAN}" RESULT_VARIABLE res)
267+
execute_process(COMMAND "@DOCKER_EXE@"
268+
rm -f "@ORPHAN@"
269+
RESULT_VARIABLE res
270+
)
244271
245272
message(STATUS "Executing CTests")
246-
execute_process(COMMAND "${CTEST_EXE}" -C "$<CONFIG>" --stop-on-failure WORKING_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@"
247-
COMMAND_ERROR_IS_FATAL ANY)
273+
execute_process(COMMAND "@CTEST_EXE@"
274+
-C "$<CONFIG>" --stop-on-failure
275+
WORKING_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@"
276+
COMMAND_ERROR_IS_FATAL ANY
277+
)
248278
249279
message(STATUS "Generating NSC build info")
250-
execute_process(COMMAND "${CMAKE_COMMAND}"
251-
"-DNBL_EXECUTABLE_PATH=${NBL_NSC_PREINSTALL_TARGET_EXE_FILEPATH}"
252-
"-DNBL_BUILD_INFO=${NBL_NSC_PREINSTALL_TARGET_BUILD_INFO}"
253-
"-DNBL_OUTPUT_FILE=${NBL_NSC_PREINSTALL_TARGET_BUILD_INFO}"
254-
"-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}>"
255-
-P "${NBL_ROOT_PATH}/cmake/scripts/nbl/nablaBuildInfo.cmake"
256-
COMMAND_ERROR_IS_FATAL ANY)
280+
execute_process(COMMAND "@CMAKE_COMMAND@"
281+
"-DNBL_EXECUTABLE_PATH=@NBL_NSC_PREINSTALL_TARGET_EXE_FILEPATH@"
282+
"-DNBL_BUILD_INFO=@NBL_NSC_PREINSTALL_TARGET_BUILD_INFO@"
283+
"-DNBL_OUTPUT_FILE=@NBL_NSC_PREINSTALL_TARGET_BUILD_INFO@"
284+
"-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@>"
285+
-P "@NBL_ROOT_PATH@/cmake/scripts/nbl/nablaBuildInfo.cmake"
286+
COMMAND_ERROR_IS_FATAL ANY
287+
)
257288
258289
message(STATUS "Generating NSC godbolt config")
259-
execute_process(COMMAND "${CMAKE_COMMAND}"
260-
"-DSPIRV_DIS_EXE=spirv-dis.exe"
261-
"-DNSC_RELEASE_BUILD_INFO=$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY}/${NBL_RELATIVE_ENTRY}/${NBL_NSC_BUILD_INFO_FILENAME}>"
262-
"-DNSC_RELWITHDEBINFO_BUILD_INFO=$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY}/relwithdebinfo/${NBL_RELATIVE_ENTRY}/${NBL_NSC_BUILD_INFO_FILENAME}>"
263-
"-DNSC_DEBUG_BUILD_INFO=$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY}/debug/${NBL_RELATIVE_ENTRY}/${NBL_NSC_BUILD_INFO_FILENAME}>"
264-
"-DOUTPUT_CONFIG_FILE=${OUTPUT_CONFIG_FILE}"
265-
-P "${CMAKE_CURRENT_SOURCE_DIR}/ce-generate-config.cmake"
266-
COMMAND_ERROR_IS_FATAL ANY)
290+
execute_process(COMMAND "@CMAKE_COMMAND@"
291+
"-DSPIRV_DIS_EXE=spirv-dis.exe"
292+
"-DNSC_RELEASE_BUILD_INFO=$<PATH:NORMAL_PATH,@NBL_NSC_PREINSTALL_DIRECTORY@/@NBL_RELATIVE_ENTRY@/@NBL_NSC_BUILD_INFO_FILENAME@>"
293+
"-DNSC_RELWITHDEBINFO_BUILD_INFO=$<PATH:NORMAL_PATH,@NBL_NSC_PREINSTALL_DIRECTORY@/relwithdebinfo/@NBL_RELATIVE_ENTRY@/@NBL_NSC_BUILD_INFO_FILENAME@>"
294+
"-DNSC_DEBUG_BUILD_INFO=$<PATH:NORMAL_PATH,@NBL_NSC_PREINSTALL_DIRECTORY@/debug/@NBL_RELATIVE_ENTRY@/@NBL_NSC_BUILD_INFO_FILENAME@>"
295+
"-DOUTPUT_CONFIG_FILE=@OUTPUT_CONFIG_FILE@"
296+
-P "@CMAKE_CURRENT_SOURCE_DIR@/ce-generate-config.cmake"
297+
COMMAND_ERROR_IS_FATAL ANY
298+
)
267299
268300
message(STATUS "Updating NSC package context")
269-
execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_directory_if_different
270-
"$<PATH:NORMAL_PATH,${NBL_NSC_PREINSTALL_DIRECTORY}>"
271-
"${NBL_DOCKER_CTX_DIR}/Nabla"
272-
COMMAND_ERROR_IS_FATAL ANY)
301+
execute_process(COMMAND "@CMAKE_COMMAND@" -E copy_directory_if_different
302+
"$<PATH:NORMAL_PATH,@NBL_NSC_PREINSTALL_DIRECTORY@>"
303+
"@NBL_DOCKER_CTX_DIR@/Nabla"
304+
COMMAND_ERROR_IS_FATAL ANY
305+
)
273306
274307
message(STATUS "Building NSC Godbolt image")
275-
execute_process(COMMAND "${DOCKER_EXE}" build --isolation process
276-
-f "${DOCKERFILE}"
277-
-t ${NSC_IMAGE_NAME}
278-
"${NBL_DOCKER_CTX_DIR}"
279-
COMMAND_ERROR_IS_FATAL ANY)
308+
string(TIMESTAMP BUILD_TIMESTAMP "%Y-%m-%dT%H:%M:%SZ" UTC)
309+
execute_process(COMMAND "@DOCKER_EXE@" build --isolation process
310+
--label=org.opencontainers.image.created="${BUILD_TIMESTAMP}"
311+
-f "@DOCKERFILE@" -t @NSC_IMAGE_NAME@ "@NBL_DOCKER_CTX_DIR@"
312+
COMMAND_ERROR_IS_FATAL ANY
313+
)
280314
281315
message(STATUS "Running new NSC orphan container")
282-
execute_process(COMMAND "${DOCKER_EXE}" run -di -p ${NBL_CE_PUBLISH_PORT}:10240 --isolation process
283-
--name "${ORPHAN}" --network docker_default
284-
-v $<PATH:NORMAL_PATH,${ICU_DIR}:${ICU_DIR}:ro>
285-
-v $<PATH:NORMAL_PATH,C:/Windows/System32:C:/mount/Windows/System32:ro>
286-
${NSC_IMAGE_NAME}
287-
COMMAND_ERROR_IS_FATAL ANY)
316+
execute_process(COMMAND "@DOCKER_EXE@" run -di -p @NBL_CE_PUBLISH_PORT@:10240 --isolation process
317+
--name "@ORPHAN@" --network docker_default
318+
-v $<PATH:NORMAL_PATH,@ICU_DIR@:@ICU_DIR@:ro>
319+
-v $<PATH:NORMAL_PATH,C:/Windows/System32:C:/mount/Windows/System32:ro>
320+
@NSC_IMAGE_NAME@
321+
COMMAND_ERROR_IS_FATAL ANY
322+
)
288323
289324
message(STATUS "Healthy check")
290-
execute_process(COMMAND "${_Python3_EXECUTABLE}" "${NBL_CE_HEALTHY_CHECK_PY}"
291-
--url "${NBL_CE_URL}" --interval 5 --ticks 12
292-
COMMAND_ERROR_IS_FATAL ANY)
325+
execute_process(COMMAND "@_Python3_EXECUTABLE@" "@NBL_CE_HEALTHY_CHECK_PY@"
326+
--url "@NBL_CE_URL@" --interval 5 --ticks 12
327+
COMMAND_ERROR_IS_FATAL ANY
328+
)
293329
294330
message(STATUS "Post Basic NSC shader compile check")
295-
execute_process(COMMAND "${_Python3_EXECUTABLE}" "${NBL_CE_ENDPOINT_PY}"
296-
--url "${NBL_CE_URL}"
297-
--endpoint /api/compiler/nsc_$<LOWER_CASE:$<CONFIG>>_upstream/compile
298-
--method POST --json "${NBL_NSC_BASIC_HLSL_JPAYLOAD}"
299-
COMMAND_ERROR_IS_FATAL ANY)
331+
execute_process(COMMAND "@_Python3_EXECUTABLE@" "@NBL_CE_ENDPOINT_PY@"
332+
--url "@NBL_CE_URL@"
333+
--endpoint /api/compiler/nsc_$<LOWER_CASE:$<CONFIG>>_upstream/compile
334+
--method POST --json "@NBL_NSC_BASIC_HLSL_JPAYLOAD@"
335+
COMMAND_ERROR_IS_FATAL ANY
336+
)
300337
301338
message(STATUS "Printing NSC container logs")
302-
execute_process(COMMAND "${DOCKER_EXE}" logs "${ORPHAN}" COMMAND_ERROR_IS_FATAL ANY)
339+
execute_process(COMMAND "@DOCKER_EXE@"
340+
logs "@ORPHAN@"
341+
COMMAND_ERROR_IS_FATAL ANY
342+
)
303343
304344
message(STATUS "OK! NSC container is healthy.")
305-
message(STATUS "Type \"${NBL_CE_URL}\" in your browser to use NSC with Godbolt!")
306-
]=] INSTRUCTIONS)
345+
message(STATUS "Type \"@NBL_CE_URL@\" in your browser to use NSC with Godbolt!")
346+
]=] INSTRUCTIONS @ONLY)
307347

308-
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/run-compiler-explorer-$<CONFIG>.cmake" CONTENT "${INSTRUCTIONS}")
348+
set(SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/run-compiler-explorer-$<CONFIG>.cmake")
349+
file(GENERATE OUTPUT ${SCRIPT_FILE} CONTENT "${INSTRUCTIONS}")
309350

310351
add_custom_target(run-compiler-explorer ALL
311-
COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/run-compiler-explorer-$<CONFIG>.cmake"
352+
COMMAND "${CMAKE_COMMAND}" -P ${SCRIPT_FILE}
312353
VERBATIM
313354
COMMAND_EXPAND_LISTS
314355
)

0 commit comments

Comments
 (0)