Wirepas SDK
makefile_bl_updater.mk
Go to the documentation of this file.
1 include makefile_common.mk
2 
3 .DEFAULT_GOAL := all
4 
5 
6 # Choose permissible app area IDs
7 ifeq ($(bl_updater_match_app_area_id),no)
8 # Match any app area ID
9 MATCH_APP_AREA_ID :=
10 else
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)
14 else
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)
17 endif
18 endif
19 
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"
23 else
24 RESET_AREAS :=
25 endif
26 
27 # Include HAL driver code, needed to link bootloader updater
28 -include $(HAL_API_PATH)makefile
29 INCLUDES += -iquote$(API_PATH) -I$(UTIL_PATH)
30 
31 stack_mode ?= normal
32 modemfw_name ?=
33 
34 # The bootloader library, which includes the Generic Bootloader Updater Tool
35 BOOTLOADER_LIB := $(BUILDPREFIX_BOOTLOADER)bootloader.a
36 
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)
41 
42 # Source files
43 SRCS += $(notdir $(BL_UPDATER_NEW_BL_DATA) $(BL_UPDATER_CONFIG) $(BL_UPDATER_STACK_BACKUP))
44 ASM_SRCS := $(ENTRYPOINT_ASM)
45 
46 # Objects files
47 OBJS_ := $(SRCS:.c=.o) $(ASM_SRCS:.s=.o)
48 OBJS := $(addprefix $(BUILDPREFIX_BL_UPDATER), $(OBJS_))
49 
50 # Linker script for the Generic Bootloader Updater Tool
51 ifndef MCU_RAM_VAR
52 LDSCRIPT = $(MCU_PATH)$(MCU_FAMILY)/$(MCU)/linker/gcc_bl_updater_$(MCU)$(MCU_SUB)$(MCU_MEM_VAR).ld
53 else
54 LDSCRIPT = $(MCU_PATH)$(MCU_FAMILY)/$(MCU)/linker/gcc_bl_updater_$(MCU)$(MCU_SUB)$(MCU_MEM_VAR)_$(MCU_RAM_VAR).ld
55 endif
56 
57 # Compiled and linked bootloader updater
58 BL_UPDATER_ELF := $(BUILDPREFIX_BL_UPDATER)bl_updater.elf
59 
60 # Files to be cleaned
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)
64 
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) $@"
68  $(D)$(BL_UPD_CONF) \
69  combine \
70  $@ \
71  $(BL_UPDATER_STACK_HEX) \
72  $(BL_UPDATER_HEX) \
73  --oldconfigfile=$(BL_UPDATER_OLD_CONFIG_INI)
74 
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)"
77  $(DD)$(MKDIR) $(@D)
78  $(D)$(FMW_SEL) \
79  --firmware_path=$(IMAGE_PATH) \
80  --firmware_type="wp_stack" \
81  --output_path=$(@D) \
82  --output_name=$(FIRMWARE_NAME)_for_bl_updater \
83  --mcu=$(MCU) \
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) \
90  --radio=$(radio) \
91  --radio_config=$(radio_config) \
92  --version=$(MIN_STACK_VERSION) \
93  --stack_area_addr=$(stack_area_addr)
94 
95 # Link entrypoint, bootloader updater library, new bootloader and bootloader updater config
96 $(BL_UPDATER_ELF): $(OBJS) $(BOOTLOADER_LIB)
97  $(DD)$(MKDIR) $(@D)
98  @echo "$(COLOR_LINK)Linking$(COLOR_END) $@"
99  $(D)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ \
100  -Wl,-Map=$(BUILDPREFIX_BL_UPDATER)bl_updater.map \
101  -Wl,-T,$(LDSCRIPT) \
102  $(LIBS)
103 
104 $(BL_UPDATER_HEX): $(BL_UPDATER_ELF)
105  $(DD)$(MKDIR) $(@D)
106  @echo "$(COLOR_INFO)Generating:$(COLOR_END) $@"
107  $(D)$(OBJCOPY) $< -O ihex $@
108 
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)
112  $(DD)$(MKDIR) $(@D)
113  $(D)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ \
114  -Wl,-Map=$(ENTRYPOINT_ELF:.elf=.map) \
115  -Wl,-T,$(LDSCRIPT) \
116  -Wl,--defsym,_bl_updater_start=0x0000
117 
118 $(ENTRYPOINT_HEX): $(ENTRYPOINT_ELF)
119  $(D)$(OBJCOPY) \
120  $< \
121  -O ihex \
122  $@
123 
124 $(BL_UPDATER_NEW_BL_DATA): $(BOOTLOADER_HEX) $(BOOTLOADER_CONFIG_INI)
125  $(DD)$(MKDIR) $(@D)
126  @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
127  $(D)$(BL_UPD_CONF) \
128  bl_to_data \
129  $(BUILDPREFIX_BL_UPDATER) \
130  $< \
131  --configfile=$(BOOTLOADER_CONFIG_INI)
132 
133 $(BL_UPDATER_CONFIG): $(BOOTLOADER_CONFIG_INI) $(BL_UPDATER_OLD_CONFIG_INI)
134  $(DD)$(MKDIR) $(@D)
135  @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
136  $(D)$(BL_UPD_CONF) \
137  config_to_data \
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) \
143  $(RESET_AREAS)
144 
145 $(BL_UPDATER_STACK_BACKUP): $(BL_UPDATER_STACK_HEX) $(ENTRYPOINT_HEX) $(BL_UPDATER_OLD_CONFIG_INI)
146  $(DD)$(MKDIR) $(@D)
147  @echo "$(COLOR_INFO)Converting:$(COLOR_END) $@"
148  $(D)$(BL_UPD_CONF) \
149  stack_to_data \
150  $(BUILDPREFIX_BL_UPDATER) \
151  $(BL_UPDATER_STACK_HEX) \
152  $(ENTRYPOINT_HEX) \
153  --configfile=$(BOOTLOADER_CONFIG_INI) \
154  --oldconfigfile=$(BL_UPDATER_OLD_CONFIG_INI)
155 
156 $(BUILDPREFIX_BL_UPDATER)%.o: %.c
157  $(DD)$(MKDIR) $(@D)
158  @echo "$(COLOR_CC)CC$(COLOR_END) $<"
159  $(D)$(CC) $(INCLUDES) $(CFLAGS) -MMD -MP -c $< -o $@
160 
161 $(BUILDPREFIX_BL_UPDATER)%.o: $(BUILDPREFIX_BL_UPDATER)%.c
162  $(DD)$(MKDIR) $(@D)
163  @echo "$(COLOR_CC)CC$(COLOR_END) $<"
164  $(D)$(CC) $(INCLUDES) $(CFLAGS) -MMD -MP -c $< -o $@
165 
166 $(BUILDPREFIX_BL_UPDATER)%.o: %.s
167  $(DD)$(MKDIR) $(@D)
168  @echo "$(COLOR_CC)CC$(COLOR_END) $<"
169  $(D)$(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@
170 
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)
174  $(DD)$(MKDIR) $(@D)
175  $(D)$(BOOT_CONF) \
176  -i $(ini_file_wp) \
177  -i $(ini_file_app) \
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) \
183  -hm 0x$(HW_MAGIC) \
184  -hv 0x$(HW_VARIANT_ID) \
185  -fb $(FLASH_BASE_ADDR) \
186  -bs $(old_bootloader_size) \
187  -as $(BOOTLOADER_SIZES)
188 
189 # Include a makefile fragment for build-time make
190 # variables, generated by the rule above
191 -include $(BL_UPDATER_BUILD_VARIABLES_MK)
192 
193 .PHONY: all
194 all: $(STACK_WITH_BL_UPDATER_HEX)
195 
196 clean:
197  $(D)$(RM) -rf $(CLEAN)