blob: d488825b27d9f50d7e90e4f5026eaed73913127b [file] [log] [blame]
Tamas Ban581034a2017-12-19 19:54:37 +00001#------------------------------------------------------------------------------
Marc Moreno Berenguea1f296f2018-01-25 15:21:22 +00002# Copyright (c) 2017-2018, Arm Limited. All rights reserved.
Tamas Ban581034a2017-12-19 19:54:37 +00003#
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(mcuboot LANGUAGES ASM C)
19embedded_project_fixup()
20
21#Check input variables
22if (NOT DEFINED BL2)
23 message(FATAL ERROR "Incomplete build configuration: BL2 is undefined.")
24elseif(NOT BL2)
25 #If mcuboot is not need to be built then stop further processing.
26 return()
27endif()
28
29if (NOT DEFINED MBEDTLS_DEBUG)
30 message(FATAL_ERROR "Incomplete build configuration: MBEDTLS_DEBUG is undefined.")
31endif()
32
33if (NOT DEFINED MBEDTLS_C_FLAGS_BL2)
34 message(FATAL_ERROR "Incomplete build configuration: MBEDTLS_C_FLAGS_BL2 is undefined.")
35endif()
36
37#Set variables to appropriate path
38set(MCUBOOT_DIR ${CMAKE_CURRENT_LIST_DIR})
39get_filename_component(TFM_ROOT_DIR "${MCUBOOT_DIR}/../../.." ABSOLUTE)
40
Marc Moreno Berenguea1f296f2018-01-25 15:21:22 +000041set(BUILD_CMSIS_CORE On)
42set(BUILD_RETARGET On)
43set(BUILD_NATIVE_DRIVERS On)
44set(BUILD_STARTUP On)
45set(BUILD_TARGET_CFG Off)
46set(BUILD_TARGET_HARDWARE_KEYS Off)
Marc Moreno Berengue4cc81fc2018-08-10 14:32:01 +010047set(BUILD_TARGET_NV_COUNTERS Off)
Marc Moreno Berenguea1f296f2018-01-25 15:21:22 +000048set(BUILD_CMSIS_DRIVERS On)
49set(BUILD_TIME Off)
50set(BUILD_UART_STDOUT On)
51set(BUILD_FLASH On)
52if(NOT DEFINED PLATFORM_CMAKE_FILE)
53 message (FATAL_ERROR "Platform specific CMake is not defined. Please set PLATFORM_CMAKE_FILE.")
54elseif(NOT EXISTS ${PLATFORM_CMAKE_FILE})
55 message (FATAL_ERROR "Platform specific CMake \"${PLATFORM_CMAKE_FILE}\" file does not exist. Please fix value of PLATFORM_CMAKE_FILE.")
56else()
57 include(${PLATFORM_CMAKE_FILE})
58endif()
59
Tamas Ban581034a2017-12-19 19:54:37 +000060#Append all our source files to global lists.
Tamas Bana9de4a62018-09-18 08:09:45 +010061list(APPEND ALL_SRC_C
62 "${MCUBOOT_DIR}/bl2_main.c"
Tamas Ban581034a2017-12-19 19:54:37 +000063 "${MCUBOOT_DIR}/flash_map.c"
Tamas Ban581034a2017-12-19 19:54:37 +000064 "${MCUBOOT_DIR}/keys.c"
65 "${MCUBOOT_DIR}/bootutil/src/loader.c"
66 "${MCUBOOT_DIR}/bootutil/src/bootutil_misc.c"
67 "${MCUBOOT_DIR}/bootutil/src/image_validate.c"
68 "${MCUBOOT_DIR}/bootutil/src/image_rsa.c"
69 "${MCUBOOT_DIR}/bootutil/src/caps.c"
Tamas Bana9de4a62018-09-18 08:09:45 +010070 "${TFM_ROOT_DIR}/bl2/src/boot_record.c"
Tamas Ban581034a2017-12-19 19:54:37 +000071 )
72
73#Define location of mbedtls source, build, and installation directory.
74get_filename_component(MBEDTLS_SOURCE_DIR "${TFM_ROOT_DIR}/../mbedtls" ABSOLUTE)
75if(NOT EXISTS ${MBEDTLS_SOURCE_DIR})
76 message(FATAL_ERROR "Missing mbedtls. Please clone the mbedtls repo to directory \"${MBEDTLS_SOURCE_DIR}\".")
77endif()
78set (MBEDTLS_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/mbedtls")
79set (MBEDTLS_INSTALL_DIR ${MBEDTLS_BINARY_DIR}/mbedtls_install)
80
81#Set build type for mbedtls libraries
82if (MBEDTLS_DEBUG)
83 set(MBEDTLS_BUILD_TYPE "Debug")
84else()
85 set(MBEDTLS_BUILD_TYPE "Release")
86endif()
87
88#Build mbedtls as external project.
89#This ensures mbedtls is built with exactly defined settings.
90#mbedtls will be used from is't install location
91set(MBEDTLS_C_FLAGS ${MBEDTLS_C_FLAGS_BL2})
92set(MBEDTLS_TARGET_NAME "mbedtls_mcuboot_lib")
93include(${TFM_ROOT_DIR}/BuildMbedtls.cmake)
94
95#Setting include directories
Tamas Bandb69d522018-03-01 10:04:41 +000096embedded_target_include_directories(TARGET ${PROJECT_NAME} PATH ${TFM_ROOT_DIR} ABSOLUTE APPEND)
Tamas Bana9de4a62018-09-18 08:09:45 +010097embedded_target_include_directories(TARGET ${PROJECT_NAME} PATH ${TFM_ROOT_DIR}/bl2/include ABSOLUTE APPEND)
Tamas Bandb69d522018-03-01 10:04:41 +000098embedded_target_include_directories(TARGET ${PROJECT_NAME} PATH ${TFM_ROOT_DIR}/bl2/ext/mcuboot/include ABSOLUTE APPEND)
99embedded_target_include_directories(TARGET ${PROJECT_NAME} PATH ${TFM_ROOT_DIR}/bl2/ext/mcuboot/bootutil/include/ ABSOLUTE APPEND)
100embedded_target_include_directories(TARGET ${PROJECT_NAME} PATH ${MBEDTLS_INSTALL_DIR}/include ABSOLUTE APPEND)
Tamas Ban581034a2017-12-19 19:54:37 +0000101
102#Define linker file
Mate Toth-Pal48fc6a02018-01-24 09:50:14 +0100103if(NOT DEFINED BL2_LINKER_CONFIG)
104 message(FATAL_ERROR "ERROR: Incomplete Configuration: BL2_LINKER_CONFIG is not defined.")
105endif()
Gabor Kerteszd7d7d742018-07-04 11:50:05 +0200106embedded_set_target_linker_file(TARGET ${PROJECT_NAME} PATH "${BL2_LINKER_CONFIG}")
107
108if(NOT DEFINED PLATFORM_LINK_INCLUDES)
109 message(FATAL_ERROR "ERROR: Incomplete Configuration: PLATFORM_LINK_INCLUDES is not defined.")
110endif()
111embedded_set_target_link_includes(TARGET ${PROJECT_NAME} INCLUDES "${PLATFORM_LINK_INCLUDES}")
Tamas Ban581034a2017-12-19 19:54:37 +0000112
Mate Toth-Pal48fc6a02018-01-24 09:50:14 +0100113add_executable(${PROJECT_NAME} ${ALL_SRC_ASM_BL2} ${ALL_SRC_C} ${ALL_SRC_CXX})
Tamas Ban581034a2017-12-19 19:54:37 +0000114
Tamas Bandb69d522018-03-01 10:04:41 +0000115#Set common compiler and linker flags
116config_setting_shared_compiler_flags(${PROJECT_NAME})
117config_setting_shared_linker_flags(${PROJECT_NAME})
118
Tamas Ban581034a2017-12-19 19:54:37 +0000119#Add BL2 define to linker to resolve symbols in region_defs.h
Mate Toth-Pal76867262018-03-09 13:15:36 +0100120embedded_set_target_link_defines(TARGET ${PROJECT_NAME} DEFINES "BL2")
Tamas Ban581034a2017-12-19 19:54:37 +0000121
Marc Moreno Berenguecae2c532018-10-09 12:58:46 +0100122if(NOT DEFINED TEST_FRAMEWORK_S)
123 message(FATAL_ERROR "Incomplete build configuration: TEST_FRAMEWORK_S is undefined.")
124elseif(TEST_FRAMEWORK_S)
125 embedded_set_target_link_defines(TARGET ${PROJECT_NAME} DEFINES "TEST_FRAMEWORK_S")
126endif()
127
128if(NOT DEFINED TEST_FRAMEWORK_NS)
129 message(FATAL_ERROR "Incomplete build configuration: TEST_FRAMEWORK_NS is undefined.")
130elseif(TEST_FRAMEWORK_NS)
131 embedded_set_target_link_defines(TARGET ${PROJECT_NAME} DEFINES "TEST_FRAMEWORK_NS")
132endif()
133
Tamas Ban581034a2017-12-19 19:54:37 +0000134#Link mbedcrypto library to project
135target_link_libraries(${PROJECT_NAME} "${MBEDTLS_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX_C}mbedcrypto${CMAKE_STATIC_LIBRARY_SUFFIX_C}")
136add_dependencies(${PROJECT_NAME} ${MBEDTLS_TARGET_NAME}_install)
137
Tamas Ban581034a2017-12-19 19:54:37 +0000138#Generate binary file from axf
139compiler_generate_binary_output(${PROJECT_NAME})
140
141#Set macro definitions for the project.
142target_compile_definitions(${PROJECT_NAME} PRIVATE
143 MCUBOOT_SIGN_RSA
144 MCUBOOT_VALIDATE_SLOT0
145 MCUBOOT_USE_FLASH_AREA_GET_SECTORS
146 MBEDTLS_CONFIG_FILE="config-boot.h"
Tamas Bandb69d522018-03-01 10:04:41 +0000147 MCUBOOT_TARGET_CONFIG="flash_layout.h")
148
149if (MCUBOOT_NO_SWAP)
150 target_compile_definitions(${PROJECT_NAME} PRIVATE MCUBOOT_NO_SWAP)
151endif()
152
Oliver Swedef9982442018-08-24 18:37:44 +0100153if (MCUBOOT_RAM_LOADING)
154 target_compile_definitions(${PROJECT_NAME} PRIVATE MCUBOOT_RAM_LOADING)
155endif()
156
Tamas Bandb69d522018-03-01 10:04:41 +0000157#Set install location. Keep original value to avoid overriding command line settings.
158if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
159 set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Default install location for MCUBoot." FORCE)
160endif()
161
162#Collect executables to common location: build/install/outputs/
163install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.axf
164 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.bin
165 DESTINATION outputs/${TARGET_PLATFORM}/)
166
167install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.axf
168 ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.bin
169 DESTINATION outputs/fvp/)
Tamas Ban581034a2017-12-19 19:54:37 +0000170
171#Finally let cmake system apply changes after the whole project is defined.
172embedded_project_end(${PROJECT_NAME})