# Linux-specific builder configurations and build commands ## Base images ### Release .linux_prep_source: image: "fedora:40" 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"' .needs_centos7_x86_64: dependencies: - b:centos7-x86_64 needs: - b:centos7-x86_64 .needs_centos7_aarch64: dependencies: - b:centos7-aarch64 needs: - b:centos7-aarch64 ### Debian .debian12: image: "kitware/cmake:ci-debian12-x86_64-2024-03-04" 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-2023-07-27" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CMAKE_ARCH: aarch64 ### Fedora .fedora40: image: "kitware/cmake:ci-fedora40-x86_64-2024-07-23" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci/long file name for testing purposes" CMAKE_ARCH: x86_64 # FIXME(#25932): Our HIP tests do not fully work in CI with Fedora 40. .fedora39_hip: image: "kitware/cmake:ci-fedora39-hip-x86_64-2024-04-24" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CMAKE_ARCH: x86_64 #### Lint builds .fedora40_tidy: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_tidy CMAKE_CI_NO_INSTALL: 1 .fedora40_clang_analyzer: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_clang_analyzer CMAKE_CI_BUILD_TYPE: Debug CTEST_NO_WARNINGS_ALLOWED: 1 CMAKE_CI_NO_INSTALL: 1 .fedora40_sphinx: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_sphinx CTEST_NO_WARNINGS_ALLOWED: 1 CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx" CMAKE_CI_NO_INSTALL: 1 .fedora40_sphinx_package: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_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 .fedora40_extdeps: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_extdeps CMAKE_CI_BUILD_TYPE: Release CTEST_NO_WARNINGS_ALLOWED: 1 .fedora40_ninja: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_ninja CMAKE_CI_BUILD_TYPE: Release CTEST_NO_WARNINGS_ALLOWED: 1 .fedora40_ninja_multi: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_ninja_multi CTEST_NO_WARNINGS_ALLOWED: 1 CMAKE_GENERATOR: "Ninja Multi-Config" .fedora40_makefiles: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_makefiles CTEST_NO_WARNINGS_ALLOWED: 1 CMAKE_GENERATOR: "Unix Makefiles" .fedora40_makefiles_symlinked: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_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 .fedora40_makefiles_clang: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_makefiles_clang CMAKE_GENERATOR: "Unix Makefiles" .fedora40_makefiles_lfortran: extends: .fedora40 variables: # FIXME(lfortran): -rpath flags with spaces not forwarded GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci" CMAKE_CONFIGURATION: fedora40_makefiles_lfortran CMAKE_GENERATOR: "Unix Makefiles" CTEST_LABELS: "Fortran" .fedora40_ninja_lfortran: extends: .fedora40 variables: # FIXME(lfortran): -rpath flags with spaces not forwarded GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci" CMAKE_CONFIGURATION: fedora40_ninja_lfortran CTEST_LABELS: "Fortran" .fedora40_ninja_clang: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_ninja_clang .fedora40_ninja_multi_clang: extends: .fedora40 variables: CMAKE_CONFIGURATION: fedora40_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: "" .fedora40_asan: extends: - .fedora40 - .fedora_asan_addon variables: CMAKE_CONFIGURATION: fedora40_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-nvhpc22.11-x86_64-2022-12-06" 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-04-05" 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 ### HIP builds .hip5.5: image: "kitware/cmake:ci-hip5.5-x86_64-2023-09-18" variables: GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci" CMAKE_ARCH: x86_64 CTEST_LABELS: "HIP" .hip5.5_radeon: extends: .hip5.5 variables: CMAKE_CONFIGURATION: hip5.5_radeon CMAKE_GENERATOR: "Ninja Multi-Config" .debian12_hip_radeon: extends: .debian12 variables: CMAKE_CONFIGURATION: debian12_hip_radeon CTEST_LABELS: "HIP" .fedora39_hip_radeon: extends: .fedora39_hip variables: CMAKE_CONFIGURATION: fedora39_hip_radeon CTEST_LABELS: "HIP" .hip5.5_nvidia: extends: .hip5.5 variables: CMAKE_CONFIGURATION: hip5.5_nvidia CTEST_LABELS: "HIP" ### 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_tags_x11: tags: - cmake - docker - linux-x86_64 - x11 .linux_x86_64_tags_cuda: tags: - cmake - cuda-rt - docker - linux-x86_64 .linux_x86_64_v3_tags_cuda: tags: - cmake - cuda-rt - docker - linux-x86_64-v3 .linux_x86_64_tags_radeon: tags: - cmake - radeon - 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_codespell_linux: stage: build extends: .fedora40 script: - .gitlab/ci/codespell.sh 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" ### Documentation .cmake_org_help: stage: build extends: - .fedora40 - .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 # FIXME(#25175): non-main index entries are scored too high. - sed -i '/search for explicit entries in index directives/,/^$/d' html/_static/searchtools.js