blob: 86c55b57bdab5589df3dd6902c4b584805c8c129 [file] [log] [blame]
Imre Kised98e9c2019-10-15 16:17:55 +02001#
Imre Kisfdaaf8c2019-12-16 23:53:41 +01002# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
Imre Kised98e9c2019-10-15 16:17:55 +02003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6
7cmake_minimum_required(VERSION 3.11...3.15) # TODO: test with ubuntu
8project(tf-a-unit-tests)
9
10list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
11
12include(CTest)
13include(ExternalProject)
14include(FetchContent)
Imre Kisc625d492020-02-10 16:36:22 +010015include(UnitTest)
Imre Kised98e9c2019-10-15 16:17:55 +020016
17# Configuration variables
18set(TF_A_PATH "" CACHE PATH "Path of the Trusted Firmware A directory")
19set(TF_A_UNIT_TESTS_PATH ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "Path of root directory of the unit test repository")
20set(CPPUTEST_URL "https://github.com/cpputest/cpputest.git" CACHE STRING "CppUTest repository URL")
21set(CPPUTEST_REFSPEC "v3.8" CACHE STRING "CppUTest git refspec")
22set(CPPUTEST_INSTALL_PATH ${CMAKE_CURRENT_BINARY_DIR}/CppUTest_install CACHE PATH "CppUTest installation directory")
23set(CPPUTEST_PACKAGE_PATH ${CPPUTEST_INSTALL_PATH}/lib/CppUTest/cmake CACHE PATH "CppUTest CMake package directory")
24set(CPICKER_CACHE_PATH ${CMAKE_CURRENT_BINARY_DIR}/cpicker_cache CACHE PATH "Directory of c-picker generated file")
25set(UNIT_TEST_COMMON_SOURCES ${CMAKE_CURRENT_LIST_DIR}/common/main.cpp)
26set(CMAKE_CXX_STANDARD 11)
Imre Kise6bf9e62020-01-20 11:34:24 +010027option(COVERAGE "Enable code coverage measurement" OFF)
Imre Kised98e9c2019-10-15 16:17:55 +020028
29# Checking TF-A
30if (NOT TF_A_PATH)
31 message(FATAL_ERROR "TF_A_PATH is not set")
32endif()
33
Imre Kised98e9c2019-10-15 16:17:55 +020034# Checking git
35find_program(GIT_COMMAND "git")
36if (NOT GIT_COMMAND)
37 message(FATAL_ERROR "Please install git")
38endif()
39
40# Fetching CppUTest
41FetchContent_Declare(
42 cpputest
43 GIT_REPOSITORY ${CPPUTEST_URL}
44 GIT_TAG ${CPPUTEST_REFSPEC}
45 GIT_SHALLOW TRUE
46 PATCH_COMMAND git apply ${CMAKE_CURRENT_LIST_DIR}/common/cpputest-cmake-fix.patch
47)
48
49# FetchContent_GetProperties exports cpputest_SOURCE_DIR and cpputest_BINARY_DIR variables
50FetchContent_GetProperties(cpputest)
51if(NOT cpputest_POPULATED)
52 message(STATUS "Fetching CppUTest")
53 FetchContent_Populate(cpputest)
54endif()
55
56# Build and install CppUTest in CMake time. This makes us able to use CppUTest as a CMake package later.
57# Memory leak detection is turned off to avoid conflict with memcheck.
58execute_process(COMMAND
59 ${CMAKE_COMMAND}
60 -DMEMORY_LEAK_DETECTION=OFF
61 -DLONGLONG=ON
62 -DC++11=ON
63 -DCMAKE_INSTALL_PREFIX=${CPPUTEST_INSTALL_PATH}
64 -GUnix\ Makefiles
65 ${cpputest_SOURCE_DIR}
66 WORKING_DIRECTORY
67 ${cpputest_BINARY_DIR}
68)
69execute_process(COMMAND ${CMAKE_COMMAND} --build ${cpputest_BINARY_DIR} -- install -j)
70
71# Finding CppUTest package. CMake will check [package name]_DIR variable.
72set(CppUTest_DIR ${CPPUTEST_PACKAGE_PATH} CACHE PATH "Path of CppUTestConfig.cmake")
73find_package(CppUTest CONFIG REQUIRED)
74
75# find_package sets the CppUTest_INCLUDE_DIRS and CppUTest_LIBRARIES variables
76include_directories(${CppUTest_INCLUDE_DIRS})
77link_libraries(${CppUTest_LIBRARIES})
78
Imre Kise6bf9e62020-01-20 11:34:24 +010079# Coverage
80if (COVERAGE)
81 include(Coverage)
82
83 set(COVERAGE_FILE "coverage.info")
84 set(TF_A_COVERAGE_FILE "trusted-firmware-a-coverage.info")
85 set(TF_A_UT_COVERAGE_FILE "tf-a-unit-tests-coverage.info")
86 set(TF_A_COVERAGE_REPORT_DIR "${CMAKE_CURRENT_BINARY_DIR}/trusted-firmware-a-coverage")
87 set(TF_A_UT_COVERAGE_REPORT_DIR "${CMAKE_CURRENT_BINARY_DIR}/tf-a-unit-tests-coverage")
88
89 # Collecting coverage
Imre Kis335834e2020-02-07 15:44:38 +010090 coverage_generate(
91 NAME "Unit test"
92 SOURCE_DIR ${TF_A_PATH}
93 BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}
94 CPICKER_MAPPING_PATH ${CPICKER_CACHE_PATH}
95 OUTPUT_FILE ${COVERAGE_FILE}
96 )
Imre Kise6bf9e62020-01-20 11:34:24 +010097
98 # Filtering TF-A and unit test coverage
99 coverage_filter(
100 INPUT_FILE ${COVERAGE_FILE}
101 OUTPUT_FILE ${TF_A_COVERAGE_FILE}
102 INCLUDE_DIRECTORY ${TF_A_PATH}
103 )
104 coverage_filter(
105 INPUT_FILE ${COVERAGE_FILE}
106 OUTPUT_FILE ${TF_A_UT_COVERAGE_FILE}
107 INCLUDE_DIRECTORY ${TF_A_UNIT_TESTS_PATH}
108 )
109
110 # Coverage reports
111 coverage_generate_report(
112 INPUT_FILE trusted-firmware-a-coverage.info
113 OUTPUT_DIRECTORY ${TF_A_COVERAGE_REPORT_DIR}
114 )
115 coverage_generate_report(
116 INPUT_FILE tf-a-unit-tests-coverage.info
117 OUTPUT_DIRECTORY ${TF_A_UT_COVERAGE_REPORT_DIR}
118 )
119endif()
120
Imre Kised98e9c2019-10-15 16:17:55 +0200121# Project level include directory
122include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
123
Imre Kisa71757b2019-12-17 00:19:40 +0100124include(tests/bl1/test_bl1_fwu.cmake)
Imre Kised98e9c2019-10-15 16:17:55 +0200125include(tests/lib/libc/test_libc.cmake)
Imre Kisfdaaf8c2019-12-16 23:53:41 +0100126include(tests/lib/object_pool/test_object_pool.cmake)