blob: a444c04d4d9f2111896427a5b000861c4a271feb [file] [log] [blame]
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +02001################################################################################
2# \file Makefile
3# \version 1.0
4#
5# \brief
6# Main Makefile for building MCUBoot application for Cypress target.
7#
8################################################################################
9# \copyright
Roman Okhrimenko4bc28102021-02-01 19:31:41 +020010# Copyright 2018-2021 Cypress Semiconductor Corporation
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020011# SPDX-License-Identifier: Apache-2.0
12#
13# Licensed under the Apache License, Version 2.0 (the "License");
14# you may not use this file except in compliance with the License.
15# You may obtain a copy of the License at
16#
17# http://www.apache.org/licenses/LICENSE-2.0
18#
19# Unless required by applicable law or agreed to in writing, software
20# distributed under the License is distributed on an "AS IS" BASIS,
21# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22# See the License for the specific language governing permissions and
23# limitations under the License.
24################################################################################
25
26# minimum Python 3.7 is required
27# Python path definition
28ifeq ($(OS),Windows_NT)
29PYTHON_PATH?=python
30else
31PYTHON_PATH?=python3
32endif
33
34################################################################################
35# Main settings
36################################################################################
37
38# Defines whether or not show verbose build output
Roman Okhrimenko977b3752022-03-31 14:40:48 +030039VERBOSE ?= 0
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020040# Application name by default
41APP_NAME ?= MCUBootApp
42# Weather or now execute post build script after build - set to 0 for CI
Roman Okhrimenko977b3752022-03-31 14:40:48 +030043POST_BUILD_ENABLE ?= 1
44
45# Default number of GCC compilation threads
46THREADS_NUM ?= 8
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020047
48SIGN_KEY_FILE ?= cypress-test-ec-p256
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +030049SECURE_MODE_KEY_NAME ?= cypress-test-rsa2k
50SECURE_MODE_KEY_TYPE ?= RSA2048
Bohdan Kovalchukde518072020-11-30 22:10:48 +020051ENC_KEY_FILE ?= enc-ec256-pub
52ENC_IMG ?= 0
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020053
54# set this variable to a path, where cysecuretools python package is installed
55# use command `python -m pip show cysecuretools` to find out this path
56# or rely on scripts that automates this action, bit not work for virtual envs
57CY_SEC_TOOLS_PATH ?= $(shell $(PYTHON_PATH) $(CURDIR)/scripts/find_cysectools.py)
58
59BUILDCFG ?= Debug
60
61# Set of supported applications
Roman Okhrimenko23ca10a2020-03-24 23:32:22 +020062APPS := MCUBootApp BlinkyApp
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020063
64HEADER_OFFSET ?= 0
65
Roman Okhrimenko977b3752022-03-31 14:40:48 +030066# Defines whether or not make all compile warnings into errors for application
67# source code (but not for library source code)
INFINEON\DovhalA3d3b51d2024-06-12 17:01:18 +030068WARN_AS_ERR ?= 1
Roman Okhrimenko977b3752022-03-31 14:40:48 +030069
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020070ifneq ($(filter $(APP_NAME), $(APPS)),)
71include ./$(APP_NAME)/$(APP_NAME).mk
Roman Okhrimenko4bc28102021-02-01 19:31:41 +020072include ./$(APP_NAME)/libs.mk
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020073else
74$(error Not supported application: '$(APP_NAME)')
75endif
76
77ASM_FILES := $(ASM_FILES_APP)
78ASM_FILES += $(ASM_FILES_LIBS)
79
80C_FILES := $(SOURCES_APP)
Roman Okhrimenko977b3752022-03-31 14:40:48 +030081C_FILES += $(SOURCES_PLATFORM)
82C_LIBS := $(SOURCES_LIBS)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020083
84INCLUDE_DIRS := $(INCLUDE_DIRS_APP)
Bohdan Kovalchuk77256522020-04-15 18:03:43 +030085INCLUDE_DIRS += $(INCLUDE_DIRS_MCUBOOT)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020086INCLUDE_DIRS += $(INCLUDE_DIRS_LIBS)
87
88#INCLUDE_FILES := $(INCLUDE_FILES_APP)
89
90#INCLUDES := $(addprefix -include , $(INCLUDE_FILES))
91
92O_FILES := $(notdir $(C_FILES:.c=.o)) $(addsuffix .o, $(notdir $(basename $(ASM_FILES))))
Roman Okhrimenko977b3752022-03-31 14:40:48 +030093O_LIBS := $(notdir $(C_LIBS:.c=.o))
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020094
Roman Okhrimenko977b3752022-03-31 14:40:48 +030095DEFINES := $(DEFINES_APP) -D$(APP_NAME)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020096DEFINES += $(DEFINES_LIBS)
97AS_FLAGS += $(DEFINES)
98
Roman Okhrimenko977b3752022-03-31 14:40:48 +030099ifeq ($(VERBOSE), 1)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200100$(info ==============================================================================)
101$(info = Directories to look for header files: =)
102$(info ==============================================================================)
103$(info $(INCLUDE_DIRS))
104
105$(info ==============================================================================)
106$(info = Collected Defines string: =)
107$(info ==============================================================================)
108$(info $(DEFINES))
109endif
110
111# updating CFLAGS at this point as DEFINES are completed
Roman Okhrimenko13f79ed2021-03-11 19:05:41 +0200112CFLAGS += $(DEFINES) $(CFLAGS_OPTIMIZATION)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200113
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300114VPATH = $(dir $(C_FILES) $(ASM_FILES) $(C_LIBS))
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200115
Roman Okhrimenko13f79ed2021-03-11 19:05:41 +0200116LDFLAGS += $(LDFLAGS_OPTIMIZATION)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200117
118# Default name pattern for output files
119# may be modified in %Application%.mk file
120OUT_FILE_NAME ?= $(OUT_APP)/$(APP_NAME)
121
122OUT_OBJ := $(OUT_CFG)/obj
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300123OUT_OBJ_LIBS_DIR := $(OUT_CFG)/obj/libs
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200124OUT_APP := $(OUT_CFG)
125
126.PHONY: all app build clean pre_build post_build
127
128all: clean app
129
130app:
131 @`mkdir -p ./$(OUT)`
132 @`mkdir -p ./$(OUT_TARGET)`
133 @`mkdir -p ./$(OUT_CFG)`
134 @`mkdir -p ./$(OUT_OBJ)`
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300135 @`mkdir -p ./$(OUT_OBJ_LIBS_DIR)`
136ifeq ($(VERBOSE) , 1)
137 @echo
138 @echo ======================== PRE_BUILD STAGE ========================
139 @echo =================================================================
140 @echo
141endif
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200142 $(MAKE) pre_build
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300143ifeq ($(VERBOSE) , 1)
144 @echo
145 @echo ======================== BUILD STAGE ========================
146 @echo =============================================================
147 @echo
148endif
149 $(MAKE) build -j $(THREADS_NUM)
150ifeq ($(VERBOSE) , 1)
151 @echo
152 @echo ======================== POST_BUILD STAGE ========================
153 @echo ==================================================================
154 @echo
155endif
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200156 $(MAKE) post_build
157
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300158build: $(OUT_APP)/$(APP_NAME)_unsigned.hex
Bohdan Kovalchuk0324f1b2020-05-26 08:04:24 -0500159 $(GCC_PATH)/bin/arm-none-eabi-objdump $(OUT_APP)/$(APP_NAME).elf -S --disassemble > $(OUT_APP)/$(APP_NAME).lst
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200160 $(GCC_PATH)/bin/arm-none-eabi-objdump -h $(OUT_APP)/$(APP_NAME).elf
161 $(GCC_PATH)/bin/arm-none-eabi-size --format=SysV $(OUT_APP)/$(APP_NAME).elf
162
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300163$(OUT_APP)/$(APP_NAME)_unsigned.hex: $(OUT_APP)/$(APP_NAME).bin
164 $(GCC_PATH)/bin/arm-none-eabi-objcopy --change-addresses=$(HEADER_OFFSET) -O ihex $(OUT_APP)/$(APP_NAME).elf $(OUT_APP)/$(APP_NAME)_unsigned.hex
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200165
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300166$(OUT_APP)/$(APP_NAME).bin: $(OUT_APP)/$(APP_NAME).elf
167 $(GCC_PATH)/bin/arm-none-eabi-objcopy $(OUT_APP)/$(APP_NAME).elf -S -O binary $(OUT_APP)/$(APP_NAME).bin --remove-section .cy_sflash_user_data --remove-section .cy_toc_part2
168
169$(OUT_APP)/$(APP_NAME).elf: $(addprefix $(OUT_OBJ)/, $(O_FILES)) $(addprefix $(OUT_OBJ_LIBS_DIR)/, $(O_LIBS))
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200170 @echo "LD $@"
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300171ifeq ($(VERBOSE), 1)
172 @echo
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200173 @echo $(LD) $(O_FILES) $(CC_DEPEND) $(@:.o=.d) -o $@ $(LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$(OUT_FILE_NAME).map
174endif
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300175 @$(LD) $(addprefix $(OUT_OBJ)/, $(O_FILES)) $(addprefix $(OUT_OBJ_LIBS_DIR)/, $(O_LIBS)) $(CC_DEPEND) $(@:.o=.d) -o $@ $(LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$(OUT_FILE_NAME).map
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200176
177
178$(OUT_OBJ)/%.o: %.c
179 @echo "CC $<"
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300180ifeq ($(VERBOSE), 1)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200181 @echo
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +0300182 @echo $(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200183endif
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +0300184 @$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200185
186$(OUT_OBJ)/%.o: %.S
187 @echo "AS $<"
188ifeq ($(COMPILER), GCC_ARM)
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300189ifeq ($(VERBOSE), 1)
190 @echo
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200191 @echo @$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@
192endif
193 @$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@
194else
195 @echo $(AS) $< -o $@ $(AS_FLAGS)
196 @$(AS) $< -o $@ $(AS_FLAGS)
197endif
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300198
199$(OUT_OBJ_LIBS_DIR)/%.o: %.c
200 @echo "CC $<"
201ifeq ($(VERBOSE), 1)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200202 @echo
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300203 @echo $(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200204endif
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300205 @$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200206
207clean:
208 @echo "Cleanup out directory..."
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +0300209 rm -f ./$(APP_NAME)/memorymap.mk ./platforms/memory/cy_flash_map.h ./platforms/memory/memorymap.h ./platforms/memory/memorymap.c
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200210 rm -rf $(OUT_TARGET)/$(BUILDCFG)
211
212clean_boot:
213 @echo "Cleanup out BOOT directory of $(APP_NAME)..."
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +0300214 rm -f ./$(APP_NAME)/memorymap.mk
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200215 rm -rf $(OUT_TARGET)/$(BUILDCFG)/boot
216
217clean_upgrade:
218 @echo "Cleanup out UPGRADE directory of $(APP_NAME)..."
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +0300219 rm -f ./$(APP_NAME)/memorymap.mk
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200220 rm -rf $(OUT_TARGET)/$(BUILDCFG)/upgrade
221
222run_cppcheck:
223 @echo "Performing static code analysis with Cppcheck tool..."
dmiv8672c8e2020-09-16 12:59:20 +0300224 cppcheck/cppcheck.sh $(APP_NAME) $(PLATFORM) "$(DEFINES)" "$(INCLUDE_DIRS)" "$(C_FILES)" $(CPP_CHECK_SCOPE) $(BUILDCFG)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200225
226gen_key_ecc256:
227 @echo Generate ECC256 keys: $(SIGN_KEY_FILE).pem and $(SIGN_KEY_FILE).pub
228 ../../scripts/imgtool.py keygen -k keys/$(SIGN_KEY_FILE).pem -t ecdsa-p256
229 ../../scripts/imgtool.py getpub -k keys/$(SIGN_KEY_FILE).pem > keys/$(SIGN_KEY_FILE).pub
230
Roman Okhrimenkodc0ca082023-06-21 20:49:51 +0300231gen_secure_cfgs:
232ifeq ($(SECURE_MODE_KEY_NAME), cypress-test-rsa2k)
233 @echo "Generating public $(SECURE_MODE_KEY_TYPE) keys"
234 cysecuretools -t $(PLATFORM) create-key --key-type $(SECURE_MODE_KEY_TYPE) -o ./keys/$(SECURE_MODE_KEY_NAME).pem ./keys/$(SECURE_MODE_KEY_NAME).pub --format PEM
235endif
236 @echo "Generating secure mode key config"
237 cysecuretools convert-key -k ./keys/$(SECURE_MODE_KEY_NAME).pub -o ./platforms/utils/$(FAMILY)/cy_si_key.c --fmt secure_boot --endian little
238
239
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300240###############################################################################
241# Print debug information about all settings used and/or set in this file
242ifeq ($(VERBOSE), 1)
243$(info #### Makefile ####)
244$(info APPS <-> $(APPS))
245$(info APP_NAME <-> $(APP_NAME))
246$(info AS <-- $(AS))
247$(info ASM_FILES <-> $(ASM_FILES))
248$(info ASM_FILES_APP <-- $(ASM_FILES_APP))
249$(info ASM_FILES_LIBS <-- $(ASM_FILES_LIBS))
250$(info AS_FLAGS <-> $(AS_FLAGS))
251$(info BUILDCFG <-> $(BUILDCFG))
252$(info CC <-- $(CC))
253$(info CC_DEPEND <-- $(CC_DEPEND))
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300254$(info CFLAGS <-> $(CFLAGS))
255$(info CFLAGS_OPTIMIZATION <-- $(CFLAGS_OPTIMIZATION))
256$(info COMPILER <-- $(COMPILER))
257$(info CPP_CHECK_SCOPE <-- $(CPP_CHECK_SCOPE))
258$(info CURDIR <-- $(CURDIR))
259$(info CY_SEC_TOOLS_PATH --> $(CY_SEC_TOOLS_PATH))
260$(info C_FILES <-> $(C_FILES))
261$(info C_LIBS <-> $(C_LIBS))
262$(info DEFINES <-> $(DEFINES))
263$(info DEFINES_APP <-- $(DEFINES_APP))
264$(info DEFINES_LIBS <-- $(DEFINES_LIBS))
265$(info ENC_IMG --> $(ENC_IMG))
266$(info ENC_KEY_FILE --> $(ENC_KEY_FILE))
267$(info GCC_PATH <-- $(GCC_PATH))
268$(info HEADER_OFFSET <-> $(HEADER_OFFSET))
269$(info INCLUDE_DIRS <-> $(INCLUDE_DIRS))
270$(info INCLUDE_DIRS_APP <-- $(INCLUDE_DIRS_APP))
271$(info INCLUDE_DIRS_LIBS <-- $(INCLUDE_DIRS_LIBS))
272$(info INCLUDE_DIRS_MCUBOOT <-- $(INCLUDE_DIRS_MCUBOOT))
273$(info LD <-- $(LD))
274$(info LDFLAGS <-> $(LDFLAGS))
275$(info LDFLAGS_OPTIMIZATION <-- $(LDFLAGS_OPTIMIZATION))
276$(info LINKER_SCRIPT <-- $(LINKER_SCRIPT))
277$(info MAKE <-- $(MAKE))
278$(info OS <-- $(OS))
279$(info OUT <-- $(OUT))
280$(info OUT_APP <-> $(OUT_APP))
281$(info OUT_CFG <-- $(OUT_CFG))
282$(info OUT_FILE_NAME <-> $(OUT_FILE_NAME))
283$(info OUT_OBJ <-> $(OUT_OBJ))
284$(info OUT_OBJ_LIBS_DIR <-> $(OUT_OBJ_LIBS_DIR))
285$(info OUT_TARGET <-- $(OUT_TARGET))
286$(info O_FILES <-> $(O_FILES))
287$(info O_LIBS <-> $(O_LIBS))
288$(info PLATFORM <-- $(PLATFORM))
289$(info POST_BUILD_ENABLE --> $(POST_BUILD_ENABLE))
290$(info PYTHON_PATH <-> $(PYTHON_PATH))
291$(info SIGN_KEY_FILE <-> $(SIGN_KEY_FILE))
292$(info SOURCES_APP <-- $(SOURCES_APP))
293$(info SOURCES_LIBS <-- $(SOURCES_LIBS))
294$(info SOURCES_PLATFORM <-- $(SOURCES_PLATFORM))
295$(info THREADS_NUM <-> $(THREADS_NUM))
Roman Okhrimenko977b3752022-03-31 14:40:48 +0300296$(info WARN_AS_ERR <-> $(WARN_AS_ERR))
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200297endif