blob: 0a68f4dcf1df61ccbee82b336f617ffc9a319b34 [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
Ken Liue40f9a22019-06-03 16:42:47 +080013#Some project global settings
14set (CRYPTO_DIR "${CMAKE_CURRENT_LIST_DIR}")
15get_filename_component(TFM_ROOT_DIR "${CRYPTO_DIR}/../../.." ABSOLUTE)
16
Antonio de Angelis8908f472018-08-31 15:44:25 +010017#Include common stuff to control cmake.
18include("Common/BuildSys")
19
20#Start an embedded project.
Ken Liue40f9a22019-06-03 16:42:47 +080021embedded_project_start(CONFIG "${TFM_ROOT_DIR}/configs/ConfigDefault.cmake")
Antonio de Angelis8908f472018-08-31 15:44:25 +010022project(tfm_crypto LANGUAGES ASM C)
23embedded_project_fixup()
24
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#Create a list of the C defines
41list(APPEND TFM_CRYPTO_C_DEFINES_LIST __ARM_FEATURE_CMSE=3 __thumb2__ TFM_LVL=${TFM_LVL})
42
43if (CRYPTO_ENGINE_MBEDTLS)
Jamie Fox0e54ebc2019-04-09 14:21:04 +010044 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 +000045endif()
46
Jamie Fox0e54ebc2019-04-09 14:21:04 +010047#Add module configuration parameters in case they are provided during CMake configuration step
Jamie Fox82b87ca2018-12-11 16:41:11 +000048if (DEFINED CRYPTO_ENGINE_BUF_SIZE)
49 list(APPEND TFM_CRYPTO_C_DEFINES_LIST TFM_CRYPTO_ENGINE_BUF_SIZE=${CRYPTO_ENGINE_BUF_SIZE})
50endif()
Jamie Fox0e54ebc2019-04-09 14:21:04 +010051if (DEFINED CRYPTO_CONC_OPER_NUM)
52 list(APPEND TFM_CRYPTO_C_DEFINES_LIST TFM_CRYPTO_CONC_OPER_NUM=${CRYPTO_CONC_OPER_NUM})
53endif()
Antonio de Angelis4743e672019-04-11 11:38:48 +010054if (TFM_PSA_API AND DEFINED CRYPTO_IOVEC_BUFFER_SIZE)
55 list(APPEND TFM_CRYPTO_C_DEFINES_LIST TFM_CRYPTO_IOVEC_BUFFER_SIZE=${CRYPTO_IOVEC_BUFFER_SIZE})
56endif()
Jamie Fox82b87ca2018-12-11 16:41:11 +000057
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010058if (CRYPTO_ENGINE_MBEDTLS)
Jamie Fox0e54ebc2019-04-09 14:21:04 +010059 #Set Mbed Crypto compiler flags
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010060 set(MBEDTLS_C_FLAGS ${MBEDTLS_C_FLAGS_SERVICES})
Jamie Fox0e54ebc2019-04-09 14:21:04 +010061 string(APPEND MBEDTLS_C_FLAGS " -DMBEDTLS_CONFIG_FILE=\\\\\\\"tfm_mbedcrypto_config.h\\\\\\\""
62 " -I${CMAKE_CURRENT_LIST_DIR}")
Antonio de Angelis8908f472018-08-31 15:44:25 +010063
Jamie Fox0e54ebc2019-04-09 14:21:04 +010064 #Build Mbed Crypto as external project.
65 #This ensures Mbed Crypto is built with exactly defined settings.
66 #Mbed Crypto will be used from its install location
67 include(${TFM_ROOT_DIR}/BuildMbedCrypto.cmake)
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010068endif()
Antonio de Angelis8908f472018-08-31 15:44:25 +010069
70#Specify what we build (for the crypto service, build as a static library)
71add_library(tfm_crypto STATIC ${ALL_SRC_ASM} ${ALL_SRC_C})
Jamie Fox82b87ca2018-12-11 16:41:11 +000072embedded_set_target_compile_defines(TARGET tfm_crypto LANGUAGE C DEFINES ${TFM_CRYPTO_C_DEFINES_LIST})
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010073if (CRYPTO_ENGINE_MBEDTLS)
Jamie Fox0e54ebc2019-04-09 14:21:04 +010074 #Add a dependency on the Mbed Crypto install target.
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010075 add_dependencies(tfm_crypto ${MBEDTLS_TARGET_NAME}_install)
Jamie Fox0e54ebc2019-04-09 14:21:04 +010076 #Ask the compiler to merge the Mbed Crypto and crypto service libraries.
Antonio de Angeliscf85ba22018-10-09 13:29:40 +010077 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 +010078endif()
Jamie Fox82b87ca2018-12-11 16:41:11 +000079
Antonio de Angelis8908f472018-08-31 15:44:25 +010080#Set common compiler and linker flags
81config_setting_shared_compiler_flags(tfm_crypto)
82config_setting_shared_linker_flags(tfm_crypto)
83
84embedded_project_end(tfm_crypto)