blob: e288461fa82a0e76be4bf1b19919c22b7291d5c2 [file] [log] [blame]
Antonio de Angelis8908f472018-08-31 15:44:25 +01001#-------------------------------------------------------------------------------
Antonio de Angeliscf85ba22018-10-09 13:29:40 +01002# Copyright (c) 2018-2019, Arm Limited. All rights reserved.
Antonio de Angelis8908f472018-08-31 15:44:25 +01003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7
8cmake_minimum_required(VERSION 3.7)
9
10#Tell cmake where our modules can be found
11list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/../../../cmake)
12
13#Include common stuff to control cmake.
14include("Common/BuildSys")
15
16#Start an embedded project.
17embedded_project_start(CONFIG "${CMAKE_CURRENT_LIST_DIR}/../../../ConfigDefault.cmake")
18project(tfm_crypto LANGUAGES ASM C)
19embedded_project_fixup()
20
Jamie Fox82b87ca2018-12-11 16:41:11 +000021#Some project global settings
Antonio de Angelis8908f472018-08-31 15:44:25 +010022set (CRYPTO_DIR "${CMAKE_CURRENT_LIST_DIR}")
23get_filename_component(TFM_ROOT_DIR "${CRYPTO_DIR}/../../.." ABSOLUTE)
Antonio de Angelis8908f472018-08-31 15:44:25 +010024
Jamie Fox82b87ca2018-12-11 16:41:11 +000025#Get the definition of what files we need to build
Antonio de Angelis8908f472018-08-31 15:44:25 +010026set (ENABLE_CRYPTO ON)
Jamie Fox0e54ebc2019-04-09 14:21:04 +010027#The backend of the service is based on Mbed Crypto
28set (CRYPTO_ENGINE_MBEDTLS ON)
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010029
30if (CRYPTO_ENGINE_MBEDTLS)
Jamie Fox0e54ebc2019-04-09 14:21:04 +010031 #Define location of Mbed Crypto source, build, and installation directory.
32 get_filename_component(MBEDTLS_SOURCE_DIR "${TFM_ROOT_DIR}/../mbed-crypto" ABSOLUTE)
33 set (MBEDTLS_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/mbedcrypto")
34 set (MBEDTLS_INSTALL_DIR ${MBEDTLS_BINARY_DIR}/mbedcrypto_install)
35 set (MBEDTLS_TARGET_NAME "mbedcrypto_lib")
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010036endif()
37
Antonio de Angelis8908f472018-08-31 15:44:25 +010038include(CMakeLists.inc)
39
Jamie Fox82b87ca2018-12-11 16:41:11 +000040#Configure how we build our target
Antonio de Angelis8908f472018-08-31 15:44:25 +010041if(DEFINED CORE_TEST)
42 set (TFM_LVL 3)
43else()
44 set (TFM_LVL 1)
45endif()
46
Jamie Fox82b87ca2018-12-11 16:41:11 +000047#Create a list of the C defines
48list(APPEND TFM_CRYPTO_C_DEFINES_LIST __ARM_FEATURE_CMSE=3 __thumb2__ TFM_LVL=${TFM_LVL})
49
50if (CRYPTO_ENGINE_MBEDTLS)
Jamie Fox0e54ebc2019-04-09 14:21:04 +010051 list(APPEND TFM_CRYPTO_C_DEFINES_LIST TFM_CRYPTO_ENGINE_MBEDTLS MBEDTLS_CONFIG_FILE="platform/ext/common/tfm_mbedcrypto_config.h")
Jamie Fox82b87ca2018-12-11 16:41:11 +000052endif()
53
Jamie Fox0e54ebc2019-04-09 14:21:04 +010054#Add module configuration parameters in case they are provided during CMake configuration step
Jamie Fox82b87ca2018-12-11 16:41:11 +000055if (DEFINED CRYPTO_ENGINE_BUF_SIZE)
56 list(APPEND TFM_CRYPTO_C_DEFINES_LIST TFM_CRYPTO_ENGINE_BUF_SIZE=${CRYPTO_ENGINE_BUF_SIZE})
57endif()
Jamie Fox0e54ebc2019-04-09 14:21:04 +010058if (DEFINED CRYPTO_CONC_OPER_NUM)
59 list(APPEND TFM_CRYPTO_C_DEFINES_LIST TFM_CRYPTO_CONC_OPER_NUM=${CRYPTO_CONC_OPER_NUM})
60endif()
Antonio de Angelis4743e672019-04-11 11:38:48 +010061if (TFM_PSA_API AND DEFINED CRYPTO_IOVEC_BUFFER_SIZE)
62 list(APPEND TFM_CRYPTO_C_DEFINES_LIST TFM_CRYPTO_IOVEC_BUFFER_SIZE=${CRYPTO_IOVEC_BUFFER_SIZE})
63endif()
Jamie Fox82b87ca2018-12-11 16:41:11 +000064
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010065if (CRYPTO_ENGINE_MBEDTLS)
Jamie Fox0e54ebc2019-04-09 14:21:04 +010066 #Set Mbed Crypto compiler flags
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010067 set(MBEDTLS_C_FLAGS ${MBEDTLS_C_FLAGS_SERVICES})
Jamie Fox0e54ebc2019-04-09 14:21:04 +010068 string(APPEND MBEDTLS_C_FLAGS " -DMBEDTLS_CONFIG_FILE=\\\\\\\"tfm_mbedcrypto_config.h\\\\\\\""
69 " -I${CMAKE_CURRENT_LIST_DIR}")
Antonio de Angelis8908f472018-08-31 15:44:25 +010070
Jamie Fox0e54ebc2019-04-09 14:21:04 +010071 #Build Mbed Crypto as external project.
72 #This ensures Mbed Crypto is built with exactly defined settings.
73 #Mbed Crypto will be used from its install location
74 include(${TFM_ROOT_DIR}/BuildMbedCrypto.cmake)
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010075endif()
Antonio de Angelis8908f472018-08-31 15:44:25 +010076
77#Specify what we build (for the crypto service, build as a static library)
78add_library(tfm_crypto STATIC ${ALL_SRC_ASM} ${ALL_SRC_C})
Jamie Fox82b87ca2018-12-11 16:41:11 +000079embedded_set_target_compile_defines(TARGET tfm_crypto LANGUAGE C DEFINES ${TFM_CRYPTO_C_DEFINES_LIST})
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010080if (CRYPTO_ENGINE_MBEDTLS)
Jamie Fox0e54ebc2019-04-09 14:21:04 +010081 #Add a dependency on the Mbed Crypto install target.
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010082 add_dependencies(tfm_crypto ${MBEDTLS_TARGET_NAME}_install)
Jamie Fox0e54ebc2019-04-09 14:21:04 +010083 #Ask the compiler to merge the Mbed Crypto and crypto service libraries.
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010084 compiler_merge_library(DEST tfm_crypto LIBS "${MBEDTLS_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX_C}mbedcrypto${CMAKE_STATIC_LIBRARY_SUFFIX_C}")
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010085endif()
Jamie Fox82b87ca2018-12-11 16:41:11 +000086
Antonio de Angelis8908f472018-08-31 15:44:25 +010087#Set common compiler and linker flags
88config_setting_shared_compiler_flags(tfm_crypto)
89config_setting_shared_linker_flags(tfm_crypto)
90
91embedded_project_end(tfm_crypto)