blob: a65434f002cd60ef1fe83a70063e0d9a6a014b0c [file]
# Base configuration for windows builds.
# SPDX-FileCopyrightText: The Eigen Authors
# SPDX-License-Identifier: MPL-2.0
.build:windows:
needs: []
extends: [ .common:windows, .artifacts:windows:builddir ]
stage: build
variables:
EIGEN_CI_BUILD_TARGET: buildtests
# Reduce overall build size and compile time.
# Note: /d2ReducedOptimizeHugeFunctions is only available in VS 2019.
EIGEN_CI_TEST_CUSTOM_CXX_FLAGS: "/d2ReducedOptimizeHugeFunctions;/DEIGEN_STRONG_INLINE=inline;/Os"
# "off" disables the ccache compiler launchers (see
# build.windows.script.ps1). The script downloads a pinned,
# SHA-256-verified ccache when the runner has none; if that also fails,
# the job builds exactly as before.
EIGEN_CI_CCACHE: "on"
CCACHE_DIR: ${CI_PROJECT_DIR}/.ccache
# Runner-local cache, so no archive-size limit applies; 4G holds a full
# MSVC buildtests run with headroom and only bounds runner disk use.
CCACHE_MAXSIZE: 4G
# Hash compile paths relative to the project directory: absolute paths are
# part of ccache's hash, so without this a checkout-path change (runner
# layout, concurrent build slots) turns every compile into a miss.
CCACHE_BASEDIR: ${CI_PROJECT_DIR}
# Don't re-compress the already-zstd-compressed ccache payload when
# archiving; see the Linux build template for the measured rationale.
FF_USE_FASTZIP: "true"
CACHE_COMPRESSION_LEVEL: "fastest"
# ccache pool name; see the Linux build template.
EIGEN_CI_CCACHE_POOL: $CI_JOB_NAME_SLUG
script:
- ./ci/scripts/build.windows.script.ps1
tags:
- eigen-runner
- windows
- x86-64
rules: !reference [.rules:libeigen:all-tests, rules]
# Cache the ccache directory, not ${EIGEN_CI_BUILDDIR}, mirroring
# build.linux.gitlab-ci.yml: ccache keys on file content and compiler, so
# hits survive a re-checkout that re-stamps every source mtime (which made
# the old build-directory cache rebuild everything anyway). Deliberately not
# scoped by EIGEN_CI_CCACHE_SCOPE the way the Linux template is: the Windows
# runner has no shared cache server, so every archive is runner-local and
# nothing ever evicts one. Shared pools are bounded at one archive per job;
# per-merge-request pools would grow without bound, by four MSVC pools per
# `all-tests` merge request (22 of them in the 60 days to 2026-09-03), for
# little gain -- Windows builds run only under a label, so a merge request
# seldom builds here twice. Keys stay split by GitLab's protection suffix as
# described in the Linux template. Both entries push even when the build fails
# (when: always): the retry pipeline after a compile error is exactly where
# hits matter most.
cache:
# The pinned ccache binary the build script downloads when the runner has
# none; one shared key so a runner downloads it once for all build jobs.
# Cache content is writable job output, not a trusted source: the script
# re-verifies the binary's SHA-256 on every use before executing it.
- key: "windows-ccache-bin"
paths:
- .ccache-bin/
when: always
- key: "$EIGEN_CI_CCACHE_POOL-ccache"
paths:
- .ccache/
when: always
######### MSVC #################################################################
# MSVC 14.29 (VS 2019) 32 bit
build:windows:x86:msvc-14.29:default:
extends: .build:windows
variables:
EIGEN_CI_MSVC_ARCH: "x64_x86"
# MSVC 14.29 (VS 2019) 64 bit
build:windows:x86-64:msvc-14.29:default:
extends: .build:windows
build:windows:x86-64:msvc-14.29:avx2:
extends: .build:windows
variables:
EIGEN_CI_ADDITIONAL_ARGS: "-DEIGEN_TEST_AVX2=on"
build:windows:x86-64:msvc-14.29:avx512dq:
extends: .build:windows
variables:
EIGEN_CI_ADDITIONAL_ARGS: "-DEIGEN_TEST_AVX512DQ=on"
# MSVC 14.29 (VS 2019) + CUDA
.build:windows:cuda:
extends: .build:windows
# The .cu compiles reach the launcher through the .bat wrapper that
# ei_cuda_use_compiler_launcher() puts in front of nvcc; see the Linux CUDA
# template for the rationale.
variables:
# The GPU in the Windows CUDA runner (eigen-windows-testing-001.gcloud) is
# a Tesla L4, sm_89. Eigen has no architecture-dependent device code
# between sm_75 and sm_89, so a second architecture would only double the
# device compile time on a single self-hosted runner. CUDA 13 dropped
# offline compilation for Volta and older; nothing below sm_75 can be
# listed here any more.
EIGEN_CI_CUDA_COMPUTE_ARCH: "89"
EIGEN_CI_BUILD_TARGET: buildtests_gpu
EIGEN_CI_ADDITIONAL_ARGS:
-DEIGEN_TEST_CUDA=on
-DEIGEN_CUDA_COMPUTE_ARCH=${EIGEN_CI_CUDA_COMPUTE_ARCH}
# Name the GPU and driver on this runner first; the arch list above has to
# match it.
before_script:
- nvidia-smi
- . ci/scripts/common.windows.before_script.ps1
rules: !reference [.rules:libeigen:gpu, rules]
tags:
- eigen-runner
- windows
- x86-64
- cuda
# MSVC 14.29 + CUDA 13.0
build:windows:x86-64:cuda-13.0:msvc-14.29:
extends: .build:windows:cuda
variables:
# Pin the toolkit and fail when it is absent. With CUDA_PATH empty,
# FindCUDA falls through to whichever nvcc is first on PATH and the job
# silently builds with a toolkit other than the one in its name.
EIGEN_CI_BEFORE_SCRIPT: >-
if (-not $$env:CUDA_PATH_V13_0) { throw 'CUDA 13.0 is not installed on this runner' };
$$env:CUDA_PATH=$$env:CUDA_PATH_V13_0
######### MR Affected Tests ####################################################
# Opt-in via `affected-tests` plus `windows-tests` or `all-platforms`; see
# .rules:libeigen:affected-tests:windows in ci/common.gitlab-ci.yml. Only MSVC
# x64 at baseline ISA; the wider Windows matrix stays in `all-tests`.
build:windows:x86-64:msvc-14.29:default:affected:
extends: [ build:windows:x86-64:msvc-14.29:default, .affected:build ]
variables:
EIGEN_CI_CCACHE_POOL: build-windows-x86-64-msvc-14-29-default
rules: !reference [.rules:libeigen:affected-tests:windows, rules]