@@ -10,7 +10,16 @@ ARG GIT_VERSION=2.48.1
1010ARG WINDOWS_11_SDK_VERSION=22621
1111ARG WINDOWS_SDK_VERSION=10.0.${WINDOWS_11_SDK_VERSION}.0
1212ARG 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
1321ARG MSVC_VERSION=14.43.34808
22+ ARG CLANGCL_VERSION=19.1.1
1423
1524ARG IMPL_ARTIFACTS_DIR="C:\a rtifacts"
1625ARG IMPL_NANO_BASE=mcr.microsoft.com/powershell
@@ -22,26 +31,53 @@ FROM mcr.microsoft.com/windows/servercore:ltsc2022 as buildtools
2231ARG WINDOWS_11_SDK_VERSION
2332ARG VC_VERSION
2433ARG MSVC_VERSION
34+ ARG BUILD_TOOLS_URL
2535ARG IMPL_ARTIFACTS_DIR
2636
2737RUN 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% `
2939&& (start /w vs_buildtools.exe --quiet --wait --norestart --nocache `
30- --remove Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
3140--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.x86.x64 `
3241--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.ATL `
3342--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.MFC `
3443--add Microsoft.VisualStudio.Component.Windows11SDK.%WINDOWS_11_SDK_VERSION% `
3544--add Microsoft.VisualCpp.DIA.SDK `
45+ --add Microsoft.VisualStudio.Component.VC.Llvm.Clang `
3646--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 `
3948&& if exist %IMPL_ARTIFACTS_DIR%\V C\T ools\M SVC\% MSVC_VERSION% ( `
4049for /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" `
4150) else ( `
4251echo "Error: Expected MSVC version directory %MSVC_VERSION% does not exist!" && exit /b 1 `
4352)
4453
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+
4581# ---------------- CMAKE ----------------
4682FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as cmake
4783SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
@@ -138,6 +174,8 @@ ARG WINDOWS_11_SDK_VERSION
138174ARG WINDOWS_SDK_VERSION
139175ARG VC_VERSION
140176ARG MSVC_VERSION
177+ ARG CLANGCL_VERSION
178+ ARG BUILD_TOOLS_URL
141179
142180ENV CMAKE_WINDOWS_KITS_10_DIR="C:\W indowsKits10SDK" `
143181CMAKE_VERSION=${CMAKE_VERSION} `
@@ -150,6 +188,8 @@ WINDOWS_SDK_VERSION=${WINDOWS_SDK_VERSION} `
150188VC_VERSION=${VC_VERSION} `
151189VS_INSTANCE_LOCATION=C:\B uildTools `
152190MSVC_VERSION=${MSVC_VERSION} `
191+ CLANGCL_VERSION=${CLANGCL_VERSION} `
192+ BUILD_TOOLS_URL=${BUILD_TOOLS_URL} `
153193MSVC_TOOLSET_DIR=C:\B uildTools\V C\T ools\M SVC\$ {MSVC_VERSION} `
154194PATH="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;"
155195
0 commit comments