mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-18 03:03:20 +00:00

The call to generate UF2 files in the platformio custom script was a bare call to python. In some environments, this command won't exist in this way. Instead, use the standard env approach to find the right python. Additionally, add the shebang line on line 1 so this script can be executed standalone if needed.
100 lines
3.3 KiB
Python
100 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
# trunk-ignore-all(ruff/F821)
|
|
# trunk-ignore-all(flake8/F821): For SConstruct imports
|
|
import sys
|
|
from os.path import join
|
|
|
|
from readprops import readProps
|
|
|
|
Import("env")
|
|
platform = env.PioPlatform()
|
|
|
|
|
|
def esp32_create_combined_bin(source, target, env):
|
|
# this sub is borrowed from ESPEasy build toolchain. It's licensed under GPL V3
|
|
# https://github.com/letscontrolit/ESPEasy/blob/mega/tools/pio/post_esp32.py
|
|
print("Generating combined binary for serial flashing")
|
|
|
|
app_offset = 0x10000
|
|
|
|
new_file_name = env.subst("$BUILD_DIR/${PROGNAME}.factory.bin")
|
|
sections = env.subst(env.get("FLASH_EXTRA_IMAGES"))
|
|
firmware_name = env.subst("$BUILD_DIR/${PROGNAME}.bin")
|
|
chip = env.get("BOARD_MCU")
|
|
flash_size = env.BoardConfig().get("upload.flash_size")
|
|
flash_freq = env.BoardConfig().get("build.f_flash", "40m")
|
|
flash_freq = flash_freq.replace("000000L", "m")
|
|
flash_mode = env.BoardConfig().get("build.flash_mode", "dio")
|
|
memory_type = env.BoardConfig().get("build.arduino.memory_type", "qio_qspi")
|
|
if flash_mode == "qio" or flash_mode == "qout":
|
|
flash_mode = "dio"
|
|
if memory_type == "opi_opi" or memory_type == "opi_qspi":
|
|
flash_mode = "dout"
|
|
cmd = [
|
|
"--chip",
|
|
chip,
|
|
"merge_bin",
|
|
"-o",
|
|
new_file_name,
|
|
"--flash_mode",
|
|
flash_mode,
|
|
"--flash_freq",
|
|
flash_freq,
|
|
"--flash_size",
|
|
flash_size,
|
|
]
|
|
|
|
print(" Offset | File")
|
|
for section in sections:
|
|
sect_adr, sect_file = section.split(" ", 1)
|
|
print(f" - {sect_adr} | {sect_file}")
|
|
cmd += [sect_adr, sect_file]
|
|
|
|
print(f" - {hex(app_offset)} | {firmware_name}")
|
|
cmd += [hex(app_offset), firmware_name]
|
|
|
|
print("Using esptool.py arguments: %s" % " ".join(cmd))
|
|
|
|
esptool.main(cmd)
|
|
|
|
|
|
if platform.name == "espressif32":
|
|
sys.path.append(join(platform.get_package_dir("tool-esptoolpy")))
|
|
import esptool
|
|
|
|
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", esp32_create_combined_bin)
|
|
|
|
esp32_kind = env.GetProjectOption("custom_esp32_kind")
|
|
if esp32_kind == "esp32":
|
|
# Free up some IRAM by removing auxiliary SPI flash chip drivers.
|
|
# Wrapped stub symbols are defined in src/platform/esp32/iram-quirk.c.
|
|
env.Append(
|
|
LINKFLAGS=[
|
|
"-Wl,--wrap=esp_flash_chip_gd",
|
|
"-Wl,--wrap=esp_flash_chip_issi",
|
|
"-Wl,--wrap=esp_flash_chip_winbond",
|
|
]
|
|
)
|
|
else:
|
|
# For newer ESP32 targets, using newlib nano works better.
|
|
env.Append(LINKFLAGS=["--specs=nano.specs", "-u", "_printf_float"])
|
|
|
|
if platform.name == "nordicnrf52":
|
|
env.AddPostAction("$BUILD_DIR/${PROGNAME}.hex",
|
|
env.VerboseAction(f"/usr/bin/env python3 ./bin/uf2conv.py $BUILD_DIR/firmware.hex -c -f 0xADA52840 -o $BUILD_DIR/firmware.uf2",
|
|
"Generating UF2 file"))
|
|
|
|
Import("projenv")
|
|
|
|
prefsLoc = projenv["PROJECT_DIR"] + "/version.properties"
|
|
verObj = readProps(prefsLoc)
|
|
print("Using meshtastic platformio-custom.py, firmware version " + verObj["long"])
|
|
|
|
# General options that are passed to the C and C++ compilers
|
|
projenv.Append(
|
|
CCFLAGS=[
|
|
"-DAPP_VERSION=" + verObj["long"],
|
|
"-DAPP_VERSION_SHORT=" + verObj["short"],
|
|
]
|
|
)
|