| # 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). No |
| # ${CI_COMMIT_REF_SLUG} in the keys: pipelines share one cache pool per |
| # EIGEN_CI_CCACHE_POOL, 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] |