blob: d8e3c5cb510718b0fe7eee28da6ddcd231a4edcb [file] [log] [blame]
jk-arm957cfea2021-06-18 15:52:12 +05301#/** @file
jk-arm7cc5d1d2022-01-31 08:16:42 +05302# * Copyright (c) 2021-2022, Arm Limited or its affiliates. All rights reserved.
jk-arm957cfea2021-06-18 15:52:12 +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# 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)
jk-arm957cfea2021-06-18 15:52:12 +053030
jk-arm7cc5d1d2022-01-31 08:16:42 +053031# Check for LINK_LAYER
32if(NOT DEFINED LINK_LAYER_COMM)
33 set(LINK_LAYER_COMM unix_socket)
34 message(STATUS "[PSA] : Link layer not specified. Defaulting to ${LINK_LAYER_COMM}")
jk-arm957cfea2021-06-18 15:52:12 +053035endif()
36
jk-arm7cc5d1d2022-01-31 08:16:42 +053037set(DEPENDS_INC_PATH ${CMAKE_SOURCE_DIR}/platform/hosts/${TARGET}/${LINK_LAYER_COMM}/include)
38if (NOT EXISTS ${DEPENDS_INC_PATH})
39 Message(FATAL_ERROR "Link layer ${LINK_LAYER_COMM} not supported for target ${TARGET}.")
40endif()
jk-arm01ee3ff2021-10-18 22:41:47 +053041
jk-arm957cfea2021-06-18 15:52:12 +053042if(NOT DEFINED PSA_ADAC_ROOT)
43 get_filename_component(PSA_ADAC_ROOT ${CMAKE_SOURCE_DIR}/psa-adac ABSOLUTE)
44endif()
45include(${PSA_ADAC_ROOT}/cmake/psa_adac.cmake OPTIONAL)
46
47configure_file(${PSA_ADAC_ROOT}/psa-adac/core/include/psa_adac_config.h.in psa_adac_config.h)
48include_directories (
49 ${DEPENDS_INC_PATH}
50 ${CMAKE_BINARY_DIR}
51 ${PSA_ADAC_ROOT}/psa-adac/core/include
52 ${PSA_ADAC_ROOT}/ports/include
53 )
54
55set(MBEDTLS_CONFIG_FILE "${PSA_ADAC_ROOT}/ports/crypto/manager-crypto-config.h")
56add_compile_options(-DMBEDTLS_CONFIG_FILE="${MBEDTLS_CONFIG_FILE}")
57if (UNIX)
58 add_compile_options(-fPIC -fpic)
59else ()
60 # Silence warning about standard C APIs not being secure.
61 add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
62endif ()
63
64# Generate ADAC LIB
65add_subdirectory(${PSA_ADAC_ROOT}/psa-adac/core adac_core)
66add_subdirectory(${PSA_ADAC_ROOT}/psa-adac/sdm adac_sdm)
67add_subdirectory(${PSA_ADAC_ROOT}/ports/crypto/psa-crypto psa_adac_psa_crypto)
68
69set(ADAC_LIBS psa_adac_sdm psa_adac_core psa_adac_psa_crypto mbedcrypto)
70
71if(NOT DEFINED TFM_PROFILE)
72 message(STATUS "[PSA] : Building Default profile")
73list(APPEND PSA_SUITES #PSA_SUITES
74 "ADAC"
75)
76endif()
77
78# list of VERBOSE options
79list(APPEND PSA_VERBOSE_OPTIONS 1 2 3 4 5)
80
81message(STATUS "[PSA] : ----------Process input arguments- start-------------")
82
83# Check for TARGET command line argument
84_check_arguments("TARGET")
85# Check for SUITE command line argument
86_check_arguments("SUITE")
87
88string(TOLOWER ${SUITE} SUITE_LOWER)
89
90# Check for valid targets
jk-arm01ee3ff2021-10-18 22:41:47 +053091_get_sub_dir_list(PSA_TARGET_LIST ${PSA_ROOT_DIR}/platform/hosts)
jk-arm957cfea2021-06-18 15:52:12 +053092if(NOT ${TARGET} IN_LIST PSA_TARGET_LIST)
93 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DTARGET=${TARGET}, supported targets are : ${PSA_TARGET_LIST}")
94else()
95 message(STATUS "[PSA] : TARGET is set to ${TARGET}")
jk-arm7cc5d1d2022-01-31 08:16:42 +053096 message(STATUS "[PSA] : LINK_LAYER is set to ${LINK_LAYER_COMM}")
jk-arm957cfea2021-06-18 15:52:12 +053097endif()
98
99# Check for the presence of required test suite directories
100if(NOT IS_DIRECTORY ${PSA_ROOT_DIR}/tests)
101 message(STATUS "[PSA] : Error: Could not find architecture test suite directories in psa root path ${PSA_ROOT_DIR}")
102endif()
103
104# Check for valid suite cmake argument passed
105if(NOT ${SUITE} IN_LIST PSA_SUITES)
106 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DSUITE=${SUITE}, select one from supported suites which are : ${PSA_SUITES}")
107else()
108 message(STATUS "[PSA] : SUITE is set to ${SUITE}")
109endif()
110
111# Project variables
112set(ADAC_HOST_VAL_LIB psa_adac_val)
113set(ADAC_HOST_PAL_LIB psa_adac_pal)
114set(TEST_COMBINE_LIB test_combine)
115set(ADAC_HOST_EXE psa_adac_test)
116
117set(PSA_SUITE_DIR ${PSA_ROOT_DIR}/tests/${SUITE_LOWER})
118set(PSA_TESTLIST_GENERATOR ${PSA_ROOT_DIR}/tools/scripts/gen_tests_list.py)
119set(TESTSUITE_DB ${PSA_SUITE_DIR}/testsuite.db)
120set(PSA_TESTLIST_FILE ${CMAKE_CURRENT_BINARY_DIR}/${SUITE_LOWER}_testlist.txt)
121set(PSA_TEST_ENTRY_LIST_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_list.inc)
122set(PSA_TEST_ENTRY_FUN_DECLARE_INC ${CMAKE_CURRENT_BINARY_DIR}/test_entry_fn_declare_list.inc)
123
124# Check for VERBOSE
125if(NOT DEFINED VERBOSE)
126 set(VERBOSE 3 CACHE INTERNAL "Default VERBOSE value" FORCE)
127 message(STATUS "[PSA] : Defaulting VERBOSE to ${VERBOSE}")
128else()
129 if(NOT ${VERBOSE} IN_LIST PSA_VERBOSE_OPTIONS)
130 message(FATAL_ERROR "[PSA] : Error: Unsupported value for -DVERBOSE=${VERBOSE}, supported values are : ${PSA_VERBOSE_OPTIONS}")
131 endif()
132 message(STATUS "[PSA] : VERBOSE is set to ${VERBOSE}")
133endif()
134
135if(NOT DEFINED SUITE_TEST_RANGE)
136 set(SUITE_TEST_RANGE_MIN None)
137 set(SUITE_TEST_RANGE_MAX None)
138else()
139 list(LENGTH SUITE_TEST_RANGE SUITE_TEST_RANGE_LENGTH)
140 if(${SUITE_TEST_RANGE_LENGTH} GREATER "2")
141 message(FATAL_ERROR "[PSA] : -DSUITE_TEST_RANGE=<...> value error! accepts two "
142 " numbers in quotes separated with ';'")
143 endif()
144 if(${SUITE_TEST_RANGE_LENGTH} EQUAL "2")
145 list(GET SUITE_TEST_RANGE 0 SUITE_TEST_RANGE_MIN)
146 list(GET SUITE_TEST_RANGE 1 SUITE_TEST_RANGE_MAX)
147 message(STATUS "[PSA] : Testing (${SUITE_TEST_RANGE_MIN}, ${SUITE_TEST_RANGE_MAX}) of ${SUITE} suite")
148 endif()
149 if(${SUITE_TEST_RANGE_LENGTH} EQUAL "1")
150 set(SUITE_TEST_RANGE_MIN ${SUITE_TEST_RANGE})
151 set(SUITE_TEST_RANGE_MAX ${SUITE_TEST_RANGE})
152 message(STATUS "[PSA] : Testing ${SUITE_TEST_RANGE_MIN} of ${SUITE} suite")
153 endif()
154endif()
155
156message(STATUS "[PSA] : ----------Process input arguments- complete-------------")
157
158# Create PSA clean list
159list(APPEND PSA_CLEAN_LIST
160 ${PSA_TESTLIST_FILE}
161 ${PSA_TEST_ENTRY_LIST_INC}
162 ${PSA_TEST_ENTRY_FUN_DECLARE_INC}
163)
164
165# Process testsuite.db
166message(STATUS "[PSA] : Creating testlist.txt 'available at ${PSA_TESTLIST_FILE}'")
167execute_process(COMMAND ${PYTHON_EXECUTABLE} ${PSA_TESTLIST_GENERATOR}
168 ${SUITE_LOWER}
169 ${TESTSUITE_DB}
170 ${PSA_TESTLIST_FILE}
171 ${PSA_TEST_ENTRY_LIST_INC}
172 ${PSA_TEST_ENTRY_FUN_DECLARE_INC}
173 ${SUITE_TEST_RANGE_MIN}
174 ${SUITE_TEST_RANGE_MAX})
175
176# Creating CMake list variable from file
177file(READ ${PSA_TESTLIST_FILE} PSA_TEST_LIST)
178if(NOT PSA_TEST_LIST)
179 message(FATAL_ERROR "[PSA] : Invalid test number!")
180endif()
181string(REGEX REPLACE "\n" ";" PSA_TEST_LIST "${PSA_TEST_LIST}")
182
183# Global macro to identify the PSA test suite cmake build
184add_definitions(-D${SUITE})
185add_definitions(-DVERBOSE=${VERBOSE})
186add_definitions(-D${TARGET})
187
188# Build PAL LIB
jk-arm01ee3ff2021-10-18 22:41:47 +0530189include(${CMAKE_SOURCE_DIR}/platform/common/pal.cmake)
jk-arm7cc5d1d2022-01-31 08:16:42 +0530190add_subdirectory(${CMAKE_SOURCE_DIR}/platform/hosts/${TARGET}/${LINK_LAYER_COMM} platform_host)
191target_link_libraries(${ADAC_HOST_PAL_LIB} platform_host)
jk-arm957cfea2021-06-18 15:52:12 +0530192
193# Generate VAL LIB
194include(${CMAKE_SOURCE_DIR}/val/val.cmake)
195
jk-arm01ee3ff2021-10-18 22:41:47 +0530196# Build test suite
jk-arm957cfea2021-06-18 15:52:12 +0530197include(${PSA_SUITE_DIR}/suite.cmake)
198
jk-arm01ee3ff2021-10-18 22:41:47 +0530199#Create single executable
jk-arm957cfea2021-06-18 15:52:12 +0530200add_executable(${ADAC_HOST_EXE} ${SUITE_CC_SOURCE})
201target_include_directories(${ADAC_HOST_EXE} PRIVATE
202 ${CMAKE_SOURCE_DIR}/val/include
jk-arm01ee3ff2021-10-18 22:41:47 +0530203 ${CMAKE_SOURCE_DIR}/platform/common/include
jk-arm957cfea2021-06-18 15:52:12 +0530204 )
205target_link_libraries (${ADAC_HOST_EXE} ${TEST_COMBINE_LIB}
206 ${ADAC_HOST_VAL_LIB}
207 ${ADAC_HOST_PAL_LIB}
208 ${ADAC_LIBS}
209 )
210
211# Include the files for make clean
212foreach(clean_item ${PSA_CLEAN_LIST})
213 set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clean_item})
214endforeach()
215