1 include makefile_common.mk
6 # Choose permissible app area IDs
7 ifeq ($(bl_updater_match_app_area_id),no)
8 # Match any app area ID
11 ifeq ($(bl_updater_match_app_area_id),yes)
12 # Match only the app area ID of the application being built
13 MATCH_APP_AREA_ID := $(app_area_id)
15 # Match multiple app area IDs, including the application being built
16 MATCH_APP_AREA_ID := $(app_area_id),$(bl_updater_match_app_area_id)
20 # Reset areas to those in the new INI file, or keep areas
21 ifeq ($(bl_updater_reset_areas),yes)
22 RESET_AREAS := "--reset_areas"
27 # Include HAL driver code, needed to link bootloader updater
28 -include $(HAL_API_PATH)makefile
29 INCLUDES += -iquote$(API_PATH) -I$(UTIL_PATH)
34 # The bootloader library, which includes the Generic Bootloader Updater Tool
35 BOOTLOADER_LIB := $(BUILDPREFIX_BOOTLOADER)bootloader.a
37 # Entry point, converted to HEX to determine the overlapping portion with stack
38 ENTRYPOINT_ASM := $(MCU_PATH)common/bl_updater_entrypoint.s
39 ENTRYPOINT_ELF := $(BUILDPREFIX_BL_UPDATER)$(ENTRYPOINT_ASM:.s=.elf)
40 ENTRYPOINT_HEX := $(BUILDPREFIX_BL_UPDATER)$(ENTRYPOINT_ASM:.s=.hex)
43 SRCS += $(notdir $(BL_UPDATER_NEW_BL_DATA) $(BL_UPDATER_CONFIG) $(BL_UPDATER_STACK_BACKUP))
44 ASM_SRCS := $(ENTRYPOINT_ASM)
47 OBJS_ := $(SRCS:.c=.o) $(ASM_SRCS:.s=.o)
48 OBJS := $(addprefix $(BUILDPREFIX_BL_UPDATER), $(OBJS_))
50 # Linker script for the Generic Bootloader Updater Tool
52 LDSCRIPT = $(MCU_PATH)$(MCU_FAMILY)/$(MCU)/linker/gcc_bl_updater_$(MCU)$(MCU_SUB)$(MCU_MEM_VAR).ld
54 LDSCRIPT = $(MCU_PATH)$(MCU_FAMILY)/$(MCU)/linker/gcc_bl_updater_$(MCU)$(MCU_SUB)$(MCU_MEM_VAR)_$(MCU_RAM_VAR).ld
57 # Compiled and linked bootloader updater
58 BL_UPDATER_ELF := $(BUILDPREFIX_BL_UPDATER)bl_updater.elf
61 CLEAN := $(STACK_WITH_BL_UPDATER_HEX) $(BL_UPDATER_ELF) $(BL_UPDATER_HEX)
62 CLEAN += $(OBJS) $(BL_UPDATER_BL_DATA) $(BL_UPDATER_CONFIG) $(BL_UPDATER_OLD_CONFIG_INI)
63 CLEAN += $(BL_UPDATER_STACK_BACKUP) $(ENTRYPOINT_HEX) $(BL_UPDATER_BUILD_VARIABLES_MK)
65 # Generate a hex file of the stack, with the bootloader updater embedded in it
66 $(STACK_WITH_BL_UPDATER_HEX): $(BL_UPDATER_STACK_HEX) $(BL_UPDATER_HEX) $(BL_UPDATER_OLD_CONFIG_INI)
67 @echo "$(COLOR_INFO)Combining:$(COLOR_END) $@"
71 $(BL_UPDATER_STACK_HEX) \
73 --oldconfigfile=$(BL_UPDATER_OLD_CONFIG_INI)
75 $(BL_UPDATER_STACK_HEX): $(BL_UPDATER_BUILD_VARIABLES_MK)
76 @echo "$(COLOR_INFO)Select Stack firmware for the Generic Bootloader Updater Tool$(COLOR_END)"
79 --firmware_path=$(IMAGE_PATH) \
80 --firmware_type="wp_stack" \
82 --output_name=$(FIRMWARE_NAME)_for_bl_updater \
84 --mcu_sub=$(MCU_SUB) \
85 --mcu_mem_var=$(MCU_MEM_VAR) \
86 --mac_profile=$(mac_profile) \
87 --mac_profileid=$(mac_profileid) \
88 --mode=$(stack_mode) \
89 --modem_fw=$(modemfw_name) \
91 --radio_config=$(radio_config) \
92 --version=$(MIN_STACK_VERSION) \
93 --stack_area_addr=$(stack_area_addr)
95 # Link entrypoint, bootloader updater library, new bootloader and bootloader updater config
96 $(BL_UPDATER_ELF): $(OBJS) $(BOOTLOADER_LIB)
98 @echo "$(COLOR_LINK)Linking$(COLOR_END) $@"
99 $(D)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ \
100 -Wl,-Map=$(BUILDPREFIX_BL_UPDATER)bl_updater.map \
104 $(BL_UPDATER_HEX): $(BL_UPDATER_ELF)
106 @echo "$(COLOR_INFO)Generating:$(COLOR_END) $@"
107 $(D)$(OBJCOPY) $< -O ihex $@
109 # Link just the entrypoint, to determine the overlapping portion with stack
110 # _bl_updater_start is a dummy value here, but it is not needed
111 $(ENTRYPOINT_ELF): $(ENTRYPOINT_ELF:.elf=.o)
113 $(D)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ \
114 -Wl,-Map=$(ENTRYPOINT_ELF:.elf=.map) \
116 -Wl,--defsym,_bl_updater_start=0x0000
118 $(ENTRYPOINT_HEX): $(ENTRYPOINT_ELF)
124 $(BL_UPDATER_NEW_BL_DATA): $(BOOTLOADER_HEX) $(BOOTLOADER_CONFIG_INI)
126 @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
129 $(BUILDPREFIX_BL_UPDATER) \
131 --configfile=$(BOOTLOADER_CONFIG_INI)
133 $(BL_UPDATER_CONFIG): $(BOOTLOADER_CONFIG_INI) $(BL_UPDATER_OLD_CONFIG_INI)
135 @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
138 $(BUILDPREFIX_BL_UPDATER) \
139 $(BL_UPDATER_CMD_LIST) \
140 --configfile=$(BOOTLOADER_CONFIG_INI) \
141 --oldconfigfile=$(BL_UPDATER_OLD_CONFIG_INI) \
142 --match_app_area_id=$(MATCH_APP_AREA_ID) \
145 $(BL_UPDATER_STACK_BACKUP): $(BL_UPDATER_STACK_HEX) $(ENTRYPOINT_HEX) $(BL_UPDATER_OLD_CONFIG_INI)
147 @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
150 $(BUILDPREFIX_BL_UPDATER) \
151 $(BL_UPDATER_STACK_HEX) \
153 --configfile=$(BOOTLOADER_CONFIG_INI) \
154 --oldconfigfile=$(BL_UPDATER_OLD_CONFIG_INI)
156 $(BUILDPREFIX_BL_UPDATER)%.o: %.c
158 @echo "$(COLOR_CC)CC$(COLOR_END) $<"
159 $(D)$(CC) $(INCLUDES) $(CFLAGS) -MMD -MP -c $< -o $@
161 $(BUILDPREFIX_BL_UPDATER)%.o: $(BUILDPREFIX_BL_UPDATER)%.c
163 @echo "$(COLOR_CC)CC$(COLOR_END) $<"
164 $(D)$(CC) $(INCLUDES) $(CFLAGS) -MMD -MP -c $< -o $@
166 $(BUILDPREFIX_BL_UPDATER)%.o: %.s
168 @echo "$(COLOR_CC)CC$(COLOR_END) $<"
169 $(D)$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@
171 # Generate full bootloader configuration and makefile
172 # fragment that match the old bootloader configuration
173 $(BL_UPDATER_OLD_CONFIG_INI) $(BL_UPDATER_BUILD_VARIABLES_MK): $(ini_file_wp) $(ini_file_app) $(bl_updater_old_key_file)
178 -i $(platform_config_ini) \
179 -i $(bl_updater_old_key_file) \
180 -o $(BL_UPDATER_OLD_CONFIG_INI) \
181 -om $(BL_UPDATER_BUILD_VARIABLES_MK) \
182 -ol APP_AREA_ID:$(app_area_id) \
184 -hv 0x$(HW_VARIANT_ID) \
185 -fb $(FLASH_BASE_ADDR) \
186 -bs $(old_bootloader_size) \
187 -as $(BOOTLOADER_SIZES)
189 # Include a makefile fragment for build-time make
190 # variables, generated by the rule above
191 -include $(BL_UPDATER_BUILD_VARIABLES_MK)
194 all: $(STACK_WITH_BL_UPDATER_HEX)
197 $(D)$(RM) -rf $(CLEAN)