blob: da5a594a4e00ca9b4fa454675b3ce40a8b381b13 [file] [log] [blame]
Marti Bolivarbf909a12017-11-13 19:43:46 -05001# CMakeLists.txt for building mcuboot as a Zephyr project
2#
3# Copyright (c) 2017 Open Source Foundries Limited
4#
5# SPDX-License-Identifier: Apache-2.0
6
7cmake_minimum_required(VERSION 3.8.2)
8
Marti Bolivardde1b1c2018-01-29 14:41:58 -05009set(KCONFIG_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/Kconfig)
Andrzej Puzdrowski8e96b832017-09-08 16:49:14 +020010
Marti Bolivarbf909a12017-11-13 19:43:46 -050011set(MCUBOOT_EXTRA_CFLAGS)
12
Marti Bolivarbf909a12017-11-13 19:43:46 -050013# Board-specific CONF_FILES should get merged into the build as well.
14#
15# Do this by defining the set_conf_file macro:
16# http://docs.zephyrproject.org/application/application.html#application-configuration
17macro(set_conf_file)
18 if (EXISTS ${APPLICATION_SOURCE_DIR}/boards/${BOARD}.conf)
Marti Bolivara4818a52018-04-12 13:02:38 -040019 set(CONF_FILE "prj.conf ${APPLICATION_SOURCE_DIR}/boards/${BOARD}.conf")
Marti Bolivarbf909a12017-11-13 19:43:46 -050020 else()
Marti Bolivara4818a52018-04-12 13:02:38 -040021 set(CONF_FILE prj.conf)
Marti Bolivarbf909a12017-11-13 19:43:46 -050022 endif()
23endmacro()
24
Marti Bolivarbf909a12017-11-13 19:43:46 -050025# Enabling this option uses newer flash map APIs. This saves RAM and
26# avoids deprecated API usage.
27#
28# (This can be deleted when flash_area_to_sectors() is removed instead
29# of simply deprecated.)
30list(APPEND MCUBOOT_EXTRA_CFLAGS "-DMCUBOOT_USE_FLASH_AREA_GET_SECTORS")
31
Marti Bolivarbf909a12017-11-13 19:43:46 -050032# Add values in MCUBOOT_EXTRA_CFLAGS_STR to the Zephyr build's
33# EXTRA_CFLAGS variable.
34string(REPLACE ";" " " MCUBOOT_EXTRA_CFLAGS_STR "${MCUBOOT_EXTRA_CFLAGS}")
35set(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${MCUBOOT_EXTRA_CFLAGS_STR}")
36
37# The board should be set to a supported target.
38if (NOT DEFINED BOARD)
39 set(BOARD qemu_x86)
40endif()
41
Marti Bolivar58b321a2018-03-20 15:52:47 -040042# Add a common dts overlay necessary to ensure mcuboot is linked into,
43# and fits inside, the boot partition. (If the user specified a
44# DTC_OVERLAY_FILE on the CMake command line, we need to append onto
45# the list).
46if(DTC_OVERLAY_FILE)
47 set(DTC_OVERLAY_FILE
48 "${DTC_OVERLAY_FILE} ${CMAKE_CURRENT_LIST_DIR}/dts.overlay")
49else()
50 set(DTC_OVERLAY_FILE ${CMAKE_CURRENT_LIST_DIR}/dts.overlay)
51endif()
Marti Bolivarbf909a12017-11-13 19:43:46 -050052
Marti Bolivaraefbd462017-12-15 03:43:46 -050053# Enable Zephyr runner options which request mass erase if so
54# configured.
55#
56# Note that this also disables the default "leave" option when
57# targeting STM32 DfuSe devices with dfu-util, making the chip stay in
58# the bootloader after flashing.
59#
60# That's the right thing, because mcuboot has nothing to do since the
61# chip was just erased. The next thing the user is going to want to do
62# is flash the application. (Developers can reset DfuSE devices
63# manually to test mcuboot behavior on an otherwise erased flash
64# device.)
65macro(app_set_runner_args)
Marti Bolivar53e2c262018-04-12 14:13:28 -040066 if(CONFIG_ZEPHYR_TRY_MASS_ERASE)
Marti Bolivaraefbd462017-12-15 03:43:46 -050067 board_runner_args(dfu-util "--dfuse-modifiers=force:mass-erase")
68 board_runner_args(pyocd "--flashtool-opt=-ce")
69 endif()
70endmacro()
71
Marti Bolivarbf909a12017-11-13 19:43:46 -050072# Standard Zephyr application boilerplate:
73# http://docs.zephyrproject.org/application/application.html
74include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE)
75project(NONE)
76
77# Path to "boot" subdirectory of repository root.
78get_filename_component(BOOT_DIR ${APPLICATION_SOURCE_DIR} DIRECTORY)
79# Path to top-level repository root directory.
80get_filename_component(MCUBOOT_DIR ${BOOT_DIR} DIRECTORY)
81# Path to tinycrypt library source subdirectory of MCUBOOT_DIR.
82set(TINYCRYPT_DIR "${MCUBOOT_DIR}/ext/tinycrypt/lib")
Fabio Utzig28ee5b02017-12-12 08:10:40 -020083# Path to mbed-tls' asn1 parser library.
84set(MBEDTLS_ASN1_DIR "${MCUBOOT_DIR}/ext/mbedtls")
Marti Bolivarbf909a12017-11-13 19:43:46 -050085
Marti Bolivarbf909a12017-11-13 19:43:46 -050086target_include_directories(app PRIVATE include)
87target_include_directories(app PRIVATE targets)
88if(EXISTS "${APPLICATION_SOURCE_DIR}/targets/${BOARD}.h")
Marti Bolivar38845482018-01-25 17:51:40 -050089 target_compile_definitions(app PRIVATE "-DMCUBOOT_TARGET_CONFIG=\"${BOARD}.h\"")
Marti Bolivarbf909a12017-11-13 19:43:46 -050090endif()
91
92# Zephyr port-specific sources.
93target_sources(app PRIVATE main.c)
94target_sources(app PRIVATE flash_map.c)
95target_sources(app PRIVATE hal_flash.c)
96target_sources(app PRIVATE os.c)
97target_sources(app PRIVATE keys.c)
98if(NOT DEFINED CONFIG_FLASH_PAGE_LAYOUT)
99 target_sources(app PRIVATE flash_map_legacy.c)
100endif()
101
102# Generic bootutil sources and includes.
103target_include_directories(app PRIVATE "${BOOT_DIR}/bootutil/include")
104target_sources(app PRIVATE "${BOOT_DIR}/bootutil/src/loader.c")
105target_sources(app PRIVATE "${BOOT_DIR}/bootutil/src/bootutil_misc.c")
106target_sources(app PRIVATE "${BOOT_DIR}/bootutil/src/image_validate.c")
107target_sources(app PRIVATE "${BOOT_DIR}/bootutil/src/image_rsa.c")
108target_sources(app PRIVATE "${BOOT_DIR}/bootutil/src/image_ec256.c")
109target_sources(app PRIVATE "${BOOT_DIR}/bootutil/src/caps.c")
110
Marti Bolivara4818a52018-04-12 13:02:38 -0400111if(CONFIG_BOOT_SIGNATURE_TYPE_ECDSA_P256)
112 # When using ECDSA signatures, pull in our copy of the tinycrypt library.
Fabio Utzig28ee5b02017-12-12 08:10:40 -0200113 target_include_directories(app PRIVATE "${BOOT_DIR}/zephyr/include")
Marti Bolivarbf909a12017-11-13 19:43:46 -0500114 target_include_directories(app PRIVATE "${TINYCRYPT_DIR}/include")
Fabio Utzig28ee5b02017-12-12 08:10:40 -0200115 target_include_directories(app PRIVATE "${MBEDTLS_ASN1_DIR}/include")
Marti Bolivarbf909a12017-11-13 19:43:46 -0500116
117 target_sources(app PRIVATE "${TINYCRYPT_DIR}/source/ecc.c")
118 target_sources(app PRIVATE "${TINYCRYPT_DIR}/source/ecc_dsa.c")
119 target_sources(app PRIVATE "${TINYCRYPT_DIR}/source/sha256.c")
120 target_sources(app PRIVATE "${TINYCRYPT_DIR}/source/utils.c")
Fabio Utzig28ee5b02017-12-12 08:10:40 -0200121
Marti Bolivara4818a52018-04-12 13:02:38 -0400122 # Additionally pull in just the ASN.1 parser from mbedTLS.
123 target_compile_definitions(app PRIVATE MBEDTLS_CFG_FILE=config-asn1.h)
Fabio Utzig28ee5b02017-12-12 08:10:40 -0200124 target_sources(app PRIVATE "${MBEDTLS_ASN1_DIR}/src/asn1parse.c")
Marti Bolivara4818a52018-04-12 13:02:38 -0400125elseif(CONFIG_BOOT_SIGNATURE_TYPE_RSA)
126 # Use mbedTLS provided by Zephyr for RSA signatures. (Its config file
127 # is set using Kconfig.)
128 zephyr_include_directories(include)
129 target_include_directories(app PRIVATE $ENV{ZEPHYR_BASE}/ext/lib/crypto/mbedtls/include)
Marti Bolivarbf909a12017-11-13 19:43:46 -0500130endif()
Andrzej Puzdrowski8e96b832017-09-08 16:49:14 +0200131
132if (CONFIG_MCUBOOT_SERIAL)
133zephyr_sources(${BOOT_DIR}/zephyr/serial_adapter.c)
134
135add_subdirectory(${BOOT_DIR}/boot_serial ./boot/boot_serial)
Andrzej Puzdrowski8e96b832017-09-08 16:49:14 +0200136endif()