blob: 426286ebe07d845ce9dd24df7c5fa2bf3cb94215 [file] [log] [blame]
# escape=`
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# NOTE: To build this Dockerfile, you probably need to do the following two
# things:
#
# 1. Increase your container image size to a higher value.
#
# e.g.,
#
# Set a custom 'storage-opts' value in your Windows Docker config and restart
# Docker:
#
# "storage-opts": [
# "size=50GB"
# ]
#
# See
#
# https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/container-storage#example
#
# for details on this step and
#
# https://learn.microsoft.com/en-us/visualstudio/install/build-tools-container?view=vs-2022#troubleshoot-build-tools-containers
#
# for more information.
#
# 2. Increase the memory limit for the build container to at least 4GB.
#
# e.g.,
#
# docker build -t sometag -m 4GB --file `
# .\ci\docker\python-wheel-windows-vs2022-base.dockerfile .
# NOTE: You must update PYTHON_WHEEL_WINDOWS_IMAGE_REVISION in .env
# when you update this file.
FROM mcr.microsoft.com/windows/servercore:ltsc2022
# Ensure we in a command shell and not Powershell
SHELL ["cmd", "/S", "/C"]
# Install MSVC BuildTools
#
# The set of components below (lines starting with --add) is the most minimal
# set we could find that would still compile Arrow C++.
RUN `
curl -SL --output vs_buildtools.exe https://aka.ms/vs/17/release/vs_buildtools.exe `
&& (start /w vs_buildtools.exe --quiet --wait --norestart --nocache `
--installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" `
--add Microsoft.VisualStudio.Component.VC.CoreBuildTools `
--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
--add Microsoft.VisualStudio.Component.Windows11SDK.26100 `
--add Microsoft.VisualStudio.Component.VC.CMake.Project `
|| IF "%ERRORLEVEL%"=="3010" EXIT 0) `
&& del /q vs_buildtools.exe
# Install choco CLI
#
# Switch into Powershell just for the following commands because choco and Python install manager (MSIX)
# only provide a Powershell installation scripts. After, we switch back to cmd.
#
# See https://chocolatey.org/install#completely-offline-install
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
RUN `
Set-ExecutionPolicy Bypass -Scope Process -Force; `
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; `
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# Install the Python install manager
#
# See https://docs.python.org/dev/using/windows.html#python-install-manager and
# https://www.python.org/ftp/python/pymanager/
RUN `
$pymanager_url = 'https://www.python.org/ftp/python/pymanager/python-manager-25.0.msi'; `
Invoke-WebRequest -Uri $pymanager_url -OutFile 'C:\Windows\pymanager.msi'; `
Start-Process msiexec.exe -Wait -ArgumentList '/i C:\Windows\pymanager.msi /quiet /norestart'; `
Remove-Item C:\Windows\pymanager.msi
SHELL ["cmd", "/S", "/C"]
# Install CMake and other tools
ARG cmake=3.31.9
RUN choco install --no-progress -r -y cmake --version=%cmake% --installargs 'ADD_CMAKE_TO_PATH=System'
RUN choco install --no-progress -r -y git gzip ninja wget
# Add UNIX tools to PATH
RUN setx path "%path%;C:\Program Files\Git\usr\bin"
# Install vcpkg
#
# Compiling vcpkg itself from a git tag doesn't work anymore since vcpkg has
# started to ship precompiled binaries for the vcpkg-tool.
ARG vcpkg
COPY ci/vcpkg/*.patch `
ci/vcpkg/*windows*.cmake `
arrow/ci/vcpkg/
COPY ci/scripts/install_vcpkg.sh arrow/ci/scripts/
ENV VCPKG_ROOT=C:\\vcpkg
RUN bash arrow/ci/scripts/install_vcpkg.sh /c/vcpkg %vcpkg% && `
setx PATH "%PATH%;%VCPKG_ROOT%"
# Configure vcpkg and install dependencies
# NOTE: use windows batch environment notation for build arguments in RUN
# statements but bash notation in ENV statements
# VCPKG_FORCE_SYSTEM_BINARIES=1 spare around ~750MB of image size if the system
# cmake's and ninja's versions are recent enough
ARG build_type=release
ENV CMAKE_BUILD_TYPE=${build_type} `
VCPKG_OVERLAY_TRIPLETS=C:\\arrow\\ci\\vcpkg `
VCPKG_DEFAULT_TRIPLET=amd64-windows-static-md-${build_type} `
VCPKG_FEATURE_FLAGS="manifests"
COPY ci/vcpkg/vcpkg.json arrow/ci/vcpkg/
# cannot use the S3 feature here because while aws-sdk-cpp=1.9.160 contains
# ssl related fixes as well as we can patch the vcpkg portfile to support
# arm machines it hits ARROW-15141 where we would need to fall back to 1.8.186
# but we cannot patch those portfiles since vcpkg-tool handles the checkout of
# previous versions => use bundled S3 build
RUN vcpkg install `
--clean-after-build `
--x-install-root=%VCPKG_ROOT%\installed `
--x-manifest-root=arrow/ci/vcpkg `
--x-feature=flight`
--x-feature=gcs`
--x-feature=json`
--x-feature=orc`
--x-feature=parquet`
--x-feature=s3