diff options
-rw-r--r-- | .gitlab/ci/configure_common.cmake | 3 | ||||
-rw-r--r-- | .gitlab/ci/configure_fedora31_tidy.cmake | 3 | ||||
-rw-r--r-- | .gitlab/ci/configure_sccache.cmake | 2 | ||||
-rw-r--r-- | .gitlab/ci/ctest_build.cmake | 30 | ||||
-rw-r--r-- | .gitlab/ci/ctest_configure.cmake | 32 | ||||
-rw-r--r-- | .gitlab/ci/ctest_exclusions.cmake | 6 | ||||
-rw-r--r-- | .gitlab/ci/ctest_test.cmake | 24 | ||||
-rw-r--r-- | .gitlab/ci/gitlab_ci.cmake | 46 |
8 files changed, 146 insertions, 0 deletions
diff --git a/.gitlab/ci/configure_common.cmake b/.gitlab/ci/configure_common.cmake new file mode 100644 index 0000000..fc2aaae --- /dev/null +++ b/.gitlab/ci/configure_common.cmake @@ -0,0 +1,3 @@ +set(CTEST_USE_LAUNCHERS "ON" CACHE STRING "") + +include("${CMAKE_CURRENT_LIST_DIR}/configure_sccache.cmake") diff --git a/.gitlab/ci/configure_fedora31_tidy.cmake b/.gitlab/ci/configure_fedora31_tidy.cmake new file mode 100644 index 0000000..f41ad82 --- /dev/null +++ b/.gitlab/ci/configure_fedora31_tidy.cmake @@ -0,0 +1,3 @@ +set(CMake_RUN_CLANG_TIDY ON CACHE BOOL "") + +include("${CMAKE_CURRENT_LIST_DIR}/configure_common.cmake") diff --git a/.gitlab/ci/configure_sccache.cmake b/.gitlab/ci/configure_sccache.cmake new file mode 100644 index 0000000..261bb28 --- /dev/null +++ b/.gitlab/ci/configure_sccache.cmake @@ -0,0 +1,2 @@ +set(CMAKE_C_COMPILER_LAUNCHER "sccache" CACHE STRING "") +set(CMAKE_CXX_COMPILER_LAUNCHER "sccache" CACHE STRING "") diff --git a/.gitlab/ci/ctest_build.cmake b/.gitlab/ci/ctest_build.cmake new file mode 100644 index 0000000..28bdb35 --- /dev/null +++ b/.gitlab/ci/ctest_build.cmake @@ -0,0 +1,30 @@ +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) + +if (CTEST_CMAKE_GENERATOR STREQUAL "Unix Makefiles") + include(ProcessorCount) + ProcessorCount(nproc) + set(CTEST_BUILD_FLAGS "-j${nproc}") +endif () + +ctest_build( + NUMBER_WARNINGS num_warnings + RETURN_VALUE build_result) +ctest_submit(PARTS Build) + +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 () diff --git a/.gitlab/ci/ctest_configure.cmake b/.gitlab/ci/ctest_configure.cmake new file mode 100644 index 0000000..55cad13 --- /dev/null +++ b/.gitlab/ci/ctest_configure.cmake @@ -0,0 +1,32 @@ +cmake_minimum_required(VERSION 3.8) + +include("${CMAKE_CURRENT_LIST_DIR}/gitlab_ci.cmake") + +set(cmake_args + -C "${CMAKE_CURRENT_LIST_DIR}/configure_$ENV{CMAKE_CONFIGURATION}.cmake") + +# Create an entry in CDash. +ctest_start(Experimental TRACK "${ctest_track}") + +# Gather update information. +find_package(Git) +set(CTEST_UPDATE_VERSION_ONLY ON) +set(CTEST_UPDATE_COMMAND "${GIT_EXECUTABLE}") +ctest_update() + +# Configure the project. +ctest_configure( + OPTIONS "${cmake_args}" + RETURN_VALUE configure_result) + +# Read the files from the build directory. +ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}") + +# We can now submit because we've configured. This is a cmb-superbuild-ism. +ctest_submit(PARTS Update) +ctest_submit(PARTS Configure) + +if (configure_result) + message(FATAL_ERROR + "Failed to configure") +endif () diff --git a/.gitlab/ci/ctest_exclusions.cmake b/.gitlab/ci/ctest_exclusions.cmake new file mode 100644 index 0000000..5bb03ca --- /dev/null +++ b/.gitlab/ci/ctest_exclusions.cmake @@ -0,0 +1,6 @@ +set(test_exclusions +) +string(REPLACE ";" "|" test_exclusions "${test_exclusions}") +if (test_exclusions) + set(test_exclusions "(${test_exclusions})") +endif () diff --git a/.gitlab/ci/ctest_test.cmake b/.gitlab/ci/ctest_test.cmake new file mode 100644 index 0000000..569139d --- /dev/null +++ b/.gitlab/ci/ctest_test.cmake @@ -0,0 +1,24 @@ +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) + +include("${CMAKE_CURRENT_LIST_DIR}/ctest_exclusions.cmake") +ctest_test( + PARALLEL_LEVEL "${nproc}" + RETURN_VALUE test_result + EXCLUDE "${test_exclusions}") +ctest_submit(PARTS Test) + +if (test_result) + message(FATAL_ERROR + "Failed to test") +endif () diff --git a/.gitlab/ci/gitlab_ci.cmake b/.gitlab/ci/gitlab_ci.cmake new file mode 100644 index 0000000..401cc40 --- /dev/null +++ b/.gitlab/ci/gitlab_ci.cmake @@ -0,0 +1,46 @@ +if (NOT DEFINED "ENV{GITLAB_CI}") + message(FATAL_ERROR + "This script assumes it is being run inside of GitLab-CI") +endif () + +# Set up the source and build paths. +set(CTEST_SOURCE_DIRECTORY "$ENV{CI_PROJECT_DIR}") +set(CTEST_BINARY_DIRECTORY "${CTEST_SOURCE_DIRECTORY}/build") + +if ("$ENV{CMAKE_CONFIGURATION}" STREQUAL "") + message(FATAL_ERROR + "The CMAKE_CONFIGURATION environment variable is required to know what " + "cache initialization file to use.") +endif () + +# Set the build metadata. +set(CTEST_BUILD_NAME "$ENV{CI_PROJECT_NAME}-$ENV{CMAKE_CONFIGURATION}") +set(CTEST_SITE "gitlab-ci") + +# Default to Release builds. +if (NOT "$ENV{CMAKE_BUILD_TYPE}" STREQUAL "") + set(CTEST_BUILD_CONFIGURATION "$ENV{CMAKE_BUILD_TYPE}") +endif () +if (NOT CTEST_BUILD_CONFIGURATION) + set(CTEST_BUILD_CONFIGURATION "Release") +endif () + +# Default to using Ninja. +if (NOT "$ENV{CMAKE_GENERATOR}" STREQUAL "") + set(CTEST_CMAKE_GENERATOR "$ENV{CMAKE_GENERATOR}") +endif () +if (NOT CTEST_CMAKE_GENERATOR) + set(CTEST_CMAKE_GENERATOR "Ninja") +endif () + +# Determine the track to submit to. +set(ctest_track "Experimental") +if (NOT "$ENV{CI_MERGE_REQUEST_ID}" STREQUAL "") + set(ctest_track "merge-requests") +elseif ("$ENV{CI_PROJECT_PATH}" STREQUAL "cmb/smtk") + if ("$ENV{CI_COMMIT_REF_NAME}" STREQUAL "master") + set(ctest_track "master") + elseif ("$ENV{CI_COMMIT_REF_NAME}" STREQUAL "release") + set(ctest_track "release") + endif () +endif () |