blob: e0f1dbe1244c3414a93ce8b97995487dee10b551 [file] [log] [blame]
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +05301#/** @file
jk-armbf532fd2021-05-07 13:58:22 +05302# * Copyright (c) 2019-2021, Arm Limited or its affiliates. All rights reserved.
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +05303# * 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
18# Set the minimum required version of CMake for the project
19cmake_minimum_required(VERSION 3.10)
20
21# cmake_policy
22cmake_policy(SET CMP0057 NEW)
23
24# Find python interpreter version 3 or greater
25find_package(PythonInterp 3 REQUIRED)
26# Find Git package
27find_package(Git REQUIRED)
28
29get_filename_component(PSA_ROOT_DIR . ABSOLUTE)
30
Lingkai Dong9d4e7df2021-01-13 16:57:54 +000031include(${PSA_ROOT_DIR}/tools/cmake/common/Utils.cmake)
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +053032include(${PSA_ROOT_DIR}/tools/cmake/common/CMakeSettings.cmake)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +053033include(${PSA_ROOT_DIR}/tools/cmake/common/CMakeExternal.cmake)
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +053034
jotman016d7dd4e2020-11-10 17:32:28 +080035if(NOT DEFINED TFM_PROFILE)
36 message(STATUS "[PSA] : Building Default profile")
37list(APPEND PSA_SUITES
38 "IPC"
39 "CRYPTO"
40 "INTERNAL_TRUSTED_STORAGE"
41 "PROTECTED_STORAGE"
42 "STORAGE"
43 "INITIAL_ATTESTATION"
44)
45else()
46
47if("${TFM_PROFILE}" STREQUAL "profile_small")
48# list of supported suites
49list(APPEND PSA_SUITES
50 "CRYPTO"
51 "INTERNAL_TRUSTED_STORAGE"
52 "INITIAL_ATTESTATION"
53)
54else()
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +053055# list of supported suites
56list(APPEND PSA_SUITES
57 "IPC"
58 "CRYPTO"
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +053059 "INTERNAL_TRUSTED_STORAGE"
jotman016d7dd4e2020-11-10 17:32:28 +080060 "PROTECTED_STORAGE"
Vinay Kumar Kotegowder18fcd402020-04-27 17:38:41 +053061 "STORAGE"
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +053062 "INITIAL_ATTESTATION"
63)
jotman016d7dd4e2020-11-10 17:32:28 +080064endif()
65endif()
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +053066# list of ipc files required
67list(APPEND PSA_IPC_FILES
68 "psa/client.h"
69 "psa/service.h"
Jaykumar Pitambarbhai Patel1c2b0282019-11-06 11:29:13 +053070 "psa/lifecycle.h"
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +053071 "psa_manifest/sid.h"
72 "psa_manifest/pid.h"
Jaykumar Pitambarbhai Patel1c2b0282019-11-06 11:29:13 +053073 "psa_manifest/driver_partition_psa.h"
74 "psa_manifest/client_partition_psa.h"
75 "psa_manifest/server_partition_psa.h"
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +053076)
77
78# list of crypto files required
79list(APPEND PSA_CRYPTO_FILES
80 "psa/crypto.h"
81)
82
83# list of protected_storage files required
84list(APPEND PSA_PROTECTED_STORAGE_FILES
85 "psa/protected_storage.h"
86)
87
88# list of internal_trusted_storage files required
89list(APPEND PSA_INTERNAL_TRUSTED_STORAGE_FILES
90 "psa/internal_trusted_storage.h"
91)
92
Vinay Kumar Kotegowder18fcd402020-04-27 17:38:41 +053093# list of storage files required
94list(APPEND PSA_STORAGE_FILES
95 ${PSA_INTERNAL_TRUSTED_STORAGE_FILES}
96 ${PSA_PROTECTED_STORAGE_FILES}
97)
98
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +053099# list of initial_attestation files required
100list(APPEND PSA_INITIAL_ATTESTATION_FILES
101 "psa/initial_attestation.h"
102 "psa/crypto.h"
103)
104
105# list of supported toolchains
106list(APPEND PSA_TOOLCHAIN_SUPPORT
107 GNUARM
108 ARMCLANG
109 HOST_GCC
jotman01bed7a152021-05-25 22:57:17 +0800110 GCC_LINUX
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530111)
112
Øyvind Rønningstadc50804e2021-03-12 12:43:25 +0100113# list of supported CROSS_COMPILE toolchains
114list(APPEND CROSS_COMPILE_TOOLCHAIN_SUPPORT
115 GNUARM
116)
117
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530118# list of suported CPU arch
119list(APPEND PSA_CPU_ARCH_SUPPORT
120 armv8m_ml
121 armv8m_bl
122 armv7m
jotman01bed7a152021-05-25 22:57:17 +0800123 armv8a
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530124)
125
126# list of VERBOSE options
127list(APPEND PSA_VERBOSE_OPTIONS 1 2 3 4 5)
128
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530129# list of PLATFORM_PSA_ISOLATION_LEVEL options
jotman016d7dd4e2020-11-10 17:32:28 +0800130if("${TFM_PROFILE}" STREQUAL "profile_medium")
131list(APPEND PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS 1 2)
132else()
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530133list(APPEND PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS 1 2 3)
jotman016d7dd4e2020-11-10 17:32:28 +0800134endif()
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530135
jk-armbf532fd2021-05-07 13:58:22 +0530136# list of available spec version
137if("${SUITE}" STREQUAL "STORAGE" OR ${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE" OR ${SUITE} STREQUAL "PROTECTED_STORAGE")
138list(APPEND PSA_SPEC_VERSION
139 1.0-BETA2
140 1.0
141)
142elseif("${SUITE}" STREQUAL "CRYPTO")
143list(APPEND PSA_SPEC_VERSION
144 1.0-BETA1
145 1.0-BETA2
146 1.0-BETA3
147)
148elseif("${SUITE}" STREQUAL "INITIAL_ATTESTATION")
149list(APPEND PSA_SPEC_VERSION
150 1.0-BETA0
151 1.0.0
152 1.0.1
153 1.0.2
154)
jk-arm957cfea2021-06-18 15:52:12 +0530155elseif("${SUITE}" STREQUAL "IPC")
156list(APPEND PSA_SPEC_VERSION
157 1.0
158 1.1
159)
160
161endif()
162
163#list of values available for connection based
164if(${SUITE} STREQUAL "IPC")
165list(APPEND PSA_STATELESS_ROT 0 1)
jk-armbf532fd2021-05-07 13:58:22 +0530166endif()
167
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530168message(STATUS "[PSA] : ----------Process input arguments- start-------------")
169
170# Check for TARGET command line argument
171_check_arguments("TARGET")
172# Check for SUTIE command line argument
173_check_arguments("SUITE")
174# Check for PSA_INCLUDE_PATHS command line argument
175_check_arguments("PSA_INCLUDE_PATHS")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530176
177string(TOLOWER ${SUITE} SUITE_LOWER)
178
179# Check for valid targets
180_get_sub_dir_list(PSA_TARGET_LIST ${PSA_ROOT_DIR}/platform/targets)
181if(NOT ${TARGET} IN_LIST PSA_TARGET_LIST)
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100182 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DTARGET=${TARGET}, supported targets are : ${PSA_TARGET_LIST}")
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530183else()
184 message(STATUS "[PSA] : TARGET is set to ${TARGET}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530185endif()
186
187# Check for the presence of required test suite directories
188if((NOT IS_DIRECTORY ${PSA_ROOT_DIR}/dev_apis) OR (NOT IS_DIRECTORY ${PSA_ROOT_DIR}/ff))
189 message(STATUS "[PSA] : Error: Could not find architecture test suite directories in psa root path ${PSA_ROOT_DIR}")
190endif()
191
192if(FALSE)
193# Check for build directory specified
194if(NOT DEFINED BUILD)
195 set(BUILD ${CMAKE_CURRENT_BINARY_DIR}/BUILD CACHE INTERNAL "Defaulting build directory to ${BUILD}" FORCE)
196else()
197 set(BUILD ${CMAKE_CURRENT_BINARY_DIR}/${BUILD}/BUILD CACHE INTERNAL "Defaulting build directory to ${BUILD}" FORCE)
198endif()
199endif()
200
201# Check for valid suite cmake argument passed
202if(NOT ${SUITE} IN_LIST PSA_SUITES)
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100203 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DSUITE=${SUITE}, select one from supported suites which are : ${PSA_SUITES}")
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530204else()
205 message(STATUS "[PSA] : SUITE is set to ${SUITE}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530206endif()
207
208# Project variables
209set(PSA_TARGET_PRE_BUILD psa_pre_build)
210set(PSA_TARGET_GENERATE_DATABASE_PRE psa_generate_database_prerequisite)
211set(PSA_TARGET_GENERATE_DATABASE psa_generate_database)
212set(PSA_TARGET_GENERATE_DATABASE_POST psa_generate_database_cleanup)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530213if(${SUITE} STREQUAL "INITIAL_ATTESTATION")
214 set(PSA_TARGET_QCBOR psa_qcbor)
215endif()
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530216set(PSA_TARGET_PAL_NSPE_LIB pal_nspe)
217set(PSA_TARGET_VAL_NSPE_LIB val_nspe)
218set(PSA_TARGET_TEST_COMBINE_LIB test_combine)
jk-armbf532fd2021-05-07 13:58:22 +0530219set(PSA_TARGET_DRIVER_PARTITION_LIB tfm_psa_rot_partition_driver_partition)
220set(PSA_TARGET_CLIENT_PARTITION_LIB tfm_app_rot_partition_client_partition)
221set(PSA_TARGET_SERVER_PARTITION_LIB tfm_app_rot_partition_server_partition)
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530222if(${SUITE} STREQUAL "IPC")
223 set(PSA_SUITE_DIR ${PSA_ROOT_DIR}/ff/${SUITE_LOWER})
224 set(PSA_SUITE_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/ff/${SUITE_LOWER})
Vinay Kumar Kotegowder18fcd402020-04-27 17:38:41 +0530225elseif((${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") OR (${SUITE} STREQUAL "PROTECTED_STORAGE"))
226 set(PSA_SUITE_DIR ${PSA_ROOT_DIR}/dev_apis/storage)
227 set(PSA_SUITE_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/dev_apis/storage)
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530228else()
229 set(PSA_SUITE_DIR ${PSA_ROOT_DIR}/dev_apis/${SUITE_LOWER})
230 set(PSA_SUITE_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/dev_apis/${SUITE_LOWER})
231endif()
232set(PSA_TARGET_CONFIG_HEADER_GENERATOR ${PSA_ROOT_DIR}/tools/scripts/target_cfg/targetConfigGen.py)
233set(PSA_TESTLIST_GENERATOR ${PSA_ROOT_DIR}/tools/scripts/gen_tests_list.py)
234set(TARGET_CONFIGURATION_FILE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cfg)
235set(TGT_CONFIG_SOURCE_C ${CMAKE_CURRENT_BINARY_DIR}/targetConfigGen.c)
236set(OUTPUT_HEADER target_database.h)
237set(DATABASE_TABLE_NAME target_database)
238set(DATABASE_TABLE_SECTION_NAME "NOSECTION")
Vinay Kumar Kotegowder18fcd402020-04-27 17:38:41 +0530239set(TARGET_HEADER_GEN_INCLUDE_PATHS "${PSA_ROOT_DIR}/val/nspe|${PSA_ROOT_DIR}/val/common|${PSA_ROOT_DIR}/platform/targets/common/nspe|${PSA_ROOT_DIR}/platform/targets/common/nspe/crypto|${PSA_ROOT_DIR}/platform/targets/${TARGET}/nspe")
jk-armbf532fd2021-05-07 13:58:22 +0530240if(NOT DEFINED SPEC_VERSION)
241 if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE")
242 set(TESTSUITE_DB ${PSA_SUITE_DIR}/its_testsuite.db)
243 elseif((${SUITE} STREQUAL "PROTECTED_STORAGE") OR (${SUITE} STREQUAL "STORAGE"))
244 set(TESTSUITE_DB ${PSA_SUITE_DIR}/ps_testsuite.db)
245 else()
246 set(TESTSUITE_DB ${PSA_SUITE_DIR}/testsuite.db)
247 endif()
Vinay Kumar Kotegowder18fcd402020-04-27 17:38:41 +0530248else()
jk-armbf532fd2021-05-07 13:58:22 +0530249 if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE")
250 if(${SPEC_VERSION} STREQUAL "1.0-BETA2")
251 set(TESTSUITE_DB ${PSA_SUITE_DIR}/its_1.0-beta2_testsuite.db)
252 endif()
253 if(${SPEC_VERSION} STREQUAL "1.0")
254 set(TESTSUITE_DB ${PSA_SUITE_DIR}/its_1.0_testsuite.db)
255 endif()
256 elseif((${SUITE} STREQUAL "PROTECTED_STORAGE") OR (${SUITE} STREQUAL "STORAGE"))
257 if(${SPEC_VERSION} STREQUAL "1.0-BETA2")
258 set(TESTSUITE_DB ${PSA_SUITE_DIR}/ps_1.0-beta2_testsuite.db)
259 endif()
260 if(${SPEC_VERSION} STREQUAL "1.0")
261 set(TESTSUITE_DB ${PSA_SUITE_DIR}/ps_1.0_testsuite.db)
262 endif()
263 elseif(${SUITE} STREQUAL "CRYPTO")
264 if(${SPEC_VERSION} STREQUAL "1.0-BETA1")
265 set(TESTSUITE_DB ${PSA_SUITE_DIR}/1.0-beta1_testsuite.db)
266 endif()
267 if(${SPEC_VERSION} STREQUAL "1.0-BETA2")
268 set(TESTSUITE_DB ${PSA_SUITE_DIR}/1.0-beta2_testsuite.db)
269 endif()
270 if(${SPEC_VERSION} STREQUAL "1.0-BETA3")
271 set(TESTSUITE_DB ${PSA_SUITE_DIR}/1.0-beta3_testsuite.db)
272 endif()
273 elseif(${SUITE} STREQUAL "INITIAL_ATTESTATION")
274 if(${SPEC_VERSION} STREQUAL "1.0-BETA0")
275 set(TESTSUITE_DB ${PSA_SUITE_DIR}/1.0-beta0_testsuite.db)
276 endif()
277 if(${SPEC_VERSION} STREQUAL "1.0.0")
278 set(TESTSUITE_DB ${PSA_SUITE_DIR}/1.0.0_testsuite.db)
279 endif()
280 if(${SPEC_VERSION} STREQUAL "1.0.1")
281 set(TESTSUITE_DB ${PSA_SUITE_DIR}/1.0.1_testsuite.db)
282 endif()
283 if(${SPEC_VERSION} STREQUAL "1.0.2")
284 set(TESTSUITE_DB ${PSA_SUITE_DIR}/1.0.2_testsuite.db)
285 endif()
jk-arm957cfea2021-06-18 15:52:12 +0530286 elseif(${SUITE} STREQUAL "IPC")
287 if(${SPEC_VERSION} STREQUAL "1.1")
288 if(DEFINED STATELESS_ROT_TESTS)
289 if(${STATELESS_ROT_TESTS} EQUAL 1)
290 set(TESTSUITE_DB ${PSA_SUITE_DIR}/stateless_rot_testsuite.db)
291 else()
292 set(TESTSUITE_DB ${PSA_SUITE_DIR}/testsuite.db)
293 endif()
294 else()
295 set(TESTSUITE_DB ${PSA_SUITE_DIR}/testsuite.db)
296 endif()
297 else()
298 set(TESTSUITE_DB ${PSA_SUITE_DIR}/testsuite.db)
299 endif()
300 endif()
Vinay Kumar Kotegowder18fcd402020-04-27 17:38:41 +0530301endif()
302set(PSA_TESTLIST_FILE ${CMAKE_CURRENT_BINARY_DIR}/${SUITE_LOWER}_testlist.txt)
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530303set(PSA_TEST_ENTRY_LIST_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_list.inc)
304set(PSA_TEST_ENTRY_FUN_DECLARE_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_fn_declare_list.inc)
305set(PSA_CLIENT_TEST_LIST_DELCARE_INC ${CMAKE_CURRENT_BINARY_DIR}/client_tests_list_declare.inc)
306set(PSA_CLIENT_TEST_LIST_INC ${CMAKE_CURRENT_BINARY_DIR}/client_tests_list.inc)
307set(PSA_SERVER_TEST_LIST_DECLARE_INC ${CMAKE_CURRENT_BINARY_DIR}/server_tests_list_declare.inc)
308set(PSA_SERVER_TEST_LIST ${CMAKE_CURRENT_BINARY_DIR}/server_tests_list.inc)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530309if(${SUITE} STREQUAL "INITIAL_ATTESTATION")
310 set(PSA_QCBOR_INCLUDE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/inc)
311endif()
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530312
313# Validity check for required files for a given suite
314if(NOT DEFINED PSA_${SUITE}_FILES)
315 message(FATAL_ERROR "[PSA] : List of file/s to verify against ${suite} is not defined")
316endif()
317foreach(file_item ${PSA_${SUITE}_FILES})
318 set(PSA_FILE_FOUND FALSE)
319 foreach(include_path ${PSA_INCLUDE_PATHS})
320 if((EXISTS ${include_path}/${file_item}) AND
321 (NOT PSA_FILE_FOUND))
322 set(PSA_FILE_FOUND TRUE)
323 break()
324 endif()
325 endforeach()
326 if(NOT PSA_FILE_FOUND)
327 message(FATAL_ERROR "[PSA] : Couldn't find ${file_item} in ${PSA_INCLUDE_PATHS}")
328 endif()
329endforeach()
330
331# Check for TOOLCHAIN command line argument
332if(NOT DEFINED TOOLCHAIN)
333 set(TOOLCHAIN "GNUARM" CACHE INTERNAL "Compiler used" FORCE)
334 message(STATUS "[PSA] : Defaulting compiler to ${TOOLCHAIN}")
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530335else()
336 message(STATUS "[PSA] : TOOLCHAIN is set to ${TOOLCHAIN}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530337endif()
338
Gowtham Siddarth1d6d4692019-09-16 11:47:29 +0530339if(${TOOLCHAIN} STREQUAL "ARMCLANG" OR ${TOOLCHAIN} STREQUAL "GNUARM")
340 if(NOT DEFINED CPU_ARCH)
341 message(FATAL_ERROR "[PSA] : Error: -DCPU_ARCH option missing")
342 else()
343 # Check for CPU architecture
344 if(NOT ${CPU_ARCH} IN_LIST PSA_CPU_ARCH_SUPPORT)
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100345 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DCPU_ARCH=${CPU_ARCH}, supported CPU arch are : ${PSA_CPU_ARCH_SUPPORT}")
Gowtham Siddarth1d6d4692019-09-16 11:47:29 +0530346 endif()
347 endif()
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530348 message(STATUS "[PSA] : CPU_ARCH is set to ${CPU_ARCH}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530349endif()
350
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530351# Check for VERBOSE
352if(NOT DEFINED VERBOSE)
353 set(VERBOSE 3 CACHE INTERNAL "Default VERBOSE value" FORCE)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530354 message(STATUS "[PSA] : Defaulting VERBOSE to ${VERBOSE}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530355else()
356 if(NOT ${VERBOSE} IN_LIST PSA_VERBOSE_OPTIONS)
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100357 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DVERBOSE=${VERBOSE}, supported values are : ${PSA_VERBOSE_OPTIONS}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530358 endif()
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530359 message(STATUS "[PSA] : VERBOSE is set to ${VERBOSE}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530360endif()
361
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530362# Check for PLATFORM_PSA_ISOLATION_LEVEL
363if(NOT DEFINED PLATFORM_PSA_ISOLATION_LEVEL)
jotman016d7dd4e2020-11-10 17:32:28 +0800364 if("${TFM_PROFILE}" STREQUAL "profile_medium")
365 set(PLATFORM_PSA_ISOLATION_LEVEL 2 CACHE INTERNAL "Default PLATFORM_PSA_ISOLATION_LEVEL value" FORCE)
366 else()
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530367 set(PLATFORM_PSA_ISOLATION_LEVEL 3 CACHE INTERNAL "Default PLATFORM_PSA_ISOLATION_LEVEL value" FORCE)
jotman016d7dd4e2020-11-10 17:32:28 +0800368 endif()
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530369 if(${SUITE} STREQUAL "IPC")
370 message(STATUS "[PSA] : Defaulting PLATFORM_PSA_ISOLATION_LEVEL to ${PLATFORM_PSA_ISOLATION_LEVEL}")
371 endif()
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530372else()
373 if(NOT ${PLATFORM_PSA_ISOLATION_LEVEL} IN_LIST PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS)
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100374 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DPLATFORM_PSA_ISOLATION_LEVEL=${PLATFORM_PSA_ISOLATION_LEVEL}, supported values are : ${PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS}")
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530375 endif()
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530376 if(${SUITE} STREQUAL "IPC")
377 message(STATUS "[PSA] : PLATFORM_PSA_ISOLATION_LEVEL is set to ${PLATFORM_PSA_ISOLATION_LEVEL}")
378 endif()
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530379endif()
380
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530381if(NOT DEFINED INCLUDE_PANIC_TESTS)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530382 #By default panic tests are disabled
383 set(INCLUDE_PANIC_TESTS 0 CACHE INTERNAL "Default INCLUDE_PANIC_TESTS value" FORCE)
384 message(STATUS "[PSA] : Defaulting INCLUDE_PANIC_TESTS to ${INCLUDE_PANIC_TESTS}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530385else()
386 if(INCLUDE_PANIC_TESTS EQUAL 1)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530387 message(STATUS "[PSA] : "
388 "INCLUDE_PANIC_TESTS set to 1, therefore including PSA APIs panic tests into the regression,\n"
389 "\tensure that watchdog.num is set to 1 in ${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cfg")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530390 endif()
391endif()
392
393if(NOT DEFINED WATCHDOG_AVAILABLE)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530394 #Assuming watchdog is available to program by test suite
395 set(WATCHDOG_AVAILABLE 1 CACHE INTERNAL "Default WATCHDOG_AVAILABLE value" FORCE)
396 message(STATUS "[PSA] : Defaulting WATCHDOG_AVAILABLE to ${WATCHDOG_AVAILABLE}")
397else()
398 message(STATUS "[PSA] : WATCHDOG_AVAILABLE is set to ${WATCHDOG_AVAILABLE}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530399endif()
400
401if((INCLUDE_PANIC_TESTS EQUAL 1) AND
402 (WATCHDOG_AVAILABLE EQUAL 0))
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530403 message(WARNING "[PSA]: "
404 "Note that to test PSA APIs panic conditions, test harness may require to access"
405 "the watchdog timer in oder to recover from panic and to be able to continue with"
406 "next test. Ignore this warning if system under test has capability to reset the"
407 "system when it encounters panic condition.")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530408endif()
409
410if(NOT DEFINED SP_HEAP_MEM_SUPP)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530411 #Are dynamic memory functions available to secure partition?
412 set(SP_HEAP_MEM_SUPP 1 CACHE INTERNAL "Default SP_HEAP_MEM_SUPP value" FORCE)
413 message(STATUS "[PSA] : Defaulting SP_HEAP_MEM_SUPP to ${SP_HEAP_MEM_SUPP}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530414endif()
415
Vinay Kumar Kotegowderac218992020-04-03 12:56:00 +0530416if(NOT DEFINED SUITE_TEST_RANGE)
417 set(SUITE_TEST_RANGE_MIN None)
418 set(SUITE_TEST_RANGE_MAX None)
419else()
420 list(LENGTH SUITE_TEST_RANGE SUITE_TEST_RANGE_LENGTH)
421 if(${SUITE_TEST_RANGE_LENGTH} GREATER "2")
422 message(FATAL_ERROR "[PSA] : -DSUITE_TEST_RANGE=<...> value error! accepts two "
423 " numbers in quotes separated with ';'")
424 endif()
425 if(${SUITE_TEST_RANGE_LENGTH} EQUAL "2")
426 list(GET SUITE_TEST_RANGE 0 SUITE_TEST_RANGE_MIN)
427 list(GET SUITE_TEST_RANGE 1 SUITE_TEST_RANGE_MAX)
428 message(STATUS "[PSA] : Testing (${SUITE_TEST_RANGE_MIN}, ${SUITE_TEST_RANGE_MAX}) of ${SUITE} suite")
429 endif()
430 if(${SUITE_TEST_RANGE_LENGTH} EQUAL "1")
431 set(SUITE_TEST_RANGE_MIN ${SUITE_TEST_RANGE})
432 set(SUITE_TEST_RANGE_MAX ${SUITE_TEST_RANGE})
433 message(STATUS "[PSA] : Testing ${SUITE_TEST_RANGE_MIN} of ${SUITE} suite")
434 endif()
435endif()
436
jk-armbf532fd2021-05-07 13:58:22 +0530437if(NOT DEFINED SPEC_VERSION)
438 message(STATUS "[PSA] : Default spec version")
439else()
440 if(NOT ${SPEC_VERSION} IN_LIST PSA_SPEC_VERSION)
441 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DSPEC_VERSION=${SPEC_VERSION}, supported values are : ${PSA_SPEC_VERSION} for ${SUITE}")
442 else()
443 message(STATUS "[PSA] : Testing ${SUITE} for spec version ${SPEC_VERSION}")
444 endif()
445endif()
446
jk-arm957cfea2021-06-18 15:52:12 +0530447if(DEFINED STATELESS_ROT_TESTS)
448 if(NOT ${STATELESS_ROT_TESTS} IN_LIST PSA_STATELESS_ROT)
449 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DSTATELESS_ROT_TESTS=${STATELESS_ROT_TESTS}, supported values are : ${PSA_STATELESS_ROT}")
450 elseif(${STATELESS_ROT_TESTS} EQUAL 1)
451 message(STATUS "[PSA] : Testing ${SUITE} for stateless rot")
452 elseif(${STATELESS_ROT_TESTS} EQUAL 0)
453 message(STATUS "[PSA] : Testing ${SUITE} for connection based")
454 endif()
455
456 if(NOT DEFINED SPEC_VERSION)
457 message(FATAL_ERROR "[PSA] : Error: SPEC_VERSION is require for STATELESS_ROT_TESTS.")
458 elseif(${SUITE} STREQUAL "IPC")
459 if(${SPEC_VERSION} STREQUAL "1.0")
460 message(FATAL_ERROR "[PSA] : Error: STATELESS_ROT_TESTS is only valid for SPEC_VERSION=1.1.")
461 elseif(${SPEC_VERSION} STREQUAL "1.1")
462 add_definitions(-DSPEC_VERSION=11)
463 if(${STATELESS_ROT_TESTS} EQUAL 1)
464 add_definitions(-DSTATELESS_ROT=1)
465 elseif(${STATELESS_ROT_TESTS} EQUAL 0)
466 add_definitions(-DSTATELESS_ROT=0)
467 endif()
468 endif()
469 else()
470 message(FATAL_ERROR "[PSA] : Error: STATELESS_ROT_TESTS is only applicable to IPC Test Suite.")
471 endif()
472else()
473 add_definitions(-DSTATELESS_ROT=0)
474 if(DEFINED SPEC_VERSION)
475 if(${SUITE} STREQUAL "IPC")
476 if(${SPEC_VERSION} STREQUAL "1.0")
477 add_definitions(-DSPEC_VERSION=10)
478 endif()
479 if(${SPEC_VERSION} STREQUAL "1.1")
480 add_definitions(-DSPEC_VERSION=11)
481 endif()
482 endif()
483 endif()
484endif()
485
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530486message(STATUS "[PSA] : ----------Process input arguments- complete-------------")
487
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530488
jotman016d7dd4e2020-11-10 17:32:28 +0800489if((${SUITE} STREQUAL "INITIAL_ATTESTATION") AND (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}))
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530490# Clone QCBOR and move to specified tag
491execute_process(COMMAND ${GIT_EXECUTABLE} clone ${PSA_QCBOR_GIT_REPO_LINK} ${PSA_TARGET_QCBOR}
492 RESULT_VARIABLE ${PSA_TARGET_QCBOR}_clone_result
493 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
494if(${PSA_TARGET_QCBOR}_clone_result)
495 message(FATAL_ERROR "git clone failed for ${PSA_QCBOR_GIT_REPO_LINK}")
496endif()
497
498if(NOT ${PSA_TARGET_QCBOR}_clone_result)
499execute_process(COMMAND ${GIT_EXECUTABLE} checkout -q "${PSA_QCBOR_GIT_REPO_TAG}"
500 RESULT_VARIABLE ${PSA_TARGET_QCBOR}_checkout_result
501 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR})
502if(${PSA_TARGET_QCBOR}_checkout_result)
503 message(FATAL_ERROR "git checkout failed for Repo : ${PSA_QCBOR_GIT_REPO_LINK}, Tag : ${PSA_QCBOR_GIT_REPO_TAG}")
504endif()
505endif()
506endif()
gowtham siddarth12833042020-02-10 22:11:11 +0530507
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530508# Create PSA clean list
509list(APPEND PSA_CLEAN_LIST
510 ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_HEADER}
511 ${PSA_TESTLIST_FILE}
512 ${PSA_TEST_ENTRY_LIST_INC}
513 ${PSA_TEST_ENTRY_FUN_DECLARE_INC}
514 ${PSA_CLIENT_TEST_LIST_DELCARE_INC}
515 ${PSA_CLIENT_TEST_LIST_INC}
516 ${PSA_SERVER_TEST_LIST_DECLARE_INC}
517 ${PSA_SERVER_TEST_LIST}
518)
519
520# Process testsuite.db
521message(STATUS "[PSA] : Creating testlist.txt 'available at ${PSA_TESTLIST_FILE}'")
522execute_process(COMMAND ${PYTHON_EXECUTABLE} ${PSA_TESTLIST_GENERATOR}
523 ${SUITE_LOWER}
524 ${TESTSUITE_DB}
525 ${INCLUDE_PANIC_TESTS}
526 ${PSA_TESTLIST_FILE}
527 ${PSA_TEST_ENTRY_LIST_INC}
528 ${PSA_TEST_ENTRY_FUN_DECLARE_INC}
529 ${PSA_CLIENT_TEST_LIST_DELCARE_INC}
530 ${PSA_CLIENT_TEST_LIST_INC}
531 ${PSA_SERVER_TEST_LIST_DECLARE_INC}
Vinay Kumar Kotegowderac218992020-04-03 12:56:00 +0530532 ${PSA_SERVER_TEST_LIST}
533 ${SUITE_TEST_RANGE_MIN}
534 ${SUITE_TEST_RANGE_MAX})
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530535
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530536# Creating CMake list variable from file
537file(READ ${PSA_TESTLIST_FILE} PSA_TEST_LIST)
Vinay Kumar Kotegowderac218992020-04-03 12:56:00 +0530538if(NOT PSA_TEST_LIST)
539 message(FATAL_ERROR "[PSA] : Invalid test number!")
540endif()
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530541string(REGEX REPLACE "\n" ";" PSA_TEST_LIST "${PSA_TEST_LIST}")
542
543add_custom_target(
544 ${PSA_TARGET_GENERATE_DATABASE_PRE}
545 COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/platform
546 COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/val
547 COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/partition
548 COMMAND ${CMAKE_COMMAND} -E make_directory ${PSA_SUITE_OUT_DIR}
549)
550
551# Generate target files from User provided data base
552include(ExternalProject)
553ExternalProject_Add(
554 ${PSA_TARGET_GENERATE_DATABASE}
555 PREFIX ${CMAKE_CURRENT_BINARY_DIR}
556 DOWNLOAD_COMMAND ""
557 UPDATE_COMMAND ""
558 PATCH_COMMAND ""
559 BUILD_COMMAND ""
560 SOURCE_DIR "${PSA_ROOT_DIR}/tools/scripts/target_cfg"
561 CMAKE_ARGS -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
562 -DOUT_DIR=${CMAKE_CURRENT_BINARY_DIR}
563 -DTARGET=${TARGET}
564 -DGENERATOR_FILE=${PSA_TARGET_CONFIG_HEADER_GENERATOR}
565 -DINCLUDE_DIR=${PSA_ROOT_DIR}/val/common
566 -DTARGET_CONFIGURATION_FILE=${TARGET_CONFIGURATION_FILE}
567 -DTGT_CONFIG_SOURCE_C=${TGT_CONFIG_SOURCE_C}
568 -DOUTPUT_HEADER=${OUTPUT_HEADER}
569 -DDATABASE_TABLE_NAME=${DATABASE_TABLE_NAME}
570 -DDATABASE_TABLE_SECTION_NAME=${DATABASE_TABLE_SECTION_NAME}
571 -DTARGET_HEADER_GEN_INCLUDE_PATHS=${TARGET_HEADER_GEN_INCLUDE_PATHS}
572 LIST_SEPARATOR |
573 TEST_COMMAND ""
574)
575
576# Add custom target to clean generated files of the external project
577add_custom_target(
578 ${PSA_TARGET_GENERATE_DATABASE_POST}
579 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src/${PSA_TARGET_GENERATE_DATABASE}-build/ -- clean
580)
581
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530582# Check for supported toolchain/s
583if(${TOOLCHAIN} IN_LIST PSA_TOOLCHAIN_SUPPORT)
jk-armbf532fd2021-05-07 13:58:22 +0530584 if (DEFINED CROSS_COMPILE)
585 if(${CROSS_COMPILE} AND NOT (${TOOLCHAIN} IN_LIST CROSS_COMPILE_TOOLCHAIN_SUPPORT))
Øyvind Rønningstadc50804e2021-03-12 12:43:25 +0100586 message(FATAL_ERROR "[PSA] : Error: CROSS_COMPILE not supported for this toolchain, supported toolchain are : ${CROSS_COMPILE_TOOLCHAIN_SUPPORT}")
jk-armbf532fd2021-05-07 13:58:22 +0530587 endif()
588 endif()
589 include(${PSA_ROOT_DIR}/tools/cmake/compiler/${TOOLCHAIN}.cmake)
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530590else()
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100591 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DTOOLCHAIN=${TOOLCHAIN}, supported toolchain are : ${PSA_TOOLCHAIN_SUPPORT}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530592endif()
593
594# Global macro to identify the PSA test suite cmake build
595add_definitions(-DPSA_CMAKE_BUILD)
596add_definitions(-D${SUITE})
597add_definitions(-DVERBOSE=${VERBOSE})
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530598add_definitions(-DPLATFORM_PSA_ISOLATION_LEVEL=${PLATFORM_PSA_ISOLATION_LEVEL})
Vinay Kumar Kotegowder52bbfc92020-07-03 17:23:59 +0530599add_definitions(-D${TARGET})
jotman016d7dd4e2020-11-10 17:32:28 +0800600if("${TFM_PROFILE}" STREQUAL "profile_small")
601 message(STATUS "[PSA] : Building SMALL profile")
602 add_definitions(-DTF_M_PROFILE_SMALL)
603elseif("${TFM_PROFILE}" STREQUAL "profile_medium")
604 message(STATUS "[PSA] : Building MEDIUM profile")
605 add_definitions(-DTF_M_PROFILE_MEDIUM)
606endif()
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530607if(${SP_HEAP_MEM_SUPP} EQUAL 1)
608 add_definitions(-DSP_HEAP_MEM_SUPP)
609endif()
610
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530611# Build PAL NSPE LIB
612include(${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cmake)
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530613# Build VAL NSPE LIB
614#add_definitions(-DVAL_NSPE_BUILD)
615include(${PSA_ROOT_DIR}/val/val_nspe.cmake)
616# Build test
617include(${PSA_SUITE_DIR}/suite.cmake)
618if(${SUITE} STREQUAL "IPC")
619# Build SPE LIB
620include(${PSA_ROOT_DIR}/val/val_spe.cmake)
621endif()
622
623add_dependencies(${PSA_TARGET_GENERATE_DATABASE} ${PSA_TARGET_GENERATE_DATABASE_PRE})
624add_dependencies(${PSA_TARGET_GENERATE_DATABASE_POST} ${PSA_TARGET_GENERATE_DATABASE})
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530625add_dependencies(${PSA_TARGET_PAL_NSPE_LIB} ${PSA_TARGET_GENERATE_DATABASE_POST})
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530626add_dependencies(${PSA_TARGET_VAL_NSPE_LIB} ${PSA_TARGET_PAL_NSPE_LIB})
627add_dependencies(${PSA_TARGET_TEST_COMBINE_LIB} ${PSA_TARGET_VAL_NSPE_LIB})
628if(${SUITE} STREQUAL "IPC")
629add_dependencies(${PSA_TARGET_DRIVER_PARTITION_LIB} ${PSA_TARGET_TEST_COMBINE_LIB})
630add_dependencies(${PSA_TARGET_CLIENT_PARTITION_LIB} ${PSA_TARGET_DRIVER_PARTITION_LIB})
631add_dependencies(${PSA_TARGET_SERVER_PARTITION_LIB} ${PSA_TARGET_CLIENT_PARTITION_LIB})
632endif()
633
634# Include the files for make clean
635foreach(clean_item ${PSA_CLEAN_LIST})
636 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clean_item})
637endforeach()
638
639set_property(TARGET ${PSA_TARGET_VAL_NSPE_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/val)
640set_property(TARGET ${PSA_TARGET_PAL_NSPE_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/platform)
641set_property(TARGET ${PSA_TARGET_TEST_COMBINE_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${PSA_SUITE_OUT_DIR})
642if(${SUITE} STREQUAL "IPC")
643set_property(TARGET ${PSA_TARGET_DRIVER_PARTITION_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/partition)
644set_property(TARGET ${PSA_TARGET_CLIENT_PARTITION_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/partition)
645set_property(TARGET ${PSA_TARGET_SERVER_PARTITION_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/partition)
646endif()