@@ -12,6 +12,8 @@ ARG WINDOWS_11_SDK_VERSION=22621
12
12
ARG WINDOWS_SDK_VERSION=10.0.${WINDOWS_11_SDK_VERSION}.0
13
13
ARG VC_VERSION=14.43.17.13
14
14
ARG VS_BOOTSTRAP_VERSION=17.13.6
15
+ ARG VULKAN_SDK_VERSION=1.4.313.0
16
+ ARG NINJATRACING_VERSION=0.0.2
15
17
16
18
# note: it seems we cannot pass version within any workflow ID to installer, though as I look at VS package cache I see it being done in json payloads!
17
19
# henceforth we enforce fixed versions with nasty bootstrap URL, more details:
@@ -33,24 +35,68 @@ ARG IMPL_COMPRESSION_LEVEL=3
33
35
ARG IMPL_NANO_BASE=mcr.microsoft.com/powershell
34
36
ARG IMPL_NANO_TAG=lts-nanoserver-ltsc2022
35
37
36
- # ---------------- BUILD TOOLS ----------------
37
- FROM mcr.microsoft.com/windows/servercore:ltsc2022 as buildtools
38
+ # ---------------- REDIST ----------------
39
+ FROM mcr.microsoft.com/windows/servercore:ltsc2022 as redist
38
40
39
- ARG WINDOWS_11_SDK_VERSION
40
- ARG VC_VERSION
41
- ARG MSVC_VERSION
42
41
ARG BUILD_TOOLS_URL
43
42
ARG IMPL_ARTIFACTS_DIR
44
43
45
44
RUN mkdir C:\T emp && cd C:\T emp `
46
45
&& curl -SL --output vs_buildtools.exe %BUILD_TOOLS_URL% `
47
46
&& (start /w vs_buildtools.exe --quiet --wait --norestart --nocache `
47
+ --add Microsoft.VisualStudio.Component.VC.Redist.14.Latest `
48
+ --installPath %IMPL_ARTIFACTS_DIR% `
49
+ || IF "%ERRORLEVEL%" =="3010" EXIT 0)
50
+
51
+ # ---------------- COMMON BUILD TOOLS ----------------
52
+ FROM redist as bootstrap
53
+
54
+ ARG BUILD_TOOLS_URL
55
+ ARG IMPL_ARTIFACTS_DIR
56
+
57
+ RUN (start /w C:\T emp\v s_buildtools.exe --quiet --wait --norestart --nocache `
58
+ --add Microsoft.VisualCpp.DIA.SDK `
59
+ --add Microsoft.VisualStudio.Component.VC.Llvm.Clang `
60
+ --installPath %IMPL_ARTIFACTS_DIR% `
61
+ || IF "%ERRORLEVEL%" =="3010" EXIT 0)
62
+
63
+ SHELL ["powershell" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
64
+
65
+ # version depends on channel (see BUILD_TOOLS_URL)
66
+ ARG CLANGCL_VERSION
67
+ RUN $version = "$env:CLANGCL_VERSION" ; `
68
+ $clangcl = Join-Path $env:IMPL_ARTIFACTS_DIR "VC\T ools\L lvm\b in\c lang-cl.exe" ; `
69
+ $pipe = & "$clangcl" -v 2>&1 ; `
70
+ if ($pipe -match "$version" ) { exit 0 } else { `
71
+ Write-Host "Validation failed due to requested version mismatch! Note: CLANGCL_VERSION = $version" ; `
72
+ Write-Host "$pipe" ; `
73
+ exit -1 `
74
+ }
75
+
76
+ SHELL ["cmd" , "/S" , "/C" ]
77
+
78
+ # ---------------- WINDOWS SDK ----------------
79
+ FROM bootstrap as winsdk
80
+
81
+ ARG WINDOWS_11_SDK_VERSION
82
+ ARG IMPL_ARTIFACTS_DIR
83
+
84
+ RUN (start /w C:\T emp\v s_buildtools.exe --quiet --wait --norestart --nocache `
85
+ --add Microsoft.VisualStudio.Component.Windows11SDK.%WINDOWS_11_SDK_VERSION% `
86
+ --installPath %IMPL_ARTIFACTS_DIR% `
87
+ || IF "%ERRORLEVEL%" =="3010" EXIT 0)
88
+
89
+ # ---------------- VC BUILD TOOLS ----------------
90
+ FROM bootstrap as buildtools
91
+
92
+ ARG VC_VERSION
93
+ ARG MSVC_VERSION
94
+ ARG IMPL_ARTIFACTS_DIR
95
+
96
+ RUN (start /w C:\T emp\v s_buildtools.exe --quiet --wait --norestart --nocache `
48
97
--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.x86.x64 `
49
98
--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.ATL `
50
99
--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.MFC `
51
- --add Microsoft.VisualStudio.Component.Windows11SDK.%WINDOWS_11_SDK_VERSION% `
52
- --add Microsoft.VisualCpp.DIA.SDK `
53
- --add Microsoft.VisualStudio.Component.VC.Llvm.Clang `
54
100
--installPath %IMPL_ARTIFACTS_DIR% `
55
101
|| IF "%ERRORLEVEL%" =="3010" EXIT 0) && dir %IMPL_ARTIFACTS_DIR%\V C\T ools\M SVC `
56
102
&& if exist %IMPL_ARTIFACTS_DIR%\V C\T ools\M SVC\% MSVC_VERSION% ( `
@@ -59,7 +105,7 @@ for /d %i in (%IMPL_ARTIFACTS_DIR%\VC\Tools\MSVC\*) do if /I not "%i"=="%IMPL_AR
59
105
echo "Error: Expected MSVC version directory %MSVC_VERSION% does not exist!" && exit /b 1 `
60
106
)
61
107
62
- SHELL ["powershell" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
108
+ # SHELL ["powershell", "-NoLogo", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command"]
63
109
# important note: msc ships compiler which minor version doesn't match the toolset directory name
64
110
# eg. dir name: 14.43.34808 (MSVC_VERSION) but version reported by cl.exe: 19.43.34810
65
111
# more over, all package cache payloads (by default at C:\ProgramData\Microsoft\VisualStudio)
@@ -76,16 +122,19 @@ SHELL ["powershell", "-NoLogo", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Co
76
122
# exit -1 `
77
123
# }
78
124
79
- # on the other hand here version depends on channel (see BUILD_TOOLS_URL)
80
- ARG CLANGCL_VERSION
81
- RUN $version = "$env:CLANGCL_VERSION" ; `
82
- $clangcl = Join-Path $env:IMPL_ARTIFACTS_DIR "VC\T ools\L lvm\b in\c lang-cl.exe" ; `
83
- $pipe = & "$clangcl" -v 2>&1 ; `
84
- if ($pipe -match "$version" ) { exit 0 } else { `
85
- Write-Host "Validation failed due to requested version mismatch! Note: CLANGCL_VERSION = $version" ; `
86
- Write-Host "$pipe" ; `
87
- exit -1 `
88
- }
125
+ # ---------------- VULKAN SDK ----------------
126
+ FROM redist as vulkan
127
+
128
+ ARG VULKAN_SDK_VERSION
129
+ ARG IMPL_ARTIFACTS_DIR
130
+ SHELL ["powershell" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
131
+
132
+ RUN Write-Host "Installing Vulkan SDK $env:VULKAN_SDK_VERSION" ; `
133
+ Remove-Item -Recurse -Force $env:IMPL_ARTIFACTS_DIR -ErrorAction SilentlyContinue ; `
134
+ New-Item -ItemType Directory -Force -Path C:\T emp, $env:IMPL_ARTIFACTS_DIR ; `
135
+ Invoke-WebRequest -Uri "https://sdk.lunarg.com/sdk/download/$env:VULKAN_SDK_VERSION/windows/vulkansdk-windows-X64-$env:VULKAN_SDK_VERSION.exe" -OutFile C:\T emp\v ulkan-sdk.exe ; `
136
+ & C:\T emp\v ulkan-sdk.exe install --root "$env:IMPL_ARTIFACTS_DIR" --default-answer --accept-licenses --confirm-command ; `
137
+ Remove-Item C:\T emp\v ulkan-sdk.exe
89
138
90
139
# ---------------- CMAKE ----------------
91
140
FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as cmake
@@ -134,6 +183,19 @@ Invoke-WebRequest -Uri "https://github.com/ninja-build/ninja/releases/download/v
134
183
tar -xf C:\T emp\n inja.zip -C $env:IMPL_ARTIFACTS_DIR ; `
135
184
Remove-Item C:\T emp\n inja.zip
136
185
186
+ # ---------------- NINJA ----------------
187
+ FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as ninjatracing
188
+ SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
189
+
190
+ ARG NINJATRACING_VERSION
191
+ ARG IMPL_ARTIFACTS_DIR
192
+
193
+ RUN Write-Host "Installing Ninja-Tracing $env:NINJATRACING_VERSION" ; `
194
+ New-Item -ItemType Directory -Force -Path C:\T emp, $env:IMPL_ARTIFACTS_DIR ; `
195
+ Invoke-WebRequest -Uri "https://github.com/Devsh-Graphics-Programming/ninjatracing/archive/refs/tags/$env:NINJATRACING_VERSION.zip" -OutFile C:\T emp\n injatracing.zip ; `
196
+ tar -xf C:\T emp\n injatracing.zip -C $env:IMPL_ARTIFACTS_DIR ; `
197
+ Remove-Item C:\T emp\n injatracing.zip
198
+
137
199
# ---------------- NASM ----------------
138
200
FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as nasm
139
201
SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
@@ -178,11 +240,13 @@ FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as compress
178
240
SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
179
241
180
242
ARG IMPL_ARTIFACTS_DIR
181
- COPY --link --from=buildtools ["C:/Program Files (x86)/Windows Kits/10" , "C:/pack/WindowsKits10SDK" ]
243
+ COPY --link --from=winsdk ["C:/Program Files (x86)/Windows Kits/10" , "C:/pack/WindowsKits10SDK" ]
182
244
COPY --link --from=buildtools ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/BuildTools" ]
245
+ COPY --link --from=vulkan ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/vulkan-sdk" ]
183
246
COPY --link --from=cmake ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/CMake" ]
184
247
COPY --link --from=python ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/Python" ]
185
248
COPY --link --from=ninja ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/Ninja" ]
249
+ COPY --link --from=ninjatracing ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/NinjaTracing" ]
186
250
COPY --link --from=nasm ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/Nasm" ]
187
251
COPY --link --from=git ["${IMPL_ARTIFACTS_DIR}" , "C:/pack/Git" ]
188
252
COPY --link --from=zstd ["${IMPL_ARTIFACTS_DIR}" , "C:/compress" ]
@@ -192,10 +256,17 @@ ARG IMPL_COMPRESSION_OPTIONS
192
256
ARG IMPL_COMPRESSION_LEVEL
193
257
194
258
WORKDIR C:\p ack
195
- RUN $dirs = Get-ChildItem -Directory | ForEach-Object { $_.Name }; $dirs; `
196
- tar -cf artifacts.tar @dirs; dir artifacts.tar; $compressionOpts = $env:IMPL_COMPRESSION_OPTIONS -split ' ' ; `
197
- & "C:\c ompress\z std-v$env:ZSTD_VERSION-win64\z std.exe" @compressionOpts artifacts.tar "-$env:IMPL_COMPRESSION_LEVEL" ; dir artifacts.tar.zst; `
198
- rm artifacts.tar
259
+ RUN $dirs=Get-ChildItem -Directory|Select-Object -Expand Name; `
260
+ New-Item -ItemType Directory -Force -Path "zst" ; `
261
+ foreach($d in $dirs){ `
262
+ Write-Host "=== Compressing $d ===" ; `
263
+ tar -cf "${d}-artifacts.tar" "$d" ; `
264
+ & "C:\c ompress\z std-v$env:ZSTD_VERSION-win64\z std.exe" `
265
+ $env:IMPL_COMPRESSION_OPTIONS.Split(' ' ) `
266
+ "${d}-artifacts.tar" "-$env:IMPL_COMPRESSION_LEVEL" `
267
+ "-o" "zst/${d}-artifacts.tar.zst" ; `
268
+ Remove-Item "${d}-artifacts.tar" ; `
269
+ }
199
270
200
271
# ---------------- FINAL IMAGE ----------------
201
272
FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG}
@@ -208,7 +279,7 @@ LABEL org.opencontainers.image.description="Build MSVC/ClangCL + WinSDK projects
208
279
LABEL org.opencontainers.image.licenses=Apache-2.0
209
280
210
281
ARG IMPL_ARTIFACTS_DIR
211
- COPY --link --from=compress ["C:/pack/artifacts.tar. zst" , "C:/artifacts.tar.zst " ]
282
+ COPY --link --from=compress ["C:/pack/zst" , "C:/pack " ]
212
283
COPY --link --from=zstd ["${IMPL_ARTIFACTS_DIR}" , "C:/compress" ]
213
284
214
285
ARG CMAKE_VERSION
@@ -223,6 +294,8 @@ ARG MSVC_VERSION
223
294
ARG CLANGCL_VERSION
224
295
ARG BUILD_TOOLS_URL
225
296
ARG VS_BOOTSTRAP_VERSION
297
+ ARG VULKAN_SDK_VERSION
298
+ ARG NINJATRACING_VERSION
226
299
ARG ZSTD_VERSION
227
300
228
301
ENV CMAKE_WINDOWS_KITS_10_DIR="C:\W indowsKits10SDK" `
@@ -239,11 +312,14 @@ MSVC_VERSION=${MSVC_VERSION} `
239
312
CLANGCL_VERSION=${CLANGCL_VERSION} `
240
313
BUILD_TOOLS_URL=${BUILD_TOOLS_URL} `
241
314
VS_BOOTSTRAP_VERSION=${VS_BOOTSTRAP_VERSION} `
315
+ VULKAN_SDK_VERSION=${VULKAN_SDK_VERSION} `
316
+ NINJATRACING_VERSION=${NINJATRACING_VERSION} `
242
317
MSVC_TOOLSET_DIR=C:\B uildTools\V C\T ools\M SVC\$ {MSVC_VERSION} `
243
318
LLVM_TOOLSET_DIR=C:\B uildTools\V C\T ools\L lvm `
244
- PATH="C:\W indows\s ystem32;C:\W indows;C:\P rogram Files\P owerShell;C:\G it\c md;C:\G it\b in;C:\G it\u sr\b in;C:\G it\m ingw64\b in;C:\C Make\c make-${CMAKE_VERSION}-windows-x86_64\b in;C:\P ython;C:\N asm;C:\N asm\n asm-${NASM_VERSION};C:\N inja;C:\c ompress\z std-v${ZSTD_VERSION}-win64;"
319
+ PATH="C:\W indows\s ystem32;C:\W indows;C:\P rogram Files\P owerShell;C:\G it\c md;C:\G it\b in;C:\G it\u sr\b in;C:\G it\m ingw64\b in;C:\C Make\c make-${CMAKE_VERSION}-windows-x86_64\b in;C:\P ython;C:\N asm;C:\N asm\n asm-${NASM_VERSION};C:\N inja;C:\c ompress\z std-v${ZSTD_VERSION}-win64;C: \v ulkan-sdk \B in;C: \N injaTracing \n injatracing-${NINJATRACING_VERSION} "
245
320
246
321
COPY . sample/
247
322
COPY unpack.ps1 .
248
323
WORKDIR C:\s ample\t ests
324
+ ENTRYPOINT ["pwsh.exe" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-NoExit" , "-File" , "C:/unpack.ps1" ]
249
325
CMD ["pwsh.exe" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" ]
0 commit comments