1# 2# Arm SCP/MCP Software 3# Copyright (c) 2022, Arm Limited and Contributors. All rights reserved. 4# 5# SPDX-License-Identifier: BSD-3-Clause 6# 7 8cmake_minimum_required(VERSION 3.18.3) 9 10project( 11 SCP_UNIT_TEST 12 VERSION 2.8.0 13 DESCRIPTION "Arm SCP/MCP Software" 14 HOMEPAGE_URL 15 "https://developer.arm.com/tools-and-software/open-source-software/firmware/scp-firmware" 16 LANGUAGES C ASM) 17 18find_package(Git) 19 20if(LOG_LEVEL) 21 set(SCP_LOG_LEVEL 22 ${LOG_LEVEL} 23 CACHE STRING "Set SCP Firmware log Level") 24endif() 25 26set(SCP_UNIT_TEST_DIR "${CMAKE_CURRENT_SOURCE_DIR}") 27set(SCP_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../") 28 29if(GIT_FOUND) 30 execute_process( 31 COMMAND "${GIT_EXECUTABLE}" describe --tags --dirty --always 32 WORKING_DIRECTORY "${SCP_UNIT_TEST_DIR}" 33 OUTPUT_VARIABLE SCP_UNIT_TEST_DESCRIBE 34 OUTPUT_STRIP_TRAILING_WHITESPACE) 35endif() 36 37if(NOT SCP_FWK_TEST_DESCRIBE) 38 set(SCP_FWK_TEST_DESCRIBE "v${SCP_FWK_TEST_VERSION}-<unknown>") 39endif() 40 41# Setup top level paths. 42 43# Curent test directory 44set(TEST_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) 45 46# Common framework sources 47set(FWK_SRC_ROOT ${SCP_ROOT}/framework/src) 48set(FWK_INC_ROOT ${SCP_ROOT}/framework/include) 49 50# CMSIS 51set(CMSIS_ROOT ${SCP_ROOT}/contrib/cmsis/git/CMSIS/RTOS2) 52 53# Source module directory 54set(MODULE_ROOT ${SCP_ROOT}/module) 55 56# Unity and CMock sources 57set(CMOCK_ROOT ${SCP_ROOT}/contrib/cmock/git) 58set(UNITY_ROOT ${CMOCK_ROOT}/vendor/unity) 59set(UNITY_SRC_ROOT ${UNITY_ROOT}/src) 60set(CMOCK_SRC_ROOT ${CMOCK_ROOT}/src) 61 62# Framework mock sources 63set(FWK_MOCKS_SRC_ROOT ${TEST_ROOT}/unity_mocks/mocks) 64 65set(TEST_ON_HOST TRUE) 66 67# Common flags 68list(APPEND EXTRA_COMPILE_FLAGS -g3) 69list(APPEND EXTRA_COMPILE_FLAGS -Wall) 70list(APPEND EXTRA_COMPILE_FLAGS -Wextra) 71list(APPEND EXTRA_COMPILE_FLAGS -Werror) 72list(APPEND EXTRA_COMPILE_FLAGS -Wno-missing-field-initializers) 73list(APPEND EXTRA_COMPILE_FLAGS -Wno-error=deprecated-declarations) 74list(APPEND EXTRA_COMPILE_FLAGS -Wno-unused-parameter) 75list(APPEND EXTRA_COMPILE_FLAGS -Wno-strict-aliasing) 76list(APPEND EXTRA_COMPILE_FLAGS -std=gnu11) 77list(APPEND EXTRA_COMPILE_FLAGS -DBUILD_MODE_DEBUG) 78list(APPEND EXTRA_COMPILE_FLAGS -DBUILD_TESTS) 79list(APPEND EXTRA_COMPILE_FLAGS -p) 80list(APPEND EXTRA_COMPILE_FLAGS --coverage) 81if(SCP_LOG_LEVEL) 82 list(APPEND EXTRA_COMPILE_FLAGS -DFWK_LOG_LEVEL=${SCP_LOG_LEVEL}) 83endif() 84 85set(CMAKE_CXX_FLAGS_DEBUG_INIT ${EXTRA_COMPILE_CFLAGS_STR}) 86 87# Create a list of common framework sources. 88list(APPEND FWK_SRC ${CMOCK_SRC_ROOT}/cmock.c) 89list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_arch.c) 90list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_core.c) 91list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_dlist.c) 92list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_id.c) 93list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_interrupt.c) 94list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_io.c) 95list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_log.c) 96list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_mm.c) 97list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_module.c) 98list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_ring.c) 99list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_slist.c) 100list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_status.c) 101list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_string.c) 102list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_delayed_resp.c) 103list(APPEND FWK_SRC ${FWK_SRC_ROOT}/fwk_time.c) 104list(APPEND FWK_SRC ${UNITY_SRC_ROOT}/unity.c) 105 106list(APPEND SCP_UNITY_SRC ${TEST_ROOT}/unity_mocks/scp_unity.c) 107 108#Append common unit tests below here 109list(APPEND UNIT_MODULE mhu3) 110list(APPEND UNIT_MODULE scmi) 111list(APPEND UNIT_MODULE scmi_clock) 112list(APPEND UNIT_MODULE scmi_perf) 113list(APPEND UNIT_MODULE scmi_sensor_req) 114list(APPEND UNIT_MODULE scmi_system_power_req) 115list(APPEND UNIT_MODULE thermal_mgmt) 116list(APPEND UNIT_MODULE traffic_cop) 117 118list(LENGTH UNIT_MODULE UNIT_TEST_MAX) 119 120enable_testing() 121include(CTest) 122 123# cmake-lint: disable=E1120 124foreach(idx RANGE ${UNIT_TEST_MAX}) 125 if(idx EQUAL UNIT_TEST_MAX) 126 break() 127 endif() 128 129 list(GET UNIT_MODULE ${idx} TEST_MODULE) 130 131 add_subdirectory(${SCP_ROOT}/module/${TEST_MODULE}/test 132 ${CMAKE_BINARY_DIR}/${TEST_MODULE}) 133 134endforeach() 135