1#----------------------------------------------- 2# Ctest driver for siconos install. 3# Target : continuous integration on gitlab-ci, 4# aims at providing a proper install of siconos for a given configuration. 5# 6# Input variables : 7# - SICONOS_INSTALL_DIR : where to install siconos. Default : /home/install-siconos 8# - USER_FILE : user option file used by cmake to configure siconos. Default : siconos_conf.cmake. 9# Warning : always searched in siconos-tutorials/ci directory. 10# using common commands (lsb_release ...) 11# ---------------------------------------------- 12 13 14message("--- Start conf for siconos ctest pipeline.") 15 16# ============= setup ================ 17 18# -- CI_PROJECT_DIR is a required environment variable -- 19# --> set by default for gitlab-ci, even inside the docker container 20# --> unknown in docker container run with travis/siconos pipeline. 21 22if(DEFINED ENV{TRAVIS}) 23 if($ENV{TRAVIS} STREQUAL true) 24 set(CI_TRAVIS ON) 25 set(ENV{CI_PROJECT_DIR} ${CTEST_SOURCE_DIRECTORY}) 26 endif() 27elseif(DEFINED ENV{GITLAB_CI}) 28 if($ENV{GITLAB_CI} STREQUAL true) 29 set(CI_GITLAB ON) 30 endif() 31endif() 32 33if(NOT DEFINED ENV{CI_PROJECT_DIR} ) 34 message(FATAL_ERROR "Please set env variable CI_PROJECT_DIR to siconos sources directory (git repo).") 35endif() 36 37# -- Definition of all variables required for ctest -- 38include($ENV{CI_PROJECT_DIR}/ci_gitlab/ctest_tools.cmake) 39if(CI_TRAVIS) 40 list(APPEND CMAKE_MODULE_PATH ${CTEST_SOURCE_DIRECTORY}/ci_travis/cmake) 41 list(APPEND CMAKE_MODULE_PATH ${CTEST_SOURCE_DIRECTORY}/ci_travis/config) 42 list(APPEND CMAKE_MODULE_PATH ${CTEST_SOURCE_DIRECTORY}/ci_travis) 43 include(Tools) 44 45 # -- Get config -- 46 # i.e. set extra options/values (cmake -Doption=value ...) 47 # either from file default.cmake or 48 # from file CI_CONFIG.cmake 49 # --> may set SICONOS_CMAKE_OPTIONS 50 # --> may set DSICONOS_COMPONENTS 51 # Rq : For Travis CI, we include cmake files while for gitlab CI we use 52 # siconos user option file. Todo: one way to rule them all? 53 54 if(CI_CONFIG) 55 string(REPLACE "," ";" CI_CONFIG_LIST ${CI_CONFIG}) 56 foreach(_CI IN LISTS CI_CONFIG_LIST) 57 include(${_CI}) 58 endforeach() 59 else() 60 set(CI_CONFIG default) 61 include(${CI_CONFIG}) 62 endif() 63endif() 64 65# - Source dir and path to siconos install 66if(NOT CTEST_SOURCE_DIRECTORY) 67 set(CTEST_SOURCE_DIRECTORY $ENV{CI_PROJECT_DIR}) 68endif() 69 70# - Top level build directory - 71# If not specified : current dir. 72if(NOT CTEST_BINARY_DIRECTORY) 73 set(CTEST_BINARY_DIRECTORY .) 74endif() 75 76# Install dir (used as CMAKE_INSTALL_PREFIX) 77if(NOT SICONOS_INSTALL_DIR) 78 set(SICONOS_INSTALL_DIR /home/install-siconos/) 79endif() 80# Build name (for cdash) 81if(NOT CTEST_BUILD_NAME) 82 set_cdash_build_name() 83endif() 84 85if(USER_FILE) 86 list(APPEND SICONOS_CMAKE_OPTIONS -DUSER_OPTIONS_FILE=${USER_FILE}) 87endif() 88 89list(APPEND SICONOS_CMAKE_OPTIONS -DCMAKE_INSTALL_PREFIX=${SICONOS_INSTALL_DIR}) 90list(APPEND SICONOS_CMAKE_OPTIONS -DWITH_GIT=ON) # required to generate siconos-commit.txt to tag cdash build in the examples. 91 92if(DEFINED ENV{OCE_INSTALL}) # set if oce has been installed using oce repo, in install_oce.sh 93 message("Search oce in $ENV{OCE_INSTALL}.") 94 list(APPEND SICONOS_CMAKE_OPTIONS -DOCE_DIR=$ENV{OCE_INSTALL}) 95endif() 96 97# Parallel build only for siconos_install. For examples it leads to: warning: jobserver unavailable: using -j1. Add `+' to parent make rule. 98#set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE ${CTEST_SOURCE_DIRECTORY}/cmake/valgrind.supp) 99 100if(NOT CTEST_CMAKE_GENERATOR) 101 set(CTEST_CMAKE_GENERATOR "Unix Makefiles") 102endif() 103 104if(NOT CTEST_SITE) 105 set_site_name() 106endif() 107 108if(NOT CTEST_BUILD_CONFIGURATION) 109 set(CTEST_BUILD_CONFIGURATION "Release") 110endif() 111 112 113# Write a note file for cdash server. 114# Content : 115# - info. regarding the runner, the system 116# - siconos config (user option file) 117write_notes() 118 119# ============= Run ctest steps ================ 120# Either one by one (to split ci jobs) if CTEST_MODE=Configure, Build, Test or 121# all in a row if CTEST_MODE=all. 122# Submit : only after test phase except if conf or build failed. 123 124# - Configure -- 125if(${CTEST_MODE} STREQUAL "Configure" OR ${CTEST_MODE} STREQUAL "all") 126 127 # Current testing model. Priority: 128 # Nightly -> set by scheduler on gricad-gitlab 129 # Continuous -> set in .gitlab-ci.yml 130 # Experimental : default 131 if(NOT model) 132 set(model Experimental) 133 endif() 134 135 ctest_start(${model}) 136 137 # Set CTEST_CONFIGURE_COMMAND to cmake followed by siconos options 138 set(CTEST_CONFIGURE_COMMAND ${CMAKE_COMMAND}) 139 foreach(option IN LISTS SICONOS_CMAKE_OPTIONS) 140 set(CTEST_CONFIGURE_COMMAND "${CTEST_CONFIGURE_COMMAND} ${option}") 141 endforeach() 142 set(CTEST_CONFIGURE_COMMAND "${CTEST_CONFIGURE_COMMAND} ${CTEST_SOURCE_DIRECTORY}") 143 144 message("\n\n=============== Start ctest_configure =============== ") 145 message("- Configure command line :\n ${CTEST_CONFIGURE_COMMAND}\n") 146 147 ctest_configure( 148 RETURN_VALUE _RESULT 149 CAPTURE_CMAKE_ERROR _STATUS 150 #QUIET 151 ) 152 post_ctest(PHASE Configure) 153endif() 154 155# - Build - 156if(${CTEST_MODE} STREQUAL "Build" OR ${CTEST_MODE} STREQUAL "all") 157 158 if(${CTEST_MODE} STREQUAL "Build") 159 ctest_start(APPEND) # Restart from existing (configure step) cdash config 160 endif() 161 # --- Build --- 162 163 message("\n\n=============== Start ctest_build =============== ") 164 165 cmake_host_system_information(RESULT NP QUERY NUMBER_OF_LOGICAL_CORES) 166 if(NOT ALLOW_PARALLEL_BUILD) 167 set(NP 1) 168 endif() 169 ctest_build( 170 FLAGS -j${NP} 171 CAPTURE_CMAKE_ERROR _STATUS 172 RETURN_VALUE _RESULT 173 #QUIET if quiet, travis failed because of missing outputs during a long time ... 174 ) 175 post_ctest(PHASE Build) 176endif() 177 178# - Test - 179if(${CTEST_MODE} STREQUAL "Test" OR ${CTEST_MODE} STREQUAL "all") 180 # -- Tests -- 181 182 if(${CTEST_MODE} STREQUAL "Test") 183 ctest_start(APPEND) 184 endif() 185 message("\n\n=============== Start ctest_test (nbprocs = ${NP}) =============== ") 186 ctest_test( 187 #PARALLEL_LEVEL NP 188 CAPTURE_CMAKE_ERROR _STATUS 189 #SCHEDULE_RANDOM ON 190 RETURN_VALUE _RESULT 191 # QUIET 192 ) 193 post_ctest(PHASE Test) 194 195 if(WITH_MEMCHECK AND CTEST_COVERAGE_COMMAND) 196 #find_program(CTEST_COVERAGE_COMMAND NAMES gcov) 197 # set(CTEST_COVERAGE_COMMAND gcov) 198 199 ctest_coverage( 200 CAPTURE_CMAKE_ERROR COVERAGE_STATUS 201 RETURN_VALUE COVERAGE_RESULT 202 ) 203 endif() 204 205 if(WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND) 206 ctest_memcheck() 207 endif() 208 209 if(CDASH_SUBMIT) 210 ctest_submit( 211 RETURN_VALUE RETURN_STATUS 212 CAPTURE_CMAKE_ERROR SUBMISSION_STATUS 213 ) 214 if(NOT SUBMISSION_STATUS EQUAL 0) 215 message(WARNING " *** submission failure *** ") 216 endif() 217 endif() 218 219 # -- memory check -- Skip this to 'enlight' submit process, since cdash inria is overbooked ... 220 # if(CTEST_BUILD_CONFIGURATION MATCHES "Profiling") 221 # find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind) 222 # set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "--quiet --leak-check=full --show-leak-kinds=definite,possible --track-origins=yes --error-limit=no --gen-suppressions=all") 223 # set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "--quiet --leak-check=full --show-reachable=yes --error-limit=no --gen-suppressions=all") 224 # ctest_memcheck(PARALLEL_LEVEL NP QUIET) 225 # endif() 226 227endif() 228 229 230# ============= Summary ============= 231message(STATUS "\n============================================ Summary ============================================") 232message(STATUS "CTest process for Siconos has ended.") 233message(STATUS "Ctest model is: ${model}") 234message(STATUS "Ctest mode was: ${CTEST_MODE}") 235message(STATUS "Ctest executed on sources directory : ${CTEST_SOURCE_DIRECTORY}") 236message(STATUS "CTEST_BINARY_DIRECTORY is: ${CTEST_BINARY_DIRECTORY}") 237message(STATUS "CTEST_BUILD_CONFIGURATION is: ${CTEST_BUILD_CONFIGURATION}") 238if(CDASH_SUBMIT) 239 message(STATUS "Cdash server name: ${CTEST_DROP_SITE}/${CTEST_DROP_LOCATION}.") 240 message(STATUS "Cdash build name: ${CTEST_BUILD_NAME}") 241 message(STATUS "Cdash Site name: ${CTEST_SITE}") 242endif() 243message(STATUS "=================================================================================================\n") 244