os-linux.yml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624
  1. # Linux-specific builder configurations and build commands
  2. ## Base images
  3. ### Release
  4. .linux_prep_source:
  5. image: "fedora:38"
  6. variables:
  7. GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
  8. .linux_release_x86_64:
  9. image: "kitware/cmake:build-linux-x86_64-deps-2020-04-02@sha256:77e9ab183f34680990db9da5945473e288f0d6556bce79ecc1589670d656e157"
  10. variables:
  11. GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
  12. LAUNCHER: "scl enable devtoolset-6 rh-python36 --"
  13. CMAKE_ARCH: x86_64
  14. .linux_release_aarch64:
  15. image: "kitware/cmake:build-linux-aarch64-deps-2020-12-21@sha256:0bd7dfe4e45593b04e39cd21e44011034610cfd376900558c5ef959bb1af15af"
  16. variables:
  17. GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
  18. LAUNCHER: "scl enable devtoolset-7 --"
  19. CMAKE_ARCH: aarch64
  20. .linux_package:
  21. variables:
  22. BOOTSTRAP_ARGS: '-- "-DCMake_DOC_ARTIFACT_PREFIX=$CI_PROJECT_DIR/build/install-doc"'
  23. .needs_centos6_x86_64:
  24. dependencies:
  25. - b:centos6-x86_64
  26. needs:
  27. - b:centos6-x86_64
  28. .needs_centos7_aarch64:
  29. dependencies:
  30. - b:centos7-aarch64
  31. needs:
  32. - b:centos7-aarch64
  33. ### Debian
  34. .debian12:
  35. image: "kitware/cmake:ci-debian12-x86_64-2023-07-27"
  36. variables:
  37. GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
  38. CMAKE_ARCH: x86_64
  39. .debian12_iwyu:
  40. extends: .debian12
  41. variables:
  42. CMAKE_CONFIGURATION: debian12_iwyu
  43. CTEST_NO_WARNINGS_ALLOWED: 1
  44. CMAKE_CI_NO_INSTALL: 1
  45. .debian12_aarch64:
  46. image: "kitware/cmake:ci-debian12-aarch64-2023-07-27"
  47. variables:
  48. GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
  49. CMAKE_ARCH: aarch64
  50. ### Fedora
  51. .fedora38:
  52. image: "kitware/cmake:ci-fedora38-x86_64-2023-05-22"
  53. variables:
  54. GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci/long file name for testing purposes"
  55. CMAKE_ARCH: x86_64
  56. #### Lint builds
  57. .fedora38_tidy:
  58. extends: .fedora38
  59. variables:
  60. CMAKE_CONFIGURATION: fedora38_tidy
  61. CTEST_NO_WARNINGS_ALLOWED: 1
  62. CMAKE_CI_NO_INSTALL: 1
  63. .fedora38_clang_analyzer:
  64. extends: .fedora38
  65. variables:
  66. CMAKE_CONFIGURATION: fedora38_clang_analyzer
  67. CMAKE_CI_BUILD_TYPE: Debug
  68. CTEST_NO_WARNINGS_ALLOWED: 1
  69. CMAKE_CI_NO_INSTALL: 1
  70. .fedora38_sphinx:
  71. extends: .fedora38
  72. variables:
  73. CMAKE_CONFIGURATION: fedora38_sphinx
  74. CTEST_NO_WARNINGS_ALLOWED: 1
  75. CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
  76. CMAKE_CI_NO_INSTALL: 1
  77. .fedora38_sphinx_package:
  78. extends: .fedora38
  79. variables:
  80. CMAKE_CONFIGURATION: fedora38_sphinx_package
  81. CTEST_SOURCE_SUBDIRECTORY: "Utilities/Sphinx"
  82. #### Build and test
  83. .debian12_ninja:
  84. extends: .debian12
  85. variables:
  86. CMAKE_CONFIGURATION: debian12_ninja
  87. CTEST_NO_WARNINGS_ALLOWED: 1
  88. .debian12_aarch64_ninja:
  89. extends: .debian12_aarch64
  90. variables:
  91. CMAKE_CONFIGURATION: debian12_aarch64_ninja
  92. CTEST_NO_WARNINGS_ALLOWED: 1
  93. .debian12_makefiles_inplace:
  94. extends: .debian12
  95. variables:
  96. CMAKE_CONFIGURATION: debian12_makefiles_inplace
  97. CMAKE_GENERATOR: "Unix Makefiles"
  98. CMAKE_CI_BOOTSTRAP: 1
  99. CMAKE_CI_INPLACE: 1
  100. CMAKE_CI_NO_INSTALL: 1
  101. CTEST_NO_WARNINGS_ALLOWED: 1
  102. .debian12_extdeps:
  103. extends: .debian12
  104. variables:
  105. CMAKE_CONFIGURATION: debian12_extdeps
  106. CMAKE_CI_BUILD_TYPE: Release
  107. CTEST_NO_WARNINGS_ALLOWED: 1
  108. .debian12_aarch64_extdeps:
  109. extends: .debian12_aarch64
  110. variables:
  111. CMAKE_CONFIGURATION: debian12_aarch64_extdeps
  112. CMAKE_CI_BUILD_TYPE: Release
  113. CTEST_NO_WARNINGS_ALLOWED: 1
  114. .fedora38_extdeps:
  115. extends: .fedora38
  116. variables:
  117. CMAKE_CONFIGURATION: fedora38_extdeps
  118. CMAKE_CI_BUILD_TYPE: Release
  119. CTEST_NO_WARNINGS_ALLOWED: 1
  120. .fedora38_ninja:
  121. extends: .fedora38
  122. variables:
  123. CMAKE_CONFIGURATION: fedora38_ninja
  124. CMAKE_CI_BUILD_TYPE: Release
  125. CTEST_NO_WARNINGS_ALLOWED: 1
  126. .fedora38_ninja_multi:
  127. extends: .fedora38
  128. variables:
  129. CMAKE_CONFIGURATION: fedora38_ninja_multi
  130. CTEST_NO_WARNINGS_ALLOWED: 1
  131. CMAKE_GENERATOR: "Ninja Multi-Config"
  132. .fedora38_makefiles:
  133. extends: .fedora38
  134. variables:
  135. CMAKE_CONFIGURATION: fedora38_makefiles
  136. CTEST_NO_WARNINGS_ALLOWED: 1
  137. CMAKE_GENERATOR: "Unix Makefiles"
  138. ### Clang Compiler
  139. .debian12_makefiles_clang:
  140. extends: .debian12
  141. variables:
  142. CMAKE_CONFIGURATION: debian12_makefiles_clang
  143. CMAKE_GENERATOR: "Unix Makefiles"
  144. .debian12_ninja_clang:
  145. extends: .debian12
  146. variables:
  147. CMAKE_CONFIGURATION: debian12_ninja_clang
  148. .fedora38_makefiles_clang:
  149. extends: .fedora38
  150. variables:
  151. CMAKE_CONFIGURATION: fedora38_makefiles_clang
  152. CMAKE_GENERATOR: "Unix Makefiles"
  153. .fedora38_ninja_clang:
  154. extends: .fedora38
  155. variables:
  156. CMAKE_CONFIGURATION: fedora38_ninja_clang
  157. .fedora38_ninja_multi_clang:
  158. extends: .fedora38
  159. variables:
  160. CMAKE_CONFIGURATION: fedora38_ninja_multi_clang
  161. CMAKE_GENERATOR: "Ninja Multi-Config"
  162. ### Sanitizers
  163. .fedora_memcheck:
  164. variables:
  165. CMAKE_CI_BUILD_TYPE: RelWithDebInfo
  166. .fedora_asan_addon:
  167. extends: .fedora_memcheck
  168. variables:
  169. CTEST_MEMORYCHECK_TYPE: AddressSanitizer
  170. CTEST_MEMORYCHECK_SANITIZER_OPTIONS: ""
  171. .fedora38_asan:
  172. extends:
  173. - .fedora38
  174. - .fedora_asan_addon
  175. variables:
  176. CMAKE_CONFIGURATION: fedora38_asan
  177. ### Intel Compiler
  178. .intelcompiler:
  179. image: "kitware/intelcompiler:$CMAKE_CI_INTELCOMPILER_IMAGE_TAG"
  180. environment:
  181. name: intel-compiler
  182. variables:
  183. CMAKE_ARCH: x86_64
  184. .intelclassic_makefiles:
  185. extends: .intelcompiler
  186. variables:
  187. CMAKE_CONFIGURATION: intelclassic_makefiles
  188. CMAKE_GENERATOR: "Unix Makefiles"
  189. .inteloneapi_makefiles:
  190. extends: .intelcompiler
  191. variables:
  192. CMAKE_CONFIGURATION: inteloneapi_makefiles
  193. CMAKE_GENERATOR: "Unix Makefiles"
  194. ### NVHPC Compiler
  195. .nvhpc:
  196. image: "kitware/cmake:ci-nvhpc22.11-x86_64-2022-12-06"
  197. variables:
  198. CMAKE_ARCH: x86_64
  199. .nvhpc_ninja:
  200. extends: .nvhpc
  201. variables:
  202. CMAKE_CONFIGURATION: nvhpc_ninja
  203. ### CUDA builds
  204. .cuda:
  205. variables:
  206. GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
  207. CTEST_LABELS: "CUDA"
  208. CMAKE_CUDA_ARCHITECTURES_NATIVE_CLAMP: 1
  209. .cuda9.2:
  210. extends: .cuda
  211. image: "kitware/cmake:ci-cuda9.2-x86_64-2021-10-01"
  212. variables:
  213. CMAKE_ARCH: x86_64
  214. .cuda9.2_nvidia:
  215. extends: .cuda9.2
  216. variables:
  217. CMAKE_CONFIGURATION: cuda9.2_nvidia
  218. CMAKE_GENERATOR: "Ninja Multi-Config"
  219. .cuda10.2:
  220. extends: .cuda
  221. image: "kitware/cmake:ci-cuda10.2-x86_64-2021-06-16"
  222. variables:
  223. CMAKE_ARCH: x86_64
  224. .cuda10.2_nvidia:
  225. extends: .cuda10.2
  226. variables:
  227. CMAKE_CONFIGURATION: cuda10.2_nvidia
  228. CTEST_NO_WARNINGS_ALLOWED: 1
  229. .cuda10.2_clang:
  230. extends: .cuda10.2
  231. variables:
  232. CMAKE_CONFIGURATION: cuda10.2_clang
  233. CTEST_NO_WARNINGS_ALLOWED: 1
  234. .cuda11.6:
  235. extends: .cuda
  236. image: "kitware/cmake:ci-cuda11.6-x86_64-2022-02-28"
  237. variables:
  238. CMAKE_ARCH: x86_64
  239. .cuda11.6_nvidia:
  240. extends: .cuda11.6
  241. variables:
  242. CMAKE_CONFIGURATION: cuda11.6_nvidia
  243. CTEST_NO_WARNINGS_ALLOWED: 1
  244. .cuda11.6_clang:
  245. extends: .cuda11.6
  246. variables:
  247. CMAKE_CONFIGURATION: cuda11.6_clang
  248. CTEST_NO_WARNINGS_ALLOWED: 1
  249. .cuda11.8_minimal:
  250. extends: .cuda
  251. image: "kitware/cmake:ci-cuda11.8-minimal-x86_64-2022-12-06"
  252. variables:
  253. CMAKE_ARCH: x86_64
  254. .cuda11.8_minimal_nvidia:
  255. extends: .cuda11.8_minimal
  256. variables:
  257. CMAKE_CONFIGURATION: cuda11.8_minimal_nvidia
  258. CTEST_NO_WARNINGS_ALLOWED: 1
  259. ### HIP builds
  260. .hip5.5:
  261. image: "kitware/cmake:ci-hip5.5-x86_64-2023-06-01"
  262. variables:
  263. GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
  264. CMAKE_ARCH: x86_64
  265. CTEST_LABELS: "HIP"
  266. .hip5.5_radeon:
  267. extends: .hip5.5
  268. variables:
  269. CMAKE_CONFIGURATION: hip5.5_radeon
  270. CMAKE_GENERATOR: "Ninja Multi-Config"
  271. ### C++ modules
  272. .gcc_cxx_modules_x86_64:
  273. image: "kitware/cmake:ci-gcc_cxx_modules-x86_64-2022-06-21"
  274. variables:
  275. GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci"
  276. CMAKE_ARCH: x86_64
  277. CC: "/opt/gcc-p1689/bin/gcc"
  278. CXX: "/opt/gcc-p1689/bin/g++"
  279. .gcc_cxx_modules_ninja:
  280. extends: .gcc_cxx_modules_x86_64
  281. variables:
  282. CMAKE_CONFIGURATION: linux_gcc_cxx_modules_ninja
  283. .gcc_cxx_modules_ninja_multi:
  284. extends: .gcc_cxx_modules_x86_64
  285. variables:
  286. CMAKE_CONFIGURATION: linux_gcc_cxx_modules_ninja_multi
  287. CMAKE_GENERATOR: "Ninja Multi-Config"
  288. ## Tags
  289. .linux_x86_64_tags:
  290. tags:
  291. - cmake
  292. - build
  293. - docker
  294. - linux-x86_64
  295. .linux_x86_64_tags_x11:
  296. tags:
  297. - cmake
  298. - docker
  299. - linux-x86_64
  300. - x11
  301. .linux_x86_64_tags_cuda:
  302. tags:
  303. - cmake
  304. - cuda-rt
  305. - docker
  306. - linux-x86_64
  307. .linux_x86_64_v3_tags_cuda:
  308. tags:
  309. - cmake
  310. - cuda-rt
  311. - docker
  312. - linux-x86_64-v3
  313. .linux_x86_64_tags_radeon:
  314. tags:
  315. - cmake
  316. - radeon
  317. - docker
  318. - linux-x86_64
  319. .linux_aarch64_tags:
  320. tags:
  321. - cmake
  322. - build
  323. - docker
  324. - linux-aarch64
  325. ## Linux-specific scripts
  326. .before_script_linux: &before_script_linux
  327. - source .gitlab/ci/env.sh
  328. - .gitlab/ci/cmake.sh
  329. - export PATH=$PWD/.gitlab/cmake/bin:$PATH
  330. - .gitlab/ci/ninja.sh
  331. - export PATH=$PWD/.gitlab:$PATH
  332. - cmake --version
  333. - ninja --version
  334. .cmake_prep_source_linux:
  335. stage: prep
  336. script:
  337. - *before_script_linux
  338. - dnf install --setopt=install_weak_deps=False -y git-core
  339. - v="$(.gitlab/ci/cmake_version.sh)"
  340. - mkdir -p build/
  341. - git archive --format=tgz "--prefix=cmake-$v/" -o "build/cmake-$v.tar.gz" HEAD
  342. - git -c core.autocrlf=true -c core.eol=crlf archive --format=zip --prefix="cmake-$v/" -o "build/cmake-$v.zip" HEAD
  343. interruptible: true
  344. .cmake_prep_doc_linux:
  345. stage: prep
  346. script:
  347. - *before_script_linux
  348. - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_configure.cmake"
  349. - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_build.cmake"
  350. interruptible: true
  351. .cmake_codespell_linux:
  352. stage: build
  353. extends: .fedora38
  354. script:
  355. - .gitlab/ci/codespell.sh
  356. interruptible: true
  357. .cmake_build_linux:
  358. stage: build
  359. script:
  360. - *before_script_linux
  361. - .gitlab/ci/sccache.sh
  362. - sccache --start-server
  363. - sccache --show-stats
  364. - .gitlab/ci/pre_build.sh
  365. - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_configure.cmake"
  366. - "$LAUNCHER ctest -VV -S .gitlab/ci/ctest_build.cmake"
  367. - .gitlab/ci/post_build.sh
  368. - sccache --show-stats
  369. interruptible: true
  370. .cmake_test_linux:
  371. stage: test
  372. script:
  373. - *before_script_linux
  374. - "$LAUNCHER ctest --output-on-failure -V -S .gitlab/ci/ctest_test.cmake"
  375. interruptible: true
  376. .cmake_memcheck_linux:
  377. stage: test
  378. script:
  379. - *before_script_linux
  380. - "$LAUNCHER ctest --output-on-failure -V -S .gitlab/ci/ctest_memcheck.cmake"
  381. interruptible: true
  382. .cmake_build_linux_release:
  383. stage: build
  384. script:
  385. - source .gitlab/ci/env.sh
  386. # Bootstrap.
  387. - mkdir -p build/
  388. # Exclude documentation. A job dependency provides it for packaging.
  389. - sed '/^# Build doc/,/^$/d' Utilities/Release/linux/$CMAKE_ARCH/cache.txt > build/CMakeCache.txt
  390. # Make sccache available.
  391. - .gitlab/ci/sccache.sh
  392. - export PATH=$PWD/.gitlab:$PATH
  393. # Append sccache settings to the cache.
  394. - echo "CMAKE_C_COMPILER_LAUNCHER:STRING=sccache" >> build/CMakeCache.txt
  395. - echo "CMAKE_CXX_COMPILER_LAUNCHER:STRING=sccache" >> build/CMakeCache.txt
  396. # CI settings.
  397. - echo "CMake_TEST_INSTALL:BOOL=OFF" >> build/CMakeCache.txt
  398. - echo "CMAKE_INSTALL_PREFIX:PATH=$PWD/build/install" >> build/CMakeCache.txt
  399. - echo "CMAKE_SKIP_INSTALL_ALL_DEPENDENCY:BOOL=ON" >> build/CMakeCache.txt
  400. # Appease Git. The Git in this container is old (1.7) and doesn't
  401. # understand some things. But, it doesn't need to, so make it blind.
  402. - mkdir -p .git/info
  403. - echo "* -crlf" >> .git/info/attributes
  404. - git reset --hard
  405. # Bootstrap
  406. - cd build/
  407. - '$LAUNCHER ../bootstrap --parallel=$(nproc) --docdir=doc/cmake $BOOTSTRAP_ARGS'
  408. # FIXME: When CTest can drive an external CMake for the build as well,
  409. # use the scripts here.
  410. - "$LAUNCHER make -j$(nproc)"
  411. # NOTE: This regex matches that used in the release build.
  412. - "$LAUNCHER bin/ctest --output-on-failure -j$(nproc) -R '^(CMake\\.|CMakeLib\\.|RunCMake\\.ctest_memcheck)'"
  413. # Make a package.
  414. - bin/cpack -G TGZ
  415. - bin/cpack -G STGZ
  416. - sccache --show-stats
  417. interruptible: true
  418. .cmake_build_linux_standalone:
  419. stage: build
  420. script:
  421. - *before_script_linux
  422. - .gitlab/ci/sccache.sh
  423. - sccache --start-server
  424. - sccache --show-stats
  425. - "$LAUNCHER ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake"
  426. - sccache --show-stats
  427. interruptible: true
  428. .cmake_test_linux_release:
  429. stage: test-ext
  430. script:
  431. - *before_script_linux
  432. # Make the CMake package available.
  433. - mkdir -p build/install
  434. - tar -C build/install --strip-components=1 -xzf build/cmake-*-linux-$CMAKE_ARCH.tar.gz
  435. - .gitlab/ci/sccache.sh
  436. - sccache --start-server
  437. - sccache --show-stats
  438. - "$LAUNCHER build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake"
  439. - sccache --show-stats
  440. interruptible: true
  441. .cmake_test_linux_external:
  442. stage: test-ext
  443. script:
  444. - *before_script_linux
  445. - .gitlab/ci/sccache.sh
  446. - sccache --start-server
  447. - sccache --show-stats
  448. - "$LAUNCHER build/install/bin/ctest --output-on-failure -V -S .gitlab/ci/ctest_standalone.cmake"
  449. - sccache --show-stats
  450. interruptible: true
  451. .cmake_test_linux_intelclassic_makefiles:
  452. extends:
  453. - .intelclassic_makefiles
  454. - .cmake_test_linux_release
  455. - .linux_x86_64_tags
  456. - .run_manually
  457. - .needs_centos6_x86_64
  458. variables:
  459. CMAKE_CI_JOB_NIGHTLY: "true"
  460. .cmake_test_linux_inteloneapi_makefiles:
  461. extends:
  462. - .inteloneapi_makefiles
  463. - .cmake_test_linux_release
  464. - .linux_x86_64_tags
  465. - .run_manually
  466. - .needs_centos6_x86_64
  467. variables:
  468. CMAKE_CI_JOB_NIGHTLY: "true"
  469. ### Documentation
  470. .cmake_org_help:
  471. stage: build
  472. extends:
  473. - .fedora38
  474. - .linux_x86_64_tags
  475. - .cmake_org_help_artifacts
  476. script:
  477. - *before_script_linux
  478. - mkdir -p build/
  479. - cd build/
  480. - cmake ../Utilities/Sphinx -GNinja
  481. -DSPHINX_HTML=ON
  482. -DSPHINX_QTHELP=$CMAKE_CI_SPHINX_QTHELP
  483. -DCMake_SPHINX_CMAKE_ORG=ON
  484. -DCMake_SPHINX_CMAKE_ORG_OUTDATED=$CMAKE_CI_SPHINX_OUTDATED
  485. -DCMake_VERSION_NO_GIT=$CMAKE_CI_VERSION_NO_GIT
  486. - ninja