Wirepas SDK
makefile_bl_updater.mk
Go to the documentation of this file.
1include makefile_common.mk
2
3.DEFAULT_GOAL := all
4
5
6# Choose permissible app area IDs
7ifeq ($(bl_updater_match_app_area_id),no)
8# Match any app area ID
9MATCH_APP_AREA_ID :=
10else
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)
14else
15# Match multiple app area IDs, including the application being built
16MATCH_APP_AREA_ID := $(app_area_id),$(bl_updater_match_app_area_id)
17endif
18endif
19
20# Include HAL driver code, needed to link bootloader updater
21-include $(HAL_API_PATH)makefile
22INCLUDES += -iquote$(API_PATH) -I$(UTIL_PATH)
23
24stack_mode ?= normal
25modemfw_name ?=
26
27# The bootloader library, which includes the Generic Bootloader Updater Tool
28BOOTLOADER_LIB := $(BUILDPREFIX_BOOTLOADER)bootloader.a
29
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)
34
35# Source files
36SRCS += $(notdir $(BL_UPDATER_NEW_BL_DATA) $(BL_UPDATER_CONFIG) $(BL_UPDATER_STACK_BACKUP))
37ASM_SRCS := $(ENTRYPOINT_ASM)
38
39# Objects files
40OBJS_ := $(SRCS:.c=.o) $(ASM_SRCS:.s=.o)
41OBJS := $(addprefix $(BUILDPREFIX_BL_UPDATER), $(OBJS_))
42
43# Linker script for the Generic Bootloader Updater Tool
44ifndef MCU_RAM_VAR
45LDSCRIPT = $(MCU_PATH)$(MCU_FAMILY)/$(MCU)/linker/gcc_bl_updater_$(MCU)$(MCU_SUB)$(MCU_MEM_VAR).ld
46else
47LDSCRIPT = $(MCU_PATH)$(MCU_FAMILY)/$(MCU)/linker/gcc_bl_updater_$(MCU)$(MCU_SUB)$(MCU_MEM_VAR)_$(MCU_RAM_VAR).ld
48endif
49
50# Compiled and linked bootloader updater
51BL_UPDATER_ELF := $(BUILDPREFIX_BL_UPDATER)bl_updater.elf
52
53# Files to be cleaned
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)
57
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) $@"
61 $(D)$(BL_UPD_CONF) \
62 combine \
63 $@ \
64 $(BL_UPDATER_STACK_HEX) \
65 $(BL_UPDATER_HEX) \
66 --oldconfigfile=$(BL_UPDATER_OLD_CONFIG_INI)
67
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)"
70 $(DD)$(MKDIR) $(@D)
71 $(D)$(FMW_SEL) \
72 --firmware_path=$(FIRMWARE_PATH) \
73 --firmware_type="wp_stack" \
74 --archive_path=$(ARCHIVE_PATH)\
75 --extract_path=$(EXTRACT_PATH)\
76 --output_path=$(@D) \
77 --output_name=$(FIRMWARE_NAME)_for_bl_updater \
78 --mcu=$(MCU) \
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) \
85 --radio=$(radio) \
86 --radio_config=$(radio_config) \
87 --version=$(MIN_STACK_VERSION) \
88 --stack_area_addr=$(stack_area_addr)
89
90# Link entrypoint, bootloader updater library, new bootloader and bootloader updater config
91$(BL_UPDATER_ELF): $(OBJS) $(BOOTLOADER_LIB)
92 $(DD)$(MKDIR) $(@D)
93 @echo "$(COLOR_LINK)Linking$(COLOR_END) $@"
94 $(D)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ \
95 -Wl,-Map=$(BUILDPREFIX_BL_UPDATER)bl_updater.map \
96 -Wl,-T,$(LDSCRIPT) \
97 $(LIBS)
98
99$(BL_UPDATER_HEX): $(BL_UPDATER_ELF)
100 $(DD)$(MKDIR) $(@D)
101 @echo "$(COLOR_INFO)Generating:$(COLOR_END) $@"
102 $(D)$(OBJCOPY) $< -O ihex $@
103
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)
107 $(DD)$(MKDIR) $(@D)
108 $(D)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ \
109 -Wl,-Map=$(ENTRYPOINT_ELF:.elf=.map) \
110 -Wl,-T,$(LDSCRIPT) \
111 -Wl,--defsym,_bl_updater_start=0x0000
112
113$(ENTRYPOINT_HEX): $(ENTRYPOINT_ELF)
114 $(D)$(OBJCOPY) \
115 $< \
116 -O ihex \
117 $@
118
119$(BL_UPDATER_NEW_BL_DATA): $(BOOTLOADER_HEX) $(BOOTLOADER_CONFIG_INI)
120 $(DD)$(MKDIR) $(@D)
121 @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
122 $(D)$(BL_UPD_CONF) \
123 bl_to_data \
124 $(BUILDPREFIX_BL_UPDATER) \
125 $< \
126 --configfile=$(BOOTLOADER_CONFIG_INI)
127
128$(BL_UPDATER_CONFIG): $(BOOTLOADER_CONFIG_INI) $(BL_UPDATER_OLD_CONFIG_INI)
129 $(DD)$(MKDIR) $(@D)
130 @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
131 $(D)$(BL_UPD_CONF) \
132 config_to_data \
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)
138
139$(BL_UPDATER_STACK_BACKUP): $(BL_UPDATER_STACK_HEX) $(ENTRYPOINT_HEX) $(BL_UPDATER_OLD_CONFIG_INI)
140 $(DD)$(MKDIR) $(@D)
141 @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
142 $(D)$(BL_UPD_CONF) \
143 stack_to_data \
144 $(BUILDPREFIX_BL_UPDATER) \
145 $(BL_UPDATER_STACK_HEX) \
146 $(ENTRYPOINT_HEX) \
147 --configfile=$(BOOTLOADER_CONFIG_INI) \
148 --oldconfigfile=$(BL_UPDATER_OLD_CONFIG_INI)
149
150$(BUILDPREFIX_BL_UPDATER)%.o: %.c
151 $(DD)$(MKDIR) $(@D)
152 @echo "$(COLOR_CC)CC$(COLOR_END) $<"
153 $(D)$(CC) $(INCLUDES) $(CFLAGS) -MMD -MP -c $< -o $@
154
155$(BUILDPREFIX_BL_UPDATER)%.o: $(BUILDPREFIX_BL_UPDATER)%.c
156 $(DD)$(MKDIR) $(@D)
157 @echo "$(COLOR_CC)CC$(COLOR_END) $<"
158 $(D)$(CC) $(INCLUDES) $(CFLAGS) -MMD -MP -c $< -o $@
159
160$(BUILDPREFIX_BL_UPDATER)%.o: %.s
161 $(DD)$(MKDIR) $(@D)
162 @echo "$(COLOR_CC)CC$(COLOR_END) $<"
163 $(D)$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@
164
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)
168 $(DD)$(MKDIR) $(@D)
169 $(D)$(BOOT_CONF) \
170 -i $(ini_file_wp) \
171 -i $(ini_file_app) \
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) \
177 -hm 0x$(HW_MAGIC) \
178 -hv 0x$(HW_VARIANT_ID) \
179 -fb $(FLASH_BASE_ADDR) \
180 -bs $(old_bootloader_size) \
181 -as $(BOOTLOADER_SIZES)
182
183# Include a makefile fragment for build-time make
184# variables, generated by the rule above
185-include $(BL_UPDATER_BUILD_VARIABLES_MK)
186
187.PHONY: all
188all: $(STACK_WITH_BL_UPDATER_HEX)
189
190clean:
191 $(D)$(RM) -rf $(CLEAN)