Skip to content

Commit f33bee7

Browse files
authored
Update main.py
1 parent e0d6df4 commit f33bee7

File tree

1 file changed

+86
-17
lines changed

1 file changed

+86
-17
lines changed

builder/main.py

Lines changed: 86 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ def firmware_metrics(target, source, env):
410410
SIZECHECKCMD="$SIZETOOL -A -d $SOURCES",
411411
SIZEPRINTCMD="$SIZETOOL -B -d $SOURCES",
412412
ERASEFLAGS=["--chip", mcu, "--port", '"$UPLOAD_PORT"'],
413-
ERASECMD='"$PYTHONEXE" "$OBJCOPY" $ERASEFLAGS erase_flash',
413+
ERASECMD='"$PYTHONEXE" "$OBJCOPY" $ERASEFLAGS erase-flash',
414414
# mkspiffs package contains two different binaries for IDF and Arduino
415415
MKFSTOOL="mk%s" % filesystem
416416
+ (
@@ -459,11 +459,11 @@ def firmware_metrics(target, source, env):
459459
"--chip",
460460
mcu,
461461
"elf2image",
462-
"--flash_mode",
462+
"--flash-mode",
463463
"${__get_board_flash_mode(__env__)}",
464-
"--flash_freq",
464+
"--flash-freq",
465465
"${__get_board_f_image(__env__)}",
466-
"--flash_size",
466+
"--flash-size",
467467
board.get("upload.flash_size", "4MB"),
468468
"-o",
469469
"$TARGET",
@@ -498,7 +498,76 @@ def firmware_metrics(target, source, env):
498498
if not env.get("PIOFRAMEWORK"):
499499
env.SConscript("frameworks/_bare.py", exports="env")
500500

501-
# Build executable and linkable firmware or FS image
501+
def firmware_metrics(target, source, env):
502+
"""
503+
Custom target to run esp-idf-size with support for command line parameters
504+
Usage: pio run -t metrics -- [esp-idf-size arguments]
505+
"""
506+
if terminal_cp != "utf-8":
507+
print("Firmware metrics can not be shown. Set the terminal codepage to \"utf-8\"")
508+
return
509+
510+
map_file = os.path.join(env.subst("$BUILD_DIR"), env.subst("$PROGNAME") + ".map")
511+
if not os.path.isfile(map_file):
512+
# map file can be in project dir
513+
map_file = os.path.join(get_project_dir(), env.subst("$PROGNAME") + ".map")
514+
515+
if not os.path.isfile(map_file):
516+
print(f"Error: Map file not found: {map_file}")
517+
print("Make sure the project is built first with 'pio run'")
518+
return
519+
520+
try:
521+
import subprocess
522+
import sys
523+
import shlex
524+
525+
cmd = [env.subst("$PYTHONEXE"), "-m", "esp_idf_size", "--ng"]
526+
527+
# Parameters from platformio.ini
528+
extra_args = env.GetProjectOption("custom_esp_idf_size_args", "")
529+
if extra_args:
530+
cmd.extend(shlex.split(extra_args))
531+
532+
# Command Line Parameter, after --
533+
cli_args = []
534+
if "--" in sys.argv:
535+
dash_index = sys.argv.index("--")
536+
if dash_index + 1 < len(sys.argv):
537+
cli_args = sys.argv[dash_index + 1:]
538+
cmd.extend(cli_args)
539+
540+
# Add CLI arguments before the map file
541+
if cli_args:
542+
cmd.extend(cli_args)
543+
544+
# Map-file as last argument
545+
cmd.append(map_file)
546+
547+
# Debug-Info if wanted
548+
if env.GetProjectOption("custom_esp_idf_size_verbose", False):
549+
print(f"Running command: {' '.join(cmd)}")
550+
551+
# Call esp-idf-size
552+
result = subprocess.run(cmd, check=False, capture_output=False)
553+
554+
if result.returncode != 0:
555+
print(f"Warning: esp-idf-size exited with code {result.returncode}")
556+
557+
except ImportError:
558+
print("Error: esp-idf-size module not found.")
559+
print("Install with: pip install esp-idf-size")
560+
except FileNotFoundError:
561+
print("Error: Python executable not found.")
562+
print("Check your Python installation.")
563+
except Exception as e:
564+
print(f"Error: Failed to run firmware metrics: {e}")
565+
print("Make sure esp-idf-size is installed: pip install esp-idf-size")
566+
567+
#
568+
# Target: Build executable and linkable firmware or FS image
569+
#
570+
502571
target_elf = None
503572
if "nobuild" in COMMAND_LINE_TARGETS:
504573
target_elf = join("$BUILD_DIR", "${PROGNAME}.elf")
@@ -600,16 +669,16 @@ def firmware_metrics(target, source, env):
600669
"--baud",
601670
"$UPLOAD_SPEED",
602671
"--before",
603-
board.get("upload.before_reset", "default_reset"),
672+
board.get("upload.before_reset", "default-reset"),
604673
"--after",
605-
board.get("upload.after_reset", "hard_reset"),
606-
"write_flash",
674+
board.get("upload.after_reset", "hard-reset"),
675+
"write-flash",
607676
"-z",
608-
"--flash_mode",
677+
"--flash-mode",
609678
"${__get_board_flash_mode(__env__)}",
610-
"--flash_freq",
679+
"--flash-freq",
611680
"${__get_board_f_image(__env__)}",
612-
"--flash_size",
681+
"--flash-size",
613682
"detect",
614683
],
615684
UPLOADCMD='"$PYTHONEXE" "$UPLOADER" $UPLOADERFLAGS '
@@ -628,16 +697,16 @@ def firmware_metrics(target, source, env):
628697
"--baud",
629698
"$UPLOAD_SPEED",
630699
"--before",
631-
board.get("upload.before_reset", "default_reset"),
700+
board.get("upload.before_reset", "default-reset"),
632701
"--after",
633-
board.get("upload.after_reset", "hard_reset"),
634-
"write_flash",
702+
board.get("upload.after_reset", "hard-reset"),
703+
"write-flash",
635704
"-z",
636-
"--flash_mode",
705+
"--flash-mode",
637706
"${__get_board_flash_mode(__env__)}",
638-
"--flash_freq",
707+
"--flash-freq",
639708
"${__get_board_f_image(__env__)}",
640-
"--flash_size",
709+
"--flash-size",
641710
"detect",
642711
"$FS_START",
643712
],

0 commit comments

Comments
 (0)