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