# Linux-specific builder configurations and build commands ## Base images ### Release .linux_prep_source: image: "fedora:42" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" .linux_release_x86_64: image: "kitware/cmake:build-linux-x86_64-deps-2023-08-16@sha256:aa0ebdbd90a51cc83d31f393c5c48ec4599a28f7ccdc288558522c6265b24fae" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" LAUNCHER: "scl enable devtoolset-7 --" CMAKE_ARCH: x86_64 .linux_release_aarch64: image: "kitware/cmake:build-linux-aarch64-deps-2020-12-21@sha256:0bd7dfe4e45593b04e39cd21e44011034610cfd376900558c5ef959bb1af15af" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" LAUNCHER: "scl enable devtoolset-7 --" CMAKE_ARCH: aarch64 .linux_package: variables: BOOTSTRAP_ARGS: '-- "-DCMake_DOC_ARTIFACT_PREFIX=$CI_PROJECT_DIR/build/install-doc"' .sunos_release_x86_64: image: "kitware/cmake:build-sunos-x86_64-deps-2025-02-27" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CMAKE_ARCH: x86_64 .sunos_release_sparc64: image: "kitware/cmake:build-sunos-sparc64-deps-2025-02-27" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CMAKE_ARCH: sparc64 .sunos_package: variables: CMake_DOC_ARTIFACT_PREFIX: "$CI_PROJECT_DIR/build/install-doc" .needs_centos7_x86_64: needs: - b:centos7-x86_64 .needs_centos7_aarch64: needs: - b:centos7-aarch64 ### Debian .debian12: image: "kitware/cmake:ci-debian12-x86_64-2025-03-31" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CMAKE_ARCH: x86_64 .debian12_iwyu: extends: .debian12 variables: CMAKE_CONFIGURATION: debian12_iwyu CTEST_NO_WARNINGS_ALLOWED: 1 CMAKE_CI_NO_INSTALL: 1 .debian12_aarch64: image: "kitware/cmake:ci-debian12-aarch64-2025-03-31" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CMAKE_ARCH: aarch64 ### Fedora .fedora42: image: "kitware/cmake:ci-fedora42-x86_64-2025-04-22" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci/long file name for testing purposes" CMAKE_ARCH: x86_64 .fedora42_hip: image: "kitware/cmake:ci-fedora42-hip-x86_64-2025-04-22" variables: # FIXME(rocclr): device modules fail loading from binaries in paths with spaces GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci" CMAKE_ARCH: x86_64 #### Lint builds .fedora42_tidy: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_tidy CMAKE_CI_NO_INSTALL: 1 .fedora42_clang_analyzer: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_clang_analyzer CMAKE_CI_BUILD_TYPE: Debug CTEST_NO_WARNINGS_ALLOWED: 1 CMAKE_CI_NO_INSTALL: 1 .fedora42_sphinx: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_sphinx CTEST_NO_WARNINGS_ALLOWED: 1 CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx" CMAKE_CI_NO_INSTALL: 1 .fedora42_sphinx_package: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_sphinx_package CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx" #### Build and test .debian12_ninja: extends: .debian12 variables: CMAKE_CONFIGURATION: debian12_ninja CTEST_NO_WARNINGS_ALLOWED: 1 .debian12_aarch64_ninja: extends: .debian12_aarch64 variables: CMAKE_CONFIGURATION: debian12_aarch64_ninja CTEST_NO_WARNINGS_ALLOWED: 1 .debian12_makefiles_inplace: extends: .debian12 variables: CMAKE_CONFIGURATION: debian12_makefiles_inplace CMAKE_GENERATOR: "Unix Makefiles" CMAKE_CI_BOOTSTRAP: 1 CMAKE_CI_INPLACE: 1 CMAKE_CI_NO_INSTALL: 1 CTEST_NO_WARNINGS_ALLOWED: 1 .debian12_ninja_multi_symlinked: extends: .debian12 variables: CMAKE_CONFIGURATION: debian12_ninja_multi_symlinked CMAKE_GENERATOR: "Ninja Multi-Config" CTEST_NO_WARNINGS_ALLOWED: 1 CMAKE_CI_IN_SYMLINK_TREE: 1 CMAKE_CI_BUILD_DIR: "real_work/work/build" .debian12_extdeps: extends: .debian12 variables: CMAKE_CONFIGURATION: debian12_extdeps CMAKE_CI_BUILD_TYPE: Release CTEST_NO_WARNINGS_ALLOWED: 1 .debian12_aarch64_extdeps: extends: .debian12_aarch64 variables: CMAKE_CONFIGURATION: debian12_aarch64_extdeps CMAKE_CI_BUILD_TYPE: Release CTEST_NO_WARNINGS_ALLOWED: 1 .fedora42_extdeps: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_extdeps CMAKE_CI_BUILD_TYPE: Release CTEST_NO_WARNINGS_ALLOWED: 1 .fedora42_ninja: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_ninja CMAKE_CI_BUILD_TYPE: Release CTEST_NO_WARNINGS_ALLOWED: 1 .fedora42_ninja_multi: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_ninja_multi CTEST_NO_WARNINGS_ALLOWED: 1 CMAKE_GENERATOR: "Ninja Multi-Config" .fedora42_makefiles: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_makefiles CTEST_NO_WARNINGS_ALLOWED: 1 CMAKE_GENERATOR: "Unix Makefiles" .fedora42_makefiles_symlinked: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_makefiles_symlinked CTEST_NO_WARNINGS_ALLOWED: 1 CMAKE_GENERATOR: "Unix Makefiles" CMAKE_CI_IN_SYMLINK_TREE: 1 CMAKE_CI_BUILD_DIR: "real_work/work/build" ### Clang Compiler .debian12_makefiles_clang: extends: .debian12 variables: CMAKE_CONFIGURATION: debian12_makefiles_clang CMAKE_GENERATOR: "Unix Makefiles" .debian12_ninja_clang: extends: .debian12 variables: CMAKE_CONFIGURATION: debian12_ninja_clang .fedora42_makefiles_clang: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_makefiles_clang CMAKE_GENERATOR: "Unix Makefiles" .fedora42_makefiles_lfortran: extends: .fedora42 variables: # FIXME(lfortran): -rpath flags with spaces not forwarded GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci" CMAKE_CONFIGURATION: fedora42_makefiles_lfortran CMAKE_GENERATOR: "Unix Makefiles" CTEST_LABELS: "Fortran" .fedora42_ninja_lfortran: extends: .fedora42 variables: # FIXME(lfortran): -rpath flags with spaces not forwarded GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci" CMAKE_CONFIGURATION: fedora42_ninja_lfortran CTEST_LABELS: "Fortran" .fedora42_ninja_clang: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_ninja_clang .fedora42_ninja_multi_clang: extends: .fedora42 variables: CMAKE_CONFIGURATION: fedora42_ninja_multi_clang CMAKE_GENERATOR: "Ninja Multi-Config" ### Sanitizers .fedora_memcheck: variables: CMAKE_CI_BUILD_TYPE: RelWithDebInfo .fedora_asan_addon: extends: .fedora_memcheck variables: CTEST_MEMORYCHECK_TYPE: AddressSanitizer CTEST_MEMORYCHECK_SANITIZER_OPTIONS: "" .fedora42_asan: extends: - .fedora42 - .fedora_asan_addon variables: CMAKE_CONFIGURATION: fedora42_asan ### Intel Compiler .intelcompiler: image: "kitware/intelcompiler:$CMAKE_CI_INTELCOMPILER_IMAGE_TAG" environment: name: intel-compiler variables: CMAKE_ARCH: x86_64 .intelclassic_makefiles: extends: .intelcompiler variables: CMAKE_CONFIGURATION: intelclassic_makefiles CMAKE_GENERATOR: "Unix Makefiles" .inteloneapi_makefiles: extends: .intelcompiler variables: CMAKE_CONFIGURATION: inteloneapi_makefiles CMAKE_GENERATOR: "Unix Makefiles" ### NVHPC Compiler .nvhpc: image: "kitware/cmake:ci-nvhpc24.9-x86_64-2024-09-27" variables: CMAKE_ARCH: x86_64 .nvhpc_ninja: extends: .nvhpc variables: CMAKE_CONFIGURATION: nvhpc_ninja ### CUDA builds .cuda: variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CTEST_LABELS: "CUDA" CMAKE_CUDA_ARCHITECTURES_NATIVE_CLAMP: 1 .cuda9.2: extends: .cuda image: "kitware/cmake:ci-cuda9.2-x86_64-2021-10-01" variables: CMAKE_ARCH: x86_64 .cuda9.2_nvidia: extends: .cuda9.2 variables: CMAKE_CONFIGURATION: cuda9.2_nvidia CMAKE_GENERATOR: "Ninja Multi-Config" .cuda10.2: extends: .cuda image: "kitware/cmake:ci-cuda10.2-x86_64-2021-06-16" variables: CMAKE_ARCH: x86_64 .cuda10.2_nvidia: extends: .cuda10.2 variables: CMAKE_CONFIGURATION: cuda10.2_nvidia CTEST_NO_WARNINGS_ALLOWED: 1 .cuda10.2_clang: extends: .cuda10.2 variables: CMAKE_CONFIGURATION: cuda10.2_clang CTEST_NO_WARNINGS_ALLOWED: 1 .cuda11.6: extends: .cuda image: "kitware/cmake:ci-cuda11.6-x86_64-2022-02-28" variables: CMAKE_ARCH: x86_64 .cuda11.6_nvidia: extends: .cuda11.6 variables: CMAKE_CONFIGURATION: cuda11.6_nvidia CTEST_NO_WARNINGS_ALLOWED: 1 .cuda11.6_clang: extends: .cuda11.6 variables: CMAKE_CONFIGURATION: cuda11.6_clang CTEST_NO_WARNINGS_ALLOWED: 1 .cuda11.8_minimal: extends: .cuda image: "kitware/cmake:ci-cuda11.8-minimal-x86_64-2022-12-06" variables: CMAKE_ARCH: x86_64 .cuda11.8_minimal_nvidia: extends: .cuda11.8_minimal variables: CMAKE_CONFIGURATION: cuda11.8_minimal_nvidia CTEST_NO_WARNINGS_ALLOWED: 1 .cuda11.8_splayed_nvidia: extends: .cuda11.8_minimal variables: CMAKE_CONFIGURATION: cuda11.8_splayed_nvidia CTEST_NO_WARNINGS_ALLOWED: 1 .cuda12.2: extends: .cuda image: "kitware/cmake:ci-cuda12.2-x86_64-2024-09-25" variables: CMAKE_ARCH: x86_64 .cuda12.2_nvidia: extends: .cuda12.2 variables: CMAKE_CONFIGURATION: cuda12.2_nvidia CTEST_NO_WARNINGS_ALLOWED: 1 .cuda12.2_clang: extends: .cuda12.2 variables: CMAKE_CONFIGURATION: cuda12.2_clang CTEST_NO_WARNINGS_ALLOWED: 1 .cuda12.6: extends: .cuda image: "kitware/cmake:ci-cuda12.6-x86_64-2025-01-30" variables: CMAKE_ARCH: x86_64 .cuda12.6_nvidia: extends: .cuda12.6 variables: CMAKE_CONFIGURATION: cuda12.6_nvidia CTEST_NO_WARNINGS_ALLOWED: 1 .cuda12.6_nvidia_clang: extends: .cuda12.6 variables: CMAKE_CONFIGURATION: cuda12.6_nvidia_clang CTEST_NO_WARNINGS_ALLOWED: 1 .cuda12.6_clang: extends: .cuda12.6 variables: CMAKE_CONFIGURATION: cuda12.6_clang CTEST_NO_WARNINGS_ALLOWED: 1 ### HIP builds .hip6.3: image: "kitware/cmake:ci-hip6.3-x86_64-2025-02-14" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CMAKE_ARCH: x86_64 CTEST_LABELS: "HIP" .hip6.3_radeon: extends: .hip6.3 variables: # FIXME(rocclr): device modules fail loading from binaries in paths with spaces GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci" CMAKE_CONFIGURATION: hip6.3_radeon CMAKE_GENERATOR: "Ninja Multi-Config" .debian12_hip_radeon: extends: .debian12 variables: CMAKE_CONFIGURATION: debian12_hip_radeon CTEST_LABELS: "HIP" .fedora42_hip_radeon: extends: .fedora42_hip variables: CMAKE_CONFIGURATION: fedora42_hip_radeon CTEST_LABELS: "HIP" .hip6.3_nvidia: extends: .hip6.3 variables: CMAKE_CONFIGURATION: hip6.3_nvidia CTEST_LABELS: "HIP" ### C++ modules .gcc_cxx_modules_x86_64: image: "kitware/cmake:ci-gcc_cxx_modules-x86_64-2024-12-23" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CMAKE_ARCH: x86_64 CC: "/opt/gcc-importstd/bin/gcc" CXX: "/opt/gcc-importstd/bin/g++" .gcc_cxx_modules_ninja: extends: .gcc_cxx_modules_x86_64 variables: CMAKE_CONFIGURATION: linux_gcc_cxx_modules_ninja .gcc_cxx_modules_ninja_multi: extends: .gcc_cxx_modules_x86_64 variables: CMAKE_CONFIGURATION: linux_gcc_cxx_modules_ninja_multi CMAKE_GENERATOR: "Ninja Multi-Config" ### Debian 10 legacy packages .debian10: image: "kitware/cmake:ci-debian10-x86_64-2023-07-31" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CMAKE_ARCH: x86_64 .debian10_legacy: extends: .debian10 variables: CMAKE_CONFIGURATION: debian10_legacy CTEST_LABELS: "Python2" ## Tags .linux_x86_64_tags: tags: - cmake - build - docker - linux-x86_64 .linux_x86_64_v3_tags: tags: - cmake - build - docker - linux-x86_64-v3 .linux_x86_64_tags_x11: tags: - cmake - docker - linux-x86_64 - x11 .linux_x86_64_tags_cuda_arch_30: tags: - cmake - cuda-arch-30 - docker - linux-x86_64 .linux_x86_64_tags_cuda_arch_52: tags: - cmake - cuda-arch-52 - docker - linux-x86_64 .linux_x86_64_v3_tags_cuda_arch_52: tags: - cmake - cuda-arch-52 - docker - linux-x86_64-v3 .linux_x86_64_tags_rocm5.2: tags: - cmake - radeon - rocm-5.2 - docker - linux-x86_64 .linux_x86_64_tags_rocm6.2: tags: - cmake - radeon - rocm-6.2 - docker - linux-x86_64 .linux_x86_64_tags_rocm6.3: tags: - cmake - radeon - rocm-6.3 - docker - linux-x86_64 .linux_aarch64_tags: tags: - cmake - build - docker - linux-aarch64 ## Linux-specific scripts .before_script_linux: &before_script_linux - source .gitlab/ci/env.sh - source .gitlab/ci/cmake-env.sh - source .gitlab/ci/ninja-env.sh .cmake_prep_source_linux: stage: prep script: - *before_script_linux - dnf install --setopt=install_weak_deps=False -y git-core - v="$(.gitlab/ci/cmake_version.sh)" - mkdir -p build/ - git archive --format=tgz --prefix="cmake-$v/" -o "build/cmake-$v.tar.gz" HEAD - git archive --format=zip --prefix="cmake-$v/" -o "build/cmake-$v.zip" HEAD interruptible: true .cmake_prep_doc_linux: stage: prep script: - *before_script_linux - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_configure.cmake" - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_build.cmake" interruptible: true .cmake_version_update_linux: stage: build extends: .fedora42 script: - .gitlab/ci/cmake_version_update.sh interruptible: false # The job internally fetches and retries. .cmake_spellcheck_linux: stage: build extends: .fedora42 script: - .gitlab/ci/codespell.bash - .gitlab/ci/typos.bash interruptible: true .cmake_build_linux: stage: build script: - *before_script_linux - .gitlab/ci/sccache.sh - sccache --start-server - sccache --show-stats - .gitlab/ci/pre_build.sh - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_configure.cmake" - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_build.cmake" - .gitlab/ci/post_build.sh - sccache --show-stats interruptible: true .cmake_test_linux: stage: test script: - *before_script_linux - "$LAUNCHER ctest --output-on-failure -V -S .gitlab/ci/ctest_test.cmake" interruptible: true .cmake_memcheck_linux: stage: test script: - *before_script_linux - "$LAUNCHER ctest --output-on-failure -V -S .gitlab/ci/ctest_memcheck.cmake" interruptible: true .cmake_build_linux_release: stage: build script: - source .gitlab/ci/env.sh # Bootstrap. - mkdir -p build/ - cp Utilities/Release/linux/$CMAKE_ARCH/cache.txt build/CMakeCache.txt # Make sccache available. - source .gitlab/ci/sccache-env.sh # Append sccache settings to the cache. - echo "CMAKE_C_COMPILER_LAUNCHER:STRING=sccache" >> build/CMakeCache.txt - echo "CMAKE_CXX_COMPILER_LAUNCHER:STRING=sccache" >> build/CMakeCache.txt # CI settings. - echo "CMake_TEST_INSTALL:BOOL=OFF" >> build/CMakeCache.txt - echo "CMAKE_INSTALL_PREFIX:PATH=$PWD/build/install" >> build/CMakeCache.txt - echo "CMAKE_SKIP_INSTALL_ALL_DEPENDENCY:BOOL=ON" >> build/CMakeCache.txt # Appease Git. The Git in this container is old (1.7) and doesn't # understand some things. But, it doesn't need to, so make it blind. - mkdir -p .git/info - echo "* -crlf" >> .git/info/attributes - git reset --hard # Bootstrap - cd build/ - '$LAUNCHER ../bootstrap --parallel=$(nproc) --docdir=doc/cmake $BOOTSTRAP_ARGS' # FIXME: When CTest can drive an external CMake for the build as well, # use the scripts here. - "$LAUNCHER make -j$(nproc)" # NOTE: This regex matches that used in the release build. - "$LAUNCHER bin/ctest --output-on-failure -j$(nproc) -R '^(CMake\\.|CMakeLib\\.|RunCMake\\.ctest_memcheck)'" # Make a package. - bin/cpack -G TGZ - bin/cpack -G STGZ - sccache --show-stats interruptible: true .cmake_build_linux_standalone: stage: build script: - *before_script_linux - .gitlab/ci/sccache.sh - sccache --start-server - sccache --show-stats - "$LAUNCHER ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake" - sccache --show-stats interruptible: true .cmake_test_linux_release: stage: test-ext script: - *before_script_linux # Make the CMake package available. - mkdir -p build/install - tar -C build/install --strip-components=1 -xzf build/cmake-*-linux-$CMAKE_ARCH.tar.gz - .gitlab/ci/sccache.sh - sccache --start-server - sccache --show-stats - "$LAUNCHER build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake" - sccache --show-stats interruptible: true .cmake_test_linux_external: stage: test-ext script: - *before_script_linux - .gitlab/ci/sccache.sh - sccache --start-server - sccache --show-stats - "$LAUNCHER build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake" - sccache --show-stats interruptible: true .cmake_test_linux_intelclassic_makefiles: extends: - .intelclassic_makefiles - .cmake_test_linux_release - .linux_x86_64_tags - .run_manually - .needs_centos7_x86_64 variables: CMAKE_CI_JOB_NIGHTLY: "true" .cmake_test_linux_inteloneapi_makefiles: extends: - .inteloneapi_makefiles - .cmake_test_linux_release - .linux_x86_64_tags - .run_manually - .needs_centos7_x86_64 variables: CMAKE_CI_JOB_NIGHTLY: "true" .cmake_build_sunos_release: stage: build script: - *before_script_linux # SunOS sysroot - Utilities/Release/sunos/docker/sysroot.bash $CMAKE_ARCH # Initial cache - mkdir -p build/ - cp Utilities/Release/sunos/$CMAKE_ARCH/cache.txt build/CMakeCache.txt # Make sccache available. - source .gitlab/ci/sccache-env.sh - echo "CMAKE_C_COMPILER_LAUNCHER:STRING=sccache" >> build/CMakeCache.txt - echo "CMAKE_CXX_COMPILER_LAUNCHER:STRING=sccache" >> build/CMakeCache.txt # Build - cd build/ - cmake .. -GNinja -DCMAKE_DOC_DIR=doc/cmake -DCMake_DOC_ARTIFACT_PREFIX="$CMake_DOC_ARTIFACT_PREFIX" -DCMAKE_TOOLCHAIN_FILE="$CI_PROJECT_DIR/Utilities/Release/sunos/$CMAKE_ARCH/toolchain.cmake" - ninja # Package - cpack -G "TGZ;STGZ" - sccache --show-stats interruptible: true ### Documentation .cmake_org_help: stage: build extends: - .fedora42 - .linux_x86_64_tags - .cmake_org_help_artifacts script: - *before_script_linux - mkdir -p build/ - cd build/ - cmake ../Utilities/Sphinx -GNinja -DSPHINX_HTML=ON -DSPHINX_QTHELP=$CMAKE_CI_SPHINX_QTHELP -DCMake_SPHINX_CMAKE_ORG=ON -DCMake_SPHINX_CMAKE_ORG_OUTDATED=$CMAKE_CI_SPHINX_OUTDATED -DCMake_VERSION_NO_GIT=$CMAKE_CI_VERSION_NO_GIT - ninja