@@ -10,7 +10,16 @@ ARG GIT_VERSION=2.48.1
10
10
ARG WINDOWS_11_SDK_VERSION=22621
11
11
ARG WINDOWS_SDK_VERSION=10.0.${WINDOWS_11_SDK_VERSION}.0
12
12
ARG VC_VERSION=14.43.17.13
13
+
14
+ # 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!
15
+ # henceforth we enforce fixed versions with nasty bootstrap URL, more details:
16
+ # https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-history#fixed-version-bootstrappers
17
+ # Default Version: 17.13.6, Channel: Current
18
+ ARG BUILD_TOOLS_URL=https://download.visualstudio.microsoft.com/download/pr/8fada5c7-8417-4239-acc3-bd499af09222/353141457abcc59eb9c38b2f30084e7271c6bcfb4e185466d98161bada905759/vs_BuildTools.exe
19
+
20
+ # used for validation & matches internal package payloads, note: requires adjusting BUILD_TOOLS_URL
13
21
ARG MSVC_VERSION=14.43.34808
22
+ ARG CLANGCL_VERSION=19.1.1
14
23
15
24
ARG IMPL_ARTIFACTS_DIR="C:\a rtifacts"
16
25
ARG IMPL_NANO_BASE=mcr.microsoft.com/powershell
@@ -22,26 +31,53 @@ FROM mcr.microsoft.com/windows/servercore:ltsc2022 as buildtools
22
31
ARG WINDOWS_11_SDK_VERSION
23
32
ARG VC_VERSION
24
33
ARG MSVC_VERSION
34
+ ARG BUILD_TOOLS_URL
25
35
ARG IMPL_ARTIFACTS_DIR
26
36
27
37
RUN mkdir C:\T emp && cd C:\T emp `
28
- && curl -SL --output vs_buildtools.exe https://aka.ms/vs/17/release/vs_buildtools.exe `
38
+ && curl -SL --output vs_buildtools.exe %BUILD_TOOLS_URL% `
29
39
&& (start /w vs_buildtools.exe --quiet --wait --norestart --nocache `
30
- --remove Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
31
40
--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.x86.x64 `
32
41
--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.ATL `
33
42
--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.MFC `
34
43
--add Microsoft.VisualStudio.Component.Windows11SDK.%WINDOWS_11_SDK_VERSION% `
35
44
--add Microsoft.VisualCpp.DIA.SDK `
45
+ --add Microsoft.VisualStudio.Component.VC.Llvm.Clang `
36
46
--installPath %IMPL_ARTIFACTS_DIR% `
37
- || IF "%ERRORLEVEL%" =="3010" EXIT 0) `
38
- && dir %IMPL_ARTIFACTS_DIR%\V C\T ools\M SVC `
47
+ || IF "%ERRORLEVEL%" =="3010" EXIT 0) && dir %IMPL_ARTIFACTS_DIR%\V C\T ools\M SVC `
39
48
&& if exist %IMPL_ARTIFACTS_DIR%\V C\T ools\M SVC\% MSVC_VERSION% ( `
40
49
for /d %i in (%IMPL_ARTIFACTS_DIR%\V C\T ools\M SVC\* ) do if /I not "%i" =="%IMPL_ARTIFACTS_DIR%\V C\T ools\M SVC\% MSVC_VERSION%" rd /s /q "%i" `
41
50
) else ( `
42
51
echo "Error: Expected MSVC version directory %MSVC_VERSION% does not exist!" && exit /b 1 `
43
52
)
44
53
54
+ SHELL ["powershell" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
55
+ # important note: msc ships compiler which minor version doesn't match the toolset directory name
56
+ # eg. dir name: 14.43.34808 (MSVC_VERSION) but version reported by cl.exe: 19.43.34810
57
+ # more over, all package cache payloads (by default at C:\ProgramData\Microsoft\VisualStudio)
58
+ # use MSVC_VERSION within workflow components ID - none of them contains 19.43.34810
59
+ # which means that most likely there is a bug with versioning cl binaries
60
+
61
+ # RUN $version = "$env:MSVC_VERSION" ; `
62
+ # $cl = Join-Path $env:IMPL_ARTIFACTS_DIR "VC\Tools\MSVC\$version\bin\Hostx64\x64\cl.exe" ; `
63
+ # $pipe = & "$cl" 2>&1 ; `
64
+ # if ($pipe -match "$version") { exit 0 } else { `
65
+ # Write-Host "Validation failed due to requested version mismatch! Note: MSVC_VERSION = $version" ; `
66
+ # Write-Host "$pipe" ; `
67
+ # exit -1 `
68
+ # }
69
+
70
+ # on the other hand here version depends on channel (see BUILD_TOOLS_URL)
71
+ ARG CLANGCL_VERSION
72
+ RUN $version = "$env:CLANGCL_VERSION" ; `
73
+ $clangcl = Join-Path $env:IMPL_ARTIFACTS_DIR "VC\T ools\L lvm\b in\c lang-cl.exe" ; `
74
+ $pipe = & "$clangcl" -v 2>&1 ; `
75
+ if ($pipe -match "$version" ) { exit 0 } else { `
76
+ Write-Host "Validation failed due to requested version mismatch! Note: CLANGCL_VERSION = $version" ; `
77
+ Write-Host "$pipe" ; `
78
+ exit -1 `
79
+ }
80
+
45
81
# ---------------- CMAKE ----------------
46
82
FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as cmake
47
83
SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
@@ -138,6 +174,8 @@ ARG WINDOWS_11_SDK_VERSION
138
174
ARG WINDOWS_SDK_VERSION
139
175
ARG VC_VERSION
140
176
ARG MSVC_VERSION
177
+ ARG CLANGCL_VERSION
178
+ ARG BUILD_TOOLS_URL
141
179
142
180
ENV CMAKE_WINDOWS_KITS_10_DIR="C:\W indowsKits10SDK" `
143
181
CMAKE_VERSION=${CMAKE_VERSION} `
@@ -150,6 +188,8 @@ WINDOWS_SDK_VERSION=${WINDOWS_SDK_VERSION} `
150
188
VC_VERSION=${VC_VERSION} `
151
189
VS_INSTANCE_LOCATION=C:\B uildTools `
152
190
MSVC_VERSION=${MSVC_VERSION} `
191
+ CLANGCL_VERSION=${CLANGCL_VERSION} `
192
+ BUILD_TOOLS_URL=${BUILD_TOOLS_URL} `
153
193
MSVC_TOOLSET_DIR=C:\B uildTools\V C\T ools\M SVC\$ {MSVC_VERSION} `
154
194
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;"
155
195
0 commit comments