1+ # syntax=docker/dockerfile:1
12# escape=`
23
3- FROM --platform=windows/amd64 mcr.microsoft.com/windows/servercore:ltsc2022 AS BUILD_TOOLS
4+ # ---------------- GLOBAL VARS ----------------
5+ ARG CMAKE_VERSION=3.31.0
6+ ARG PYTHON_VERSION=3.11.0
7+ ARG NINJA_VERSION=1.12.1
8+ ARG NASM_VERSION=2.16.03
9+ ARG GIT_VERSION=2.48.1
10+ ARG WINDOWS_11_SDK_VERSION=22621
11+ ARG WINDOWS_SDK_VERSION=10.0.${WINDOWS_11_SDK_VERSION}.0
12+ ARG VC_VERSION=14.42.17.12
13+ ARG MSVC_VERSION=14.42.34433
14+
15+ ARG IMPL_ARTIFACTS_DIR="C:\a rtifacts"
16+ ARG IMPL_NANO_BASE=mcr.microsoft.com/powershell
17+ ARG IMPL_NANO_TAG=lts-nanoserver-ltsc2022
418
5- ARG WINDOWS_11_SDK_VERSION="22621"
6- ARG VC_VERSION="14.42.17.12"
7- ARG MSVC_VERSION="14.42.34433"
19+ # ---------------- BUILD TOOLS ----------------
20+ FROM mcr.microsoft.com/windows/servercore:ltsc2022 as buildtools
821
9- ENV WINDOWS_11_SDK_VERSION=${WINDOWS_11_SDK_VERSION} VC_VERSION=${VC_VERSION} MSVC_VERSION=${MSVC_VERSION} BUILD_TOOLS_DIR="C:\a rtifacts"
22+ ARG WINDOWS_11_SDK_VERSION
23+ ARG VC_VERSION
24+ ARG MSVC_VERSION
25+ ARG IMPL_ARTIFACTS_DIR
1026
1127RUN mkdir C:\T emp && cd C:\T emp `
1228&& curl -SL --output vs_buildtools.exe https://aka.ms/vs/17/release/vs_buildtools.exe `
1329&& (start /w vs_buildtools.exe --quiet --wait --norestart --nocache `
1430--remove Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
1531--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.x86.x64 `
1632--add Microsoft.VisualStudio.Component.Windows11SDK.%WINDOWS_11_SDK_VERSION% `
17- --installPath %BUILD_TOOLS_DIR % `
33+ --installPath %IMPL_ARTIFACTS_DIR % `
1834|| IF "%ERRORLEVEL%" =="3010" EXIT 0) `
19- && dir %BUILD_TOOLS_DIR %\V C\T ools\M SVC `
20- && if exist %BUILD_TOOLS_DIR %\V C\T ools\M SVC\% MSVC_VERSION% ( `
21- for /d %i in (%BUILD_TOOLS_DIR %\V C\T ools\M SVC\* ) do if /I not "%i" =="%BUILD_TOOLS_DIR %\V C\T ools\M SVC\% MSVC_VERSION%" rd /s /q "%i" `
35+ && dir %IMPL_ARTIFACTS_DIR %\V C\T ools\M SVC `
36+ && if exist %IMPL_ARTIFACTS_DIR %\V C\T ools\M SVC\% MSVC_VERSION% ( `
37+ 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" `
2238) else ( `
2339echo "Error: Expected MSVC version directory %MSVC_VERSION% does not exist!" && exit /b 1 `
2440)
2541
26- RUN (echo { "WINDOWS_SDK_VERSION" : "10.0.%WINDOWS_11_SDK_VERSION%.0" , "VC_VERSION" : "%VC_VERSION%" , "MSVC_VERSION" : "%MSVC_VERSION%" }) > %BUILD_TOOLS_DIR%\e nv.json
42+ # ---------------- CMAKE ----------------
43+ FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as cmake
44+ SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
2745
28- FROM mcr.microsoft.com/windows/nanoserver:ltsc2022
46+ ARG CMAKE_VERSION
47+ ARG IMPL_ARTIFACTS_DIR
2948
30- ARG BUILD_TOOLS_DIR="C:\B uildTools"
31- ARG WINDOWS_KITS_10_DIR="C:\W indowsKits10SDK"
32- ARG CMAKE_VERSION=3.31.0
33- ARG CMAKE_DIR="C:\C Make"
34- ARG PYTHON_VERSION=3.11.0
35- ARG PYTHON_DIR="C:\P ython"
36- ARG NINJA_VERSION=1.12.1
37- ARG NINJA_DIR="C:\N inja"
38- ARG NASM_VERSION=2.16.03
39- ARG NASM_DIR="C:\N asm"
49+ RUN Write-Host "Installing CMake $env:CMAKE_VERSION" ; `
50+ New-Item -ItemType Directory -Force -Path C:\T emp, $env:IMPL_ARTIFACTS_DIR ; `
51+ Invoke-WebRequest -Uri "https://github.com/Kitware/CMake/releases/download/v$env:CMAKE_VERSION/cmake-$env:CMAKE_VERSION-windows-x86_64.zip" -OutFile C:\T emp\c make.zip ; `
52+ tar -xf C:\T emp\c make.zip -C $env:IMPL_ARTIFACTS_DIR ; `
53+ Remove-Item C:\T emp\c make.zip
54+
55+ # ---------------- PYTHON ----------------
56+ FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as python
57+ SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
58+
59+ ARG PYTHON_VERSION
60+ ARG IMPL_ARTIFACTS_DIR
61+
62+ RUN Write-Host "Installing Python $env:PYTHON_VERSION" ; `
63+ New-Item -ItemType Directory -Force -Path C:\T emp, $env:IMPL_ARTIFACTS_DIR ; `
64+ Invoke-WebRequest -Uri "https://www.python.org/ftp/python/$env:PYTHON_VERSION/python-$env:PYTHON_VERSION-embed-amd64.zip" -OutFile C:\T emp\p ython.zip ; `
65+ tar -xf C:\T emp\p ython.zip -C $env:IMPL_ARTIFACTS_DIR ; `
66+ Remove-Item C:\T emp\p ython.zip
67+
68+ # ---------------- NINJA ----------------
69+ FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as ninja
70+ SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
71+
72+ ARG NINJA_VERSION
73+ ARG IMPL_ARTIFACTS_DIR
74+
75+ RUN Write-Host "Installing Ninja $env:NINJA_VERSION" ; `
76+ New-Item -ItemType Directory -Force -Path C:\T emp, $env:IMPL_ARTIFACTS_DIR ; `
77+ Invoke-WebRequest -Uri "https://github.com/ninja-build/ninja/releases/download/v$env:NINJA_VERSION/ninja-win.zip" -OutFile C:\T emp\n inja.zip ; `
78+ tar -xf C:\T emp\n inja.zip -C $env:IMPL_ARTIFACTS_DIR ; `
79+ Remove-Item C:\T emp\n inja.zip
80+
81+ # ---------------- NASM ----------------
82+ FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as nasm
83+ SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
84+
85+ ARG NASM_VERSION
86+ ARG IMPL_ARTIFACTS_DIR
87+
88+ RUN Write-Host "Installing NASM $env:NASM_VERSION" ; `
89+ New-Item -ItemType Directory -Force -Path C:\T emp, $env:IMPL_ARTIFACTS_DIR ; `
90+ Invoke-WebRequest -Uri "https://www.nasm.us/pub/nasm/releasebuilds/$env:NASM_VERSION/win64/nasm-$env:NASM_VERSION-win64.zip" -OutFile C:\T emp\n asm.zip ; `
91+ tar -xf C:\T emp\n asm.zip -C $env:IMPL_ARTIFACTS_DIR ; `
92+ Remove-Item C:\T emp\n asm.zip
93+
94+ # ---------------- GIT ----------------
95+ FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG} as git
96+ SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
97+
98+ ARG GIT_VERSION
99+ ARG IMPL_ARTIFACTS_DIR
100+
101+ RUN Write-Host "Installing Git $env:GIT_VERSION" ; `
102+ New-Item -ItemType Directory -Force -Path C:\T emp, $env:IMPL_ARTIFACTS_DIR ; `
103+ Invoke-WebRequest -Uri "https://github.com/git-for-windows/git/releases/download/v$env:GIT_VERSION.windows.1/MinGit-$env:GIT_VERSION-busybox-64-bit.zip" -OutFile C:\T emp\g it.zip ; `
104+ tar -xf C:\T emp\g it.zip -C $env:IMPL_ARTIFACTS_DIR ; `
105+ Remove-Item C:\T emp\g it.zip
40106
41- COPY --link --from=BUILD_TOOLS ["C:/Program Files (x86)/Windows Kits/10" , "${WINDOWS_KITS_10_DIR}" ]
42- COPY --link --from=BUILD_TOOLS ["C:/artifacts" , "${BUILD_TOOLS_DIR}" ]
107+ # ---------------- FINAL IMAGE ----------------
108+ FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG}
109+ SHELL ["pwsh" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" , "-Command" ]
43110
44- ENV CMAKE_WINDOWS_KITS_10_DIR=${WINDOWS_KITS_10_DIR} BUILD_TOOLS_DIR=${BUILD_TOOLS_DIR} `
45- CMAKE_VERSION=${CMAKE_VERSION} CMAKE_URL=https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-windows-x86_64.zip CMAKE_DIR=${CMAKE_DIR} `
46- PYTHON_VERSION=${PYTHON_VERSION} PYTHON_URL=https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-embed-amd64.zip PYTHON_DIR=${PYTHON_DIR} `
47- NINJA_VERSION=${NINJA_VERSION} NINJA_URL=https://github.com/ninja-build/ninja/releases/download/v${NINJA_VERSION}/ninja-win.zip NINJA_DIR=${NINJA_DIR} `
48- NASM_VERSION=${NASM_VERSION} NASM_URL=https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VERSION}/win64/nasm-${NASM_VERSION}-win64.zip NASM_DIR=${NASM_DIR}
111+ ARG IMPL_ARTIFACTS_DIR
112+ COPY --link --from=buildtools ["C:/Program Files (x86)/Windows Kits/10" , "C:/WindowsKits10SDK" ]
113+ COPY --link --from=buildtools ["${IMPL_ARTIFACTS_DIR}" , "C:/BuildTools" ]
114+ COPY --link --from=cmake ["${IMPL_ARTIFACTS_DIR}" , "C:/CMake" ]
115+ COPY --link --from=python ["${IMPL_ARTIFACTS_DIR}" , "C:/Python" ]
116+ COPY --link --from=ninja ["${IMPL_ARTIFACTS_DIR}" , "C:/Ninja" ]
117+ COPY --link --from=nasm ["${IMPL_ARTIFACTS_DIR}" , "C:/Nasm" ]
118+ COPY --link --from=git ["${IMPL_ARTIFACTS_DIR}" , "C:/Git" ]
49119
50- RUN mkdir C:\T emp && cd C:\T emp && mkdir "%CMAKE_DIR%" && curl -SL --output cmake.zip %CMAKE_URL% && tar -xf cmake.zip -C "%CMAKE_DIR%" && del cmake.zip
51- RUN cd C:\T emp && mkdir "%PYTHON_DIR%" && curl -SL --output python.zip %PYTHON_URL% && tar -xf python.zip -C "%PYTHON_DIR%" && del python.zip
52- RUN cd C:\T emp && mkdir "%NINJA_DIR%" && curl -SL --output ninja.zip %NINJA_URL% && tar -xf ninja.zip -C "%NINJA_DIR%" && del ninja.zip
53- RUN cd C:\T emp && mkdir "%NASM_DIR%" && curl -SL --output nasm.zip %NASM_URL% && tar -xf nasm.zip -C "%NASM_DIR%" && del nasm.zip
120+ ARG CMAKE_VERSION
121+ ARG PYTHON_VERSION
122+ ARG NINJA_VERSION
123+ ARG NASM_VERSION
124+ ARG GIT_VERSION
125+ ARG WINDOWS_11_SDK_VERSION
126+ ARG WINDOWS_SDK_VERSION
127+ ARG VC_VERSION
128+ ARG MSVC_VERSION
54129
55- RUN cd %BUILD_TOOLS_DIR% && "%PYTHON_DIR%\p ython.exe" -c "import json, os; env=json.load(open('./env.json')); [os.system(f'setx {k} \" {v}\" ') for k,v in env.items()]" `
56- && setx PATH "%CMAKE_DIR%\c make-%CMAKE_VERSION%-windows-x86_64\b in;%PYTHON_DIR%;%NINJA_DIR%;%NASM_DIR%\n asm-%NASM_VERSION%;%PATH%" `
57- && setx MSVC_TOOLSET_DIR "%BUILD_TOOLS_DIR%\V C\T ools\M SVC\% MSVC_VERSION%"
130+ USER ContainerAdministrator
131+ ENV CMAKE_WINDOWS_KITS_10_DIR="C:\W indowsKits10SDK" `
132+ CMAKE_VERSION=${CMAKE_VERSION} `
133+ PYTHON_VERSION=${PYTHON_VERSION} `
134+ NINJA_VERSION=${NINJA_VERSION} `
135+ NASM_VERSION=${NASM_VERSION} `
136+ GIT_VERSION=${GIT_VERSION} `
137+ WINDOWS_11_SDK_VERSION=${WINDOWS_11_SDK_VERSION} `
138+ WINDOWS_SDK_VERSION=${WINDOWS_SDK_VERSION} `
139+ VC_VERSION=${VC_VERSION} `
140+ MSVC_VERSION=${MSVC_VERSION} `
141+ MSVC_TOOLSET_DIR=C:\B uildTools\V C\T ools\M SVC\$ {MSVC_VERSION} `
142+ 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};"
58143
59- SHELL ["cmd" , "/c" ]
60- ENTRYPOINT ["cmd" ]
61- CMD ["/noexit" ]
144+ CMD ["pwsh.exe" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" ]
0 commit comments