blob: c2edca68798b7b8fbe841534766fbb4c0337e6f9 [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
10# Copyright 2019 Cypress Semiconductor Corporation
11# 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
39MAKEINFO ?= 1
40# Application name by default
41APP_NAME ?= MCUBootApp
42# Weather or now execute post build script after build - set to 0 for CI
43POST_BUILD ?= 1
44
45SIGN_KEY_FILE ?= cypress-test-ec-p256
Bohdan Kovalchukde518072020-11-30 22:10:48 +020046ENC_KEY_FILE ?= enc-ec256-pub
47ENC_IMG ?= 0
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020048
49# set this variable to a path, where cysecuretools python package is installed
50# use command `python -m pip show cysecuretools` to find out this path
51# or rely on scripts that automates this action, bit not work for virtual envs
52CY_SEC_TOOLS_PATH ?= $(shell $(PYTHON_PATH) $(CURDIR)/scripts/find_cysectools.py)
53
54BUILDCFG ?= Debug
55
56# Set of supported applications
Roman Okhrimenko23ca10a2020-03-24 23:32:22 +020057APPS := MCUBootApp BlinkyApp
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020058
59HEADER_OFFSET ?= 0
60
61ifneq ($(filter $(APP_NAME), $(APPS)),)
62include ./$(APP_NAME)/$(APP_NAME).mk
63else
64$(error Not supported application: '$(APP_NAME)')
65endif
66
67ASM_FILES := $(ASM_FILES_APP)
68ASM_FILES += $(ASM_FILES_LIBS)
69
70C_FILES := $(SOURCES_APP)
71C_FILES += $(SOURCES_LIBS)
72
73INCLUDE_DIRS := $(INCLUDE_DIRS_APP)
Bohdan Kovalchuk77256522020-04-15 18:03:43 +030074INCLUDE_DIRS += $(INCLUDE_DIRS_MCUBOOT)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +020075INCLUDE_DIRS += $(INCLUDE_DIRS_LIBS)
76
77#INCLUDE_FILES := $(INCLUDE_FILES_APP)
78
79#INCLUDES := $(addprefix -include , $(INCLUDE_FILES))
80
81O_FILES := $(notdir $(C_FILES:.c=.o)) $(addsuffix .o, $(notdir $(basename $(ASM_FILES))))
82
83DEFINES := $(DEFINES_APP)
84DEFINES += $(DEFINES_LIBS)
85AS_FLAGS += $(DEFINES)
86
87ifeq ($(MAKEINFO), 1)
88$(info ==============================================================================)
89$(info = Directories to look for header files: =)
90$(info ==============================================================================)
91$(info $(INCLUDE_DIRS))
92
93$(info ==============================================================================)
94$(info = Collected Defines string: =)
95$(info ==============================================================================)
96$(info $(DEFINES))
97endif
98
99# updating CFLAGS at this point as DEFINES are completed
100CFLAGS += $(DEFINES)
101
102VPATH = $(dir $(C_FILES) $(ASM_FILES))
103
104#
105# STDE: For cygwin, adjust paths for compiler
106#
107MY_FILES := $(subst /cygdrive/c,c:,$(C_FILES))
108#$(info MY_FILES $(MY_FILES))
109C_FILES=$(MY_FILES)
110
111MY_DIRS := $(subst /cygdrive/c,c:,$(INCLUDE_DIRS))
112#$(info MY_DIRS $(MY_DIRS))
113INCLUDE_DIRS=$(MY_DIRS)
114
115MY_ASM_FILES := $(subst /cygdrive/c,c:,$(ASM_FILES))
116#$(info MY_ASM_FILES $(MY_ASM_FILES))
117ASM_FILES=$(MY_ASM_FILES)
118
119MY_LDFLAGS := $(subst /cygdrive/c,c:,$(LDFLAGS))
120#$(info MY_LDFLAGS $(MY_LDFLAGS))
121LDFLAGS=$(MY_LDFLAGS)
122
123# Default name pattern for output files
124# may be modified in %Application%.mk file
125OUT_FILE_NAME ?= $(OUT_APP)/$(APP_NAME)
126
127OUT_OBJ := $(OUT_CFG)/obj
128OUT_APP := $(OUT_CFG)
129
130.PHONY: all app build clean pre_build post_build
131
132all: clean app
133
134app:
135 @`mkdir -p ./$(OUT)`
136 @`mkdir -p ./$(OUT_TARGET)`
137 @`mkdir -p ./$(OUT_CFG)`
138 @`mkdir -p ./$(OUT_OBJ)`
139 $(MAKE) pre_build
140 $(MAKE) build -j8
141 $(MAKE) post_build
142
143build: $(OUT_APP)/$(APP_NAME).hex
Bohdan Kovalchuk0324f1b2020-05-26 08:04:24 -0500144 $(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 +0200145 $(GCC_PATH)/bin/arm-none-eabi-objdump -h $(OUT_APP)/$(APP_NAME).elf
146 $(GCC_PATH)/bin/arm-none-eabi-size --format=SysV $(OUT_APP)/$(APP_NAME).elf
147
148$(OUT_APP)/$(APP_NAME).hex: $(OUT_APP)/$(APP_NAME).elf
149 $(GCC_PATH)/bin/arm-none-eabi-objcopy --change-addresses=$(HEADER_OFFSET) -O ihex $(OUT_APP)/$(APP_NAME).elf $(OUT_APP)/$(APP_NAME).hex
150
151$(OUT_APP)/$(APP_NAME).elf: $(addprefix $(OUT_OBJ)/, $(O_FILES))
152 @echo "LD $@"
153ifeq ($(MAKEINFO), 1)
154 @echo $(LD) $(O_FILES) $(CC_DEPEND) $(@:.o=.d) -o $@ $(LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$(OUT_FILE_NAME).map
155endif
156 @$(LD) $(addprefix $(OUT_OBJ)/, $(O_FILES)) $(CC_DEPEND) $(@:.o=.d) -o $@ $(LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$(OUT_FILE_NAME).map
157
158
159$(OUT_OBJ)/%.o: %.c
160 @echo "CC $<"
161ifeq ($(MAKEINFO), 1)
162 @echo $(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@
163endif
164 @$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@
165ifeq ($(MAKEINFO), 1)
166 @echo
167endif
168
169$(OUT_OBJ)/%.o: %.S
170 @echo "AS $<"
171ifeq ($(COMPILER), GCC_ARM)
172ifeq ($(MAKEINFO), 1)
173 @echo @$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@
174endif
175 @$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@
176else
177 @echo $(AS) $< -o $@ $(AS_FLAGS)
178 @$(AS) $< -o $@ $(AS_FLAGS)
179endif
180ifeq ($(MAKEINFO), 1)
181 @echo
182endif
183
184clean:
185 @echo "Cleanup out directory..."
186 rm -rf $(OUT_TARGET)/$(BUILDCFG)
187
188clean_boot:
189 @echo "Cleanup out BOOT directory of $(APP_NAME)..."
190 rm -rf $(OUT_TARGET)/$(BUILDCFG)/boot
191
192clean_upgrade:
193 @echo "Cleanup out UPGRADE directory of $(APP_NAME)..."
194 rm -rf $(OUT_TARGET)/$(BUILDCFG)/upgrade
195
196run_cppcheck:
197 @echo "Performing static code analysis with Cppcheck tool..."
dmiv8672c8e2020-09-16 12:59:20 +0300198 cppcheck/cppcheck.sh $(APP_NAME) $(PLATFORM) "$(DEFINES)" "$(INCLUDE_DIRS)" "$(C_FILES)" $(CPP_CHECK_SCOPE) $(BUILDCFG)
Roman Okhrimenko89ecdac2020-02-28 17:05:55 +0200199
200gen_key_ecc256:
201 @echo Generate ECC256 keys: $(SIGN_KEY_FILE).pem and $(SIGN_KEY_FILE).pub
202 ../../scripts/imgtool.py keygen -k keys/$(SIGN_KEY_FILE).pem -t ecdsa-p256
203 ../../scripts/imgtool.py getpub -k keys/$(SIGN_KEY_FILE).pem > keys/$(SIGN_KEY_FILE).pub
204
205ifeq ($(MAKEINFO) , 1)
206$(info ASM_FILES: $(ASM_FILES))
207$(info C_FILES: $(C_FILES))
208$(info INCLUDE_DIRS: $(INCLUDE_DIRS))
209$(info DEFINES: $(DEFINES))
210$(info CC: $(CC))
211endif