blob: 69e6a8fd5afbe7fdf1706fd1651a5a98cd5006f9 [file] [log] [blame]
#
# SPDX-License-Identifier: BSD-3-Clause
# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
#
include("SourceCollectHelpers.cmake")
if("${RMM_CBMC_STATIC_ANALYSIS}")
if (NOT (${HOST_VARIANT} STREQUAL "host_cbmc"))
message(FATAL_ERROR "cbmc analysis requires host variant `host_cbmc`. (Add `-DHOST_VARIANT=host_cbmc`)")
endif()
#
# Create the list of source files and include directories that are to be
# included in the analysis.
#
set(rmm_implementation_srcs)
set(rmm_implementation_includes)
add_source_and_include_recursively(rmm-runtime)
list(APPEND rmm_implementation_srcs
"${CMAKE_CURRENT_SOURCE_DIR}/src/tb.c"
"${CMAKE_CURRENT_SOURCE_DIR}/src/tb_common.c"
"${CMAKE_CURRENT_SOURCE_DIR}/src/tb_granules.c")
list(APPEND rmm_implementation_includes
"-I${CMAKE_CURRENT_SOURCE_DIR}/include"
"-I${CMAKE_CURRENT_SOURCE_DIR}/testbenches")
list(REMOVE_DUPLICATES rmm_implementation_includes)
list(REMOVE_DUPLICATES rmm_implementation_srcs)
# Filter source files that are not analysed by CBMC
set(src_filters
"lib/allocator/src"
"lib/arch/src"
"lib/attestation/src"
"lib/measurement/src"
"lib/rmm_el3_ifc/src"
"lib/timers/src"
"lib/xlat/src"
"plat/common/src"
"runtime/rsi"
"runtime/core/run.c"
)
foreach(filter ${src_filters})
list(FILTER rmm_implementation_srcs EXCLUDE REGEX "${filter}")
endforeach()
#
# Rules for running cbmc analysis
#
add_custom_target(cbmc-coverage
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
COMMAND ${CMAKE_COMMAND}
-DRMM_CBMC_CONFIGURATION=COVERAGE
-DSOURCE_DIR=${CMAKE_SOURCE_DIR}
-DBINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
-DTESTBENCH_DIR="${CMAKE_CURRENT_SOURCE_DIR}/testbenches"
-DRMM_IMP_SRCS="${rmm_implementation_srcs}"
-DRMM_IMP_INCS="${rmm_implementation_includes}"
-P ${CMAKE_SOURCE_DIR}/tools/cbmc/CheckCBMC.cmake
)
add_custom_target(cbmc-analysis
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
COMMAND ${CMAKE_COMMAND}
-DRMM_CBMC_CONFIGURATION=ANALYSIS
-DSOURCE_DIR=${CMAKE_SOURCE_DIR}
-DBINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
-DTESTBENCH_DIR="${CMAKE_CURRENT_SOURCE_DIR}/testbenches"
-DRMM_IMP_SRCS="${rmm_implementation_srcs}"
-DRMM_IMP_INCS="${rmm_implementation_includes}"
-P ${CMAKE_SOURCE_DIR}/tools/cbmc/CheckCBMC.cmake
)
add_custom_target(cbmc-assert
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
COMMAND ${CMAKE_COMMAND}
-DRMM_CBMC_CONFIGURATION=ASSERT
-DSOURCE_DIR=${CMAKE_SOURCE_DIR}
-DBINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
-DTESTBENCH_DIR="${CMAKE_CURRENT_SOURCE_DIR}/testbenches"
-DRMM_IMP_SRCS="${rmm_implementation_srcs}"
-DRMM_IMP_INCS="${rmm_implementation_includes}"
-P ${CMAKE_SOURCE_DIR}/tools/cbmc/CheckCBMC.cmake
)
endif() # RMM_CBMC_STATIC_ANALYSIS