| ################################################################################ |
| # \file MCUBootApp.mk |
| # \version 1.0 |
| # |
| # \brief |
| # Makefile for Cypress MCUBoot-based application. |
| # |
| ################################################################################ |
| # \copyright |
| # Copyright 2018-2019 Cypress Semiconductor Corporation |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| ################################################################################ |
| |
| include host.mk |
| |
| APP_NAME := MCUBootApp |
| |
| # Cypress' MCUBoot Application supports GCC ARM only at this moment |
| # Set default compiler to GCC if not specified from command line |
| COMPILER ?= GCC_ARM |
| |
| CUR_APP_PATH = $(PRJ_DIR)/$(APP_NAME) |
| |
| -include $(CUR_APP_PATH)/memorymap.mk |
| |
| MCUBOOT_IMAGE_NUMBER ?= 1 |
| ENC_IMG ?= 0 |
| USE_HW_KEY ?= 0 |
| USE_BOOTSTRAP ?= 1 |
| USE_SHARED_SLOT ?= 0 |
| FIH_PROFILE_LEVEL_LIST := OFF LOW MEDIUM HIGH |
| FIH_PROFILE_LEVEL ?= MEDIUM |
| MCUBOOT_SWAP_STATUS_FAST_BOOT ?= 0 |
| |
| ifeq ($(BUILDCFG), Release) |
| MCUBOOT_LOG_LEVEL ?= MCUBOOT_LOG_LEVEL_INFO |
| else |
| MCUBOOT_LOG_LEVEL ?= MCUBOOT_LOG_LEVEL_DEBUG |
| endif |
| |
| ifneq ($(COMPILER), GCC_ARM) |
| $(error Only GCC ARM is supported at this moment) |
| endif |
| |
| ifeq ($(MCUBOOT_SWAP_STATUS_FAST_BOOT), 1) |
| DEFINES_APP += -DMCUBOOT_SWAP_STATUS_FAST_BOOT |
| endif |
| |
| # Check FIH profile param |
| ifneq ($(filter $(FIH_PROFILE_LEVEL), $(FIH_PROFILE_LEVEL_LIST)),) |
| ifneq ($(FIH_PROFILE_LEVEL), OFF) |
| DEFINES_APP += -DMCUBOOT_FIH_PROFILE_ON |
| DEFINES_APP += -DMCUBOOT_FIH_PROFILE_$(FIH_PROFILE_LEVEL) |
| endif |
| else |
| $(error Wrong FIH_PROFILE_LEVEL param) |
| endif |
| |
| # Output folder |
| OUT := $(APP_NAME)/out |
| # Output folder to contain build artifacts |
| OUT_TARGET := $(OUT)/$(PLATFORM) |
| |
| OUT_CFG := $(OUT_TARGET)/$(BUILDCFG) |
| |
| include $(PRJ_DIR)/platforms.mk |
| |
| ifneq ($(FLASH_MAP), ) |
| ifeq ($(FAMILY), CYW20829) |
| $(CUR_APP_PATH)/memorymap.mk: |
| $(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h -c $(PRJ_DIR)/policy/policy_secure.json > $(CUR_APP_PATH)/memorymap.mk |
| else ifeq ($(FAMILY), XMC7000) |
| $(CUR_APP_PATH)/memorymap.mk: |
| $(PYTHON_PATH) scripts/memorymap_rework.py run -p $(PLATFORM_CONFIG) -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory -n memorymap > $(CUR_APP_PATH)/memorymap.mk |
| else |
| $(CUR_APP_PATH)/memorymap.mk: |
| $(PYTHON_PATH) scripts/memorymap.py -p $(PLATFORM) -m -i $(FLASH_MAP) -o $(PRJ_DIR)/platforms/memory/memorymap.c -a $(PRJ_DIR)/platforms/memory/memorymap.h > $(CUR_APP_PATH)/memorymap.mk |
| endif |
| DEFINES_APP += -DCY_FLASH_MAP_JSON |
| endif |
| |
| include $(PRJ_DIR)/common_libs.mk |
| include $(PRJ_DIR)/toolchains.mk |
| |
| ifeq ($(MAX_IMG_SECTORS), ) |
| MAX_IMG_SECTORS ?= $(PLATFORM_MAX_IMG_SECTORS) |
| endif |
| |
| # Application-specific DEFINES |
| DEFINES_APP += -DMBEDTLS_CONFIG_FILE="\"mcuboot_crypto_config.h\"" |
| DEFINES_APP += -DECC256_KEY_FILE="\"keys/$(SIGN_KEY_FILE).pub\"" |
| DEFINES_APP += -DBOOT_$(CORE) |
| DEFINES_APP += -DAPP_$(APP_CORE) |
| DEFINES_APP += -DAPP_CORE_ID=$(APP_CORE_ID) |
| DEFINES_APP += -DMCUBOOT_IMAGE_NUMBER=$(MCUBOOT_IMAGE_NUMBER) |
| DEFINES_APP += -DUSE_SHARED_SLOT=$(USE_SHARED_SLOT) |
| DEFINES_APP += -DMCUBOOT_PLATFORM_CHUNK_SIZE=$(PLATFORM_CHUNK_SIZE) |
| DEFINES_APP += -DMEMORY_ALIGN=$(PLATFORM_MEMORY_ALIGN) |
| DEFINES_APP += -DPLATFORM_MAX_TRAILER_PAGE_SIZE=$(PLATFORM_MAX_TRAILER_PAGE_SIZE) |
| |
| # Define MCUboot size and pass it to linker script |
| LDFLAGS_DEFSYM += -Wl,--defsym,BOOTLOADER_SIZE=$(BOOTLOADER_SIZE) |
| |
| APP_DEFAULT_POLICY ?= $(PLATFORM_APP_DEFAULT_POLICY) |
| |
| ifeq ($(USE_EXTERNAL_FLASH), 1) |
| ifeq ($(USE_XIP), 1) |
| DEFINES_APP += -DUSE_XIP |
| endif |
| DEFINES_APP += -DCY_BOOT_USE_EXTERNAL_FLASH |
| DEFINES_APP += -DCY_MAX_EXT_FLASH_ERASE_SIZE=$(PLATFORM_CY_MAX_EXT_FLASH_ERASE_SIZE) |
| endif |
| |
| ifeq ($(USE_OVERWRITE), 1) |
| DEFINES_APP += -DMCUBOOT_OVERWRITE_ONLY |
| ifeq ($(USE_SW_DOWNGRADE_PREV), 1) |
| DEFINES_APP += -DMCUBOOT_DOWNGRADE_PREVENTION |
| endif |
| else |
| ifeq ($(USE_BOOTSTRAP), 1) |
| DEFINES_APP += -DMCUBOOT_BOOTSTRAP |
| endif |
| endif |
| DEFINES_APP += -DMCUBOOT_MAX_IMG_SECTORS=$(MAX_IMG_SECTORS) |
| DEFINES_APP += -DMCUBOOT_LOG_LEVEL=$(MCUBOOT_LOG_LEVEL) |
| ifeq ($(USE_HW_ROLLBACK_PROT), 1) |
| DEFINES_APP += -DMCUBOOT_HW_ROLLBACK_PROT |
| # Service RAM app address (size 0x8000) |
| DEFINES_APP += -DSERVICE_APP_OFFSET=$(PLATFORM_SERVICE_APP_OFFSET) |
| # Service RAM app input parameters address (size 0x400) |
| DEFINES_APP += -DSERVICE_APP_INPUT_PARAMS_OFFSET=$(PLATFORM_SERVICE_APP_INPUT_PARAMS_OFFSET) |
| # Service RAM app descriptor addr (size 0x20) |
| DEFINES_APP += -DSERVICE_APP_DESC_OFFSET=$(PLATFORM_SERVICE_APP_DESC_OFFSET) |
| # Service RAM app size |
| DEFINES_APP += -DSERVICE_APP_SIZE=$(PLATFORM_SERVICE_APP_SIZE) |
| endif |
| # Hardware acceleration support |
| ifeq ($(USE_CRYPTO_HW), 1) |
| DEFINES_APP += -DMBEDTLS_USER_CONFIG_FILE="\"mcuboot_crypto_acc_config.h\"" |
| DEFINES_APP += -DCY_CRYPTO_HAL_DISABLE |
| DEFINES_APP += -DCY_MBEDTLS_HW_ACCELERATION |
| |
| INCLUDE_DIRS_MBEDTLS_MXCRYPTO := $(CY_LIBS_PATH)/cy-mbedtls-acceleration |
| INCLUDE_DIRS_MBEDTLS_MXCRYPTO += $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/include |
| |
| ifeq ($(FAMILY), CYW20829) |
| INCLUDE_DIRS_MBEDTLS_MXCRYPTO += $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/mbedtls_$(CRYPTO_ACC_TYPE) |
| SOURCES_MBEDTLS_MXCRYPTO := $(wildcard $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/mbedtls_$(CRYPTO_ACC_TYPE)/*.c) |
| DEFINES_APP += -Dcy_stc_cryptolite_context_sha256_t=cy_stc_cryptolite_context_sha_t |
| else |
| INCLUDE_DIRS_MBEDTLS_MXCRYPTO += $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/mbedtls_$(CRYPTO_ACC_TYPE) |
| SOURCES_MBEDTLS_MXCRYPTO := $(wildcard $(CY_LIBS_PATH)/cy-mbedtls-acceleration/COMPONENT_CAT1/mbedtls_$(CRYPTO_ACC_TYPE)/*.c) |
| endif |
| |
| INCLUDE_DIRS_LIBS += $(addprefix -I,$(INCLUDE_DIRS_MBEDTLS_MXCRYPTO)) |
| SOURCES_LIBS += $(SOURCES_MBEDTLS_MXCRYPTO) |
| endif |
| |
| # Use key provisioned in device to verify images |
| ifeq ($(USE_HW_KEY), 1) |
| DEFINES_APP=-DMCUBOOT_HW_KEY |
| |
| endif |
| |
| # Compile with user redefined values for UART HW, port, pins |
| ifeq ($(USE_CUSTOM_DEBUG_UART), 1) |
| DEFINES_APP += -DUSE_CUSTOM_DEBUG_UART=1 |
| endif |
| |
| # Log timestamp information |
| ifeq ($(USE_LOG_TIMESTAMP), 1) |
| DEFINES_APP += -DUSE_LOG_TIMESTAMP |
| endif |
| |
| # Encrypted image support |
| ifeq ($(ENC_IMG), 1) |
| DEFINES_APP += -DENC_IMG=1 |
| ifeq ($(FAMILY), CYW20829) |
| DEFINES_APP += -DMCUBOOT_ENC_IMAGES_XIP |
| endif |
| # Use maximum optimization level for PSOC6 encrypted image with |
| # external flash so it would fit into 0x18000 size of MCUBootApp |
| ifneq ($(FAMILY), CYW20829) |
| ifeq ($(BUILDCFG), Debug) |
| ifeq ($(USE_EXTERNAL_FLASH), 1) |
| CFLAGS_OPTIMIZATION := -Os -g3 |
| endif |
| endif |
| endif |
| endif |
| |
| ifeq ($(USE_MEASURED_BOOT), 1) |
| DEFINES_APP += -DMCUBOOT_MEASURED_BOOT |
| DEFINES_APP += -DMAX_BOOT_RECORD_SZ=512 |
| DEFINES_APP += -DMCUBOOT_SHARED_DATA_BASE=0x08000800 |
| DEFINES_APP += -DMCUBOOT_SHARED_DATA_SIZE=0x200 |
| endif |
| |
| ifeq ($(USE_DATA_SHARING), 1) |
| DEFINES_APP += -DMCUBOOT_DATA_SHARING |
| DEFINES_APP += -DMAX_BOOT_RECORD_SZ=512 |
| DEFINES_APP += -DMCUBOOT_SHARED_DATA_BASE=0x08000800 |
| DEFINES_APP += -DMCUBOOT_SHARED_DATA_SIZE=0x200 |
| endif |
| |
| ifeq ($(BOOT_RECORD_SW_TYPE), ) |
| BOOT_RECORD := --boot-record MCUBootApp |
| else |
| BOOT_RECORD := --boot-record $(BOOT_RECORD_SW_TYPE) |
| endif |
| |
| # Collect MCUBoot sourses |
| SOURCES_MCUBOOT := $(wildcard $(PRJ_DIR)/../bootutil/src/*.c) |
| |
| # Collect MCUBoot Application sources |
| SOURCES_APP_SRC := main.c keys.c |
| ifeq ($(USE_EXEC_TIME_CHECK), 1) |
| DEFINES_APP += -DUSE_EXEC_TIME_CHECK=1 |
| SOURCES_APP_SRC += misc/timebase_us.c |
| endif |
| |
| INCLUDE_DIRS_UTILS := $(PLATFORM_INCLUDE_DIRS_UTILS) |
| |
| # Collect all the sources |
| SOURCES_APP := $(SOURCES_MCUBOOT) |
| SOURCES_APP += $(addprefix $(CUR_APP_PATH)/, $(SOURCES_APP_SRC)) |
| SOURCES_APP += $(PLATFORM_APP_SOURCES) |
| |
| INCLUDE_DIRS_MCUBOOT := $(addprefix -I, $(PRJ_DIR)/../bootutil/include) |
| INCLUDE_DIRS_MCUBOOT += $(addprefix -I, $(PRJ_DIR)/../bootutil/include/bootutil) |
| INCLUDE_DIRS_MCUBOOT += $(addprefix -I, $(PRJ_DIR)/../bootutil/include/bootutil/crypto) |
| INCLUDE_DIRS_MCUBOOT += $(addprefix -I, $(PRJ_DIR)/../bootutil/src) |
| INCLUDE_DIRS_MCUBOOT += $(addprefix -I, $(PRJ_DIR)/..) |
| |
| INCLUDE_DIRS_APP += $(addprefix -I, $(PRJ_DIR)) |
| INCLUDE_DIRS_APP += $(addprefix -I, $(CUR_APP_PATH)) |
| INCLUDE_DIRS_APP += $(addprefix -I, $(CUR_APP_PATH)/config) |
| INCLUDE_DIRS_APP += $(addprefix -I, $(CUR_APP_PATH)/os) |
| INCLUDE_DIRS_APP += $(addprefix -I, $(INCLUDE_DIRS_FLASH)) |
| INCLUDE_DIRS_APP += $(addprefix -I, $(INCLUDE_DIRS_UTILS)) |
| |
| ASM_FILES_APP := |
| ASM_FILES_APP += $(ASM_FILES_STARTUP) |
| |
| # Pass variables to linker script and overwrite path to it, if custom is required |
| ifeq ($(FAMILY), XMC7000) |
| LINKER_SCRIPT := $(PRJ_DIR)/platforms/BSP/$(FAMILY)/system/COMPONENT_$(CORE)/TOOLCHAIN_$(COMPILER)/linker.ld |
| else |
| LINKER_SCRIPT := $(CUR_APP_PATH)/$(APP_NAME)_$(CORE).ld |
| endif |
| |
| ifeq ($(COMPILER), GCC_ARM) |
| LDFLAGS += $(LDFLAGS_DEFSYM) |
| else ifeq ($(COMPILER), IAR) |
| $(error $(COMPILER) not supported at this moment) |
| |
| else ifeq ($(COMPILER), ARM) |
| $(error $(COMPILER) not supported at this moment) |
| |
| else |
| $(error $(COMPILER) not supported at this moment) |
| endif |
| |
| ############################################################################### |
| # Print debug information about all settings used and/or set in this file |
| ifeq ($(VERBOSE), 1) |
| $(info #### MCUBootApp.mk ####) |
| $(info APP_CORE <-- $(APP_CORE)) |
| $(info APP_DEFAULT_POLICY --> $(APP_DEFAULT_POLICY)) |
| $(info APP_NAME <-> $(APP_NAME)) |
| $(info ASM_FILES_APP --> $(ASM_FILES_APP)) |
| $(info ASM_FILES_STARTUP <-- $(ASM_FILES_STARTUP)) |
| $(info BOOTLOADER_SIZE <-- $(BOOTLOADER_SIZE)) |
| $(info BOOT_RECORD --> $(BOOT_RECORD)) |
| $(info BOOT_RECORD_SW_TYPE <-- $(BOOT_RECORD_SW_TYPE)) |
| $(info BUILDCFG <-- $(BUILDCFG)) |
| $(info CFLAGS_OPTIMIZATION --> $(CFLAGS_OPTIMIZATION)) |
| $(info COMPILER <-> $(COMPILER)) |
| $(info CORE <-- $(CORE)) |
| $(info CUR_APP_PATH <-- $(CUR_APP_PATH)) |
| $(info CY_LIBS_PATH <-- $(CY_LIBS_PATH)) |
| $(info DEFINES_APP --> $(DEFINES_APP)) |
| $(info ENC_IMG <-> $(ENC_IMG)) |
| $(info FLASH_MAP <-- $(FLASH_MAP)) |
| $(info INCLUDE_DIRS_APP --> $(INCLUDE_DIRS_APP)) |
| $(info INCLUDE_DIRS_FLASH <-> $(INCLUDE_DIRS_FLASH)) |
| $(info INCLUDE_DIRS_LIBS --> $(INCLUDE_DIRS_LIBS)) |
| $(info INCLUDE_DIRS_MBEDTLS_MXCRYPTO <-> $(INCLUDE_DIRS_MBEDTLS_MXCRYPTO)) |
| $(info INCLUDE_DIRS_MCUBOOT --> $(INCLUDE_DIRS_MCUBOOT)) |
| $(info INCLUDE_DIRS_UTILS <-> $(INCLUDE_DIRS_UTILS)) |
| $(info LDFLAGS --> $(LDFLAGS)) |
| $(info LDFLAGS_DEFSYM <-> $(LDFLAGS_DEFSYM)) |
| $(info LINKER_SCRIPT --> $(LINKER_SCRIPT)) |
| $(info MAX_IMG_SECTORS <-> $(MAX_IMG_SECTORS)) |
| $(info MCUBOOT_IMAGE_NUMBER <-> $(MCUBOOT_IMAGE_NUMBER)) |
| $(info MCUBOOT_LOG_LEVEL <-> $(MCUBOOT_LOG_LEVEL)) |
| $(info OUT <-> $(OUT)) |
| $(info OUT_CFG --> $(OUT_CFG)) |
| $(info OUT_TARGET <-> $(OUT_TARGET)) |
| $(info PLATFORM <-- $(PLATFORM)) |
| $(info PLATFORM_APP_DEFAULT_POLICY <-- $(PLATFORM_APP_DEFAULT_POLICY)) |
| $(info PLATFORM_APP_SOURCES <-- $(PLATFORM_APP_SOURCES)) |
| $(info PLATFORM_CY_MAX_EXT_FLASH_ERASE_SIZE <-- $(PLATFORM_CY_MAX_EXT_FLASH_ERASE_SIZE)) |
| $(info PLATFORM_INCLUDE_DIRS_FLASH <-- $(PLATFORM_INCLUDE_DIRS_FLASH)) |
| $(info PLATFORM_INCLUDE_DIRS_UTILS <-- $(PLATFORM_INCLUDE_DIRS_UTILS)) |
| $(info PLATFORM_MAX_IMG_SECTORS <-- $(PLATFORM_MAX_IMG_SECTORS)) |
| $(info PLATFORM_SERVICE_APP_DESC_OFFSET <-- $(PLATFORM_SERVICE_APP_DESC_OFFSET)) |
| $(info PLATFORM_SERVICE_APP_INPUT_PARAMS_OFFSET <-- $(PLATFORM_SERVICE_APP_INPUT_PARAMS_OFFSET)) |
| $(info PLATFORM_SERVICE_APP_OFFSET <-- $(PLATFORM_SERVICE_APP_OFFSET)) |
| $(info PLATFORM_SERVICE_APP_SIZE <-- $(PLATFORM_SERVICE_APP_SIZE)) |
| $(info PLATFORM_SOURCES_FLASH <-- $(PLATFORM_SOURCES_FLASH)) |
| $(info PRJ_DIR <-- $(PRJ_DIR)) |
| $(info PYTHON_PATH <-- $(PYTHON_PATH)) |
| $(info SIGN_KEY_FILE <-- $(SIGN_KEY_FILE)) |
| $(info SOURCES_APP --> $(SOURCES_APP)) |
| $(info SOURCES_APP_SRC <-> $(SOURCES_APP_SRC)) |
| $(info SOURCES_FLASH <-> $(SOURCES_FLASH)) |
| $(info SOURCES_LIBS --> $(SOURCES_LIBS)) |
| $(info SOURCES_MBEDTLS_MXCRYPTO <-> $(SOURCES_MBEDTLS_MXCRYPTO)) |
| $(info SOURCES_MCUBOOT <-> $(SOURCES_MCUBOOT)) |
| $(info USE_BOOTSTRAP <-> $(USE_BOOTSTRAP)) |
| $(info USE_CRYPTO_HW <-- $(USE_CRYPTO_HW)) |
| $(info USE_CUSTOM_DEBUG_UART <-- $(USE_CUSTOM_DEBUG_UART)) |
| $(info USE_DATA_SHARING <-- $(USE_DATA_SHARING)) |
| $(info USE_EXEC_TIME_CHECK <-- $(USE_EXEC_TIME_CHECK)) |
| $(info USE_EXTERNAL_FLASH <-- $(USE_EXTERNAL_FLASH)) |
| $(info USE_HW_ROLLBACK_PROT <-- $(USE_HW_ROLLBACK_PROT)) |
| $(info USE_LOG_TIMESTAMP <-- $(USE_LOG_TIMESTAMP)) |
| $(info USE_MEASURED_BOOT <-- $(USE_MEASURED_BOOT)) |
| $(info USE_OVERWRITE <-- $(USE_OVERWRITE)) |
| $(info USE_SHARED_SLOT <-> $(USE_SHARED_SLOT)) |
| $(info USE_SW_DOWNGRADE_PREV <-- $(USE_SW_DOWNGRADE_PREV)) |
| $(info USE_XIP <-- $(USE_XIP)) |
| endif |