blob: 85d3a42deae36ba0531bff65cc1620bdc5eb8dbf [file] [log] [blame]
jk-arm957cfea2021-06-18 15:52:12 +05301#/** @file
2# * Copyright (c) 2021, Arm Limited or its affiliates. All rights reserved.
3# * SPDX-License-Identifier : Apache-2.0
4# *
5# * Licensed under the Apache License, Version 2.0 (the "License");
6# * you may not use this file except in compliance with the License.
7# * You may obtain a copy of the License at
8# *
9# * http://www.apache.org/licenses/LICENSE-2.0
10# *
11# * Unless required by applicable law or agreed to in writing, software
12# * distributed under the License is distributed on an "AS IS" BASIS,
13# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# * See the License for the specific language governing permissions and
15# * limitations under the License.
16
17# Set the minimum required version of CMake for the project
18cmake_minimum_required(VERSION 3.10)
19# cmake_policy
20cmake_policy(SET CMP0057 NEW)
21PROJECT (psa_adac_tests)
22
23# Find python interpreter version 3 or greater
24find_package(PythonInterp 3 REQUIRED)
25
26get_filename_component(PSA_ROOT_DIR . ABSOLUTE)
27include(${PSA_ROOT_DIR}/tools/cmake/common/Utils.cmake)
28
29set(CMAKE_C_STANDARD 99)
30set(CMAKE_C_EXTENSIONS Off)
31set(CMAKE_CXX_STANDARD 14)
32set(CMAKE_CXX_EXTENSIONS Off)
33
jk-arm01ee3ff2021-10-18 22:41:47 +053034if(DEFINED RDDI_LIB)
jk-arm957cfea2021-06-18 15:52:12 +053035 if(WIN32)
36 set(DEPENDS_LIB_PATH ${CMAKE_SOURCE_DIR}/depends/rddi/win_32-x86_64)
37 else()
38 set(DEPENDS_LIB_PATH ${CMAKE_SOURCE_DIR}/depends/rddi/linux-x86_64)
39 endif()
40endif()
41
jk-arm01ee3ff2021-10-18 22:41:47 +053042set(DEPENDS_INC_PATH ${CMAKE_SOURCE_DIR}/platform/hosts/${TARGET}/include)
43
jk-arm957cfea2021-06-18 15:52:12 +053044if(NOT DEFINED PSA_ADAC_ROOT)
45 get_filename_component(PSA_ADAC_ROOT ${CMAKE_SOURCE_DIR}/psa-adac ABSOLUTE)
46endif()
47include(${PSA_ADAC_ROOT}/cmake/psa_adac.cmake OPTIONAL)
48
49configure_file(${PSA_ADAC_ROOT}/psa-adac/core/include/psa_adac_config.h.in psa_adac_config.h)
50include_directories (
51 ${DEPENDS_INC_PATH}
52 ${CMAKE_BINARY_DIR}
53 ${PSA_ADAC_ROOT}/psa-adac/core/include
54 ${PSA_ADAC_ROOT}/ports/include
55 )
56
57set(MBEDTLS_CONFIG_FILE "${PSA_ADAC_ROOT}/ports/crypto/manager-crypto-config.h")
58add_compile_options(-DMBEDTLS_CONFIG_FILE="${MBEDTLS_CONFIG_FILE}")
59if (UNIX)
60 add_compile_options(-fPIC -fpic)
61else ()
62 # Silence warning about standard C APIs not being secure.
63 add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
64endif ()
65
66# Generate ADAC LIB
67add_subdirectory(${PSA_ADAC_ROOT}/psa-adac/core adac_core)
68add_subdirectory(${PSA_ADAC_ROOT}/psa-adac/sdm adac_sdm)
69add_subdirectory(${PSA_ADAC_ROOT}/ports/crypto/psa-crypto psa_adac_psa_crypto)
70
71set(ADAC_LIBS psa_adac_sdm psa_adac_core psa_adac_psa_crypto mbedcrypto)
72
73if(NOT DEFINED TFM_PROFILE)
74 message(STATUS "[PSA] : Building Default profile")
75list(APPEND PSA_SUITES #PSA_SUITES
76 "ADAC"
77)
78endif()
79
80# list of VERBOSE options
81list(APPEND PSA_VERBOSE_OPTIONS 1 2 3 4 5)
82
83message(STATUS "[PSA] : ----------Process input arguments- start-------------")
84
85# Check for TARGET command line argument
86_check_arguments("TARGET")
87# Check for SUITE command line argument
88_check_arguments("SUITE")
89
90string(TOLOWER ${SUITE} SUITE_LOWER)
91
92# Check for valid targets
jk-arm01ee3ff2021-10-18 22:41:47 +053093_get_sub_dir_list(PSA_TARGET_LIST ${PSA_ROOT_DIR}/platform/hosts)
jk-arm957cfea2021-06-18 15:52:12 +053094if(NOT ${TARGET} IN_LIST PSA_TARGET_LIST)
95 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DTARGET=${TARGET}, supported targets are : ${PSA_TARGET_LIST}")
96else()
97 message(STATUS "[PSA] : TARGET is set to ${TARGET}")
98endif()
99
100# Check for the presence of required test suite directories
101if(NOT IS_DIRECTORY ${PSA_ROOT_DIR}/tests)
102 message(STATUS "[PSA] : Error: Could not find architecture test suite directories in psa root path ${PSA_ROOT_DIR}")
103endif()
104
105# Check for valid suite cmake argument passed
106if(NOT ${SUITE} IN_LIST PSA_SUITES)
107 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DSUITE=${SUITE}, select one from supported suites which are : ${PSA_SUITES}")
108else()
109 message(STATUS "[PSA] : SUITE is set to ${SUITE}")
110endif()
111
112# Project variables
113set(ADAC_HOST_VAL_LIB psa_adac_val)
114set(ADAC_HOST_PAL_LIB psa_adac_pal)
115set(TEST_COMBINE_LIB test_combine)
116set(ADAC_HOST_EXE psa_adac_test)
117
118set(PSA_SUITE_DIR ${PSA_ROOT_DIR}/tests/${SUITE_LOWER})
119set(PSA_TESTLIST_GENERATOR ${PSA_ROOT_DIR}/tools/scripts/gen_tests_list.py)
120set(TESTSUITE_DB ${PSA_SUITE_DIR}/testsuite.db)
121set(PSA_TESTLIST_FILE ${CMAKE_CURRENT_BINARY_DIR}/${SUITE_LOWER}_testlist.txt)
122set(PSA_TEST_ENTRY_LIST_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_list.inc)
123set(PSA_TEST_ENTRY_FUN_DECLARE_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_fn_declare_list.inc)
124
125# Check for VERBOSE
126if(NOT DEFINED VERBOSE)
127 set(VERBOSE 3 CACHE INTERNAL "Default VERBOSE value" FORCE)
128 message(STATUS "[PSA] : Defaulting VERBOSE to ${VERBOSE}")
129else()
130 if(NOT ${VERBOSE} IN_LIST PSA_VERBOSE_OPTIONS)
131 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DVERBOSE=${VERBOSE}, supported values are : ${PSA_VERBOSE_OPTIONS}")
132 endif()
133 message(STATUS "[PSA] : VERBOSE is set to ${VERBOSE}")
134endif()
135
136if(NOT DEFINED SUITE_TEST_RANGE)
137 set(SUITE_TEST_RANGE_MIN None)
138 set(SUITE_TEST_RANGE_MAX None)
139else()
140 list(LENGTH SUITE_TEST_RANGE SUITE_TEST_RANGE_LENGTH)
141 if(${SUITE_TEST_RANGE_LENGTH} GREATER "2")
142 message(FATAL_ERROR "[PSA] : -DSUITE_TEST_RANGE=<...> value error! accepts two "
143 " numbers in quotes separated with ';'")
144 endif()
145 if(${SUITE_TEST_RANGE_LENGTH} EQUAL "2")
146 list(GET SUITE_TEST_RANGE 0 SUITE_TEST_RANGE_MIN)
147 list(GET SUITE_TEST_RANGE 1 SUITE_TEST_RANGE_MAX)
148 message(STATUS "[PSA] : Testing (${SUITE_TEST_RANGE_MIN}, ${SUITE_TEST_RANGE_MAX}) of ${SUITE} suite")
149 endif()
150 if(${SUITE_TEST_RANGE_LENGTH} EQUAL "1")
151 set(SUITE_TEST_RANGE_MIN ${SUITE_TEST_RANGE})
152 set(SUITE_TEST_RANGE_MAX ${SUITE_TEST_RANGE})
153 message(STATUS "[PSA] : Testing ${SUITE_TEST_RANGE_MIN} of ${SUITE} suite")
154 endif()
155endif()
156
157message(STATUS "[PSA] : ----------Process input arguments- complete-------------")
158
159# Create PSA clean list
160list(APPEND PSA_CLEAN_LIST
161 ${PSA_TESTLIST_FILE}
162 ${PSA_TEST_ENTRY_LIST_INC}
163 ${PSA_TEST_ENTRY_FUN_DECLARE_INC}
164)
165
166# Process testsuite.db
167message(STATUS "[PSA] : Creating testlist.txt 'available at ${PSA_TESTLIST_FILE}'")
168execute_process(COMMAND ${PYTHON_EXECUTABLE} ${PSA_TESTLIST_GENERATOR}
169 ${SUITE_LOWER}
170 ${TESTSUITE_DB}
171 ${PSA_TESTLIST_FILE}
172 ${PSA_TEST_ENTRY_LIST_INC}
173 ${PSA_TEST_ENTRY_FUN_DECLARE_INC}
174 ${SUITE_TEST_RANGE_MIN}
175 ${SUITE_TEST_RANGE_MAX})
176
177# Creating CMake list variable from file
178file(READ ${PSA_TESTLIST_FILE} PSA_TEST_LIST)
179if(NOT PSA_TEST_LIST)
180 message(FATAL_ERROR "[PSA] : Invalid test number!")
181endif()
182string(REGEX REPLACE "\n" ";" PSA_TEST_LIST "${PSA_TEST_LIST}")
183
184# Global macro to identify the PSA test suite cmake build
185add_definitions(-D${SUITE})
186add_definitions(-DVERBOSE=${VERBOSE})
187add_definitions(-D${TARGET})
188
189# Build PAL LIB
jk-arm01ee3ff2021-10-18 22:41:47 +0530190include(${CMAKE_SOURCE_DIR}/platform/common/pal.cmake)
191if(DEFINED RDDI_LIB)
jk-arm957cfea2021-06-18 15:52:12 +0530192 add_subdirectory(${CMAKE_SOURCE_DIR}/platform/csapbcom)
193 set(ADAC_HOST_PAL_LIB csapbcom)
jk-arm01ee3ff2021-10-18 22:41:47 +0530194else()
195 add_subdirectory(${CMAKE_SOURCE_DIR}/platform/hosts/${TARGET} platform_stdc)
196 target_link_libraries(${ADAC_HOST_PAL_LIB} platform_stdc)
jk-arm957cfea2021-06-18 15:52:12 +0530197endif()
198
199# Generate VAL LIB
200include(${CMAKE_SOURCE_DIR}/val/val.cmake)
201
jk-arm01ee3ff2021-10-18 22:41:47 +0530202# Build test suite
jk-arm957cfea2021-06-18 15:52:12 +0530203include(${PSA_SUITE_DIR}/suite.cmake)
204
jk-arm01ee3ff2021-10-18 22:41:47 +0530205#Create single executable
jk-arm957cfea2021-06-18 15:52:12 +0530206add_executable(${ADAC_HOST_EXE} ${SUITE_CC_SOURCE})
207target_include_directories(${ADAC_HOST_EXE} PRIVATE
208 ${CMAKE_SOURCE_DIR}/val/include
jk-arm01ee3ff2021-10-18 22:41:47 +0530209 ${CMAKE_SOURCE_DIR}/platform/common/include
jk-arm957cfea2021-06-18 15:52:12 +0530210 )
211target_link_libraries (${ADAC_HOST_EXE} ${TEST_COMBINE_LIB}
212 ${ADAC_HOST_VAL_LIB}
213 ${ADAC_HOST_PAL_LIB}
214 ${ADAC_LIBS}
215 )
216
217# Include the files for make clean
218foreach(clean_item ${PSA_CLEAN_LIST})
219 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clean_item})
220endforeach()
221