blob: 306ce6f08b61db59624fb4766b04f951054df8aa [file] [log] [blame]
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +05301#/** @file
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +05302# * Copyright (c) 2019-2020, 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
110)
111
112# list of suported CPU arch
113list(APPEND PSA_CPU_ARCH_SUPPORT
114 armv8m_ml
115 armv8m_bl
116 armv7m
117)
118
119# list of VERBOSE options
120list(APPEND PSA_VERBOSE_OPTIONS 1 2 3 4 5)
121
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530122# list of PLATFORM_PSA_ISOLATION_LEVEL options
jotman016d7dd4e2020-11-10 17:32:28 +0800123if("${TFM_PROFILE}" STREQUAL "profile_medium")
124list(APPEND PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS 1 2)
125else()
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530126list(APPEND PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS 1 2 3)
jotman016d7dd4e2020-11-10 17:32:28 +0800127endif()
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530128
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530129message(STATUS "[PSA] : ----------Process input arguments- start-------------")
130
131# Check for TARGET command line argument
132_check_arguments("TARGET")
133# Check for SUTIE command line argument
134_check_arguments("SUITE")
135# Check for PSA_INCLUDE_PATHS command line argument
136_check_arguments("PSA_INCLUDE_PATHS")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530137
138string(TOLOWER ${SUITE} SUITE_LOWER)
139
140# Check for valid targets
141_get_sub_dir_list(PSA_TARGET_LIST ${PSA_ROOT_DIR}/platform/targets)
142if(NOT ${TARGET} IN_LIST PSA_TARGET_LIST)
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100143 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DTARGET=${TARGET}, supported targets are : ${PSA_TARGET_LIST}")
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530144else()
145 message(STATUS "[PSA] : TARGET is set to ${TARGET}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530146endif()
147
148# Check for the presence of required test suite directories
149if((NOT IS_DIRECTORY ${PSA_ROOT_DIR}/dev_apis) OR (NOT IS_DIRECTORY ${PSA_ROOT_DIR}/ff))
150 message(STATUS "[PSA] : Error: Could not find architecture test suite directories in psa root path ${PSA_ROOT_DIR}")
151endif()
152
153if(FALSE)
154# Check for build directory specified
155if(NOT DEFINED BUILD)
156 set(BUILD ${CMAKE_CURRENT_BINARY_DIR}/BUILD CACHE INTERNAL "Defaulting build directory to ${BUILD}" FORCE)
157else()
158 set(BUILD ${CMAKE_CURRENT_BINARY_DIR}/${BUILD}/BUILD CACHE INTERNAL "Defaulting build directory to ${BUILD}" FORCE)
159endif()
160endif()
161
162# Check for valid suite cmake argument passed
163if(NOT ${SUITE} IN_LIST PSA_SUITES)
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100164 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 +0530165else()
166 message(STATUS "[PSA] : SUITE is set to ${SUITE}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530167endif()
168
169# Project variables
170set(PSA_TARGET_PRE_BUILD psa_pre_build)
171set(PSA_TARGET_GENERATE_DATABASE_PRE psa_generate_database_prerequisite)
172set(PSA_TARGET_GENERATE_DATABASE psa_generate_database)
173set(PSA_TARGET_GENERATE_DATABASE_POST psa_generate_database_cleanup)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530174if(${SUITE} STREQUAL "INITIAL_ATTESTATION")
175 set(PSA_TARGET_QCBOR psa_qcbor)
176endif()
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530177set(PSA_TARGET_PAL_NSPE_LIB pal_nspe)
178set(PSA_TARGET_VAL_NSPE_LIB val_nspe)
179set(PSA_TARGET_TEST_COMBINE_LIB test_combine)
180set(PSA_TARGET_DRIVER_PARTITION_LIB driver_partition)
181set(PSA_TARGET_CLIENT_PARTITION_LIB client_partition)
182set(PSA_TARGET_SERVER_PARTITION_LIB server_partition)
183if(${SUITE} STREQUAL "IPC")
184 set(PSA_SUITE_DIR ${PSA_ROOT_DIR}/ff/${SUITE_LOWER})
185 set(PSA_SUITE_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/ff/${SUITE_LOWER})
Vinay Kumar Kotegowder18fcd402020-04-27 17:38:41 +0530186elseif((${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE") OR (${SUITE} STREQUAL "PROTECTED_STORAGE"))
187 set(PSA_SUITE_DIR ${PSA_ROOT_DIR}/dev_apis/storage)
188 set(PSA_SUITE_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/dev_apis/storage)
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530189else()
190 set(PSA_SUITE_DIR ${PSA_ROOT_DIR}/dev_apis/${SUITE_LOWER})
191 set(PSA_SUITE_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/dev_apis/${SUITE_LOWER})
192endif()
193set(PSA_TARGET_CONFIG_HEADER_GENERATOR ${PSA_ROOT_DIR}/tools/scripts/target_cfg/targetConfigGen.py)
194set(PSA_TESTLIST_GENERATOR ${PSA_ROOT_DIR}/tools/scripts/gen_tests_list.py)
195set(TARGET_CONFIGURATION_FILE ${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cfg)
196set(TGT_CONFIG_SOURCE_C ${CMAKE_CURRENT_BINARY_DIR}/targetConfigGen.c)
197set(OUTPUT_HEADER target_database.h)
198set(DATABASE_TABLE_NAME target_database)
199set(DATABASE_TABLE_SECTION_NAME "NOSECTION")
Vinay Kumar Kotegowder18fcd402020-04-27 17:38:41 +0530200set(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")
201if(${SUITE} STREQUAL "INTERNAL_TRUSTED_STORAGE")
202 set(TESTSUITE_DB ${PSA_SUITE_DIR}/its_testsuite.db)
203elseif((${SUITE} STREQUAL "PROTECTED_STORAGE") OR (${SUITE} STREQUAL "STORAGE"))
204 set(TESTSUITE_DB ${PSA_SUITE_DIR}/ps_testsuite.db)
205else()
206 set(TESTSUITE_DB ${PSA_SUITE_DIR}/testsuite.db)
207endif()
208set(PSA_TESTLIST_FILE ${CMAKE_CURRENT_BINARY_DIR}/${SUITE_LOWER}_testlist.txt)
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530209set(PSA_TEST_ENTRY_LIST_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_list.inc)
210set(PSA_TEST_ENTRY_FUN_DECLARE_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_fn_declare_list.inc)
211set(PSA_CLIENT_TEST_LIST_DELCARE_INC ${CMAKE_CURRENT_BINARY_DIR}/client_tests_list_declare.inc)
212set(PSA_CLIENT_TEST_LIST_INC ${CMAKE_CURRENT_BINARY_DIR}/client_tests_list.inc)
213set(PSA_SERVER_TEST_LIST_DECLARE_INC ${CMAKE_CURRENT_BINARY_DIR}/server_tests_list_declare.inc)
214set(PSA_SERVER_TEST_LIST ${CMAKE_CURRENT_BINARY_DIR}/server_tests_list.inc)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530215if(${SUITE} STREQUAL "INITIAL_ATTESTATION")
216 set(PSA_QCBOR_INCLUDE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}/inc)
217endif()
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530218
219# Validity check for required files for a given suite
220if(NOT DEFINED PSA_${SUITE}_FILES)
221 message(FATAL_ERROR "[PSA] : List of file/s to verify against ${suite} is not defined")
222endif()
223foreach(file_item ${PSA_${SUITE}_FILES})
224 set(PSA_FILE_FOUND FALSE)
225 foreach(include_path ${PSA_INCLUDE_PATHS})
226 if((EXISTS ${include_path}/${file_item}) AND
227 (NOT PSA_FILE_FOUND))
228 set(PSA_FILE_FOUND TRUE)
229 break()
230 endif()
231 endforeach()
232 if(NOT PSA_FILE_FOUND)
233 message(FATAL_ERROR "[PSA] : Couldn't find ${file_item} in ${PSA_INCLUDE_PATHS}")
234 endif()
235endforeach()
236
237# Check for TOOLCHAIN command line argument
238if(NOT DEFINED TOOLCHAIN)
239 set(TOOLCHAIN "GNUARM" CACHE INTERNAL "Compiler used" FORCE)
240 message(STATUS "[PSA] : Defaulting compiler to ${TOOLCHAIN}")
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530241else()
242 message(STATUS "[PSA] : TOOLCHAIN is set to ${TOOLCHAIN}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530243endif()
244
Gowtham Siddarth1d6d4692019-09-16 11:47:29 +0530245if(${TOOLCHAIN} STREQUAL "ARMCLANG" OR ${TOOLCHAIN} STREQUAL "GNUARM")
246 if(NOT DEFINED CPU_ARCH)
247 message(FATAL_ERROR "[PSA] : Error: -DCPU_ARCH option missing")
248 else()
249 # Check for CPU architecture
250 if(NOT ${CPU_ARCH} IN_LIST PSA_CPU_ARCH_SUPPORT)
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100251 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 +0530252 endif()
253 endif()
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530254 message(STATUS "[PSA] : CPU_ARCH is set to ${CPU_ARCH}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530255endif()
256
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530257# Check for VERBOSE
258if(NOT DEFINED VERBOSE)
259 set(VERBOSE 3 CACHE INTERNAL "Default VERBOSE value" FORCE)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530260 message(STATUS "[PSA] : Defaulting VERBOSE to ${VERBOSE}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530261else()
262 if(NOT ${VERBOSE} IN_LIST PSA_VERBOSE_OPTIONS)
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100263 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DVERBOSE=${VERBOSE}, supported values are : ${PSA_VERBOSE_OPTIONS}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530264 endif()
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530265 message(STATUS "[PSA] : VERBOSE is set to ${VERBOSE}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530266endif()
267
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530268# Check for PLATFORM_PSA_ISOLATION_LEVEL
269if(NOT DEFINED PLATFORM_PSA_ISOLATION_LEVEL)
jotman016d7dd4e2020-11-10 17:32:28 +0800270 if("${TFM_PROFILE}" STREQUAL "profile_medium")
271 set(PLATFORM_PSA_ISOLATION_LEVEL 2 CACHE INTERNAL "Default PLATFORM_PSA_ISOLATION_LEVEL value" FORCE)
272 else()
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530273 set(PLATFORM_PSA_ISOLATION_LEVEL 3 CACHE INTERNAL "Default PLATFORM_PSA_ISOLATION_LEVEL value" FORCE)
jotman016d7dd4e2020-11-10 17:32:28 +0800274 endif()
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530275 if(${SUITE} STREQUAL "IPC")
276 message(STATUS "[PSA] : Defaulting PLATFORM_PSA_ISOLATION_LEVEL to ${PLATFORM_PSA_ISOLATION_LEVEL}")
277 endif()
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530278else()
279 if(NOT ${PLATFORM_PSA_ISOLATION_LEVEL} IN_LIST PLATFORM_PSA_ISOLATION_LEVEL_OPTIONS)
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100280 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 +0530281 endif()
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530282 if(${SUITE} STREQUAL "IPC")
283 message(STATUS "[PSA] : PLATFORM_PSA_ISOLATION_LEVEL is set to ${PLATFORM_PSA_ISOLATION_LEVEL}")
284 endif()
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530285endif()
286
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530287if(NOT DEFINED INCLUDE_PANIC_TESTS)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530288 #By default panic tests are disabled
289 set(INCLUDE_PANIC_TESTS 0 CACHE INTERNAL "Default INCLUDE_PANIC_TESTS value" FORCE)
290 message(STATUS "[PSA] : Defaulting INCLUDE_PANIC_TESTS to ${INCLUDE_PANIC_TESTS}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530291else()
292 if(INCLUDE_PANIC_TESTS EQUAL 1)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530293 message(STATUS "[PSA] : "
294 "INCLUDE_PANIC_TESTS set to 1, therefore including PSA APIs panic tests into the regression,\n"
295 "\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 +0530296 endif()
297endif()
298
299if(NOT DEFINED WATCHDOG_AVAILABLE)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530300 #Assuming watchdog is available to program by test suite
301 set(WATCHDOG_AVAILABLE 1 CACHE INTERNAL "Default WATCHDOG_AVAILABLE value" FORCE)
302 message(STATUS "[PSA] : Defaulting WATCHDOG_AVAILABLE to ${WATCHDOG_AVAILABLE}")
303else()
304 message(STATUS "[PSA] : WATCHDOG_AVAILABLE is set to ${WATCHDOG_AVAILABLE}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530305endif()
306
307if((INCLUDE_PANIC_TESTS EQUAL 1) AND
308 (WATCHDOG_AVAILABLE EQUAL 0))
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530309 message(WARNING "[PSA]: "
310 "Note that to test PSA APIs panic conditions, test harness may require to access"
311 "the watchdog timer in oder to recover from panic and to be able to continue with"
312 "next test. Ignore this warning if system under test has capability to reset the"
313 "system when it encounters panic condition.")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530314endif()
315
316if(NOT DEFINED SP_HEAP_MEM_SUPP)
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530317 #Are dynamic memory functions available to secure partition?
318 set(SP_HEAP_MEM_SUPP 1 CACHE INTERNAL "Default SP_HEAP_MEM_SUPP value" FORCE)
319 message(STATUS "[PSA] : Defaulting SP_HEAP_MEM_SUPP to ${SP_HEAP_MEM_SUPP}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530320endif()
321
Vinay Kumar Kotegowderac218992020-04-03 12:56:00 +0530322if(NOT DEFINED SUITE_TEST_RANGE)
323 set(SUITE_TEST_RANGE_MIN None)
324 set(SUITE_TEST_RANGE_MAX None)
325else()
326 list(LENGTH SUITE_TEST_RANGE SUITE_TEST_RANGE_LENGTH)
327 if(${SUITE_TEST_RANGE_LENGTH} GREATER "2")
328 message(FATAL_ERROR "[PSA] : -DSUITE_TEST_RANGE=<...> value error! accepts two "
329 " numbers in quotes separated with ';'")
330 endif()
331 if(${SUITE_TEST_RANGE_LENGTH} EQUAL "2")
332 list(GET SUITE_TEST_RANGE 0 SUITE_TEST_RANGE_MIN)
333 list(GET SUITE_TEST_RANGE 1 SUITE_TEST_RANGE_MAX)
334 message(STATUS "[PSA] : Testing (${SUITE_TEST_RANGE_MIN}, ${SUITE_TEST_RANGE_MAX}) of ${SUITE} suite")
335 endif()
336 if(${SUITE_TEST_RANGE_LENGTH} EQUAL "1")
337 set(SUITE_TEST_RANGE_MIN ${SUITE_TEST_RANGE})
338 set(SUITE_TEST_RANGE_MAX ${SUITE_TEST_RANGE})
339 message(STATUS "[PSA] : Testing ${SUITE_TEST_RANGE_MIN} of ${SUITE} suite")
340 endif()
341endif()
342
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530343message(STATUS "[PSA] : ----------Process input arguments- complete-------------")
344
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530345
jotman016d7dd4e2020-11-10 17:32:28 +0800346if((${SUITE} STREQUAL "INITIAL_ATTESTATION") AND (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR}))
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530347# Clone QCBOR and move to specified tag
348execute_process(COMMAND ${GIT_EXECUTABLE} clone ${PSA_QCBOR_GIT_REPO_LINK} ${PSA_TARGET_QCBOR}
349 RESULT_VARIABLE ${PSA_TARGET_QCBOR}_clone_result
350 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
351if(${PSA_TARGET_QCBOR}_clone_result)
352 message(FATAL_ERROR "git clone failed for ${PSA_QCBOR_GIT_REPO_LINK}")
353endif()
354
355if(NOT ${PSA_TARGET_QCBOR}_clone_result)
356execute_process(COMMAND ${GIT_EXECUTABLE} checkout -q "${PSA_QCBOR_GIT_REPO_TAG}"
357 RESULT_VARIABLE ${PSA_TARGET_QCBOR}_checkout_result
358 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${PSA_TARGET_QCBOR})
359if(${PSA_TARGET_QCBOR}_checkout_result)
360 message(FATAL_ERROR "git checkout failed for Repo : ${PSA_QCBOR_GIT_REPO_LINK}, Tag : ${PSA_QCBOR_GIT_REPO_TAG}")
361endif()
362endif()
363endif()
gowtham siddarth12833042020-02-10 22:11:11 +0530364
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530365# Create PSA clean list
366list(APPEND PSA_CLEAN_LIST
367 ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_HEADER}
368 ${PSA_TESTLIST_FILE}
369 ${PSA_TEST_ENTRY_LIST_INC}
370 ${PSA_TEST_ENTRY_FUN_DECLARE_INC}
371 ${PSA_CLIENT_TEST_LIST_DELCARE_INC}
372 ${PSA_CLIENT_TEST_LIST_INC}
373 ${PSA_SERVER_TEST_LIST_DECLARE_INC}
374 ${PSA_SERVER_TEST_LIST}
375)
376
377# Process testsuite.db
378message(STATUS "[PSA] : Creating testlist.txt 'available at ${PSA_TESTLIST_FILE}'")
379execute_process(COMMAND ${PYTHON_EXECUTABLE} ${PSA_TESTLIST_GENERATOR}
380 ${SUITE_LOWER}
381 ${TESTSUITE_DB}
382 ${INCLUDE_PANIC_TESTS}
383 ${PSA_TESTLIST_FILE}
384 ${PSA_TEST_ENTRY_LIST_INC}
385 ${PSA_TEST_ENTRY_FUN_DECLARE_INC}
386 ${PSA_CLIENT_TEST_LIST_DELCARE_INC}
387 ${PSA_CLIENT_TEST_LIST_INC}
388 ${PSA_SERVER_TEST_LIST_DECLARE_INC}
Vinay Kumar Kotegowderac218992020-04-03 12:56:00 +0530389 ${PSA_SERVER_TEST_LIST}
390 ${SUITE_TEST_RANGE_MIN}
391 ${SUITE_TEST_RANGE_MAX})
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530392
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530393# Creating CMake list variable from file
394file(READ ${PSA_TESTLIST_FILE} PSA_TEST_LIST)
Vinay Kumar Kotegowderac218992020-04-03 12:56:00 +0530395if(NOT PSA_TEST_LIST)
396 message(FATAL_ERROR "[PSA] : Invalid test number!")
397endif()
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530398string(REGEX REPLACE "\n" ";" PSA_TEST_LIST "${PSA_TEST_LIST}")
399
400add_custom_target(
401 ${PSA_TARGET_GENERATE_DATABASE_PRE}
402 COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/platform
403 COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/val
404 COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/partition
405 COMMAND ${CMAKE_COMMAND} -E make_directory ${PSA_SUITE_OUT_DIR}
406)
407
408# Generate target files from User provided data base
409include(ExternalProject)
410ExternalProject_Add(
411 ${PSA_TARGET_GENERATE_DATABASE}
412 PREFIX ${CMAKE_CURRENT_BINARY_DIR}
413 DOWNLOAD_COMMAND ""
414 UPDATE_COMMAND ""
415 PATCH_COMMAND ""
416 BUILD_COMMAND ""
417 SOURCE_DIR "${PSA_ROOT_DIR}/tools/scripts/target_cfg"
418 CMAKE_ARGS -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
419 -DOUT_DIR=${CMAKE_CURRENT_BINARY_DIR}
420 -DTARGET=${TARGET}
421 -DGENERATOR_FILE=${PSA_TARGET_CONFIG_HEADER_GENERATOR}
422 -DINCLUDE_DIR=${PSA_ROOT_DIR}/val/common
423 -DTARGET_CONFIGURATION_FILE=${TARGET_CONFIGURATION_FILE}
424 -DTGT_CONFIG_SOURCE_C=${TGT_CONFIG_SOURCE_C}
425 -DOUTPUT_HEADER=${OUTPUT_HEADER}
426 -DDATABASE_TABLE_NAME=${DATABASE_TABLE_NAME}
427 -DDATABASE_TABLE_SECTION_NAME=${DATABASE_TABLE_SECTION_NAME}
428 -DTARGET_HEADER_GEN_INCLUDE_PATHS=${TARGET_HEADER_GEN_INCLUDE_PATHS}
429 LIST_SEPARATOR |
430 TEST_COMMAND ""
431)
432
433# Add custom target to clean generated files of the external project
434add_custom_target(
435 ${PSA_TARGET_GENERATE_DATABASE_POST}
436 COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/src/${PSA_TARGET_GENERATE_DATABASE}-build/ -- clean
437)
438
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530439# Check for supported toolchain/s
440if(${TOOLCHAIN} IN_LIST PSA_TOOLCHAIN_SUPPORT)
441 include(${PSA_ROOT_DIR}/tools/cmake/compiler/${TOOLCHAIN}.cmake)
442else()
Øyvind Rønningstadabbb7272020-11-09 14:50:54 +0100443 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DTOOLCHAIN=${TOOLCHAIN}, supported toolchain are : ${PSA_TOOLCHAIN_SUPPORT}")
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530444endif()
445
446# Global macro to identify the PSA test suite cmake build
447add_definitions(-DPSA_CMAKE_BUILD)
448add_definitions(-D${SUITE})
449add_definitions(-DVERBOSE=${VERBOSE})
Jaykumar Pitambarbhai Patelccf5bf22019-12-06 11:58:32 +0530450add_definitions(-DPLATFORM_PSA_ISOLATION_LEVEL=${PLATFORM_PSA_ISOLATION_LEVEL})
Vinay Kumar Kotegowder52bbfc92020-07-03 17:23:59 +0530451add_definitions(-D${TARGET})
jotman016d7dd4e2020-11-10 17:32:28 +0800452if("${TFM_PROFILE}" STREQUAL "profile_small")
453 message(STATUS "[PSA] : Building SMALL profile")
454 add_definitions(-DTF_M_PROFILE_SMALL)
455elseif("${TFM_PROFILE}" STREQUAL "profile_medium")
456 message(STATUS "[PSA] : Building MEDIUM profile")
457 add_definitions(-DTF_M_PROFILE_MEDIUM)
458endif()
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530459if(${SP_HEAP_MEM_SUPP} EQUAL 1)
460 add_definitions(-DSP_HEAP_MEM_SUPP)
461endif()
462
Jaykumar Pitambarbhai Patel6c3b8082020-02-26 19:51:37 +0530463# Build PAL NSPE LIB
464include(${PSA_ROOT_DIR}/platform/targets/${TARGET}/target.cmake)
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530465# Build VAL NSPE LIB
466#add_definitions(-DVAL_NSPE_BUILD)
467include(${PSA_ROOT_DIR}/val/val_nspe.cmake)
468# Build test
469include(${PSA_SUITE_DIR}/suite.cmake)
470if(${SUITE} STREQUAL "IPC")
471# Build SPE LIB
472include(${PSA_ROOT_DIR}/val/val_spe.cmake)
473endif()
474
475add_dependencies(${PSA_TARGET_GENERATE_DATABASE} ${PSA_TARGET_GENERATE_DATABASE_PRE})
476add_dependencies(${PSA_TARGET_GENERATE_DATABASE_POST} ${PSA_TARGET_GENERATE_DATABASE})
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530477add_dependencies(${PSA_TARGET_PAL_NSPE_LIB} ${PSA_TARGET_GENERATE_DATABASE_POST})
Vinay Kumar Kotegowder9982f902019-07-15 09:13:54 +0530478add_dependencies(${PSA_TARGET_VAL_NSPE_LIB} ${PSA_TARGET_PAL_NSPE_LIB})
479add_dependencies(${PSA_TARGET_TEST_COMBINE_LIB} ${PSA_TARGET_VAL_NSPE_LIB})
480if(${SUITE} STREQUAL "IPC")
481add_dependencies(${PSA_TARGET_DRIVER_PARTITION_LIB} ${PSA_TARGET_TEST_COMBINE_LIB})
482add_dependencies(${PSA_TARGET_CLIENT_PARTITION_LIB} ${PSA_TARGET_DRIVER_PARTITION_LIB})
483add_dependencies(${PSA_TARGET_SERVER_PARTITION_LIB} ${PSA_TARGET_CLIENT_PARTITION_LIB})
484endif()
485
486# Include the files for make clean
487foreach(clean_item ${PSA_CLEAN_LIST})
488 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clean_item})
489endforeach()
490
491set_property(TARGET ${PSA_TARGET_VAL_NSPE_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/val)
492set_property(TARGET ${PSA_TARGET_PAL_NSPE_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/platform)
493set_property(TARGET ${PSA_TARGET_TEST_COMBINE_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${PSA_SUITE_OUT_DIR})
494if(${SUITE} STREQUAL "IPC")
495set_property(TARGET ${PSA_TARGET_DRIVER_PARTITION_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/partition)
496set_property(TARGET ${PSA_TARGET_CLIENT_PARTITION_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/partition)
497set_property(TARGET ${PSA_TARGET_SERVER_PARTITION_LIB} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/partition)
498endif()