|
162 | 162 | if not board.get("build.ldscript", ""): |
163 | 163 | env.Replace(LDSCRIPT_PATH=board.get("build.arduino.ldscript", "")) |
164 | 164 |
|
165 | | -bootloader_opts = board.get("bootloaders", "") |
| 165 | +bootloader_opts = board.get("bootloaders", []) |
166 | 166 | bootloader_sel = env.GetProjectOption("board_bootloader", "") |
167 | 167 | ldscript = board.get("build.arduino.ldscript", "") |
168 | 168 |
|
169 | 169 | if bootloader_opts: |
| 170 | + # Use board JSON default if no project option is set |
170 | 171 | if not bootloader_sel: |
171 | | - sys.stderr.write("Error. Board type requires board_bootloader to be specified\n") |
172 | | - env.Exit(1) |
| 172 | + bootloader_sel = board.get("default_bootloader", "none") |
| 173 | + |
| 174 | + selected_bl = None |
| 175 | + for bl in bootloader_opts: |
| 176 | + if bl.get("name") == bootloader_sel: |
| 177 | + selected_bl = bl |
| 178 | + break |
173 | 179 |
|
174 | | - if bootloader_sel not in bootloader_opts and bootloader_sel != "none": |
| 180 | + if not selected_bl and bootloader_sel != "none": |
175 | 181 | sys.stderr.write( |
176 | 182 | "Error. Invalid board_bootloader selection. Options are: %s or none\n" % |
177 | | - " ".join(k for k in bootloader_opts.keys())) |
| 183 | + " ".join(bl.get("name", "") for bl in bootloader_opts)) |
178 | 184 | env.Exit(1) |
179 | 185 |
|
180 | | - if bootloader_sel == "adafruit": |
181 | | - env.Replace(BOOTLOADERHEX=join(FRAMEWORK_DIR, "variants", board.get("build.variant", ""), "ada_bootloader.hex")) |
182 | | - # Update the linker file for bootloader use and set a flag for the build. |
| 186 | + if selected_bl: |
| 187 | + env.Replace(BOOTLOADERHEX=join(FRAMEWORK_DIR, "variants", board.get("build.variant", ""), selected_bl.get("bootloader_file", ""))) |
183 | 188 | env.Append(CPPDEFINES=["USE_ADA_BL"]) |
184 | | - env.Replace(LDSCRIPT_PATH=ldscript[:-3] + "_adabl" + ldscript[-3:]) |
185 | | - board.update("upload.maximum_size", board.get("upload.maximum_size") - 53248) |
186 | | - board.update("upload.maximum_ram_size", board.get("upload.maximum_ram_size") - 8) |
| 189 | + env.Replace(LDSCRIPT_PATH=selected_bl.get("linker_script", ldscript)) |
| 190 | + board.update("upload.maximum_size", selected_bl.get("max_size", board.get("upload.maximum_size"))) |
| 191 | + board.update("upload.maximum_ram_size", selected_bl.get("max_ram_size", board.get("upload.maximum_ram_size"))) |
187 | 192 |
|
188 | 193 | cpp_defines = env.Flatten(env.get("CPPDEFINES", [])) |
189 | 194 |
|
|
0 commit comments