blob: b98a66e12294c16ed931c54e7a1efed3a12226e5 [file] [log] [blame]
Tamas Ban581034a2017-12-19 19:54:37 +00001#------------------------------------------------------------------------------
2# Copyright (c) 2017, Arm Limited. All rights reserved.
3#
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
41set(MPS2_SSE200_BUILD_CMSIS_CORE On)
42set(MPS2_SSE200_BUILD_RETARGET On)
43set(MPS2_SSE200_BUILD_NATIVE_DRIVERS On)
44set(MPS2_SSE200_BUILD_STARTUP On)
45set(MPS2_SSE200_BUILD_TARGET_CFG Off)
46set(MPS2_SSE200_BUILD_TARGET_HARDWARE_KEYS Off)
47set(MPS2_SSE200_BUILD_CMSIS_DRIVERS On)
48set(MPS2_SSE200_BUILD_MPS2_TIME Off)
49set(MPS2_SSE200_BUILD_UART_STDOUT On)
50set(MPS2_SSE200_BUILD_MPS2_BOARD_LEDS Off)
51set(MPS2_SSE200_BUILD_MPS2_BOARD_TIME On)
52set(MPS2_SSE200_BUILD_MPS2_BOARD_FLASH On)
53include(${TFM_ROOT_DIR}/platform/ext/Mps2SSE200.cmake)
54
55#Append all our source files to global lists.
56list(APPEND ALL_SRC_C "${MCUBOOT_DIR}/bl2_main.c"
57 "${MCUBOOT_DIR}/flash_map.c"
58 "${MCUBOOT_DIR}/hal_flash.c"
59 "${MCUBOOT_DIR}/os.c"
60 "${MCUBOOT_DIR}/keys.c"
61 "${MCUBOOT_DIR}/bootutil/src/loader.c"
62 "${MCUBOOT_DIR}/bootutil/src/bootutil_misc.c"
63 "${MCUBOOT_DIR}/bootutil/src/image_validate.c"
64 "${MCUBOOT_DIR}/bootutil/src/image_rsa.c"
65 "${MCUBOOT_DIR}/bootutil/src/caps.c"
66 )
67
68#Define location of mbedtls source, build, and installation directory.
69get_filename_component(MBEDTLS_SOURCE_DIR "${TFM_ROOT_DIR}/../mbedtls" ABSOLUTE)
70if(NOT EXISTS ${MBEDTLS_SOURCE_DIR})
71 message(FATAL_ERROR "Missing mbedtls. Please clone the mbedtls repo to directory \"${MBEDTLS_SOURCE_DIR}\".")
72endif()
73set (MBEDTLS_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/mbedtls")
74set (MBEDTLS_INSTALL_DIR ${MBEDTLS_BINARY_DIR}/mbedtls_install)
75
76#Set build type for mbedtls libraries
77if (MBEDTLS_DEBUG)
78 set(MBEDTLS_BUILD_TYPE "Debug")
79else()
80 set(MBEDTLS_BUILD_TYPE "Release")
81endif()
82
83#Build mbedtls as external project.
84#This ensures mbedtls is built with exactly defined settings.
85#mbedtls will be used from is't install location
86set(MBEDTLS_C_FLAGS ${MBEDTLS_C_FLAGS_BL2})
87set(MBEDTLS_TARGET_NAME "mbedtls_mcuboot_lib")
88include(${TFM_ROOT_DIR}/BuildMbedtls.cmake)
89
90#Setting include directories
91embedded_include_directories(PATH ${TFM_ROOT_DIR} ABSOLUTE APPEND)
92embedded_include_directories(PATH ${TFM_ROOT_DIR}/bl2/ext/mcuboot/include ABSOLUTE APPEND)
93embedded_include_directories(PATH ${TFM_ROOT_DIR}/bl2/ext/mcuboot/bootutil/include/ ABSOLUTE APPEND)
94embedded_include_directories(PATH ${MBEDTLS_INSTALL_DIR}/include ABSOLUTE APPEND)
95
96#Define linker file
97embedded_set_target_linker_file(TARGET mcuboot PATH "${TFM_ROOT_DIR}/platform/ext/target/sse_200_mps2/sse_200/armclang/sse_200_bl2.sct")
98
99add_executable(${PROJECT_NAME} ${MCUBOOT_SRC} ${ALL_SRC_ASM_BL2} ${ALL_SRC_C} ${ALL_SRC_CXX})
100
101#Add BL2 define to linker to resolve symbols in region_defs.h
102set_property(TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS " --predefine=\"-DBL2\"")
103
104#Link mbedcrypto library to project
105target_link_libraries(${PROJECT_NAME} "${MBEDTLS_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX_C}mbedcrypto${CMAKE_STATIC_LIBRARY_SUFFIX_C}")
106add_dependencies(${PROJECT_NAME} ${MBEDTLS_TARGET_NAME}_install)
107
108
109#Generate binary file from axf
110compiler_generate_binary_output(${PROJECT_NAME})
111
112#Set macro definitions for the project.
113target_compile_definitions(${PROJECT_NAME} PRIVATE
114 MCUBOOT_SIGN_RSA
115 MCUBOOT_VALIDATE_SLOT0
116 MCUBOOT_USE_FLASH_AREA_GET_SECTORS
117 MBEDTLS_CONFIG_FILE="config-boot.h"
118 MCUBOOT_TARGET_CONFIG="flash_layout.h"
119 )
120
121#Finally let cmake system apply changes after the whole project is defined.
122embedded_project_end(${PROJECT_NAME})