1include makefile_common.mk
6# Choose permissible app area IDs
7ifeq ($(bl_updater_match_app_area_id),no)
11ifeq ($(bl_updater_match_app_area_id),yes)
12# Match only the app area ID of the application being built
13MATCH_APP_AREA_ID := $(app_area_id)
15# Match multiple app area IDs, including the application being built
16MATCH_APP_AREA_ID := $(app_area_id),$(bl_updater_match_app_area_id)
20# Include HAL driver code, needed to link bootloader updater
21-include $(HAL_API_PATH)makefile
22INCLUDES += -iquote$(API_PATH) -I$(UTIL_PATH)
27# The bootloader library, which includes the Generic Bootloader Updater Tool
28BOOTLOADER_LIB := $(BUILDPREFIX_BOOTLOADER)bootloader.a
30# Entry point, converted to HEX to determine the overlapping portion with stack
31ENTRYPOINT_ASM := $(MCU_PATH)common/bl_updater_entrypoint.s
32ENTRYPOINT_ELF := $(BUILDPREFIX_BL_UPDATER)$(ENTRYPOINT_ASM:.s=.elf)
33ENTRYPOINT_HEX := $(BUILDPREFIX_BL_UPDATER)$(ENTRYPOINT_ASM:.s=.hex)
36SRCS += $(notdir $(BL_UPDATER_NEW_BL_DATA) $(BL_UPDATER_CONFIG) $(BL_UPDATER_STACK_BACKUP))
37ASM_SRCS := $(ENTRYPOINT_ASM)
40OBJS_ := $(SRCS:.c=.o) $(ASM_SRCS:.s=.o)
41OBJS := $(addprefix $(BUILDPREFIX_BL_UPDATER), $(OBJS_))
43# Linker script for the Generic Bootloader Updater Tool
45LDSCRIPT = $(MCU_PATH)$(MCU_FAMILY)/$(MCU)/linker/gcc_bl_updater_$(MCU)$(MCU_SUB)$(MCU_MEM_VAR).ld
47LDSCRIPT = $(MCU_PATH)$(MCU_FAMILY)/$(MCU)/linker/gcc_bl_updater_$(MCU)$(MCU_SUB)$(MCU_MEM_VAR)_$(MCU_RAM_VAR).ld
50# Compiled and linked bootloader updater
51BL_UPDATER_ELF := $(BUILDPREFIX_BL_UPDATER)bl_updater.elf
54CLEAN := $(STACK_WITH_BL_UPDATER_HEX) $(BL_UPDATER_ELF) $(BL_UPDATER_HEX)
55CLEAN += $(OBJS) $(BL_UPDATER_BL_DATA) $(BL_UPDATER_CONFIG) $(BL_UPDATER_OLD_CONFIG_INI)
56CLEAN += $(BL_UPDATER_STACK_BACKUP) $(ENTRYPOINT_HEX) $(BL_UPDATER_BUILD_VARIABLES_MK)
58# Generate a hex file of the stack, with the bootloader updater embedded in it
59$(STACK_WITH_BL_UPDATER_HEX): $(BL_UPDATER_STACK_HEX) $(BL_UPDATER_HEX) $(BL_UPDATER_OLD_CONFIG_INI)
60 @echo "$(COLOR_INFO)Combining:$(COLOR_END) $@"
64 $(BL_UPDATER_STACK_HEX) \
66 --oldconfigfile=$(BL_UPDATER_OLD_CONFIG_INI)
68$(BL_UPDATER_STACK_HEX): $(BL_UPDATER_BUILD_VARIABLES_MK)
69 @echo "$(COLOR_INFO)Select Stack firmware for the Generic Bootloader Updater Tool$(COLOR_END)"
72 --firmware_path=$(FIRMWARE_PATH) \
73 --firmware_type="wp_stack" \
74 --archive_path=$(ARCHIVE_PATH)\
75 --extract_path=$(EXTRACT_PATH)\
77 --output_name=$(FIRMWARE_NAME)_for_bl_updater \
79 --mcu_sub=$(MCU_SUB) \
80 --mcu_mem_var=$(MCU_MEM_VAR) \
81 --mac_profile=$(mac_profile) \
82 --mac_profileid=$(mac_profileid) \
83 --mode=$(stack_mode) \
84 --modem_fw=$(modemfw_name) \
86 --radio_config=$(radio_config) \
87 --version=$(MIN_STACK_VERSION) \
88 --stack_area_addr=$(stack_area_addr)
90# Link entrypoint, bootloader updater library, new bootloader and bootloader updater config
91$(BL_UPDATER_ELF): $(OBJS) $(BOOTLOADER_LIB)
93 @echo "$(COLOR_LINK)Linking$(COLOR_END) $@"
94 $(D)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ \
95 -Wl,-Map=$(BUILDPREFIX_BL_UPDATER)bl_updater.map \
99$(BL_UPDATER_HEX): $(BL_UPDATER_ELF)
101 @echo "$(COLOR_INFO)Generating:$(COLOR_END) $@"
102 $(D)$(OBJCOPY) $< -O ihex $@
104# Link just the entrypoint, to determine the overlapping portion with stack
105# _bl_updater_start is a dummy value here, but it is not needed
106$(ENTRYPOINT_ELF): $(ENTRYPOINT_ELF:.elf=.o)
108 $(D)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ \
109 -Wl,-Map=$(ENTRYPOINT_ELF:.elf=.map) \
111 -Wl,--defsym,_bl_updater_start=0x0000
113$(ENTRYPOINT_HEX): $(ENTRYPOINT_ELF)
119$(BL_UPDATER_NEW_BL_DATA): $(BOOTLOADER_HEX) $(BOOTLOADER_CONFIG_INI)
121 @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
124 $(BUILDPREFIX_BL_UPDATER) \
126 --configfile=$(BOOTLOADER_CONFIG_INI)
128$(BL_UPDATER_CONFIG): $(BOOTLOADER_CONFIG_INI) $(BL_UPDATER_OLD_CONFIG_INI)
130 @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
133 $(BUILDPREFIX_BL_UPDATER) \
134 $(BL_UPDATER_CMD_LIST) \
135 --configfile=$(BOOTLOADER_CONFIG_INI) \
136 --oldconfigfile=$(BL_UPDATER_OLD_CONFIG_INI) \
137 --match_app_area_id=$(MATCH_APP_AREA_ID)
139$(BL_UPDATER_STACK_BACKUP): $(BL_UPDATER_STACK_HEX) $(ENTRYPOINT_HEX) $(BL_UPDATER_OLD_CONFIG_INI)
141 @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
144 $(BUILDPREFIX_BL_UPDATER) \
145 $(BL_UPDATER_STACK_HEX) \
147 --configfile=$(BOOTLOADER_CONFIG_INI) \
148 --oldconfigfile=$(BL_UPDATER_OLD_CONFIG_INI)
150$(BUILDPREFIX_BL_UPDATER)%.o: %.c
152 @echo "$(COLOR_CC)CC$(COLOR_END) $<"
153 $(D)$(CC) $(INCLUDES) $(CFLAGS) -MMD -MP -c $< -o $@
155$(BUILDPREFIX_BL_UPDATER)%.o: $(BUILDPREFIX_BL_UPDATER)%.c
157 @echo "$(COLOR_CC)CC$(COLOR_END) $<"
158 $(D)$(CC) $(INCLUDES) $(CFLAGS) -MMD -MP -c $< -o $@
160$(BUILDPREFIX_BL_UPDATER)%.o: %.s
162 @echo "$(COLOR_CC)CC$(COLOR_END) $<"
163 $(D)$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@
165# Generate full bootloader configuration and makefile
166# fragment that match the old bootloader configuration
167$(BL_UPDATER_OLD_CONFIG_INI) $(BL_UPDATER_BUILD_VARIABLES_MK): $(ini_file_wp) $(ini_file_app) $(bl_updater_old_key_file)
172 -i $(platform_config_ini) \
173 -i $(bl_updater_old_key_file) \
174 -o $(BL_UPDATER_OLD_CONFIG_INI) \
175 -om $(BL_UPDATER_BUILD_VARIABLES_MK) \
176 -ol APP_AREA_ID:$(app_area_id) \
178 -hv 0x$(HW_VARIANT_ID) \
179 -fb $(FLASH_BASE_ADDR) \
180 -bs $(old_bootloader_size) \
181 -as $(BOOTLOADER_SIZES)
183# Include a makefile fragment for build-time make
184# variables, generated by the rule above
185-include $(BL_UPDATER_BUILD_VARIABLES_MK)
188all: $(STACK_WITH_BL_UPDATER_HEX)
191 $(D)$(RM) -rf $(CLEAN)