summaryrefslogtreecommitdiffstats
path: root/.gitlab/ci/ctest_build.cmake
blob: b1b98308ba52d1499f5f2699a4e94544e3ce8d7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
cmake_minimum_required(VERSION 3.8)

include("${CMAKE_CURRENT_LIST_DIR}/gitlab_ci.cmake")

# Read the files from the build directory.
ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}")

# Pick up from where the configure left off.
ctest_start(APPEND)

include(ProcessorCount)
ProcessorCount(nproc)
if (NOT "$ENV{CTEST_MAX_PARALLELISM}" STREQUAL "")
  if (nproc GREATER "$ENV{CTEST_MAX_PARALLELISM}")
    set(nproc "$ENV{CTEST_MAX_PARALLELISM}")
  endif ()
endif ()

if (CTEST_CMAKE_GENERATOR STREQUAL "Unix Makefiles")
  set(CTEST_BUILD_FLAGS "-j${nproc} -l${nproc}")
elseif (CTEST_CMAKE_GENERATOR MATCHES "Ninja")
  set(CTEST_BUILD_FLAGS "-l${nproc}")
endif ()

set(ctest_build_args)

# IWYU debugging:
# - set the name of the target (if not one of the main libraries)
# - set the name of the source (without extension, relative to `Source/`)
# - uncomment the debugging support in the relevant `configure_*_iwyu.cmake` file
set(iwyu_source_target) # set for "other" targets not the "main" 3 libraries
set(iwyu_source_name) # e.g., cmTarget
if (iwyu_source_name AND "$ENV{CMAKE_CONFIGURATION}" MATCHES "iwyu")
  if (NOT iwyu_source_target)
    if (iwyu_source_name MATCHES "^(CTest/|cmCTest$)")
      set(iwyu_source_target "CTestLib")
    elseif (iwyu_source_name MATCHES "^CPack/")
      set(iwyu_source_target "CPackLib")
    else () # Assume everything else is in CMakeLib
      set(iwyu_source_target "CMakeLib")
    endif ()
  endif ()
  list(APPEND ctest_build_args
    TARGET "Source/CMakeFiles/${iwyu_source_target}.dir/${iwyu_source_name}.cxx.o")
endif ()

ctest_build(
  NUMBER_ERRORS num_errors
  NUMBER_WARNINGS num_warnings
  RETURN_VALUE build_result
  ${ctest_build_args})
ctest_submit(PARTS Build)

include("${CMAKE_CURRENT_LIST_DIR}/ctest_annotation.cmake")
ctest_annotation_report("${CTEST_BINARY_DIRECTORY}/annotations.json"
  "Build Errors (${num_errors})"      "https://open.cdash.org/viewBuildError.php?buildid=${build_id}"
  "Build Warnings (${num_warnings})"  "https://open.cdash.org/viewBuildError.php?type=1&buildid=${build_id}")

if (build_result)
  message(FATAL_ERROR
    "Failed to build")
endif ()

if ("$ENV{CTEST_NO_WARNINGS_ALLOWED}" AND num_warnings GREATER 0)
  message(FATAL_ERROR
    "Found ${num_warnings} warnings (treating as fatal).")
endif ()

if (ctest_build_args)
  message(FATAL_ERROR
    "Failing to prevent debugging support from being committed.")
endif ()

if (NOT "$ENV{CMAKE_CI_NO_INSTALL}")
  ctest_build(APPEND
    TARGET install
    RETURN_VALUE install_result)

  if (install_result)
    message(FATAL_ERROR
      "Failed to install")
  endif ()
endif ()