| ################################################################################ |
| # \file Makefile |
| # \version 1.0 |
| # |
| # \brief |
| # Main Makefile for building MCUBoot application for Cypress target. |
| # |
| ################################################################################ |
| # \copyright |
| # Copyright 2018-2021 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. |
| ################################################################################ |
| |
| # minimum Python 3.7 is required |
| # Python path definition |
| ifeq ($(OS),Windows_NT) |
| PYTHON_PATH?=python |
| else |
| PYTHON_PATH?=python3 |
| endif |
| |
| ################################################################################ |
| # Main settings |
| ################################################################################ |
| |
| # Defines whether or not show verbose build output |
| MAKEINFO ?= 1 |
| # Application name by default |
| APP_NAME ?= MCUBootApp |
| # Weather or now execute post build script after build - set to 0 for CI |
| POST_BUILD ?= 1 |
| |
| SIGN_KEY_FILE ?= cypress-test-ec-p256 |
| ENC_KEY_FILE ?= enc-ec256-pub |
| ENC_IMG ?= 0 |
| |
| # set this variable to a path, where cysecuretools python package is installed |
| # use command `python -m pip show cysecuretools` to find out this path |
| # or rely on scripts that automates this action, bit not work for virtual envs |
| CY_SEC_TOOLS_PATH ?= $(shell $(PYTHON_PATH) $(CURDIR)/scripts/find_cysectools.py) |
| |
| BUILDCFG ?= Debug |
| |
| # Set of supported applications |
| APPS := MCUBootApp BlinkyApp |
| |
| HEADER_OFFSET ?= 0 |
| |
| ifneq ($(filter $(APP_NAME), $(APPS)),) |
| include ./$(APP_NAME)/$(APP_NAME).mk |
| include ./$(APP_NAME)/libs.mk |
| else |
| $(error Not supported application: '$(APP_NAME)') |
| endif |
| |
| ASM_FILES := $(ASM_FILES_APP) |
| ASM_FILES += $(ASM_FILES_LIBS) |
| |
| C_FILES := $(SOURCES_APP) |
| C_FILES += $(SOURCES_LIBS) |
| |
| INCLUDE_DIRS := $(INCLUDE_DIRS_APP) |
| INCLUDE_DIRS += $(INCLUDE_DIRS_MCUBOOT) |
| INCLUDE_DIRS += $(INCLUDE_DIRS_LIBS) |
| |
| #INCLUDE_FILES := $(INCLUDE_FILES_APP) |
| |
| #INCLUDES := $(addprefix -include , $(INCLUDE_FILES)) |
| |
| O_FILES := $(notdir $(C_FILES:.c=.o)) $(addsuffix .o, $(notdir $(basename $(ASM_FILES)))) |
| |
| DEFINES := $(DEFINES_APP) |
| DEFINES += $(DEFINES_LIBS) |
| AS_FLAGS += $(DEFINES) |
| |
| ifeq ($(MAKEINFO), 1) |
| $(info ==============================================================================) |
| $(info = Directories to look for header files: =) |
| $(info ==============================================================================) |
| $(info $(INCLUDE_DIRS)) |
| |
| $(info ==============================================================================) |
| $(info = Collected Defines string: =) |
| $(info ==============================================================================) |
| $(info $(DEFINES)) |
| endif |
| |
| # updating CFLAGS at this point as DEFINES are completed |
| CFLAGS += $(DEFINES) |
| |
| VPATH = $(dir $(C_FILES) $(ASM_FILES)) |
| |
| # |
| # STDE: For cygwin, adjust paths for compiler |
| # |
| MY_FILES := $(subst /cygdrive/c,c:,$(C_FILES)) |
| #$(info MY_FILES $(MY_FILES)) |
| C_FILES=$(MY_FILES) |
| |
| MY_DIRS := $(subst /cygdrive/c,c:,$(INCLUDE_DIRS)) |
| #$(info MY_DIRS $(MY_DIRS)) |
| INCLUDE_DIRS=$(MY_DIRS) |
| |
| MY_ASM_FILES := $(subst /cygdrive/c,c:,$(ASM_FILES)) |
| #$(info MY_ASM_FILES $(MY_ASM_FILES)) |
| ASM_FILES=$(MY_ASM_FILES) |
| |
| MY_LDFLAGS := $(subst /cygdrive/c,c:,$(LDFLAGS)) |
| #$(info MY_LDFLAGS $(MY_LDFLAGS)) |
| LDFLAGS=$(MY_LDFLAGS) |
| |
| # Default name pattern for output files |
| # may be modified in %Application%.mk file |
| OUT_FILE_NAME ?= $(OUT_APP)/$(APP_NAME) |
| |
| OUT_OBJ := $(OUT_CFG)/obj |
| OUT_APP := $(OUT_CFG) |
| |
| .PHONY: all app build clean pre_build post_build |
| |
| all: clean app |
| |
| app: |
| @`mkdir -p ./$(OUT)` |
| @`mkdir -p ./$(OUT_TARGET)` |
| @`mkdir -p ./$(OUT_CFG)` |
| @`mkdir -p ./$(OUT_OBJ)` |
| $(MAKE) pre_build |
| $(MAKE) build -j8 |
| $(MAKE) post_build |
| |
| build: $(OUT_APP)/$(APP_NAME).hex |
| $(GCC_PATH)/bin/arm-none-eabi-objdump $(OUT_APP)/$(APP_NAME).elf -S --disassemble > $(OUT_APP)/$(APP_NAME).lst |
| $(GCC_PATH)/bin/arm-none-eabi-objdump -h $(OUT_APP)/$(APP_NAME).elf |
| $(GCC_PATH)/bin/arm-none-eabi-size --format=SysV $(OUT_APP)/$(APP_NAME).elf |
| |
| $(OUT_APP)/$(APP_NAME).hex: $(OUT_APP)/$(APP_NAME).elf |
| $(GCC_PATH)/bin/arm-none-eabi-objcopy --change-addresses=$(HEADER_OFFSET) -O ihex $(OUT_APP)/$(APP_NAME).elf $(OUT_APP)/$(APP_NAME).hex |
| |
| $(OUT_APP)/$(APP_NAME).elf: $(addprefix $(OUT_OBJ)/, $(O_FILES)) |
| @echo "LD $@" |
| ifeq ($(MAKEINFO), 1) |
| @echo $(LD) $(O_FILES) $(CC_DEPEND) $(@:.o=.d) -o $@ $(LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$(OUT_FILE_NAME).map |
| endif |
| @$(LD) $(addprefix $(OUT_OBJ)/, $(O_FILES)) $(CC_DEPEND) $(@:.o=.d) -o $@ $(LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$(OUT_FILE_NAME).map |
| |
| |
| $(OUT_OBJ)/%.o: %.c |
| @echo "CC $<" |
| ifeq ($(MAKEINFO), 1) |
| @echo $(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@ |
| endif |
| @$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@ |
| ifeq ($(MAKEINFO), 1) |
| @echo |
| endif |
| |
| $(OUT_OBJ)/%.o: %.S |
| @echo "AS $<" |
| ifeq ($(COMPILER), GCC_ARM) |
| ifeq ($(MAKEINFO), 1) |
| @echo @$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@ |
| endif |
| @$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(CC_DEPEND) $(@:.o=.d) -c $< -o $@ |
| else |
| @echo $(AS) $< -o $@ $(AS_FLAGS) |
| @$(AS) $< -o $@ $(AS_FLAGS) |
| endif |
| ifeq ($(MAKEINFO), 1) |
| @echo |
| endif |
| |
| clean: |
| @echo "Cleanup out directory..." |
| rm -rf $(OUT_TARGET)/$(BUILDCFG) |
| |
| clean_boot: |
| @echo "Cleanup out BOOT directory of $(APP_NAME)..." |
| rm -rf $(OUT_TARGET)/$(BUILDCFG)/boot |
| |
| clean_upgrade: |
| @echo "Cleanup out UPGRADE directory of $(APP_NAME)..." |
| rm -rf $(OUT_TARGET)/$(BUILDCFG)/upgrade |
| |
| run_cppcheck: |
| @echo "Performing static code analysis with Cppcheck tool..." |
| cppcheck/cppcheck.sh $(APP_NAME) $(PLATFORM) "$(DEFINES)" "$(INCLUDE_DIRS)" "$(C_FILES)" $(CPP_CHECK_SCOPE) $(BUILDCFG) |
| |
| gen_key_ecc256: |
| @echo Generate ECC256 keys: $(SIGN_KEY_FILE).pem and $(SIGN_KEY_FILE).pub |
| ../../scripts/imgtool.py keygen -k keys/$(SIGN_KEY_FILE).pem -t ecdsa-p256 |
| ../../scripts/imgtool.py getpub -k keys/$(SIGN_KEY_FILE).pem > keys/$(SIGN_KEY_FILE).pub |
| |
| ifeq ($(MAKEINFO) , 1) |
| $(info ASM_FILES: $(ASM_FILES)) |
| $(info C_FILES: $(C_FILES)) |
| $(info INCLUDE_DIRS: $(INCLUDE_DIRS)) |
| $(info DEFINES: $(DEFINES)) |
| $(info CC: $(CC)) |
| endif |