blob: 049d1e55a8f3bb0b8379adb60bcb68138ce5438c [file] [log] [blame]
Raef Coles8efad882020-07-10 09:46:00 +01001#-------------------------------------------------------------------------------
Sherry Zhang6e0f3242021-03-08 12:18:31 +08002# Copyright (c) 2020-2021, Arm Limited. All rights reserved.
Raef Coles8efad882020-07-10 09:46:00 +01003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7
Raef Coles69817322020-10-19 14:14:14 +01008cmake_minimum_required(VERSION 3.15)
Raef Coles8efad882020-07-10 09:46:00 +01009
10project("Bootloader" VERSION 0.1.0 LANGUAGES C ASM)
11
12add_executable(bl2
Raef Coles8efad882020-07-10 09:46:00 +010013 src/flash_map.c
Mark Horvath8576e382021-03-12 10:24:55 +010014 $<$<BOOL:${DEFAULT_MCUBOOT_SECURITY_COUNTERS}>:src/security_cnt.c>
15 $<$<BOOL:${DEFAULT_MCUBOOT_FLASH_MAP}>:src/default_flash_map.c>
Sherry Zhang07b42412021-01-07 14:19:41 +080016 $<$<BOOL:${MCUBOOT_DATA_SHARING}>:src/shared_data.c>
Raef Coles8efad882020-07-10 09:46:00 +010017)
18
19add_subdirectory(ext/mcuboot)
20
21set_target_properties(bl2
22 PROPERTIES
23 SUFFIX ".axf"
24 RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
25)
26
27target_include_directories(bl2
28 PRIVATE
29 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
Sherry Zhang6e0f3242021-03-08 12:18:31 +080030 $<BUILD_INTERFACE:${MCUBOOT_PATH}/boot/bootutil/src>
Raef Coles8efad882020-07-10 09:46:00 +010031)
32
33target_link_libraries(bl2
34 PRIVATE
Raef Coles8efad882020-07-10 09:46:00 +010035 tfm_boot_status
Raef Coles8efad882020-07-10 09:46:00 +010036)
37
38target_link_options(bl2
39 PRIVATE
40 $<$<C_COMPILER_ID:GNU>:-Wl,-Map=${CMAKE_BINARY_DIR}/bin/bl2.map>
41 $<$<C_COMPILER_ID:ARMClang>:--map>
TTornblomaf19ae92020-09-29 13:26:29 +020042 $<$<C_COMPILER_ID:IAR>:--map\;${CMAKE_BINARY_DIR}/bin/bl2.map>
Raef Coles8efad882020-07-10 09:46:00 +010043)
44
Mark Horvath8576e382021-03-12 10:24:55 +010045target_compile_definitions(bl2
46 PRIVATE
47 $<$<BOOL:${DEFAULT_MCUBOOT_FLASH_MAP}>:DEFAULT_MCUBOOT_FLASH_MAP>
48)
49
Raef Coles8efad882020-07-10 09:46:00 +010050add_convert_to_bin_target(bl2)
51
52############################### BOOT HAL # #####################################
53
54add_library(bl2_hal INTERFACE)
55
56target_include_directories(bl2_hal
57 INTERFACE
58 include
59)
60
61############################### MBEDCRYPTO #####################################
62
Raef Colese82831b2020-10-13 16:52:52 +010063add_library(bl2_mbedcrypto_config INTERFACE)
Raef Coles8efad882020-07-10 09:46:00 +010064
Raef Colese82831b2020-10-13 16:52:52 +010065target_compile_definitions(bl2_mbedcrypto_config
Raef Coles8efad882020-07-10 09:46:00 +010066 INTERFACE
67 $<$<STREQUAL:${MCUBOOT_SIGNATURE_TYPE},RSA>:MCUBOOT_SIGN_RSA>
68 $<$<STREQUAL:${MCUBOOT_SIGNATURE_TYPE},RSA>:MCUBOOT_SIGN_RSA_LEN=${MCUBOOT_SIGNATURE_KEY_LEN}>
Ioannis Glaropoulos855321a2021-05-11 12:44:39 +020069 MBEDTLS_CONFIG_FILE="${MCUBOOT_MBEDCRYPTO_CONFIG_FILEPATH}"
Raef Coles8efad882020-07-10 09:46:00 +010070 # Workaround for https://github.com/ARMmbed/mbedtls/issues/1077
71 $<$<OR:$<STREQUAL:${CMAKE_SYSTEM_ARCHITECTURE},armv8-m.base>,$<STREQUAL:${CMAKE_SYSTEM_ARCHITECTURE},armv6-m>>:MULADDC_CANNOT_USE_R7>
72)
73
74cmake_policy(SET CMP0079 NEW)
75
76set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
77set(CMAKE_POLICY_DEFAULT_CMP0048 NEW)
78set(ENABLE_TESTING OFF)
79set(ENABLE_PROGRAMS OFF)
80set(MBEDTLS_FATAL_WARNINGS OFF)
81set(ENABLE_DOCS OFF)
Raef Coles8efad882020-07-10 09:46:00 +010082set(INSTALL_MBEDTLS_HEADERS OFF)
Raef Colese82831b2020-10-13 16:52:52 +010083set(LIB_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/mbedcrypto/install)
Raef Coles8efad882020-07-10 09:46:00 +010084
Raef Colese82831b2020-10-13 16:52:52 +010085set(lib_target bl2_mbedcrypto_libs)
86set(mbedcrypto_target bl2_mbedcrypto)
87set(mbedtls_target bl2_mbedtls)
88set(mbedx509_target bl2_mbedx509)
89set(MBEDTLS_TARGET_PREFIX bl2_)
Raef Coles8efad882020-07-10 09:46:00 +010090
91# Mbedcrypto is quite a large lib, and it uses too much memory for it to be
92# reasonable to build it in debug info. As a compromise, if `debug` build type
93# is selected mbedcrypto will build under `relwithdebinfo` which preserved debug
94# symbols whild optimizing space.
95set(SAVED_BUILD_TYPE ${CMAKE_BUILD_TYPE})
96set(CMAKE_BUILD_TYPE ${MBEDCRYPTO_BUILD_TYPE})
97add_subdirectory(${MBEDCRYPTO_PATH} ${CMAKE_CURRENT_BINARY_DIR}/mbedcrypto)
98set(CMAKE_BUILD_TYPE ${SAVED_BUILD_TYPE} CACHE STRING "Build type: [Debug, Release, RelWithDebInfo, MinSizeRel]" FORCE)
99
Raef Colese82831b2020-10-13 16:52:52 +0100100if(NOT TARGET bl2_mbedcrypto)
101 message(FATAL_ERROR "Target bl2_mbedcrypto does not exist. Have the patches in ${CMAKE_SOURCE_DIR}/lib/ext/mbedcrypto been applied to the mbedcrypto repo at ${MBEDCRYPTO_PATH} ?
Raef Coles8efad882020-07-10 09:46:00 +0100102 Hint: The command might be `cd ${MBEDCRYPTO_PATH} && git apply ${CMAKE_SOURCE_DIR}/lib/ext/mbedcrypto/*.patch`")
103endif()
104
Raef Colese82831b2020-10-13 16:52:52 +0100105target_link_libraries(bl2_mbedcrypto
Raef Coles8efad882020-07-10 09:46:00 +0100106 PUBLIC
Raef Colese82831b2020-10-13 16:52:52 +0100107 bl2_mbedcrypto_config
Raef Coles8efad882020-07-10 09:46:00 +0100108)
Tamas Banf8b0b2d2020-10-26 13:03:13 +0000109
Sherry Zhangc7baf592021-07-15 14:54:17 +0800110target_include_directories(bl2_mbedcrypto
111 PUBLIC
112 ${MBEDCRYPTO_PATH}/library
113)
114
Tamas Banf8b0b2d2020-10-26 13:03:13 +0000115############################### CODE SHARING ###################################
116
117if (TFM_CODE_SHARING)
118 compiler_create_shared_code(bl2 ${CMAKE_CURRENT_SOURCE_DIR}/src/shared_symbol_template.txt)
Tamas Ban4a5cc972020-10-27 09:03:56 +0000119
120 if (NOT EXISTS ${MBEDCRYPTO_PATH}/library/code_share.c)
121 message(FATAL_ERROR "File ${MBEDCRYPTO_PATH}/library/code_share.c does not exist.
122 Have the patch ${CMAKE_SOURCE_DIR}/lib/ext/mbedcrypto/0005-Enable-crypto-code-sharing-between-independent-binar.patch
123 been applied to the mbedcrypto repo at ${MBEDCRYPTO_PATH}?
124 Hint: The command might be `cd ${MBEDCRYPTO_PATH} && git apply ${CMAKE_SOURCE_DIR}/lib/ext/mbedcrypto/*.patch`")
125 endif()
Tamas Banf8b0b2d2020-10-26 13:03:13 +0000126endif()