Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 1 | # |
| 2 | # SPDX-License-Identifier: BSD-3-Clause |
| 3 | # SPDX-FileCopyrightText: Copyright TF-RMM Contributors. |
| 4 | # |
| 5 | |
| 6 | include(FetchContent) |
| 7 | include("${SOURCE_DIR}/tools/cbmc/SummaryHelpers.cmake") |
| 8 | find_program(RMM_CBMC_PATH "cbmc" |
| 9 | DOC "Path to cbmc.") |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 10 | find_program(RMM_GOTO_CC_PATH "goto-cc" |
| 11 | DOC "Path to goto-cc.") |
| 12 | find_program(RMM_CBMC_VIEWER_PATH "cbmc-viewer" |
| 13 | DOC "Path to cbmc-viewer.") |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 14 | find_program(RMM_GCC_PATH "gcc" |
| 15 | DOC "Path to gcc.") |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 16 | |
Mate Toth-Pal | 7b875ea | 2023-11-15 16:59:19 +0100 | [diff] [blame] | 17 | find_package(Python3 REQUIRED) |
| 18 | find_program(CHECK_CBMC_SUMMARY_EXECUTABLE "compare_summary.py" |
| 19 | PATHS ${CMAKE_SOURCE_DIR} |
| 20 | PATH_SUFFIXES tools/cbmc |
| 21 | DOC "Path to compare_summary.py" |
| 22 | ) |
| 23 | |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 24 | # |
| 25 | # Configure and execute CBMC |
| 26 | # |
| 27 | if(NOT (EXISTS "${RMM_CBMC_PATH}")) |
| 28 | message(FATAL_ERROR "cbmc executable not found. (${RMM_CBMC_PATH})") |
| 29 | endif() |
| 30 | |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 31 | string(TOLOWER "${RMM_CBMC_CONFIGURATION}" CBMC_RESULT_FILE_SUFFIX) |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 32 | |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 33 | if(RMM_CBMC_VIEWER_OUTPUT) |
| 34 | set(CBMC_OUT_FILE_ENDING "xml") |
| 35 | set(CBMC_UI_OPTION "--xml-ui") |
| 36 | else() |
| 37 | set(CBMC_OUT_FILE_ENDING "output") |
| 38 | set(CBMC_UI_OPTION "") |
| 39 | endif() |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 40 | |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 41 | if(${RMM_CBMC_CONFIGURATION} STREQUAL "GCC") |
| 42 | set(COMPILED_FILE_PREFIX "gcc") |
| 43 | set(RMM_CBMC_COMPILER_PATH "${RMM_GCC_PATH}") |
| 44 | list(APPEND RMM_IMP_SRCS "${TESTBENCH_DIR}/../gcc/gcc_defs.c") |
| 45 | else() |
| 46 | set(COMPILED_FILE_PREFIX "goto_cc") |
| 47 | set(RMM_CBMC_COMPILER_PATH "${RMM_GOTO_CC_PATH}") |
| 48 | endif() |
| 49 | |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 50 | set(RMM_TESTBENCH_RESULT_DIR "${BINARY_DIR}/cbmc_${CBMC_RESULT_FILE_SUFFIX}_results") |
| 51 | set(SUMMARY_FILE "SUMMARY.${CBMC_RESULT_FILE_SUFFIX}") |
| 52 | set(RMM_CBMC_SUMMARY_FIELD_WIDTH 38) |
| 53 | |
| 54 | # Configurations for the initial state. |
| 55 | set(GRANULE_SHIFT "7") |
| 56 | set(MAX_NUM_OF_GRANULE "8") |
| 57 | set(HOST_MEM_SIZE "1024UL") |
| 58 | |
| 59 | set(MAX_RTT_UNWIND "6") |
| 60 | set(MAX_AUX_REC "2") |
| 61 | set(MAX_ROOT_RTT "3") |
| 62 | set(MAX_UNWIND_FLAGS "") |
| 63 | |
| 64 | # |
| 65 | # Set up cbmc command line |
| 66 | # |
| 67 | set(cbmc_unwinds_list |
Mate Toth-Pal | c751c0d | 2023-11-14 16:56:41 +0100 | [diff] [blame] | 68 | "--unwindset;find_lock_granules.3:${MAX_ROOT_RTT}" |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 69 | "--unwindset;find_lock_rd_granules.0:${MAX_RTT_UNWIND}" |
| 70 | "--unwindset;find_lock_rd_granules.1:${MAX_RTT_UNWIND}" |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 71 | "--unwindset;free_rec_aux_granules.0:${MAX_AUX_REC}" |
Mate Toth-Pal | c751c0d | 2023-11-14 16:56:41 +0100 | [diff] [blame] | 72 | "--unwindset;free_sl_rtts.0:${MAX_RTT_UNWIND}" |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 73 | "--unwindset;init_realm_descriptor_page.0:${MAX_ROOT_RTT}" |
Mate Toth-Pal | c751c0d | 2023-11-14 16:56:41 +0100 | [diff] [blame] | 74 | "--unwindset;init_realm_descriptor_page.1:${MAX_ROOT_RTT}" |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 75 | "--unwindset;init_rec.0:${MAX_AUX_REC}" |
Mate Toth-Pal | c751c0d | 2023-11-14 16:56:41 +0100 | [diff] [blame] | 76 | "--unwindset;init_rtt_root_page.0:${MAX_ROOT_RTT}" |
| 77 | "--unwindset;init_walk_path.0:${MAX_RTT_UNWIND}" |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 78 | "--unwindset;lock_order_invariable.0:21" |
| 79 | "--unwindset;lock_order_invariable.1:11" |
| 80 | "--unwindset;lock_order_invariable.2:" |
Mate Toth-Pal | c751c0d | 2023-11-14 16:56:41 +0100 | [diff] [blame] | 81 | "--unwindset;RealmIsLive.0:${MAX_ROOT_RTT}" |
| 82 | "--unwindset;RealmIsLive.2:${MAX_ROOT_RTT}" |
| 83 | "--unwindset;rtt_walk_lock_unlock.0:${MAX_RTT_UNWIND}" |
| 84 | "--unwindset;RttWalk.0:${MAX_RTT_UNWIND}" |
| 85 | "--unwindset;smc_realm_create.0:${MAX_RTT_UNWIND}" |
| 86 | "--unwindset;smc_rec_create.0:${MAX_AUX_REC}" |
| 87 | "--unwindset;total_root_rtt_refcount.0:${MAX_RTT_UNWIND}" |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 88 | ) |
| 89 | |
| 90 | set(cbmc_defines_list |
| 91 | "-DCBMC" |
| 92 | "-DDISABLE_COMPILER_ASSERT" |
| 93 | "-DDISABLE_SET_MEMBER" |
| 94 | "-DGRANULE_SHIFT=${GRANULE_SHIFT}" |
| 95 | "-DXLAT_GRANULARITY_SIZE_SHIFT=${GRANULE_SHIFT}" |
| 96 | "-DRMM_MAX_GRANULES=${MAX_NUM_OF_GRANULE}" |
| 97 | "-DMAX_CPUS=1" |
| 98 | "-DMAX_RTT_LEVEL=${MAX_RTT_UNWIND}" |
| 99 | "-DHOST_MEM_SIZE=${HOST_MEM_SIZE}" |
| 100 | "-DNAME=\"RMM\"" |
| 101 | "-DVERSION=\"CBMC\"" |
| 102 | "-DCOMMIT_INFO=\"CBMC\"" |
AlexeiFedorov | 4c7d485 | 2024-01-25 14:37:34 +0000 | [diff] [blame] | 103 | "-DRMM_NUM_PAGES_PER_STACK=1" |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 104 | ) |
| 105 | |
| 106 | # CBMC flags for memory safety analysis and undefined behaviour analysis. |
| 107 | set(cbmc_analysis_flags_list |
| 108 | "--bounds-check" |
| 109 | "--pointer-check" |
| 110 | "--div-by-zero-check" |
| 111 | "--signed-overflow-check" |
| 112 | "--unsigned-overflow-check" |
| 113 | "--pointer-overflow-check" |
| 114 | "--conversion-check" |
| 115 | "--undefined-shift-check" |
| 116 | "--float-overflow-check" |
| 117 | "--nan-check" |
| 118 | "--enum-range-check" |
| 119 | "--pointer-primitive-check" |
| 120 | "--memory-leak-check") |
| 121 | |
| 122 | set(cbmc_flags_list |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 123 | "--timestamp;wall" |
| 124 | "--verbosity;9" |
| 125 | # Optimisation flags: |
| 126 | "--drop-unused-functions" |
| 127 | "--reachability-slice" |
| 128 | ) |
| 129 | |
| 130 | if("${RMM_CBMC_CONFIGURATION}" STREQUAL "COVERAGE") |
| 131 | list(APPEND cbmc_flags_list |
| 132 | "--cover;cover" |
| 133 | "--no-assertions") |
| 134 | elseif("${RMM_CBMC_CONFIGURATION}" STREQUAL "ASSERT") |
| 135 | list(APPEND cbmc_flags_list |
| 136 | "--unwinding-assertions" |
| 137 | "--trace" |
| 138 | "--trace-show-function-calls") |
| 139 | elseif("${RMM_CBMC_CONFIGURATION}" STREQUAL "ANALYSIS") |
| 140 | list(APPEND cbmc_flags_list |
| 141 | "--unwinding-assertions" |
| 142 | "${cbmc_analysis_flags_list}") |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 143 | elseif("${RMM_CBMC_CONFIGURATION}" STREQUAL "GCC") |
| 144 | list(APPEND cbmc_compiler_options |
| 145 | "-Wall" |
| 146 | "-Werror" |
| 147 | "-Wno-unused-function" |
| 148 | "-Wno-main" # Do not warning on the non-standard signature of main |
| 149 | "-Wno-error=unused-variable" # Some of the testbenches contain unused variables |
| 150 | "-include;${TESTBENCH_DIR}/../gcc/gcc_defs.h") |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 151 | else() |
| 152 | message(FATAL_ERROR "Invalid RMM_CBMC_CONFIGURATION '${RMM_CBMC_CONFIGURATION}'") |
| 153 | endif() |
| 154 | |
Mate Toth-Pal | c492f48 | 2023-12-19 09:46:29 +0100 | [diff] [blame] | 155 | # Convert the space separated strings to a CMake list |
| 156 | string(REPLACE " " ";" TESTBENCH_FILES "${TESTBENCH_FILES}") |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 157 | |
| 158 | # |
| 159 | # Create semi-colon separated list from white-space seperated ones. |
| 160 | # |
| 161 | separate_arguments(RMM_IMP_SRCS) |
| 162 | separate_arguments(RMM_IMP_INCS) |
| 163 | |
| 164 | # |
| 165 | # Execute CBMC on the testbench files |
| 166 | # |
| 167 | rmm_cbmc_write_summary_header(${RMM_CBMC_SUMMARY_FIELD_WIDTH} |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 168 | ${RMM_TESTBENCH_RESULT_DIR} ${SUMMARY_FILE} ${RMM_CBMC_CONFIGURATION}) |
| 169 | |
| 170 | function(rmm_cbmc_gen_file_names |
| 171 | testbench_file_path |
| 172 | filename_prefix |
| 173 | out_file_ending |
| 174 | cmd_file_var_name |
| 175 | out_file_var_name |
| 176 | err_file_var_name) |
| 177 | get_filename_component(testbench_file_name "${testbench_file_path}" NAME) |
| 178 | get_filename_component(parent "${testbench_file_path}" DIRECTORY) |
| 179 | set("${cmd_file_var_name}" "${parent}/${filename_prefix}_${testbench_file_name}.cmd" PARENT_SCOPE) |
| 180 | set("${out_file_var_name}" "${parent}/${filename_prefix}_${testbench_file_name}.${out_file_ending}" PARENT_SCOPE) |
| 181 | set("${err_file_var_name}" "${parent}/${filename_prefix}_${testbench_file_name}.error" PARENT_SCOPE) |
| 182 | endfunction() |
| 183 | |
| 184 | function(normalise_cmd cmd_str out_var_name) |
| 185 | # replace the ; with space |
| 186 | string (REPLACE ";" " " cmd_str "${cmd_str}") |
| 187 | set("${out_var_name}" "${cmd_str}" PARENT_SCOPE) |
| 188 | endfunction() |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 189 | |
| 190 | foreach(testbench_file ${TESTBENCH_FILES}) |
| 191 | |
| 192 | string(REPLACE ${TESTBENCH_DIR}/ "" testbench_filename ${testbench_file}) |
| 193 | string(REGEX REPLACE "\\.[^\\.]*$" "" entry_point "${testbench_filename}") |
| 194 | |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 195 | set(RMM_GOTO_PROG_NAME "${RMM_TESTBENCH_RESULT_DIR}/rmm_${entry_point}.goto") |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 196 | |
| 197 | # Set the names of output files |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 198 | string(REPLACE ${TESTBENCH_DIR} ${RMM_TESTBENCH_RESULT_DIR} OUT_FILE_NAME_PREFIX "${testbench_file}") |
| 199 | rmm_cbmc_gen_file_names(${OUT_FILE_NAME_PREFIX} "cbmc" "${CBMC_OUT_FILE_ENDING}" |
| 200 | cbmc_cmd_file cbmc_output_file cbmc_error_file) |
| 201 | rmm_cbmc_gen_file_names(${OUT_FILE_NAME_PREFIX} "cbmc_prop" "xml" |
| 202 | cbmc_prop_cmd_file cbmc_prop_output_file cbmc_prop_error_file) |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 203 | rmm_cbmc_gen_file_names(${OUT_FILE_NAME_PREFIX} "${COMPILED_FILE_PREFIX}" "output" |
| 204 | compile_cmd_file compile_output_file compile_error_file) |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 205 | rmm_cbmc_gen_file_names(${OUT_FILE_NAME_PREFIX} "cbmc_viewer" "output" |
| 206 | cbmc_viewer_cmd_file cbmc_viewer_output_file cbmc_viewer_error_file) |
| 207 | set(CBMC_VIEWER_REPORT_DIR "${RMM_TESTBENCH_RESULT_DIR}/report_${entry_point}") |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 208 | |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 209 | if(${RMM_CBMC_CONFIGURATION} STREQUAL "GCC") |
| 210 | set(CBMC_ENTRY_POINT "-D${entry_point}=main") |
| 211 | else() |
| 212 | set(CBMC_ENTRY_POINT "--function;${entry_point}") |
| 213 | endif() |
| 214 | |
| 215 | set(compile_cmd |
| 216 | ${RMM_CBMC_COMPILER_PATH} |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 217 | ${cbmc_compiler_options} |
| 218 | ${cbmc_defines_list} |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 219 | ${CBMC_ENTRY_POINT} |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 220 | "-o;${RMM_GOTO_PROG_NAME}" |
| 221 | ${RMM_IMP_INCS} |
| 222 | ${RMM_IMP_SRCS} |
| 223 | ${testbench_file} |
| 224 | ) |
| 225 | |
| 226 | set(cbmc_cmd |
| 227 | ${RMM_CBMC_PATH} |
| 228 | ${CBMC_UI_OPTION} |
| 229 | ${cbmc_flags_list} |
| 230 | ${cbmc_unwinds_list} |
| 231 | ${RMM_GOTO_PROG_NAME}) |
| 232 | |
| 233 | set(cbmc_prop_cmd |
| 234 | ${RMM_CBMC_PATH} |
| 235 | ${cbmc_flags_list} |
| 236 | "--xml-ui" |
| 237 | "--show-properties" |
| 238 | ${RMM_GOTO_PROG_NAME}) |
| 239 | |
| 240 | set(cbmc_viewer_cmd |
| 241 | "${RMM_CBMC_VIEWER_PATH}" |
| 242 | "--goto;${RMM_GOTO_PROG_NAME}" |
| 243 | "--result;${cbmc_output_file}" |
| 244 | "--property;${cbmc_prop_output_file}" |
| 245 | "--srcdir;${CMAKE_SOURCE_DIR}" |
| 246 | "--reportdir;${CBMC_VIEWER_REPORT_DIR}") |
| 247 | |
| 248 | # remove the absolute path making it relative (shorten the command line) |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 249 | string (REPLACE "${SOURCE_DIR}/" "" compile_cmd "${compile_cmd}") |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 250 | |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 251 | normalise_cmd("${compile_cmd}" COMPILE_CMD_STR) |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 252 | normalise_cmd("${cbmc_cmd}" CBMC_CMD_STR) |
| 253 | |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 254 | file(WRITE ${compile_cmd_file} "${COMPILE_CMD_STR}") |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 255 | file(WRITE ${cbmc_cmd_file} "${CBMC_CMD_STR}") |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 256 | |
| 257 | execute_process(COMMAND ${CMAKE_COMMAND} -E echo_append "CBMC: ${testbench_file}... ") |
| 258 | execute_process( |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 259 | COMMAND ${compile_cmd} |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 260 | RESULT_VARIABLE res_var |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 261 | OUTPUT_FILE ${compile_output_file} |
| 262 | ERROR_FILE ${compile_error_file}) |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 263 | if (NOT ${res_var} EQUAL "0") |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 264 | message(FATAL_ERROR "Compiling testbench with ${RMM_CBMC_COMPILER_PATH} failed. For details see: ${compile_error_file}") |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 265 | endif() |
| 266 | |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 267 | # Only run CBMC if not using compiler-only mode: |
| 268 | if(NOT ${RMM_CBMC_CONFIGURATION} STREQUAL "GCC") |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 269 | execute_process( |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 270 | COMMAND ${cbmc_cmd} |
| 271 | RESULT_VARIABLE res_var |
| 272 | OUTPUT_FILE ${cbmc_output_file} |
| 273 | ERROR_FILE ${cbmc_error_file}) |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 274 | |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 275 | if(RMM_CBMC_VIEWER_OUTPUT) |
| 276 | normalise_cmd("${cbmc_prop_cmd}" CBMC_PROP_CMD_STR) |
| 277 | file(WRITE ${cbmc_prop_cmd_file} "${CBMC_PROP_CMD_STR}") |
| 278 | execute_process( |
| 279 | COMMAND ${cbmc_prop_cmd} |
| 280 | RESULT_VARIABLE res_var |
| 281 | OUTPUT_FILE ${cbmc_prop_output_file} |
| 282 | ERROR_FILE ${cbmc_prop_error_file}) |
| 283 | |
| 284 | normalise_cmd("${cbmc_viewer_cmd}" CBMC_VIEWER_CMD_STR) |
| 285 | file(WRITE ${cbmc_viewer_cmd_file} "${CBMC_VIEWER_CMD_STR}") |
| 286 | execute_process( |
| 287 | COMMAND ${cbmc_viewer_cmd} |
| 288 | RESULT_VARIABLE res_var |
| 289 | OUTPUT_FILE ${cbmc_viewer_output_file} |
| 290 | ERROR_FILE ${cbmc_viewer_error_file}) |
| 291 | if (NOT ${res_var} EQUAL "0") |
| 292 | message(FATAL_ERROR "Failed to run cbmc-viewer. For details see: ${cbmc_viewer_error_file}") |
| 293 | endif() |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 294 | endif() |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 295 | |
| 296 | rmm_cbmc_append_summary("${testbench_filename}" "${cbmc_output_file}" |
| 297 | "${CBMC_RESULT_FILE_SUFFIX}-${CBMC_OUT_FILE_ENDING}" |
| 298 | ${RMM_CBMC_SUMMARY_FIELD_WIDTH} ${RMM_TESTBENCH_RESULT_DIR} ${SUMMARY_FILE}) |
| 299 | |
Mate Toth-Pal | 0361dcb | 2023-11-29 10:20:12 +0100 | [diff] [blame] | 300 | endif() |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 301 | |
| 302 | execute_process(COMMAND ${CMAKE_COMMAND} -E echo "DONE") |
| 303 | |
Mate Toth-Pal | 83a45bd | 2023-09-01 11:17:19 +0200 | [diff] [blame] | 304 | endforeach() |
| 305 | message(STATUS "Result in ${RMM_TESTBENCH_RESULT_DIR}") |
Mate Toth-Pal | 7b875ea | 2023-11-15 16:59:19 +0100 | [diff] [blame] | 306 | |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 307 | # Only run CBMC if not using compiler-only mode: |
| 308 | if(NOT ${RMM_CBMC_CONFIGURATION} STREQUAL "GCC") |
| 309 | list(TRANSFORM TESTBENCH_FILES REPLACE "${TESTBENCH_DIR}/" "" OUTPUT_VARIABLE TESTBENCH_FILENAMES) |
| 310 | execute_process( |
| 311 | WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} |
| 312 | COMMAND ${CHECK_CBMC_SUMMARY_EXECUTABLE} |
| 313 | ${CMAKE_SOURCE_DIR}/tools/cbmc/testbenches_results/BASELINE.${CBMC_RESULT_FILE_SUFFIX} |
| 314 | --testbench-files "${TESTBENCH_FILENAMES}" |
| 315 | ${RMM_TESTBENCH_RESULT_DIR}/${SUMMARY_FILE} |
| 316 | OUTPUT_VARIABLE CHECK_SUMMARY_OUTPUT |
| 317 | ERROR_VARIABLE CHECK_SUMMARY_ERROR |
| 318 | RESULT_VARIABLE CHECK_SUMMARY_RC |
| 319 | OUTPUT_STRIP_TRAILING_WHITESPACE |
| 320 | ) |
Mate Toth-Pal | 7b875ea | 2023-11-15 16:59:19 +0100 | [diff] [blame] | 321 | |
Mate Toth-Pal | 0da5811 | 2024-01-10 11:49:58 +0100 | [diff] [blame] | 322 | if (NOT ${CHECK_SUMMARY_RC} EQUAL "0") |
| 323 | message(WARNING |
| 324 | "cbmc-${CBMC_RESULT_FILE_SUFFIX}: FAILED\n${CHECK_SUMMARY_ERROR}") |
| 325 | else() |
| 326 | message(STATUS "cbmc-${CBMC_RESULT_FILE_SUFFIX}: PASSED") |
| 327 | endif() |
Mate Toth-Pal | 7b875ea | 2023-11-15 16:59:19 +0100 | [diff] [blame] | 328 | endif() |