init
commit
8320dfbb2a
|
@ -0,0 +1,3 @@
|
|||
.vscode/
|
||||
*.exe
|
||||
*.chman
|
|
@ -0,0 +1,16 @@
|
|||
# escape=`
|
||||
FROM mcr.microsoft.com/windows/servercore:2004
|
||||
|
||||
ADD https://aka.ms/vs/16/release/channel C:\docker\visualstudio.release.chman
|
||||
ADD https://aka.ms/vs/16/release/vs_buildtools.exe C:\docker\vs_buildtools.exe
|
||||
COPY vs16.config C:\docker\.vsconfig
|
||||
|
||||
RUN C:\docker\vs_buildtools.exe --quiet --wait --norestart --nocache `
|
||||
--channelUri C:\docker\visualstudio.release.chman `
|
||||
--installChannelUri C:\docker\visualstudio.release.chman `
|
||||
--config "C:\docker\.vsconfig" `
|
||||
--installPath C:\msvc
|
||||
|
||||
VOLUME C:\source\
|
||||
WORKDIR C:\source\
|
||||
CMD ["powershell", "-NoExit", "-Command", "Import-Module C:\\msvc\\Common7\\Tools\\Microsoft.VisualStudio.DevShell.dll;", "Enter-VsDevShell -Verbose -VsInstallPath C:\\msvc\\ -DevCmdArguments -arch=amd64"]
|
|
@ -0,0 +1,82 @@
|
|||
# Visual Studio Build Tools Container
|
||||
|
||||
This project builds a minimal (ish) Docker container for the Visual Studio build tools (MSVC).
|
||||
A second image is constructed for Windows XP Visual Studio build tools (v141_xp).
|
||||
Powershell scripts are included to try and recreate these build environments directly on a Windows 10 workstation.
|
||||
|
||||
# Requirements
|
||||
|
||||
A Windows 10 workstation or VM with minimum 8 GB of memory is required.
|
||||
The more concurrent containers you have running, the more memory and CPU cores is required.
|
||||
|
||||
**Each container requires one core and approximately 4 GB of memory.**
|
||||
|
||||
0. Download and install [Docker for Windows](https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe).
|
||||
|
||||
- Select "Switch to Windows Containers" when prompted.
|
||||
|
||||
# Build Image
|
||||
|
||||
Prior to running a container the Docker image will need to be built.
|
||||
This step is automated but time consuming.
|
||||
It only needs to be built once.
|
||||
|
||||
0. Open powershell and navigate to this project.
|
||||
|
||||
0. Run docker compose with the configuration provided by this project in `docker-compose.yaml`
|
||||
|
||||
```bash
|
||||
docker-compose build
|
||||
```
|
||||
|
||||
This will install both the Windows v142 and Windows XP v141_xp build chains into their respective containers.
|
||||
|
||||
Reference these containers later with the names:
|
||||
|
||||
- win_build
|
||||
|
||||
- winxp_build
|
||||
|
||||
# Run Containers
|
||||
|
||||
It is recommend that a docker compose file is used to run these containers as paths on Windows can be a bit tricky.
|
||||
Make sure to use forward slashes in paths used within docker compose files.
|
||||
|
||||
Below is an example `docker-compose.yaml` file used to build a project configured with cmake.
|
||||
|
||||
```yaml
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
win64_build_release:
|
||||
image: win_build
|
||||
volumes:
|
||||
- .:C:/source/
|
||||
command: msbuild .
|
||||
```
|
||||
|
||||
- `volumes:` are mounted within the Docker container.
|
||||
|
||||
- `C:/source/` is assumed to be the project being build with MSVC.
|
||||
|
||||
- `command:` passes arguments to `Microsoft.VisualStudio.DevShell` unless entrypoint is otherwise defined.
|
||||
|
||||
To build a Windows XP project use the `image: winxp_build` container image.
|
||||
|
||||
# Build Your Windows Project
|
||||
|
||||
The above `docker-compose.yaml` file should be stored within your project and will reference the built Docker images by name, not by path.
|
||||
Once this file is created within your project run the following command to begin the build process.
|
||||
|
||||
```bash
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
# Optional Workstation Scripts
|
||||
|
||||
We have done our best to provide powershell scripts that should reproduce these build environments on a Windows 10 workstation.
|
||||
They can be ran but should be evaluated as there is no error checking.
|
||||
|
||||
- [win_build_tools_install.ps1](win_build_tools_install.ps1)
|
||||
|
||||
- [winxp_build_tools_install.ps1](winxp_build_tools_install.ps1)
|
|
@ -0,0 +1,19 @@
|
|||
version: '3'
|
||||
|
||||
services:
|
||||
win_build:
|
||||
image: win_build
|
||||
build:
|
||||
context: .
|
||||
volumes:
|
||||
- .:C:/source/
|
||||
command: msbuild .
|
||||
|
||||
winxp_build:
|
||||
image: winxp_build
|
||||
build:
|
||||
context: .
|
||||
dockerfile: winxp.Dockerfile
|
||||
volumes:
|
||||
- .:C:/source/
|
||||
command: msbuild .
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.VisualStudio.Workload.VCTools",
|
||||
"Microsoft.VisualStudio.ComponentGroup.NativeDesktop.WinXP"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.VisualStudio.Workload.VCTools",
|
||||
"Microsoft.VisualStudio.Component.NuGet",
|
||||
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
|
||||
"Microsoft.VisualStudio.Component.Windows10SDK.18362"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
param([parameter()][string] $msvc="C:\msvc")
|
||||
|
||||
new-item -path $msvc -type directory -force
|
||||
new-item -path "temp" -type directory -force
|
||||
|
||||
invoke-webrequest https://aka.ms/vs/16/release/channel -outfile temp\visualstudio.release.chman
|
||||
invoke-webrequest https://aka.ms/vs/16/release/vs_buildtools.exe -outfile temp\vs_buildtools.exe
|
||||
|
||||
$arguments = @(
|
||||
"--quiet", "--wait", "--norestart", "--nocache",
|
||||
"--channeluri", ($pwd.path + "\temp\visualstudio.release.chman"),
|
||||
"--installchanneluri", ($pwd.path + "\temp\visualstudio.release.chman"),
|
||||
"--config", ($pwd.path + "\vs16.config"),
|
||||
"--installpath", "$msvc"
|
||||
)
|
||||
|
||||
$proc = Start-Process -FilePath "temp\vs_buildtools.exe" -ArgumentList $arguments
|
||||
$proc.WaitForExit()
|
||||
Remove-Item "temp" -Recurse
|
||||
|
||||
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";$msvc", "Machine")
|
|
@ -0,0 +1,16 @@
|
|||
# escape=`
|
||||
FROM mcr.microsoft.com/windows/servercore:2004
|
||||
|
||||
ADD https://aka.ms/vs/15/release/channel C:\docker\visualstudio.release.chman
|
||||
ADD https://aka.ms/vs/15/release/vs_buildtools.exe C:\docker\vs_buildtools.exe
|
||||
COPY vs15.config C:\docker\.vsconfig
|
||||
|
||||
RUN C:\docker\vs_buildtools.exe --quiet --wait --norestart --nocache `
|
||||
--channelUri C:\docker\visualstudio.release.chman `
|
||||
--installChannelUri C:\docker\visualstudio.release.chman `
|
||||
--config "C:\docker\.vsconfig" `
|
||||
--installPath C:\msvc
|
||||
|
||||
VOLUME C:\source\
|
||||
WORKDIR C:\source\
|
||||
CMD ["powershell", "-NoExit", "-Command", "Import-Module C:\\msvc\\Common7\\Tools\\Microsoft.VisualStudio.DevShell.dll;", "Enter-VsDevShell -Verbose -VsInstallPath C:\\msvc\\ -DevCmdArguments -arch=amd64"]
|
|
@ -0,0 +1,21 @@
|
|||
param([parameter()][string] $msvc="C:\msvc")
|
||||
|
||||
new-item -path $msvc -type directory -force
|
||||
new-item -path "temp" -type directory -force
|
||||
|
||||
invoke-webrequest https://aka.ms/vs/15/release/channel -outfile temp\visualstudio.release.chman
|
||||
invoke-webrequest https://aka.ms/vs/15/release/vs_buildtools.exe -outfile temp\vs_buildtools.exe
|
||||
|
||||
$arguments = @(
|
||||
"--quiet", "--wait", "--norestart", "--nocache",
|
||||
"--channeluri", ($pwd.path + "\temp\visualstudio.release.chman"),
|
||||
"--installchanneluri", ($pwd.path + "\temp\visualstudio.release.chman"),
|
||||
"--config", ($pwd.path + "\vs15.config"),
|
||||
"--installpath", "$msvc"
|
||||
)
|
||||
|
||||
$proc = Start-Process -FilePath "temp\vs_buildtools.exe" -ArgumentList $arguments
|
||||
$proc.WaitForExit()
|
||||
Remove-Item "temp" -Recurse
|
||||
|
||||
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";$msvc", "Machine")
|
Loading…
Reference in New Issue