1
+ # syntax=docker/dockerfile:1
1
2
# escape=`
2
3
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
4
18
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
8
21
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
10
26
11
27
RUN mkdir C:\T emp && cd C:\T emp `
12
28
&& curl -SL --output vs_buildtools.exe https://aka.ms/vs/17/release/vs_buildtools.exe `
13
29
&& (start /w vs_buildtools.exe --quiet --wait --norestart --nocache `
14
30
--remove Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
15
31
--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.x86.x64 `
16
32
--add Microsoft.VisualStudio.Component.Windows11SDK.%WINDOWS_11_SDK_VERSION% `
17
- --installPath %BUILD_TOOLS_DIR % `
33
+ --installPath %IMPL_ARTIFACTS_DIR % `
18
34
|| 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" `
22
38
) else ( `
23
39
echo "Error: Expected MSVC version directory %MSVC_VERSION% does not exist!" && exit /b 1 `
24
40
)
25
41
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" ]
27
45
28
- FROM mcr.microsoft.com/windows/nanoserver:ltsc2022
46
+ ARG CMAKE_VERSION
47
+ ARG IMPL_ARTIFACTS_DIR
29
48
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
40
106
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" ]
43
110
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" ]
49
119
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
54
129
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};"
58
143
59
- SHELL ["cmd" , "/c" ]
60
- ENTRYPOINT ["cmd" ]
61
- CMD ["/noexit" ]
144
+ CMD ["pwsh.exe" , "-NoLogo" , "-NoProfile" , "-ExecutionPolicy" , "Bypass" ]
0 commit comments