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 # Include HAL driver code, needed to link bootloader updater
21 -include $(HAL_API_PATH)makefile
22 INCLUDES += -iquote$(API_PATH) -I$(UTIL_PATH)
23 
24 stack_mode ?= normal
25 modemfw_name ?=
26 
27 # The bootloader library, which includes the Generic Bootloader Updater Tool
28 BOOTLOADER_LIB := $(BUILDPREFIX_BOOTLOADER)bootloader.a
29 
30 # Entry point, converted to HEX to determine the overlapping portion with stack
31 ENTRYPOINT_ASM := $(MCU_PATH)common/bl_updater_entrypoint.s
32 ENTRYPOINT_ELF := $(BUILDPREFIX_BL_UPDATER)$(ENTRYPOINT_ASM:.s=.elf)
33 ENTRYPOINT_HEX := $(BUILDPREFIX_BL_UPDATER)$(ENTRYPOINT_ASM:.s=.hex)
34 
35 # Source files
36 SRCS += $(notdir $(BL_UPDATER_NEW_BL_DATA) $(BL_UPDATER_CONFIG) $(BL_UPDATER_STACK_BACKUP))
37 ASM_SRCS := $(ENTRYPOINT_ASM)
38 
39 # Objects files
40 OBJS_ := $(SRCS:.c=.o) $(ASM_SRCS:.s=.o)
41 OBJS := $(addprefix $(BUILDPREFIX_BL_UPDATER), $(OBJS_))
42 
43 # Linker script for the Generic Bootloader Updater Tool
44 ifndef MCU_RAM_VAR
45 LDSCRIPT = $(MCU_PATH)$(MCU_FAMILY)/$(MCU)/linker/gcc_bl_updater_$(MCU)$(MCU_SUB)$(MCU_MEM_VAR).ld
46 else
47 LDSCRIPT = $(MCU_PATH)$(MCU_FAMILY)/$(MCU)/linker/gcc_bl_updater_$(MCU)$(MCU_SUB)$(MCU_MEM_VAR)_$(MCU_RAM_VAR).ld
48 endif
49 
50 # Compiled and linked bootloader updater
51 BL_UPDATER_ELF := $(BUILDPREFIX_BL_UPDATER)bl_updater.elf
52 
53 # Files to be cleaned
54 CLEAN := $(STACK_WITH_BL_UPDATER_HEX) $(BL_UPDATER_ELF) $(BL_UPDATER_HEX)
55 CLEAN += $(OBJS) $(BL_UPDATER_BL_DATA) $(BL_UPDATER_CONFIG) $(BL_UPDATER_OLD_CONFIG_INI)
56 CLEAN += $(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
188 all: $(STACK_WITH_BL_UPDATER_HEX)
189 
190 clean:
191  $(D)$(RM) -rf $(CLEAN)